From 0c59fe117328e619b7c5fbe7688672c3a46a88ba Mon Sep 17 00:00:00 2001 From: Iliyan Angelov Date: Mon, 17 Nov 2025 18:26:30 +0200 Subject: [PATCH] updates --- ...3c_add_capacity_room_size_view_to_rooms.py | 29 + .../96c23dad405d_add_system_settings_table.py | 60 + ...gration_create_all_tables_.cpython-312.pyc | Bin 24262 -> 24262 bytes ...ty_room_size_view_to_rooms.cpython-312.pyc | Bin 0 -> 1585 bytes ..._add_system_settings_table.cpython-312.pyc | Bin 0 -> 3308 bytes .../add_stripe_payment_method.cpython-312.pyc | Bin 0 -> 1494 bytes .../versions/add_stripe_payment_method.py | 50 + Backend/requirements.txt | 1 + Backend/src/__pycache__/main.cpython-312.pyc | Bin 12849 -> 13293 bytes .../__pycache__/settings.cpython-312.pyc | Bin 6681 -> 6977 bytes Backend/src/config/settings.py | 5 + Backend/src/main.py | 9 +- .../__pycache__/security.cpython-312.pyc | Bin 2020 -> 2020 bytes Backend/src/models/__init__.py | 5 + .../__pycache__/__init__.cpython-312.pyc | Bin 1095 -> 1227 bytes .../__pycache__/booking.cpython-312.pyc | Bin 2489 -> 2546 bytes .../__pycache__/invoice.cpython-312.pyc | Bin 0 -> 4860 bytes .../__pycache__/payment.cpython-312.pyc | Bin 2805 -> 2828 bytes .../models/__pycache__/room.cpython-312.pyc | Bin 2216 -> 2382 bytes .../system_settings.cpython-312.pyc | Bin 0 -> 1398 bytes .../models/__pycache__/user.cpython-312.pyc | Bin 2098 -> 2171 bytes Backend/src/models/booking.py | 1 + Backend/src/models/invoice.py | 100 + Backend/src/models/payment.py | 1 + Backend/src/models/room.py | 3 + Backend/src/models/system_settings.py | 21 + Backend/src/models/user.py | 1 + .../__pycache__/auth_routes.cpython-312.pyc | Bin 8849 -> 8910 bytes .../booking_routes.cpython-312.pyc | Bin 22637 -> 32254 bytes .../invoice_routes.cpython-312.pyc | Bin 0 -> 9895 bytes .../payment_routes.cpython-312.pyc | Bin 17122 -> 26081 bytes .../__pycache__/room_routes.cpython-312.pyc | Bin 22987 -> 34072 bytes .../system_settings_routes.cpython-312.pyc | Bin 0 -> 11216 bytes .../__pycache__/user_routes.cpython-312.pyc | Bin 13234 -> 13673 bytes Backend/src/routes/auth_routes.py | 3 +- Backend/src/routes/booking_routes.py | 203 +- Backend/src/routes/invoice_routes.py | 249 + Backend/src/routes/payment_routes.py | 250 +- Backend/src/routes/room_routes.py | 275 +- Backend/src/routes/system_settings_routes.py | 302 + Backend/src/routes/user_routes.py | 8 + .../__pycache__/auth_service.cpython-312.pyc | Bin 20742 -> 21139 bytes .../invoice_service.cpython-312.pyc | Bin 0 -> 18200 bytes .../__pycache__/room_service.cpython-312.pyc | Bin 8165 -> 12619 bytes .../stripe_service.cpython-312.pyc | Bin 0 -> 16630 bytes Backend/src/services/auth_service.py | 10 +- Backend/src/services/currency_service.py | 101 + Backend/src/services/invoice_service.py | 388 + Backend/src/services/room_service.py | 317 +- Backend/src/services/stripe_service.py | 409 + Backend/venv/bin/normalizer | 7 + .../certifi-2025.11.12.dist-info/INSTALLER | 1 + .../certifi-2025.11.12.dist-info/METADATA | 78 + .../certifi-2025.11.12.dist-info/RECORD | 14 + .../certifi-2025.11.12.dist-info/WHEEL | 5 + .../licenses/LICENSE | 20 + .../top_level.txt | 1 + .../site-packages/certifi/__init__.py | 4 + .../site-packages/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 317 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 632 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 0 -> 2064 bytes .../site-packages/certifi/cacert.pem | 4678 +++++ .../python3.12/site-packages/certifi/core.py | 83 + .../python3.12/site-packages/certifi/py.typed | 0 .../INSTALLER | 1 + .../METADATA | 764 + .../charset_normalizer-3.4.4.dist-info/RECORD | 35 + .../charset_normalizer-3.4.4.dist-info/WHEEL | 7 + .../entry_points.txt | 2 + .../licenses/LICENSE | 21 + .../top_level.txt | 1 + .../charset_normalizer/__init__.py | 48 + .../charset_normalizer/__main__.py | 6 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1783 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 358 bytes .../__pycache__/api.cpython-312.pyc | Bin 0 -> 18194 bytes .../__pycache__/cd.cpython-312.pyc | Bin 0 -> 13299 bytes .../__pycache__/constant.cpython-312.pyc | Bin 0 -> 40813 bytes .../__pycache__/legacy.cpython-312.pyc | Bin 0 -> 3013 bytes .../__pycache__/md.cpython-312.pyc | Bin 0 -> 24350 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 17130 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 13759 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 385 bytes .../site-packages/charset_normalizer/api.py | 669 + .../site-packages/charset_normalizer/cd.py | 395 + .../charset_normalizer/cli/__init__.py | 8 + .../charset_normalizer/cli/__main__.py | 381 + .../cli/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 346 bytes .../cli/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 14407 bytes .../charset_normalizer/constant.py | 2015 ++ .../charset_normalizer/legacy.py | 80 + .../md.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 15912 bytes .../site-packages/charset_normalizer/md.py | 635 + .../md__mypyc.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 290584 bytes .../charset_normalizer/models.py | 360 + .../site-packages/charset_normalizer/py.typed | 0 .../site-packages/charset_normalizer/utils.py | 414 + .../charset_normalizer/version.py | 8 + .../requests-2.32.5.dist-info/INSTALLER | 1 + .../requests-2.32.5.dist-info/METADATA | 133 + .../requests-2.32.5.dist-info/RECORD | 42 + .../requests-2.32.5.dist-info/WHEEL | 5 + .../licenses/LICENSE | 175 + .../requests-2.32.5.dist-info/top_level.txt | 1 + .../site-packages/requests/__init__.py | 184 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5420 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 0 -> 584 bytes .../_internal_utils.cpython-312.pyc | Bin 0 -> 2024 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 0 -> 27811 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 0 -> 7204 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 0 -> 13923 bytes .../__pycache__/certs.cpython-312.pyc | Bin 0 -> 666 bytes .../__pycache__/compat.cpython-312.pyc | Bin 0 -> 2380 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 0 -> 25276 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 7585 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 0 -> 4327 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 0 -> 1052 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 35501 bytes .../__pycache__/packages.cpython-312.pyc | Bin 0 -> 1139 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 0 -> 27890 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 0 -> 6031 bytes .../__pycache__/structures.cpython-312.pyc | Bin 0 -> 5617 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 36178 bytes .../site-packages/requests/__version__.py | 14 + .../site-packages/requests/_internal_utils.py | 50 + .../site-packages/requests/adapters.py | 696 + .../python3.12/site-packages/requests/api.py | 157 + .../python3.12/site-packages/requests/auth.py | 314 + .../site-packages/requests/certs.py | 17 + .../site-packages/requests/compat.py | 106 + .../site-packages/requests/cookies.py | 561 + .../site-packages/requests/exceptions.py | 151 + .../python3.12/site-packages/requests/help.py | 134 + .../site-packages/requests/hooks.py | 33 + .../site-packages/requests/models.py | 1039 ++ .../site-packages/requests/packages.py | 23 + .../site-packages/requests/sessions.py | 831 + .../site-packages/requests/status_codes.py | 128 + .../site-packages/requests/structures.py | 99 + .../site-packages/requests/utils.py | 1086 ++ .../stripe-13.2.0.dist-info/INSTALLER | 1 + .../stripe-13.2.0.dist-info/METADATA | 456 + .../stripe-13.2.0.dist-info/RECORD | 2258 +++ .../stripe-13.2.0.dist-info/REQUESTED | 0 .../stripe-13.2.0.dist-info/WHEEL | 4 + .../stripe-13.2.0.dist-info/licenses/LICENSE | 21 + .../site-packages/stripe/__init__.py | 884 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 33748 bytes .../__pycache__/_account.cpython-312.pyc | Bin 0 -> 61984 bytes ...account_capability_service.cpython-312.pyc | Bin 0 -> 4862 bytes ...t_external_account_service.cpython-312.pyc | Bin 0 -> 7810 bytes .../__pycache__/_account_link.cpython-312.pyc | Bin 0 -> 2301 bytes .../_account_link_service.cpython-312.pyc | Bin 0 -> 1817 bytes ...account_login_link_service.cpython-312.pyc | Bin 0 -> 2270 bytes .../_account_person_service.cpython-312.pyc | Bin 0 -> 7188 bytes .../_account_service.cpython-312.pyc | Bin 0 -> 12232 bytes .../_account_session.cpython-312.pyc | Bin 0 -> 13105 bytes .../_account_session_service.cpython-312.pyc | Bin 0 -> 1815 bytes .../__pycache__/_any_iterator.cpython-312.pyc | Bin 0 -> 1812 bytes .../__pycache__/_api_mode.cpython-312.pyc | Bin 0 -> 283 bytes .../_api_requestor.cpython-312.pyc | Bin 0 -> 27215 bytes .../__pycache__/_api_resource.cpython-312.pyc | Bin 0 -> 7886 bytes .../__pycache__/_api_version.cpython-312.pyc | Bin 0 -> 432 bytes .../__pycache__/_app_info.cpython-312.pyc | Bin 0 -> 611 bytes .../_apple_pay_domain.cpython-312.pyc | Bin 0 -> 7373 bytes .../_apple_pay_domain_service.cpython-312.pyc | Bin 0 -> 5028 bytes .../__pycache__/_application.cpython-312.pyc | Bin 0 -> 823 bytes .../_application_fee.cpython-312.pyc | Bin 0 -> 13490 bytes .../_application_fee_refund.cpython-312.pyc | Bin 0 -> 3156 bytes ...ication_fee_refund_service.cpython-312.pyc | Bin 0 -> 6932 bytes .../_application_fee_service.cpython-312.pyc | Bin 0 -> 4384 bytes .../__pycache__/_apps_service.cpython-312.pyc | Bin 0 -> 1525 bytes .../__pycache__/_balance.cpython-312.pyc | Bin 0 -> 7754 bytes .../_balance_service.cpython-312.pyc | Bin 0 -> 1912 bytes .../_balance_settings.cpython-312.pyc | Bin 0 -> 5164 bytes .../_balance_settings_service.cpython-312.pyc | Bin 0 -> 2945 bytes .../_balance_transaction.cpython-312.pyc | Bin 0 -> 7061 bytes ...alance_transaction_service.cpython-312.pyc | Bin 0 -> 3530 bytes .../__pycache__/_bank_account.cpython-312.pyc | Bin 0 -> 12983 bytes .../__pycache__/_base_address.cpython-312.pyc | Bin 0 -> 785 bytes .../_billing_portal_service.cpython-312.pyc | Bin 0 -> 1797 bytes .../_billing_service.cpython-312.pyc | Bin 0 -> 2746 bytes .../__pycache__/_capability.cpython-312.pyc | Bin 0 -> 8681 bytes .../stripe/__pycache__/_card.cpython-312.pyc | Bin 0 -> 8650 bytes .../__pycache__/_cash_balance.cpython-312.pyc | Bin 0 -> 2277 bytes .../__pycache__/_charge.cpython-312.pyc | Bin 0 -> 61108 bytes .../_charge_service.cpython-312.pyc | Bin 0 -> 8474 bytes .../_checkout_service.cpython-312.pyc | Bin 0 -> 1558 bytes .../_client_options.cpython-312.pyc | Bin 0 -> 891 bytes .../_climate_service.cpython-312.pyc | Bin 0 -> 1866 bytes .../_confirmation_token.cpython-312.pyc | Bin 0 -> 40231 bytes ...confirmation_token_service.cpython-312.pyc | Bin 0 -> 2118 bytes ...onnect_collection_transfer.cpython-312.pyc | Bin 0 -> 1071 bytes .../__pycache__/_country_spec.cpython-312.pyc | Bin 0 -> 4790 bytes .../_country_spec_service.cpython-312.pyc | Bin 0 -> 3067 bytes .../__pycache__/_coupon.cpython-312.pyc | Bin 0 -> 10860 bytes .../_coupon_service.cpython-312.pyc | Bin 0 -> 6856 bytes .../_createable_api_resource.cpython-312.pyc | Bin 0 -> 1005 bytes .../__pycache__/_credit_note.cpython-312.pyc | Bin 0 -> 19142 bytes .../_credit_note_line_item.cpython-312.pyc | Bin 0 -> 3665 bytes ...dit_note_line_item_service.cpython-312.pyc | Bin 0 -> 2312 bytes ...note_preview_lines_service.cpython-312.pyc | Bin 0 -> 1992 bytes .../_credit_note_service.cpython-312.pyc | Bin 0 -> 9473 bytes .../_custom_method.cpython-312.pyc | Bin 0 -> 2639 bytes .../__pycache__/_customer.cpython-312.pyc | Bin 0 -> 55878 bytes ...stomer_balance_transaction.cpython-312.pyc | Bin 0 -> 3564 bytes ...alance_transaction_service.cpython-312.pyc | Bin 0 -> 6329 bytes ...tomer_cash_balance_service.cpython-312.pyc | Bin 0 -> 3228 bytes ...r_cash_balance_transaction.cpython-312.pyc | Bin 0 -> 5907 bytes ...alance_transaction_service.cpython-312.pyc | Bin 0 -> 3890 bytes ...nding_instructions_service.cpython-312.pyc | Bin 0 -> 2450 bytes ...mer_payment_method_service.cpython-312.pyc | Bin 0 -> 3552 bytes ...mer_payment_source_service.cpython-312.pyc | Bin 0 -> 8922 bytes .../_customer_service.cpython-312.pyc | Bin 0 -> 12004 bytes .../_customer_session.cpython-312.pyc | Bin 0 -> 6406 bytes .../_customer_session_service.cpython-312.pyc | Bin 0 -> 1855 bytes .../_customer_tax_id_service.cpython-312.pyc | Bin 0 -> 5631 bytes .../_deletable_api_resource.cpython-312.pyc | Bin 0 -> 1604 bytes .../__pycache__/_discount.cpython-312.pyc | Bin 0 -> 2259 bytes .../__pycache__/_dispute.cpython-312.pyc | Bin 0 -> 18037 bytes .../_dispute_service.cpython-312.pyc | Bin 0 -> 5873 bytes .../__pycache__/_encode.cpython-312.pyc | Bin 0 -> 2983 bytes .../_entitlements_service.cpython-312.pyc | Bin 0 -> 1803 bytes .../_ephemeral_key.cpython-312.pyc | Bin 0 -> 4504 bytes .../_ephemeral_key_service.cpython-312.pyc | Bin 0 -> 2988 bytes .../stripe/__pycache__/_error.cpython-312.pyc | Bin 0 -> 7288 bytes .../__pycache__/_error_object.cpython-312.pyc | Bin 0 -> 3305 bytes .../stripe/__pycache__/_event.cpython-312.pyc | Bin 0 -> 12728 bytes .../_event_service.cpython-312.pyc | Bin 0 -> 3295 bytes .../_exchange_rate.cpython-312.pyc | Bin 0 -> 5645 bytes .../_exchange_rate_service.cpython-312.pyc | Bin 0 -> 3578 bytes .../_expandable_field.cpython-312.pyc | Bin 0 -> 337 bytes .../stripe/__pycache__/_file.cpython-312.pyc | Bin 0 -> 6205 bytes .../__pycache__/_file_link.cpython-312.pyc | Bin 0 -> 5917 bytes .../_file_link_service.cpython-312.pyc | Bin 0 -> 4913 bytes .../__pycache__/_file_service.cpython-312.pyc | Bin 0 -> 4447 bytes ...ancial_connections_service.cpython-312.pyc | Bin 0 -> 2036 bytes .../_forwarding_service.cpython-312.pyc | Bin 0 -> 1570 bytes .../_funding_instructions.cpython-312.pyc | Bin 0 -> 9553 bytes .../__pycache__/_http_client.cpython-312.pyc | Bin 0 -> 56906 bytes .../_identity_service.cpython-312.pyc | Bin 0 -> 1827 bytes .../__pycache__/_invoice.cpython-312.pyc | Bin 0 -> 72856 bytes .../__pycache__/_invoice_item.cpython-312.pyc | Bin 0 -> 13267 bytes .../_invoice_item_service.cpython-312.pyc | Bin 0 -> 6612 bytes .../_invoice_line_item.cpython-312.pyc | Bin 0 -> 8912 bytes ..._invoice_line_item_service.cpython-312.pyc | Bin 0 -> 3982 bytes .../_invoice_payment.cpython-312.pyc | Bin 0 -> 5374 bytes .../_invoice_payment_service.cpython-312.pyc | Bin 0 -> 3277 bytes ...invoice_rendering_template.cpython-312.pyc | Bin 0 -> 10603 bytes ...rendering_template_service.cpython-312.pyc | Bin 0 -> 6184 bytes .../_invoice_service.cpython-312.pyc | Bin 0 -> 24008 bytes .../_issuing_service.cpython-312.pyc | Bin 0 -> 2810 bytes .../__pycache__/_line_item.cpython-312.pyc | Bin 0 -> 2380 bytes .../__pycache__/_list_object.cpython-312.pyc | Bin 0 -> 10368 bytes .../_listable_api_resource.cpython-312.pyc | Bin 0 -> 1519 bytes .../__pycache__/_login_link.cpython-312.pyc | Bin 0 -> 1140 bytes .../__pycache__/_mandate.cpython-312.pyc | Bin 0 -> 8732 bytes .../_mandate_service.cpython-312.pyc | Bin 0 -> 1961 bytes .../_multipart_data_generator.cpython-312.pyc | Bin 0 -> 4499 bytes ...ted_resource_class_methods.cpython-312.pyc | Bin 0 -> 4620 bytes .../stripe/__pycache__/_oauth.cpython-312.pyc | Bin 0 -> 7408 bytes .../_oauth_service.cpython-312.pyc | Bin 0 -> 4208 bytes .../_object_classes.cpython-312.pyc | Bin 0 -> 13727 bytes .../_payment_attempt_record.cpython-312.pyc | Bin 0 -> 42790 bytes ...ent_attempt_record_service.cpython-312.pyc | Bin 0 -> 3187 bytes .../_payment_intent.cpython-312.pyc | Bin 0 -> 89990 bytes ...t_amount_details_line_item.cpython-312.pyc | Bin 0 -> 3211 bytes ..._details_line_item_service.cpython-312.pyc | Bin 0 -> 2341 bytes .../_payment_intent_service.cpython-312.pyc | Bin 0 -> 20397 bytes .../__pycache__/_payment_link.cpython-312.pyc | Bin 0 -> 26063 bytes ...ent_link_line_item_service.cpython-312.pyc | Bin 0 -> 2312 bytes .../_payment_link_service.cpython-312.pyc | Bin 0 -> 6053 bytes .../_payment_method.cpython-312.pyc | Bin 0 -> 45394 bytes ...yment_method_configuration.cpython-312.pyc | Bin 0 -> 34997 bytes ...thod_configuration_service.cpython-312.pyc | Bin 0 -> 5405 bytes .../_payment_method_domain.cpython-312.pyc | Bin 0 -> 12723 bytes ...ment_method_domain_service.cpython-312.pyc | Bin 0 -> 7066 bytes .../_payment_method_service.cpython-312.pyc | Bin 0 -> 9553 bytes .../_payment_record.cpython-312.pyc | Bin 0 -> 61421 bytes .../_payment_record_service.cpython-312.pyc | Bin 0 -> 11075 bytes .../__pycache__/_payout.cpython-312.pyc | Bin 0 -> 15167 bytes .../_payout_service.cpython-312.pyc | Bin 0 -> 8632 bytes .../__pycache__/_person.cpython-312.pyc | Bin 0 -> 15985 bytes .../stripe/__pycache__/_plan.cpython-312.pyc | Bin 0 -> 11213 bytes .../__pycache__/_plan_service.cpython-312.pyc | Bin 0 -> 6181 bytes .../stripe/__pycache__/_price.cpython-312.pyc | Bin 0 -> 12670 bytes .../_price_service.cpython-312.pyc | Bin 0 -> 6574 bytes .../__pycache__/_product.cpython-312.pyc | Bin 0 -> 18165 bytes .../_product_feature.cpython-312.pyc | Bin 0 -> 1225 bytes .../_product_feature_service.cpython-312.pyc | Bin 0 -> 5738 bytes .../_product_service.cpython-312.pyc | Bin 0 -> 8858 bytes .../_promotion_code.cpython-312.pyc | Bin 0 -> 8037 bytes .../_promotion_code_service.cpython-312.pyc | Bin 0 -> 5423 bytes .../stripe/__pycache__/_quote.cpython-312.pyc | Bin 0 -> 34398 bytes ...upfront_line_items_service.cpython-312.pyc | Bin 0 -> 2479 bytes .../_quote_line_item_service.cpython-312.pyc | Bin 0 -> 2242 bytes .../_quote_service.cpython-312.pyc | Bin 0 -> 10628 bytes .../_radar_service.cpython-312.pyc | Bin 0 -> 1949 bytes .../__pycache__/_refund.cpython-312.pyc | Bin 0 -> 24913 bytes .../_refund_service.cpython-312.pyc | Bin 0 -> 7078 bytes .../_reporting_service.cpython-312.pyc | Bin 0 -> 1759 bytes .../_request_metrics.cpython-312.pyc | Bin 0 -> 1058 bytes .../_request_options.cpython-312.pyc | Bin 0 -> 3077 bytes .../_requestor_options.cpython-312.pyc | Bin 0 -> 4143 bytes .../_reserve_transaction.cpython-312.pyc | Bin 0 -> 868 bytes .../__pycache__/_reversal.cpython-312.pyc | Bin 0 -> 3710 bytes .../__pycache__/_review.cpython-312.pyc | Bin 0 -> 8266 bytes .../_review_service.cpython-312.pyc | Bin 0 -> 4206 bytes .../_search_result_object.cpython-312.pyc | Bin 0 -> 7990 bytes .../_searchable_api_resource.cpython-312.pyc | Bin 0 -> 2152 bytes .../_setup_attempt.cpython-312.pyc | Bin 0 -> 20259 bytes .../_setup_attempt_service.cpython-312.pyc | Bin 0 -> 1791 bytes .../__pycache__/_setup_intent.cpython-312.pyc | Bin 0 -> 36338 bytes .../_setup_intent_service.cpython-312.pyc | Bin 0 -> 10114 bytes .../_shipping_rate.cpython-312.pyc | Bin 0 -> 7911 bytes .../_shipping_rate_service.cpython-312.pyc | Bin 0 -> 5066 bytes .../_sigma_service.cpython-312.pyc | Bin 0 -> 1590 bytes .../_singleton_api_resource.cpython-312.pyc | Bin 0 -> 1604 bytes .../__pycache__/_source.cpython-312.pyc | Bin 0 -> 28214 bytes ...ource_mandate_notification.cpython-312.pyc | Bin 0 -> 2323 bytes .../_source_service.cpython-312.pyc | Bin 0 -> 7986 bytes .../_source_transaction.cpython-312.pyc | Bin 0 -> 3661 bytes ...source_transaction_service.cpython-312.pyc | Bin 0 -> 2153 bytes .../_stripe_client.cpython-312.pyc | Bin 0 -> 58776 bytes .../_stripe_context.cpython-312.pyc | Bin 0 -> 2631 bytes .../_stripe_object.cpython-312.pyc | Bin 0 -> 22976 bytes .../_stripe_response.cpython-312.pyc | Bin 0 -> 3859 bytes .../_stripe_service.cpython-312.pyc | Bin 0 -> 2927 bytes .../__pycache__/_subscription.cpython-312.pyc | Bin 0 -> 39654 bytes .../_subscription_item.cpython-312.pyc | Bin 0 -> 9884 bytes ..._subscription_item_service.cpython-312.pyc | Bin 0 -> 6348 bytes .../_subscription_schedule.cpython-312.pyc | Bin 0 -> 24662 bytes ...scription_schedule_service.cpython-312.pyc | Bin 0 -> 8378 bytes .../_subscription_service.cpython-312.pyc | Bin 0 -> 16046 bytes .../__pycache__/_tax_code.cpython-312.pyc | Bin 0 -> 3382 bytes .../_tax_code_service.cpython-312.pyc | Bin 0 -> 3161 bytes .../_tax_deducted_at_source.cpython-312.pyc | Bin 0 -> 876 bytes .../__pycache__/_tax_id.cpython-312.pyc | Bin 0 -> 9736 bytes .../_tax_id_service.cpython-312.pyc | Bin 0 -> 4832 bytes .../__pycache__/_tax_rate.cpython-312.pyc | Bin 0 -> 7005 bytes .../_tax_rate_service.cpython-312.pyc | Bin 0 -> 4976 bytes .../__pycache__/_tax_service.cpython-312.pyc | Bin 0 -> 2042 bytes .../_terminal_service.cpython-312.pyc | Bin 0 -> 2114 bytes .../__pycache__/_test_helpers.cpython-312.pyc | Bin 0 -> 3467 bytes .../_test_helpers_service.cpython-312.pyc | Bin 0 -> 2669 bytes .../stripe/__pycache__/_token.cpython-312.pyc | Bin 0 -> 4835 bytes .../_token_service.cpython-312.pyc | Bin 0 -> 3293 bytes .../stripe/__pycache__/_topup.cpython-312.pyc | Bin 0 -> 9582 bytes .../_topup_service.cpython-312.pyc | Bin 0 -> 6086 bytes .../__pycache__/_transfer.cpython-312.pyc | Bin 0 -> 13360 bytes ..._transfer_reversal_service.cpython-312.pyc | Bin 0 -> 6672 bytes .../_transfer_service.cpython-312.pyc | Bin 0 -> 6639 bytes .../_treasury_service.cpython-312.pyc | Bin 0 -> 3391 bytes .../_updateable_api_resource.cpython-312.pyc | Bin 0 -> 1989 bytes .../stripe/__pycache__/_util.cpython-312.pyc | Bin 0 -> 15711 bytes .../__pycache__/_v1_services.cpython-312.pyc | Bin 0 -> 14059 bytes .../__pycache__/_v2_services.cpython-312.pyc | Bin 0 -> 1660 bytes .../__pycache__/_verify_mixin.cpython-312.pyc | Bin 0 -> 1399 bytes .../__pycache__/_version.cpython-312.pyc | Bin 0 -> 212 bytes .../__pycache__/_webhook.cpython-312.pyc | Bin 0 -> 4301 bytes .../_webhook_endpoint.cpython-312.pyc | Bin 0 -> 9919 bytes .../_webhook_endpoint_service.cpython-312.pyc | Bin 0 -> 6902 bytes .../__pycache__/oauth_error.cpython-312.pyc | Bin 0 -> 2236 bytes .../site-packages/stripe/_account.py | 2591 +++ .../stripe/_account_capability_service.py | 162 + .../_account_external_account_service.py | 276 + .../site-packages/stripe/_account_link.py | 69 + .../stripe/_account_link_service.py | 52 + .../stripe/_account_login_link_service.py | 63 + .../stripe/_account_person_service.py | 260 + .../site-packages/stripe/_account_service.py | 397 + .../site-packages/stripe/_account_session.py | 514 + .../stripe/_account_session_service.py | 52 + .../site-packages/stripe/_any_iterator.py | 34 + .../site-packages/stripe/_api_mode.py | 4 + .../site-packages/stripe/_api_requestor.py | 919 + .../site-packages/stripe/_api_resource.py | 232 + .../site-packages/stripe/_api_version.py | 5 + .../site-packages/stripe/_app_info.py | 9 + .../site-packages/stripe/_apple_pay_domain.py | 248 + .../stripe/_apple_pay_domain_service.py | 189 + .../site-packages/stripe/_application.py | 25 + .../site-packages/stripe/_application_fee.py | 520 + .../stripe/_application_fee_refund.py | 80 + .../stripe/_application_fee_refund_service.py | 221 + .../stripe/_application_fee_service.py | 129 + .../site-packages/stripe/_apps_service.py | 33 + .../site-packages/stripe/_balance.py | 317 + .../site-packages/stripe/_balance_service.py | 52 + .../site-packages/stripe/_balance_settings.py | 166 + .../stripe/_balance_settings_service.py | 97 + .../stripe/_balance_transaction.py | 274 + .../stripe/_balance_transaction_service.py | 105 + .../site-packages/stripe/_bank_account.py | 537 + .../site-packages/stripe/_base_address.py | 12 + .../stripe/_billing_portal_service.py | 43 + .../site-packages/stripe/_billing_service.py | 74 + .../site-packages/stripe/_capability.py | 415 + .../python3.12/site-packages/stripe/_card.py | 324 + .../site-packages/stripe/_cash_balance.py | 58 + .../site-packages/stripe/_charge.py | 2737 +++ .../site-packages/stripe/_charge_service.py | 276 + .../site-packages/stripe/_checkout_service.py | 35 + .../site-packages/stripe/_client_options.py | 17 + .../site-packages/stripe/_climate_service.py | 41 + .../stripe/_confirmation_token.py | 1747 ++ .../stripe/_confirmation_token_service.py | 59 + .../stripe/_connect_collection_transfer.py | 39 + .../site-packages/stripe/_country_spec.py | 145 + .../stripe/_country_spec_service.py | 99 + .../site-packages/stripe/_coupon.py | 344 + .../site-packages/stripe/_coupon_service.py | 218 + .../stripe/_createable_api_resource.py | 14 + .../site-packages/stripe/_credit_note.py | 730 + .../stripe/_credit_note_line_item.py | 166 + .../stripe/_credit_note_line_item_service.py | 60 + .../_credit_note_preview_lines_service.py | 53 + .../stripe/_credit_note_service.py | 321 + .../site-packages/stripe/_custom_method.py | 71 + .../site-packages/stripe/_customer.py | 1990 ++ .../stripe/_customer_balance_transaction.py | 114 + .../_customer_balance_transaction_service.py | 209 + .../stripe/_customer_cash_balance_service.py | 106 + .../_customer_cash_balance_transaction.py | 202 + ...stomer_cash_balance_transaction_service.py | 117 + .../_customer_funding_instructions_service.py | 63 + .../_customer_payment_method_service.py | 111 + .../_customer_payment_source_service.py | 323 + .../site-packages/stripe/_customer_service.py | 399 + .../site-packages/stripe/_customer_session.py | 255 + .../stripe/_customer_session_service.py | 52 + .../stripe/_customer_tax_id_service.py | 209 + .../stripe/_deletable_api_resource.py | 23 + .../site-packages/stripe/_discount.py | 83 + .../site-packages/stripe/_dispute.py | 717 + .../site-packages/stripe/_dispute_service.py | 187 + .../site-packages/stripe/_encode.py | 56 + .../stripe/_entitlements_service.py | 43 + .../site-packages/stripe/_ephemeral_key.py | 156 + .../stripe/_ephemeral_key_service.py | 96 + .../python3.12/site-packages/stripe/_error.py | 195 + .../site-packages/stripe/_error_object.py | 136 + .../python3.12/site-packages/stripe/_event.py | 413 + .../site-packages/stripe/_event_service.py | 93 + .../site-packages/stripe/_exchange_rate.py | 142 + .../stripe/_exchange_rate_service.py | 107 + .../site-packages/stripe/_expandable_field.py | 4 + .../python3.12/site-packages/stripe/_file.py | 205 + .../site-packages/stripe/_file_link.py | 193 + .../stripe/_file_link_service.py | 173 + .../site-packages/stripe/_file_service.py | 142 + .../stripe/_financial_connections_service.py | 52 + .../stripe/_forwarding_service.py | 35 + .../stripe/_funding_instructions.py | 582 + .../site-packages/stripe/_http_client.py | 1546 ++ .../site-packages/stripe/_identity_service.py | 48 + .../site-packages/stripe/_invoice.py | 2965 +++ .../site-packages/stripe/_invoice_item.py | 438 + .../stripe/_invoice_item_service.py | 234 + .../stripe/_invoice_line_item.py | 350 + .../stripe/_invoice_line_item_service.py | 117 + .../site-packages/stripe/_invoice_payment.py | 173 + .../stripe/_invoice_payment_service.py | 101 + .../stripe/_invoice_rendering_template.py | 364 + .../_invoice_rendering_template_service.py | 195 + .../site-packages/stripe/_invoice_service.py | 802 + .../site-packages/stripe/_issuing_service.py | 70 + .../site-packages/stripe/_line_item.py | 119 + .../site-packages/stripe/_list_object.py | 257 + .../stripe/_listable_api_resource.py | 31 + .../site-packages/stripe/_login_link.py | 26 + .../site-packages/stripe/_mandate.py | 268 + .../site-packages/stripe/_mandate_service.py | 53 + .../stripe/_multipart_data_generator.py | 87 + .../stripe/_nested_resource_class_methods.py | 118 + .../python3.12/site-packages/stripe/_oauth.py | 363 + .../site-packages/stripe/_oauth_service.py | 112 + .../site-packages/stripe/_object_classes.py | 348 + .../stripe/_payment_attempt_record.py | 1994 ++ .../stripe/_payment_attempt_record_service.py | 97 + .../site-packages/stripe/_payment_intent.py | 4362 +++++ ...payment_intent_amount_details_line_item.py | 108 + ...intent_amount_details_line_item_service.py | 66 + .../stripe/_payment_intent_service.py | 709 + .../site-packages/stripe/_payment_link.py | 1174 ++ .../stripe/_payment_link_line_item_service.py | 60 + .../stripe/_payment_link_service.py | 219 + .../site-packages/stripe/_payment_method.py | 2030 +++ .../stripe/_payment_method_configuration.py | 1495 ++ .../_payment_method_configuration_service.py | 189 + .../stripe/_payment_method_domain.py | 488 + .../stripe/_payment_method_domain_service.py | 246 + .../stripe/_payment_method_service.py | 311 + .../site-packages/stripe/_payment_record.py | 2758 +++ .../stripe/_payment_record_service.py | 396 + .../site-packages/stripe/_payout.py | 533 + .../site-packages/stripe/_payout_service.py | 275 + .../site-packages/stripe/_person.py | 795 + .../python3.12/site-packages/stripe/_plan.py | 375 + .../site-packages/stripe/_plan_service.py | 214 + .../python3.12/site-packages/stripe/_price.py | 436 + .../site-packages/stripe/_price_service.py | 219 + .../site-packages/stripe/_product.py | 593 + .../site-packages/stripe/_product_feature.py | 38 + .../stripe/_product_feature_service.py | 209 + .../site-packages/stripe/_product_service.py | 287 + .../site-packages/stripe/_promotion_code.py | 256 + .../stripe/_promotion_code_service.py | 189 + .../python3.12/site-packages/stripe/_quote.py | 1344 ++ ...ote_computed_upfront_line_items_service.py | 60 + .../stripe/_quote_line_item_service.py | 60 + .../site-packages/stripe/_quote_service.py | 375 + .../site-packages/stripe/_radar_service.py | 49 + .../site-packages/stripe/_refund.py | 844 + .../site-packages/stripe/_refund_service.py | 246 + .../stripe/_reporting_service.py | 44 + .../site-packages/stripe/_request_metrics.py | 23 + .../site-packages/stripe/_request_options.py | 93 + .../stripe/_requestor_options.py | 96 + .../stripe/_reserve_transaction.py | 28 + .../site-packages/stripe/_reversal.py | 98 + .../site-packages/stripe/_review.py | 310 + .../site-packages/stripe/_review_service.py | 138 + .../stripe/_search_result_object.py | 178 + .../stripe/_searchable_api_resource.py | 49 + .../site-packages/stripe/_setup_attempt.py | 839 + .../stripe/_setup_attempt_service.py | 51 + .../site-packages/stripe/_setup_intent.py | 1478 ++ .../stripe/_setup_intent_service.py | 372 + .../site-packages/stripe/_shipping_rate.py | 273 + .../stripe/_shipping_rate_service.py | 187 + .../site-packages/stripe/_sigma_service.py | 40 + .../stripe/_singleton_api_resource.py | 29 + .../site-packages/stripe/_source.py | 953 + .../stripe/_source_mandate_notification.py | 100 + .../site-packages/stripe/_source_service.py | 265 + .../stripe/_source_transaction.py | 176 + .../stripe/_source_transaction_service.py | 60 + .../site-packages/stripe/_stripe_client.py | 1117 ++ .../site-packages/stripe/_stripe_context.py | 40 + .../site-packages/stripe/_stripe_object.py | 621 + .../site-packages/stripe/_stripe_response.py | 65 + .../site-packages/stripe/_stripe_service.py | 91 + .../site-packages/stripe/_subscription.py | 1433 ++ .../stripe/_subscription_item.py | 350 + .../stripe/_subscription_item_service.py | 224 + .../stripe/_subscription_schedule.py | 938 + .../stripe/_subscription_schedule_service.py | 283 + .../stripe/_subscription_service.py | 500 + .../site-packages/stripe/_tax_code.py | 96 + .../site-packages/stripe/_tax_code_service.py | 93 + .../stripe/_tax_deducted_at_source.py | 31 + .../site-packages/stripe/_tax_id.py | 410 + .../site-packages/stripe/_tax_id_service.py | 173 + .../site-packages/stripe/_tax_rate.py | 262 + .../site-packages/stripe/_tax_rate_service.py | 181 + .../site-packages/stripe/_tax_service.py | 47 + .../site-packages/stripe/_terminal_service.py | 52 + .../site-packages/stripe/_test_helpers.py | 65 + .../stripe/_test_helpers_service.py | 61 + .../python3.12/site-packages/stripe/_token.py | 138 + .../site-packages/stripe/_token_service.py | 94 + .../python3.12/site-packages/stripe/_topup.py | 323 + .../site-packages/stripe/_topup_service.py | 214 + .../site-packages/stripe/_transfer.py | 413 + .../stripe/_transfer_reversal_service.py | 213 + .../site-packages/stripe/_transfer_service.py | 215 + .../site-packages/stripe/_treasury_service.py | 102 + .../stripe/_updateable_api_resource.py | 31 + .../python3.12/site-packages/stripe/_util.py | 452 + .../site-packages/stripe/_v1_services.py | 323 + .../site-packages/stripe/_v2_services.py | 38 + .../site-packages/stripe/_verify_mixin.py | 21 + .../site-packages/stripe/_version.py | 1 + .../site-packages/stripe/_webhook.py | 96 + .../site-packages/stripe/_webhook_endpoint.py | 324 + .../stripe/_webhook_endpoint_service.py | 236 + .../site-packages/stripe/apps/__init__.py | 29 + .../apps/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 949 bytes .../apps/__pycache__/_secret.cpython-312.pyc | Bin 0 -> 6437 bytes .../_secret_service.cpython-312.pyc | Bin 0 -> 4361 bytes .../site-packages/stripe/apps/_secret.py | 210 + .../stripe/apps/_secret_service.py | 170 + .../site-packages/stripe/billing/__init__.py | 96 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3211 bytes .../__pycache__/_alert.cpython-312.pyc | Bin 0 -> 14162 bytes .../_alert_service.cpython-312.pyc | Bin 0 -> 7189 bytes .../_alert_triggered.cpython-312.pyc | Bin 0 -> 972 bytes .../_credit_balance_summary.cpython-312.pyc | Bin 0 -> 3774 bytes ...it_balance_summary_service.cpython-312.pyc | Bin 0 -> 1825 bytes ...credit_balance_transaction.cpython-312.pyc | Bin 0 -> 6563 bytes ...alance_transaction_service.cpython-312.pyc | Bin 0 -> 3269 bytes .../__pycache__/_credit_grant.cpython-312.pyc | Bin 0 -> 13821 bytes .../_credit_grant_service.cpython-312.pyc | Bin 0 -> 7214 bytes .../__pycache__/_meter.cpython-312.pyc | Bin 0 -> 14264 bytes .../__pycache__/_meter_event.cpython-312.pyc | Bin 0 -> 2352 bytes .../_meter_event_adjustment.cpython-312.pyc | Bin 0 -> 2734 bytes ...r_event_adjustment_service.cpython-312.pyc | Bin 0 -> 1804 bytes .../_meter_event_service.cpython-312.pyc | Bin 0 -> 1699 bytes .../_meter_event_summary.cpython-312.pyc | Bin 0 -> 1326 bytes ...eter_event_summary_service.cpython-312.pyc | Bin 0 -> 2143 bytes .../_meter_service.cpython-312.pyc | Bin 0 -> 8171 bytes .../site-packages/stripe/billing/_alert.py | 493 + .../stripe/billing/_alert_service.py | 265 + .../stripe/billing/_alert_triggered.py | 38 + .../stripe/billing/_credit_balance_summary.py | 118 + .../_credit_balance_summary_service.py | 52 + .../billing/_credit_balance_transaction.py | 234 + .../_credit_balance_transaction_service.py | 103 + .../stripe/billing/_credit_grant.py | 503 + .../stripe/billing/_credit_grant_service.py | 275 + .../site-packages/stripe/billing/_meter.py | 494 + .../stripe/billing/_meter_event.py | 80 + .../stripe/billing/_meter_event_adjustment.py | 86 + .../_meter_event_adjustment_service.py | 52 + .../stripe/billing/_meter_event_service.py | 52 + .../stripe/billing/_meter_event_summary.py | 46 + .../billing/_meter_event_summary_service.py | 60 + .../stripe/billing/_meter_service.py | 301 + .../stripe/billing_portal/__init__.py | 42 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1294 bytes .../_configuration.cpython-312.pyc | Bin 0 -> 11433 bytes .../_configuration_service.cpython-312.pyc | Bin 0 -> 5357 bytes .../__pycache__/_session.cpython-312.pyc | Bin 0 -> 7085 bytes .../_session_service.cpython-312.pyc | Bin 0 -> 1707 bytes .../stripe/billing_portal/_configuration.py | 401 + .../billing_portal/_configuration_service.py | 189 + .../stripe/billing_portal/_session.py | 296 + .../stripe/billing_portal/_session_service.py | 52 + .../site-packages/stripe/checkout/__init__.py | 38 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1131 bytes .../__pycache__/_session.cpython-312.pyc | Bin 0 -> 56060 bytes ..._session_line_item_service.cpython-312.pyc | Bin 0 -> 2300 bytes .../_session_service.cpython-312.pyc | Bin 0 -> 7509 bytes .../site-packages/stripe/checkout/_session.py | 2779 +++ .../checkout/_session_line_item_service.py | 60 + .../stripe/checkout/_session_service.py | 274 + .../site-packages/stripe/climate/__init__.py | 41 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1392 bytes .../__pycache__/_order.cpython-312.pyc | Bin 0 -> 11476 bytes .../_order_service.cpython-312.pyc | Bin 0 -> 6626 bytes .../__pycache__/_product.cpython-312.pyc | Bin 0 -> 4118 bytes .../_product_service.cpython-312.pyc | Bin 0 -> 3054 bytes .../__pycache__/_supplier.cpython-312.pyc | Bin 0 -> 3918 bytes .../_supplier_service.cpython-312.pyc | Bin 0 -> 3047 bytes .../site-packages/stripe/climate/_order.py | 437 + .../stripe/climate/_order_service.py | 230 + .../site-packages/stripe/climate/_product.py | 142 + .../stripe/climate/_product_service.py | 99 + .../site-packages/stripe/climate/_supplier.py | 140 + .../stripe/climate/_supplier_service.py | 99 + .../stripe/data/ca-certificates.crt | 3347 ++++ .../stripe/entitlements/__init__.py | 49 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1467 bytes .../_active_entitlement.cpython-312.pyc | Bin 0 -> 3516 bytes ...active_entitlement_service.cpython-312.pyc | Bin 0 -> 3181 bytes ...active_entitlement_summary.cpython-312.pyc | Bin 0 -> 1136 bytes .../__pycache__/_feature.cpython-312.pyc | Bin 0 -> 5715 bytes .../_feature_service.cpython-312.pyc | Bin 0 -> 4927 bytes .../entitlements/_active_entitlement.py | 108 + .../_active_entitlement_service.py | 101 + .../_active_entitlement_summary.py | 35 + .../stripe/entitlements/_feature.py | 192 + .../stripe/entitlements/_feature_service.py | 181 + .../site-packages/stripe/events/__init__.py | 73 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1724 bytes .../_event_classes.cpython-312.pyc | Bin 0 -> 2131 bytes ...ror_report_triggered_event.cpython-312.pyc | Bin 0 -> 8006 bytes ...meter_no_meter_found_event.cpython-312.pyc | Bin 0 -> 4954 bytes ...ent_destination_ping_event.cpython-312.pyc | Bin 0 -> 4695 bytes .../stripe/events/_event_classes.py | 79 + ...ling_meter_error_report_triggered_event.py | 214 + .../_v1_billing_meter_no_meter_found_event.py | 136 + .../_v2_core_event_destination_ping_event.py | 108 + .../stripe/financial_connections/__init__.py | 66 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2077 bytes .../__pycache__/_account.cpython-312.pyc | Bin 0 -> 22498 bytes .../_account_owner.cpython-312.pyc | Bin 0 -> 1100 bytes .../_account_owner_service.cpython-312.pyc | Bin 0 -> 2143 bytes .../_account_ownership.cpython-312.pyc | Bin 0 -> 1145 bytes .../_account_service.cpython-312.pyc | Bin 0 -> 9136 bytes .../__pycache__/_session.cpython-312.pyc | Bin 0 -> 4733 bytes .../_session_service.cpython-312.pyc | Bin 0 -> 3148 bytes .../__pycache__/_transaction.cpython-312.pyc | Bin 0 -> 4114 bytes .../_transaction_service.cpython-312.pyc | Bin 0 -> 3194 bytes .../stripe/financial_connections/_account.py | 870 + .../financial_connections/_account_owner.py | 47 + .../_account_owner_service.py | 60 + .../_account_ownership.py | 35 + .../financial_connections/_account_service.py | 321 + .../stripe/financial_connections/_session.py | 159 + .../financial_connections/_session_service.py | 100 + .../financial_connections/_transaction.py | 145 + .../_transaction_service.py | 101 + .../stripe/forwarding/__init__.py | 31 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 987 bytes .../__pycache__/_request.cpython-312.pyc | Bin 0 -> 7277 bytes .../_request_service.cpython-312.pyc | Bin 0 -> 3873 bytes .../stripe/forwarding/_request.py | 253 + .../stripe/forwarding/_request_service.py | 136 + .../site-packages/stripe/identity/__init__.py | 47 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1352 bytes .../_verification_report.cpython-312.pyc | Bin 0 -> 11628 bytes ...erification_report_service.cpython-312.pyc | Bin 0 -> 3204 bytes .../_verification_session.cpython-312.pyc | Bin 0 -> 20954 bytes ...rification_session_service.cpython-312.pyc | Bin 0 -> 9874 bytes .../stripe/identity/_verification_report.py | 496 + .../identity/_verification_report_service.py | 101 + .../stripe/identity/_verification_session.py | 875 + .../identity/_verification_session_service.py | 347 + .../site-packages/stripe/issuing/__init__.py | 79 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2869 bytes .../_authorization.cpython-312.pyc | Bin 0 -> 41942 bytes .../_authorization_service.cpython-312.pyc | Bin 0 -> 7420 bytes .../issuing/__pycache__/_card.cpython-312.pyc | Bin 0 -> 35483 bytes .../__pycache__/_card_service.cpython-312.pyc | Bin 0 -> 5058 bytes .../__pycache__/_cardholder.cpython-312.pyc | Bin 0 -> 19772 bytes .../_cardholder_service.cpython-312.pyc | Bin 0 -> 5296 bytes .../__pycache__/_dispute.cpython-312.pyc | Bin 0 -> 15715 bytes .../_dispute_service.cpython-312.pyc | Bin 0 -> 6979 bytes .../_personalization_design.cpython-312.pyc | Bin 0 -> 18678 bytes ...onalization_design_service.cpython-312.pyc | Bin 0 -> 5472 bytes .../_physical_bundle.cpython-312.pyc | Bin 0 -> 4117 bytes .../_physical_bundle_service.cpython-312.pyc | Bin 0 -> 3275 bytes .../__pycache__/_token.cpython-312.pyc | Bin 0 -> 8910 bytes .../_token_service.cpython-312.pyc | Bin 0 -> 4017 bytes .../__pycache__/_transaction.cpython-312.pyc | Bin 0 -> 18908 bytes .../_transaction_service.cpython-312.pyc | Bin 0 -> 4430 bytes .../stripe/issuing/_authorization.py | 1676 ++ .../stripe/issuing/_authorization_service.py | 246 + .../site-packages/stripe/issuing/_card.py | 1967 ++ .../stripe/issuing/_card_service.py | 173 + .../stripe/issuing/_cardholder.py | 1330 ++ .../stripe/issuing/_cardholder_service.py | 189 + .../site-packages/stripe/issuing/_dispute.py | 571 + .../stripe/issuing/_dispute_service.py | 234 + .../stripe/issuing/_personalization_design.py | 677 + .../_personalization_design_service.py | 189 + .../stripe/issuing/_physical_bundle.py | 129 + .../issuing/_physical_bundle_service.py | 101 + .../site-packages/stripe/issuing/_token.py | 333 + .../stripe/issuing/_token_service.py | 136 + .../stripe/issuing/_transaction.py | 725 + .../stripe/issuing/_transaction_service.py | 148 + .../site-packages/stripe/oauth_error.py | 53 + .../site-packages/stripe/params/__init__.py | 15174 ++++++++++++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 342235 bytes ...unt_capability_list_params.cpython-312.pyc | Bin 0 -> 610 bytes ...capability_retrieve_params.cpython-312.pyc | Bin 0 -> 618 bytes ...t_capability_update_params.cpython-312.pyc | Bin 0 -> 667 bytes ...te_external_account_params.cpython-312.pyc | Bin 0 -> 2552 bytes ...t_create_login_link_params.cpython-312.pyc | Bin 0 -> 656 bytes .../_account_create_params.cpython-312.pyc | Bin 0 -> 39772 bytes ...count_create_person_params.cpython-312.pyc | Bin 0 -> 8663 bytes ...te_external_account_params.cpython-312.pyc | Bin 0 -> 497 bytes .../_account_delete_params.cpython-312.pyc | Bin 0 -> 465 bytes ...count_delete_person_params.cpython-312.pyc | Bin 0 -> 478 bytes ...rnal_account_create_params.cpython-312.pyc | Bin 0 -> 2489 bytes ...rnal_account_delete_params.cpython-312.pyc | Bin 0 -> 486 bytes ...ternal_account_list_params.cpython-312.pyc | Bin 0 -> 876 bytes ...al_account_retrieve_params.cpython-312.pyc | Bin 0 -> 629 bytes ...rnal_account_update_params.cpython-312.pyc | Bin 0 -> 2135 bytes ...account_link_create_params.cpython-312.pyc | Bin 0 -> 1400 bytes ...t_list_capabilities_params.cpython-312.pyc | Bin 0 -> 657 bytes ...t_external_accounts_params.cpython-312.pyc | Bin 0 -> 918 bytes .../_account_list_params.cpython-312.pyc | Bin 0 -> 1223 bytes ...ccount_list_persons_params.cpython-312.pyc | Bin 0 -> 1357 bytes ...t_login_link_create_params.cpython-312.pyc | Bin 0 -> 613 bytes ...t_modify_capability_params.cpython-312.pyc | Bin 0 -> 710 bytes ...fy_external_account_params.cpython-312.pyc | Bin 0 -> 2198 bytes ...count_modify_person_params.cpython-312.pyc | Bin 0 -> 8663 bytes ...count_person_create_params.cpython-312.pyc | Bin 0 -> 8600 bytes ...count_person_delete_params.cpython-312.pyc | Bin 0 -> 467 bytes ...account_person_list_params.cpython-312.pyc | Bin 0 -> 1291 bytes ...unt_person_retrieve_params.cpython-312.pyc | Bin 0 -> 610 bytes ...count_person_update_params.cpython-312.pyc | Bin 0 -> 8600 bytes .../_account_persons_params.cpython-312.pyc | Bin 0 -> 1344 bytes .../_account_reject_params.cpython-312.pyc | Bin 0 -> 668 bytes ...retrieve_capability_params.cpython-312.pyc | Bin 0 -> 661 bytes ...nt_retrieve_current_params.cpython-312.pyc | Bin 0 -> 612 bytes ...ve_external_account_params.cpython-312.pyc | Bin 0 -> 672 bytes .../_account_retrieve_params.cpython-312.pyc | Bin 0 -> 597 bytes ...unt_retrieve_person_params.cpython-312.pyc | Bin 0 -> 653 bytes ...ount_session_create_params.cpython-312.pyc | Bin 0 -> 12536 bytes .../_account_update_params.cpython-312.pyc | Bin 0 -> 38454 bytes ...e_pay_domain_create_params.cpython-312.pyc | Bin 0 -> 681 bytes ...e_pay_domain_delete_params.cpython-312.pyc | Bin 0 -> 481 bytes ...ple_pay_domain_list_params.cpython-312.pyc | Bin 0 -> 839 bytes ...pay_domain_retrieve_params.cpython-312.pyc | Bin 0 -> 656 bytes ...n_fee_create_refund_params.cpython-312.pyc | Bin 0 -> 797 bytes ...pplication_fee_list_params.cpython-312.pyc | Bin 0 -> 1296 bytes ...on_fee_list_refunds_params.cpython-312.pyc | Bin 0 -> 813 bytes ...n_fee_modify_refund_params.cpython-312.pyc | Bin 0 -> 772 bytes ...n_fee_refund_create_params.cpython-312.pyc | Bin 0 -> 754 bytes ...ion_fee_refund_list_params.cpython-312.pyc | Bin 0 -> 768 bytes ...lication_fee_refund_params.cpython-312.pyc | Bin 0 -> 784 bytes ...fee_refund_retrieve_params.cpython-312.pyc | Bin 0 -> 625 bytes ...n_fee_refund_update_params.cpython-312.pyc | Bin 0 -> 732 bytes ...cation_fee_retrieve_params.cpython-312.pyc | Bin 0 -> 655 bytes ...fee_retrieve_refund_params.cpython-312.pyc | Bin 0 -> 668 bytes .../_balance_retrieve_params.cpython-312.pyc | Bin 0 -> 640 bytes ...nce_settings_modify_params.cpython-312.pyc | Bin 0 -> 2367 bytes ...e_settings_retrieve_params.cpython-312.pyc | Bin 0 -> 657 bytes ...nce_settings_update_params.cpython-312.pyc | Bin 0 -> 2304 bytes ...ce_transaction_list_params.cpython-312.pyc | Bin 0 -> 1445 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 663 bytes ...bank_account_delete_params.cpython-312.pyc | Bin 0 -> 474 bytes .../_card_delete_params.cpython-312.pyc | Bin 0 -> 459 bytes .../_charge_capture_params.cpython-312.pyc | Bin 0 -> 1332 bytes .../_charge_create_params.cpython-312.pyc | Bin 0 -> 3231 bytes .../_charge_list_params.cpython-312.pyc | Bin 0 -> 1370 bytes ...charge_list_refunds_params.cpython-312.pyc | Bin 0 -> 796 bytes .../_charge_modify_params.cpython-312.pyc | Bin 0 -> 2232 bytes .../_charge_retrieve_params.cpython-312.pyc | Bin 0 -> 638 bytes ...rge_retrieve_refund_params.cpython-312.pyc | Bin 0 -> 651 bytes .../_charge_search_params.cpython-312.pyc | Bin 0 -> 755 bytes .../_charge_update_params.cpython-312.pyc | Bin 0 -> 2169 bytes ...mation_token_create_params.cpython-312.pyc | Bin 0 -> 19975 bytes ...tion_token_retrieve_params.cpython-312.pyc | Bin 0 -> 661 bytes .../_country_spec_list_params.cpython-312.pyc | Bin 0 -> 792 bytes ...untry_spec_retrieve_params.cpython-312.pyc | Bin 0 -> 649 bytes .../_coupon_create_params.cpython-312.pyc | Bin 0 -> 1855 bytes .../_coupon_delete_params.cpython-312.pyc | Bin 0 -> 463 bytes .../_coupon_list_params.cpython-312.pyc | Bin 0 -> 1219 bytes .../_coupon_modify_params.cpython-312.pyc | Bin 0 -> 1119 bytes .../_coupon_retrieve_params.cpython-312.pyc | Bin 0 -> 638 bytes .../_coupon_update_params.cpython-312.pyc | Bin 0 -> 1056 bytes ..._credit_note_create_params.cpython-312.pyc | Bin 0 -> 3442 bytes ...note_line_item_list_params.cpython-312.pyc | Bin 0 -> 765 bytes ...dit_note_list_lines_params.cpython-312.pyc | Bin 0 -> 801 bytes .../_credit_note_list_params.cpython-312.pyc | Bin 0 -> 1327 bytes ..._credit_note_modify_params.cpython-312.pyc | Bin 0 -> 769 bytes ..._preview_lines_list_params.cpython-312.pyc | Bin 0 -> 3609 bytes ..._note_preview_lines_params.cpython-312.pyc | Bin 0 -> 3639 bytes ...credit_note_preview_params.cpython-312.pyc | Bin 0 -> 3450 bytes ...redit_note_retrieve_params.cpython-312.pyc | Bin 0 -> 647 bytes ..._credit_note_update_params.cpython-312.pyc | Bin 0 -> 726 bytes ...te_void_credit_note_params.cpython-312.pyc | Bin 0 -> 661 bytes ..._transaction_create_params.cpython-312.pyc | Bin 0 -> 864 bytes ...ce_transaction_list_params.cpython-312.pyc | Bin 0 -> 780 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 637 bytes ..._transaction_update_params.cpython-312.pyc | Bin 0 -> 793 bytes ...sh_balance_retrieve_params.cpython-312.pyc | Bin 0 -> 623 bytes ...ce_transaction_list_params.cpython-312.pyc | Bin 0 -> 789 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 646 bytes ...cash_balance_update_params.cpython-312.pyc | Bin 0 -> 1002 bytes ...balance_transaction_params.cpython-312.pyc | Bin 0 -> 904 bytes ...unding_instructions_params.cpython-312.pyc | Bin 0 -> 1635 bytes .../_customer_create_params.cpython-312.pyc | Bin 0 -> 6219 bytes ...tomer_create_source_params.cpython-312.pyc | Bin 0 -> 814 bytes ...tomer_create_tax_id_params.cpython-312.pyc | Bin 0 -> 1660 bytes ...mer_delete_discount_params.cpython-312.pyc | Bin 0 -> 484 bytes .../_customer_delete_params.cpython-312.pyc | Bin 0 -> 467 bytes ...tomer_delete_source_params.cpython-312.pyc | Bin 0 -> 651 bytes ...tomer_delete_tax_id_params.cpython-312.pyc | Bin 0 -> 479 bytes ...r_fund_cash_balance_params.cpython-312.pyc | Bin 0 -> 776 bytes ...instructions_create_params.cpython-312.pyc | Bin 0 -> 1572 bytes ...alance_transactions_params.cpython-312.pyc | Bin 0 -> 825 bytes ...alance_transactions_params.cpython-312.pyc | Bin 0 -> 834 bytes .../_customer_list_params.cpython-312.pyc | Bin 0 -> 1318 bytes ...ist_payment_methods_params.cpython-312.pyc | Bin 0 -> 1482 bytes ...stomer_list_sources_params.cpython-312.pyc | Bin 0 -> 844 bytes ...stomer_list_tax_ids_params.cpython-312.pyc | Bin 0 -> 799 bytes ...balance_transaction_params.cpython-312.pyc | Bin 0 -> 833 bytes ...modify_cash_balance_params.cpython-312.pyc | Bin 0 -> 1065 bytes .../_customer_modify_params.cpython-312.pyc | Bin 0 -> 4947 bytes ...tomer_modify_source_params.cpython-312.pyc | Bin 0 -> 2249 bytes ...payment_method_list_params.cpython-312.pyc | Bin 0 -> 1440 bytes ...ent_method_retrieve_params.cpython-312.pyc | Bin 0 -> 627 bytes ...yment_source_create_params.cpython-312.pyc | Bin 0 -> 786 bytes ...yment_source_delete_params.cpython-312.pyc | Bin 0 -> 623 bytes ...payment_source_list_params.cpython-312.pyc | Bin 0 -> 814 bytes ...ent_source_retrieve_params.cpython-312.pyc | Bin 0 -> 627 bytes ...yment_source_update_params.cpython-312.pyc | Bin 0 -> 2217 bytes ...yment_source_verify_params.cpython-312.pyc | Bin 0 -> 683 bytes ...balance_transaction_params.cpython-312.pyc | Bin 0 -> 680 bytes ...trieve_cash_balance_params.cpython-312.pyc | Bin 0 -> 666 bytes ...balance_transaction_params.cpython-312.pyc | Bin 0 -> 689 bytes .../_customer_retrieve_params.cpython-312.pyc | Bin 0 -> 642 bytes ...ieve_payment_method_params.cpython-312.pyc | Bin 0 -> 670 bytes ...mer_retrieve_source_params.cpython-312.pyc | Bin 0 -> 655 bytes ...mer_retrieve_tax_id_params.cpython-312.pyc | Bin 0 -> 654 bytes .../_customer_search_params.cpython-312.pyc | Bin 0 -> 759 bytes ...omer_session_create_params.cpython-312.pyc | Bin 0 -> 4183 bytes ...tomer_tax_id_create_params.cpython-312.pyc | Bin 0 -> 1620 bytes ...tomer_tax_id_delete_params.cpython-312.pyc | Bin 0 -> 468 bytes ...ustomer_tax_id_list_params.cpython-312.pyc | Bin 0 -> 754 bytes ...mer_tax_id_retrieve_params.cpython-312.pyc | Bin 0 -> 611 bytes .../_customer_update_params.cpython-312.pyc | Bin 0 -> 4884 bytes .../_dispute_close_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_dispute_list_params.cpython-312.pyc | Bin 0 -> 1319 bytes .../_dispute_modify_params.cpython-312.pyc | Bin 0 -> 5919 bytes .../_dispute_retrieve_params.cpython-312.pyc | Bin 0 -> 640 bytes .../_dispute_update_params.cpython-312.pyc | Bin 0 -> 5856 bytes ...phemeral_key_create_params.cpython-312.pyc | Bin 0 -> 801 bytes ...phemeral_key_delete_params.cpython-312.pyc | Bin 0 -> 647 bytes .../_event_list_params.cpython-312.pyc | Bin 0 -> 1371 bytes .../_event_retrieve_params.cpython-312.pyc | Bin 0 -> 636 bytes ..._exchange_rate_list_params.cpython-312.pyc | Bin 0 -> 794 bytes ...hange_rate_retrieve_params.cpython-312.pyc | Bin 0 -> 651 bytes .../_file_create_params.cpython-312.pyc | Bin 0 -> 1485 bytes .../_file_link_create_params.cpython-312.pyc | Bin 0 -> 830 bytes .../_file_link_list_params.cpython-312.pyc | Bin 0 -> 1321 bytes .../_file_link_modify_params.cpython-312.pyc | Bin 0 -> 828 bytes ..._file_link_retrieve_params.cpython-312.pyc | Bin 0 -> 643 bytes .../_file_link_update_params.cpython-312.pyc | Bin 0 -> 788 bytes .../_file_list_params.cpython-312.pyc | Bin 0 -> 1737 bytes .../_file_retrieve_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_invoice_add_lines_params.cpython-312.pyc | Bin 0 -> 5069 bytes ...oice_attach_payment_params.cpython-312.pyc | Bin 0 -> 755 bytes .../_invoice_create_params.cpython-312.pyc | Bin 0 -> 15240 bytes ...oice_create_preview_params.cpython-312.pyc | Bin 0 -> 20947 bytes .../_invoice_delete_params.cpython-312.pyc | Bin 0 -> 465 bytes ...ce_finalize_invoice_params.cpython-312.pyc | Bin 0 -> 711 bytes ...invoice_item_create_params.cpython-312.pyc | Bin 0 -> 2877 bytes ...invoice_item_delete_params.cpython-312.pyc | Bin 0 -> 474 bytes .../_invoice_item_list_params.cpython-312.pyc | Bin 0 -> 1383 bytes ...invoice_item_modify_params.cpython-312.pyc | Bin 0 -> 2719 bytes ...voice_item_retrieve_params.cpython-312.pyc | Bin 0 -> 649 bytes ...invoice_item_update_params.cpython-312.pyc | Bin 0 -> 2656 bytes ...oice_line_item_list_params.cpython-312.pyc | Bin 0 -> 758 bytes ...ce_line_item_update_params.cpython-312.pyc | Bin 0 -> 4699 bytes ..._invoice_list_lines_params.cpython-312.pyc | Bin 0 -> 794 bytes .../_invoice_list_params.cpython-312.pyc | Bin 0 -> 1874 bytes ..._mark_uncollectible_params.cpython-312.pyc | Bin 0 -> 659 bytes .../_invoice_modify_params.cpython-312.pyc | Bin 0 -> 14804 bytes .../_invoice_pay_params.cpython-312.pyc | Bin 0 -> 961 bytes ...nvoice_payment_list_params.cpython-312.pyc | Bin 0 -> 1373 bytes ...ce_payment_retrieve_params.cpython-312.pyc | Bin 0 -> 655 bytes ...nvoice_remove_lines_params.cpython-312.pyc | Bin 0 -> 1116 bytes ...ng_template_archive_params.cpython-312.pyc | Bin 0 -> 674 bytes ...ering_template_list_params.cpython-312.pyc | Bin 0 -> 913 bytes ...g_template_retrieve_params.cpython-312.pyc | Bin 0 -> 721 bytes ..._template_unarchive_params.cpython-312.pyc | Bin 0 -> 678 bytes .../_invoice_retrieve_params.cpython-312.pyc | Bin 0 -> 640 bytes .../_invoice_search_params.cpython-312.pyc | Bin 0 -> 757 bytes ...nvoice_send_invoice_params.cpython-312.pyc | Bin 0 -> 647 bytes ...nvoice_update_lines_params.cpython-312.pyc | Bin 0 -> 5087 bytes .../_invoice_update_params.cpython-312.pyc | Bin 0 -> 14741 bytes ...nvoice_void_invoice_params.cpython-312.pyc | Bin 0 -> 647 bytes .../_mandate_retrieve_params.cpython-312.pyc | Bin 0 -> 640 bytes ...attempt_record_list_params.cpython-312.pyc | Bin 0 -> 801 bytes ...mpt_record_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes ...ails_line_item_list_params.cpython-312.pyc | Bin 0 -> 799 bytes ...ly_customer_balance_params.cpython-312.pyc | Bin 0 -> 774 bytes ...yment_intent_cancel_params.cpython-312.pyc | Bin 0 -> 807 bytes ...ment_intent_capture_params.cpython-312.pyc | Bin 0 -> 5583 bytes ...ment_intent_confirm_params.cpython-312.pyc | Bin 0 -> 56082 bytes ...yment_intent_create_params.cpython-312.pyc | Bin 0 -> 56697 bytes ...ement_authorization_params.cpython-312.pyc | Bin 0 -> 5715 bytes ..._details_line_items_params.cpython-312.pyc | Bin 0 -> 844 bytes ...payment_intent_list_params.cpython-312.pyc | Bin 0 -> 1294 bytes ...yment_intent_modify_params.cpython-312.pyc | Bin 0 -> 54874 bytes ...ent_intent_retrieve_params.cpython-312.pyc | Bin 0 -> 704 bytes ...yment_intent_search_params.cpython-312.pyc | Bin 0 -> 770 bytes ...yment_intent_update_params.cpython-312.pyc | Bin 0 -> 54809 bytes ...erify_microdeposits_params.cpython-312.pyc | Bin 0 -> 789 bytes ...payment_link_create_params.cpython-312.pyc | Bin 0 -> 18720 bytes ...link_line_item_list_params.cpython-312.pyc | Bin 0 -> 767 bytes ...ink_list_line_items_params.cpython-312.pyc | Bin 0 -> 812 bytes .../_payment_link_list_params.cpython-312.pyc | Bin 0 -> 842 bytes ...payment_link_modify_params.cpython-312.pyc | Bin 0 -> 15145 bytes ...yment_link_retrieve_params.cpython-312.pyc | Bin 0 -> 649 bytes ...payment_link_update_params.cpython-312.pyc | Bin 0 -> 15082 bytes ...yment_method_attach_params.cpython-312.pyc | Bin 0 -> 683 bytes ...onfiguration_create_params.cpython-312.pyc | Bin 0 -> 27948 bytes ..._configuration_list_params.cpython-312.pyc | Bin 0 -> 908 bytes ...onfiguration_modify_params.cpython-312.pyc | Bin 0 -> 27954 bytes ...figuration_retrieve_params.cpython-312.pyc | Bin 0 -> 680 bytes ...onfiguration_update_params.cpython-312.pyc | Bin 0 -> 27891 bytes ...yment_method_create_params.cpython-312.pyc | Bin 0 -> 17376 bytes ...yment_method_detach_params.cpython-312.pyc | Bin 0 -> 649 bytes ...ethod_domain_create_params.cpython-312.pyc | Bin 0 -> 751 bytes ..._method_domain_list_params.cpython-312.pyc | Bin 0 -> 909 bytes ...ethod_domain_modify_params.cpython-312.pyc | Bin 0 -> 713 bytes ...hod_domain_retrieve_params.cpython-312.pyc | Bin 0 -> 666 bytes ...ethod_domain_update_params.cpython-312.pyc | Bin 0 -> 670 bytes ...hod_domain_validate_params.cpython-312.pyc | Bin 0 -> 666 bytes ...payment_method_list_params.cpython-312.pyc | Bin 0 -> 1412 bytes ...yment_method_modify_params.cpython-312.pyc | Bin 0 -> 3024 bytes ...ent_method_retrieve_params.cpython-312.pyc | Bin 0 -> 653 bytes ...yment_method_update_params.cpython-312.pyc | Bin 0 -> 2961 bytes ...nt_attempt_canceled_params.cpython-312.pyc | Bin 0 -> 842 bytes ...ment_attempt_failed_params.cpython-312.pyc | Bin 0 -> 835 bytes ..._attempt_guaranteed_params.cpython-312.pyc | Bin 0 -> 848 bytes ...tempt_informational_params.cpython-312.pyc | Bin 0 -> 2348 bytes ...ort_payment_attempt_params.cpython-312.pyc | Bin 0 -> 4086 bytes ...cord_report_payment_params.cpython-312.pyc | Bin 0 -> 5431 bytes ...ecord_report_refund_params.cpython-312.pyc | Bin 0 -> 2078 bytes ...ent_record_retrieve_params.cpython-312.pyc | Bin 0 -> 653 bytes .../_payout_cancel_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_payout_create_params.cpython-312.pyc | Bin 0 -> 1184 bytes .../_payout_list_params.cpython-312.pyc | Bin 0 -> 1647 bytes .../_payout_modify_params.cpython-312.pyc | Bin 0 -> 742 bytes .../_payout_retrieve_params.cpython-312.pyc | Bin 0 -> 638 bytes .../_payout_reverse_params.cpython-312.pyc | Bin 0 -> 720 bytes .../_payout_update_params.cpython-312.pyc | Bin 0 -> 702 bytes .../_plan_create_params.cpython-312.pyc | Bin 0 -> 2978 bytes .../_plan_delete_params.cpython-312.pyc | Bin 0 -> 459 bytes .../_plan_list_params.cpython-312.pyc | Bin 0 -> 1306 bytes .../_plan_modify_params.cpython-312.pyc | Bin 0 -> 939 bytes .../_plan_retrieve_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_plan_update_params.cpython-312.pyc | Bin 0 -> 899 bytes .../_price_create_params.cpython-312.pyc | Bin 0 -> 4944 bytes .../_price_list_params.cpython-312.pyc | Bin 0 -> 1961 bytes .../_price_modify_params.cpython-312.pyc | Bin 0 -> 2541 bytes .../_price_retrieve_params.cpython-312.pyc | Bin 0 -> 636 bytes .../_price_search_params.cpython-312.pyc | Bin 0 -> 753 bytes .../_price_update_params.cpython-312.pyc | Bin 0 -> 2478 bytes ...duct_create_feature_params.cpython-312.pyc | Bin 0 -> 697 bytes .../_product_create_params.cpython-312.pyc | Bin 0 -> 4796 bytes ...duct_delete_feature_params.cpython-312.pyc | Bin 0 -> 480 bytes .../_product_delete_params.cpython-312.pyc | Bin 0 -> 465 bytes ...duct_feature_create_params.cpython-312.pyc | Bin 0 -> 654 bytes ...duct_feature_delete_params.cpython-312.pyc | Bin 0 -> 469 bytes ...roduct_feature_list_params.cpython-312.pyc | Bin 0 -> 755 bytes ...ct_feature_retrieve_params.cpython-312.pyc | Bin 0 -> 612 bytes ...oduct_list_features_params.cpython-312.pyc | Bin 0 -> 800 bytes .../_product_list_params.cpython-312.pyc | Bin 0 -> 1510 bytes .../_product_modify_params.cpython-312.pyc | Bin 0 -> 2051 bytes ...ct_retrieve_feature_params.cpython-312.pyc | Bin 0 -> 655 bytes .../_product_retrieve_params.cpython-312.pyc | Bin 0 -> 640 bytes .../_product_search_params.cpython-312.pyc | Bin 0 -> 757 bytes .../_product_update_params.cpython-312.pyc | Bin 0 -> 1988 bytes ...omotion_code_create_params.cpython-312.pyc | Bin 0 -> 2118 bytes ...promotion_code_list_params.cpython-312.pyc | Bin 0 -> 1431 bytes ...omotion_code_modify_params.cpython-312.pyc | Bin 0 -> 1433 bytes ...otion_code_retrieve_params.cpython-312.pyc | Bin 0 -> 653 bytes ...omotion_code_update_params.cpython-312.pyc | Bin 0 -> 1370 bytes .../_quote_accept_params.cpython-312.pyc | Bin 0 -> 632 bytes .../_quote_cancel_params.cpython-312.pyc | Bin 0 -> 632 bytes ...ont_line_items_list_params.cpython-312.pyc | Bin 0 -> 788 bytes .../_quote_create_params.cpython-312.pyc | Bin 0 -> 6676 bytes ...uote_finalize_quote_params.cpython-312.pyc | Bin 0 -> 700 bytes ...uote_line_item_list_params.cpython-312.pyc | Bin 0 -> 754 bytes ..._upfront_line_items_params.cpython-312.pyc | Bin 0 -> 831 bytes ...ote_list_line_items_params.cpython-312.pyc | Bin 0 -> 799 bytes .../_quote_list_params.cpython-312.pyc | Bin 0 -> 987 bytes .../_quote_modify_params.cpython-312.pyc | Bin 0 -> 5678 bytes .../_quote_pdf_params.cpython-312.pyc | Bin 0 -> 626 bytes .../_quote_retrieve_params.cpython-312.pyc | Bin 0 -> 636 bytes .../_quote_update_params.cpython-312.pyc | Bin 0 -> 5615 bytes .../_refund_cancel_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_refund_create_params.cpython-312.pyc | Bin 0 -> 1334 bytes .../_refund_expire_params.cpython-312.pyc | Bin 0 -> 634 bytes .../_refund_list_params.cpython-312.pyc | Bin 0 -> 1315 bytes .../_refund_modify_params.cpython-312.pyc | Bin 0 -> 742 bytes .../_refund_retrieve_params.cpython-312.pyc | Bin 0 -> 638 bytes .../_refund_update_params.cpython-312.pyc | Bin 0 -> 702 bytes .../_review_approve_params.cpython-312.pyc | Bin 0 -> 636 bytes .../_review_list_params.cpython-312.pyc | Bin 0 -> 1219 bytes .../_review_retrieve_params.cpython-312.pyc | Bin 0 -> 638 bytes ..._setup_attempt_list_params.cpython-312.pyc | Bin 0 -> 1283 bytes ...setup_intent_cancel_params.cpython-312.pyc | Bin 0 -> 789 bytes ...etup_intent_confirm_params.cpython-312.pyc | Bin 0 -> 29244 bytes ...setup_intent_create_params.cpython-312.pyc | Bin 0 -> 30751 bytes .../_setup_intent_list_params.cpython-312.pyc | Bin 0 -> 1397 bytes ...setup_intent_modify_params.cpython-312.pyc | Bin 0 -> 28903 bytes ...tup_intent_retrieve_params.cpython-312.pyc | Bin 0 -> 700 bytes ...setup_intent_update_params.cpython-312.pyc | Bin 0 -> 28840 bytes ...erify_microdeposits_params.cpython-312.pyc | Bin 0 -> 785 bytes ...hipping_rate_create_params.cpython-312.pyc | Bin 0 -> 2623 bytes ..._shipping_rate_list_params.cpython-312.pyc | Bin 0 -> 1340 bytes ...hipping_rate_modify_params.cpython-312.pyc | Bin 0 -> 1586 bytes ...pping_rate_retrieve_params.cpython-312.pyc | Bin 0 -> 651 bytes ...hipping_rate_update_params.cpython-312.pyc | Bin 0 -> 1523 bytes .../_source_create_params.cpython-312.pyc | Bin 0 -> 6060 bytes .../_source_detach_params.cpython-312.pyc | Bin 0 -> 591 bytes ...source_transactions_params.cpython-312.pyc | Bin 0 -> 819 bytes .../_source_modify_params.cpython-312.pyc | Bin 0 -> 5046 bytes .../_source_retrieve_params.cpython-312.pyc | Bin 0 -> 689 bytes ...ce_transaction_list_params.cpython-312.pyc | Bin 0 -> 761 bytes .../_source_update_params.cpython-312.pyc | Bin 0 -> 4983 bytes .../_source_verify_params.cpython-312.pyc | Bin 0 -> 677 bytes ...subscription_cancel_params.cpython-312.pyc | Bin 0 -> 1315 bytes ...subscription_create_params.cpython-312.pyc | Bin 0 -> 17633 bytes ...ion_delete_discount_params.cpython-312.pyc | Bin 0 -> 492 bytes ...ription_item_create_params.cpython-312.pyc | Bin 0 -> 3065 bytes ...ription_item_delete_params.cpython-312.pyc | Bin 0 -> 806 bytes ...scription_item_list_params.cpython-312.pyc | Bin 0 -> 841 bytes ...ription_item_modify_params.cpython-312.pyc | Bin 0 -> 3087 bytes ...ption_item_retrieve_params.cpython-312.pyc | Bin 0 -> 659 bytes ...ription_item_update_params.cpython-312.pyc | Bin 0 -> 3024 bytes .../_subscription_list_params.cpython-312.pyc | Bin 0 -> 2742 bytes ...ubscription_migrate_params.cpython-312.pyc | Bin 0 -> 1314 bytes ...subscription_modify_params.cpython-312.pyc | Bin 0 -> 17543 bytes ...subscription_resume_params.cpython-312.pyc | Bin 0 -> 930 bytes ...bscription_retrieve_params.cpython-312.pyc | Bin 0 -> 650 bytes ...ion_schedule_cancel_params.cpython-312.pyc | Bin 0 -> 763 bytes ...ion_schedule_create_params.cpython-312.pyc | Bin 0 -> 12811 bytes ...ption_schedule_list_params.cpython-312.pyc | Bin 0 -> 2456 bytes ...ion_schedule_modify_params.cpython-312.pyc | Bin 0 -> 12098 bytes ...on_schedule_release_params.cpython-312.pyc | Bin 0 -> 729 bytes ...n_schedule_retrieve_params.cpython-312.pyc | Bin 0 -> 667 bytes ...ion_schedule_update_params.cpython-312.pyc | Bin 0 -> 12035 bytes ...subscription_search_params.cpython-312.pyc | Bin 0 -> 767 bytes ...subscription_update_params.cpython-312.pyc | Bin 0 -> 17480 bytes .../_tax_code_list_params.cpython-312.pyc | Bin 0 -> 784 bytes .../_tax_code_retrieve_params.cpython-312.pyc | Bin 0 -> 641 bytes .../_tax_id_create_params.cpython-312.pyc | Bin 0 -> 2065 bytes .../_tax_id_delete_params.cpython-312.pyc | Bin 0 -> 462 bytes .../_tax_id_list_params.cpython-312.pyc | Bin 0 -> 1218 bytes .../_tax_id_retrieve_params.cpython-312.pyc | Bin 0 -> 637 bytes .../_tax_rate_create_params.cpython-312.pyc | Bin 0 -> 1300 bytes .../_tax_rate_list_params.cpython-312.pyc | Bin 0 -> 1321 bytes .../_tax_rate_modify_params.cpython-312.pyc | Bin 0 -> 1238 bytes .../_tax_rate_retrieve_params.cpython-312.pyc | Bin 0 -> 641 bytes .../_tax_rate_update_params.cpython-312.pyc | Bin 0 -> 1198 bytes .../_token_create_params.cpython-312.pyc | Bin 0 -> 20305 bytes .../_token_retrieve_params.cpython-312.pyc | Bin 0 -> 636 bytes .../_topup_cancel_params.cpython-312.pyc | Bin 0 -> 632 bytes .../_topup_create_params.cpython-312.pyc | Bin 0 -> 1014 bytes .../_topup_list_params.cpython-312.pyc | Bin 0 -> 1653 bytes .../_topup_modify_params.cpython-312.pyc | Bin 0 -> 789 bytes .../_topup_retrieve_params.cpython-312.pyc | Bin 0 -> 636 bytes .../_topup_update_params.cpython-312.pyc | Bin 0 -> 749 bytes .../_transfer_create_params.cpython-312.pyc | Bin 0 -> 1111 bytes ...fer_create_reversal_params.cpython-312.pyc | Bin 0 -> 927 bytes .../_transfer_list_params.cpython-312.pyc | Bin 0 -> 1328 bytes ...sfer_list_reversals_params.cpython-312.pyc | Bin 0 -> 804 bytes .../_transfer_modify_params.cpython-312.pyc | Bin 0 -> 795 bytes ...fer_modify_reversal_params.cpython-312.pyc | Bin 0 -> 763 bytes .../_transfer_retrieve_params.cpython-312.pyc | Bin 0 -> 642 bytes ...r_retrieve_reversal_params.cpython-312.pyc | Bin 0 -> 659 bytes ...fer_reversal_create_params.cpython-312.pyc | Bin 0 -> 887 bytes ...nsfer_reversal_list_params.cpython-312.pyc | Bin 0 -> 759 bytes ...r_reversal_retrieve_params.cpython-312.pyc | Bin 0 -> 616 bytes ...fer_reversal_update_params.cpython-312.pyc | Bin 0 -> 723 bytes .../_transfer_update_params.cpython-312.pyc | Bin 0 -> 755 bytes ...ook_endpoint_create_params.cpython-312.pyc | Bin 0 -> 9609 bytes ...ook_endpoint_delete_params.cpython-312.pyc | Bin 0 -> 482 bytes ...bhook_endpoint_list_params.cpython-312.pyc | Bin 0 -> 800 bytes ...ook_endpoint_modify_params.cpython-312.pyc | Bin 0 -> 8054 bytes ...k_endpoint_retrieve_params.cpython-312.pyc | Bin 0 -> 657 bytes ...ook_endpoint_update_params.cpython-312.pyc | Bin 0 -> 8014 bytes .../params/_account_capability_list_params.py | 11 + .../_account_capability_retrieve_params.py | 11 + .../_account_capability_update_params.py | 17 + ..._account_create_external_account_params.py | 83 + .../_account_create_login_link_params.py | 12 + .../stripe/params/_account_create_params.py | 1980 ++ .../params/_account_create_person_params.py | 471 + ..._account_delete_external_account_params.py | 7 + .../stripe/params/_account_delete_params.py | 7 + .../params/_account_delete_person_params.py | 7 + ..._account_external_account_create_params.py | 82 + ..._account_external_account_delete_params.py | 7 + .../_account_external_account_list_params.py | 27 + ...ccount_external_account_retrieve_params.py | 11 + ..._account_external_account_update_params.py | 91 + .../params/_account_link_create_params.py | 49 + .../_account_list_capabilities_params.py | 12 + .../_account_list_external_accounts_params.py | 28 + .../stripe/params/_account_list_params.py | 47 + .../params/_account_list_persons_params.py | 55 + .../_account_login_link_create_params.py | 11 + .../_account_modify_capability_params.py | 18 + ..._account_modify_external_account_params.py | 92 + .../params/_account_modify_person_params.py | 471 + .../params/_account_person_create_params.py | 470 + .../params/_account_person_delete_params.py | 7 + .../params/_account_person_list_params.py | 54 + .../params/_account_person_retrieve_params.py | 11 + .../params/_account_person_update_params.py | 470 + .../stripe/params/_account_persons_params.py | 55 + .../stripe/params/_account_reject_params.py | 16 + .../_account_retrieve_capability_params.py | 12 + .../_account_retrieve_current_params.py | 11 + ...ccount_retrieve_external_account_params.py | 12 + .../stripe/params/_account_retrieve_params.py | 11 + .../params/_account_retrieve_person_params.py | 12 + .../params/_account_session_create_params.py | 638 + .../stripe/params/_account_update_params.py | 1926 ++ .../params/_apple_pay_domain_create_params.py | 13 + .../params/_apple_pay_domain_delete_params.py | 7 + .../params/_apple_pay_domain_list_params.py | 25 + .../_apple_pay_domain_retrieve_params.py | 12 + .../_application_fee_create_refund_params.py | 20 + .../params/_application_fee_list_params.py | 51 + .../_application_fee_list_refunds_params.py | 24 + .../_application_fee_modify_refund_params.py | 16 + .../_application_fee_refund_create_params.py | 19 + .../_application_fee_refund_list_params.py | 23 + .../params/_application_fee_refund_params.py | 20 + ..._application_fee_refund_retrieve_params.py | 11 + .../_application_fee_refund_update_params.py | 15 + .../_application_fee_retrieve_params.py | 12 + ..._application_fee_retrieve_refund_params.py | 12 + .../stripe/params/_balance_retrieve_params.py | 12 + .../params/_balance_settings_modify_params.py | 74 + .../_balance_settings_retrieve_params.py | 12 + .../params/_balance_settings_update_params.py | 73 + .../_balance_transaction_list_params.py | 63 + .../_balance_transaction_retrieve_params.py | 12 + .../params/_bank_account_delete_params.py | 7 + .../stripe/params/_card_delete_params.py | 7 + .../stripe/params/_charge_capture_params.py | 53 + .../stripe/params/_charge_create_params.py | 159 + .../stripe/params/_charge_list_params.py | 59 + .../params/_charge_list_refunds_params.py | 24 + .../stripe/params/_charge_modify_params.py | 97 + .../stripe/params/_charge_retrieve_params.py | 12 + .../params/_charge_retrieve_refund_params.py | 12 + .../stripe/params/_charge_search_params.py | 24 + .../stripe/params/_charge_update_params.py | 96 + .../_confirmation_token_create_params.py | 926 + .../_confirmation_token_retrieve_params.py | 12 + .../params/_country_spec_list_params.py | 24 + .../params/_country_spec_retrieve_params.py | 12 + .../stripe/params/_coupon_create_params.py | 76 + .../stripe/params/_coupon_delete_params.py | 7 + .../stripe/params/_coupon_list_params.py | 47 + .../stripe/params/_coupon_modify_params.py | 33 + .../stripe/params/_coupon_retrieve_params.py | 12 + .../stripe/params/_coupon_update_params.py | 32 + .../params/_credit_note_create_params.py | 163 + .../_credit_note_line_item_list_params.py | 23 + .../params/_credit_note_list_lines_params.py | 24 + .../stripe/params/_credit_note_list_params.py | 55 + .../params/_credit_note_modify_params.py | 20 + .../_credit_note_preview_lines_list_params.py | 174 + .../_credit_note_preview_lines_params.py | 175 + .../params/_credit_note_preview_params.py | 163 + .../params/_credit_note_retrieve_params.py | 12 + .../params/_credit_note_update_params.py | 19 + .../_credit_note_void_credit_note_params.py | 12 + ...tomer_balance_transaction_create_params.py | 27 + ...ustomer_balance_transaction_list_params.py | 23 + ...mer_balance_transaction_retrieve_params.py | 11 + ...tomer_balance_transaction_update_params.py | 19 + .../_customer_cash_balance_retrieve_params.py | 11 + ...er_cash_balance_transaction_list_params.py | 23 + ...ash_balance_transaction_retrieve_params.py | 11 + .../_customer_cash_balance_update_params.py | 24 + ...tomer_create_balance_transaction_params.py | 28 + ...omer_create_funding_instructions_params.py | 60 + .../stripe/params/_customer_create_params.py | 357 + .../params/_customer_create_source_params.py | 21 + .../params/_customer_create_tax_id_params.py | 131 + .../_customer_delete_discount_params.py | 7 + .../stripe/params/_customer_delete_params.py | 7 + .../params/_customer_delete_source_params.py | 12 + .../params/_customer_delete_tax_id_params.py | 7 + .../_customer_fund_cash_balance_params.py | 24 + ...omer_funding_instructions_create_params.py | 59 + ...stomer_list_balance_transactions_params.py | 24 + ...r_list_cash_balance_transactions_params.py | 24 + .../stripe/params/_customer_list_params.py | 55 + .../_customer_list_payment_methods_params.py | 85 + .../params/_customer_list_sources_params.py | 28 + .../params/_customer_list_tax_ids_params.py | 24 + ...tomer_modify_balance_transaction_params.py | 20 + .../_customer_modify_cash_balance_params.py | 25 + .../stripe/params/_customer_modify_params.py | 234 + .../params/_customer_modify_source_params.py | 107 + .../_customer_payment_method_list_params.py | 84 + ...customer_payment_method_retrieve_params.py | 11 + .../_customer_payment_source_create_params.py | 20 + .../_customer_payment_source_delete_params.py | 11 + .../_customer_payment_source_list_params.py | 27 + ...customer_payment_source_retrieve_params.py | 11 + .../_customer_payment_source_update_params.py | 106 + .../_customer_payment_source_verify_params.py | 15 + ...mer_retrieve_balance_transaction_params.py | 12 + .../_customer_retrieve_cash_balance_params.py | 12 + ...etrieve_cash_balance_transaction_params.py | 12 + .../params/_customer_retrieve_params.py | 12 + ...customer_retrieve_payment_method_params.py | 12 + .../_customer_retrieve_source_params.py | 12 + .../_customer_retrieve_tax_id_params.py | 12 + .../stripe/params/_customer_search_params.py | 24 + .../params/_customer_session_create_params.py | 197 + .../params/_customer_tax_id_create_params.py | 130 + .../params/_customer_tax_id_delete_params.py | 7 + .../params/_customer_tax_id_list_params.py | 23 + .../_customer_tax_id_retrieve_params.py | 11 + .../stripe/params/_customer_update_params.py | 233 + .../stripe/params/_dispute_close_params.py | 12 + .../stripe/params/_dispute_list_params.py | 55 + .../stripe/params/_dispute_modify_params.py | 318 + .../stripe/params/_dispute_retrieve_params.py | 12 + .../stripe/params/_dispute_update_params.py | 317 + .../params/_ephemeral_key_create_params.py | 27 + .../params/_ephemeral_key_delete_params.py | 12 + .../stripe/params/_event_list_params.py | 59 + .../stripe/params/_event_retrieve_params.py | 12 + .../params/_exchange_rate_list_params.py | 24 + .../params/_exchange_rate_retrieve_params.py | 12 + .../stripe/params/_file_create_params.py | 53 + .../stripe/params/_file_link_create_params.py | 24 + .../stripe/params/_file_link_list_params.py | 55 + .../stripe/params/_file_link_modify_params.py | 20 + .../params/_file_link_retrieve_params.py | 12 + .../stripe/params/_file_link_update_params.py | 19 + .../stripe/params/_file_list_params.py | 73 + .../stripe/params/_file_retrieve_params.py | 12 + .../params/_invoice_add_lines_params.py | 259 + .../params/_invoice_attach_payment_params.py | 20 + .../stripe/params/_invoice_create_params.py | 667 + .../params/_invoice_create_preview_params.py | 1148 ++ .../stripe/params/_invoice_delete_params.py | 7 + .../_invoice_finalize_invoice_params.py | 16 + .../params/_invoice_item_create_params.py | 136 + .../params/_invoice_item_delete_params.py | 7 + .../params/_invoice_item_list_params.py | 59 + .../params/_invoice_item_modify_params.py | 120 + .../params/_invoice_item_retrieve_params.py | 12 + .../params/_invoice_item_update_params.py | 119 + .../params/_invoice_line_item_list_params.py | 23 + .../_invoice_line_item_update_params.py | 245 + .../params/_invoice_list_lines_params.py | 24 + .../stripe/params/_invoice_list_params.py | 87 + .../_invoice_mark_uncollectible_params.py | 12 + .../stripe/params/_invoice_modify_params.py | 638 + .../stripe/params/_invoice_pay_params.py | 38 + .../params/_invoice_payment_list_params.py | 51 + .../_invoice_payment_retrieve_params.py | 12 + .../params/_invoice_remove_lines_params.py | 31 + ...voice_rendering_template_archive_params.py | 12 + ..._invoice_rendering_template_list_params.py | 25 + ...oice_rendering_template_retrieve_params.py | 13 + ...ice_rendering_template_unarchive_params.py | 12 + .../stripe/params/_invoice_retrieve_params.py | 12 + .../stripe/params/_invoice_search_params.py | 24 + .../params/_invoice_send_invoice_params.py | 12 + .../params/_invoice_update_lines_params.py | 261 + .../stripe/params/_invoice_update_params.py | 637 + .../params/_invoice_void_invoice_params.py | 12 + .../stripe/params/_mandate_retrieve_params.py | 12 + .../_payment_attempt_record_list_params.py | 24 + ..._payment_attempt_record_retrieve_params.py | 12 + ...nt_amount_details_line_item_list_params.py | 23 + ...nt_intent_apply_customer_balance_params.py | 24 + .../params/_payment_intent_cancel_params.py | 20 + .../params/_payment_intent_capture_params.py | 263 + .../params/_payment_intent_confirm_params.py | 3113 ++++ .../params/_payment_intent_create_params.py | 3252 ++++ ...t_intent_increment_authorization_params.py | 271 + ...t_list_amount_details_line_items_params.py | 24 + .../params/_payment_intent_list_params.py | 51 + .../params/_payment_intent_modify_params.py | 3070 ++++ .../params/_payment_intent_retrieve_params.py | 16 + .../params/_payment_intent_search_params.py | 24 + .../params/_payment_intent_update_params.py | 3069 ++++ ...ment_intent_verify_microdeposits_params.py | 20 + .../params/_payment_link_create_params.py | 1092 ++ .../_payment_link_line_item_list_params.py | 23 + .../_payment_link_list_line_items_params.py | 24 + .../params/_payment_link_list_params.py | 28 + .../params/_payment_link_modify_params.py | 843 + .../params/_payment_link_retrieve_params.py | 12 + .../params/_payment_link_update_params.py | 842 + .../params/_payment_method_attach_params.py | 16 + ...ment_method_configuration_create_params.py | 1198 ++ ...ayment_method_configuration_list_params.py | 28 + ...ment_method_configuration_modify_params.py | 1198 ++ ...nt_method_configuration_retrieve_params.py | 12 + ...ment_method_configuration_update_params.py | 1197 ++ .../params/_payment_method_create_params.py | 806 + .../params/_payment_method_detach_params.py | 12 + .../_payment_method_domain_create_params.py | 20 + .../_payment_method_domain_list_params.py | 32 + .../_payment_method_domain_modify_params.py | 16 + .../_payment_method_domain_retrieve_params.py | 12 + .../_payment_method_domain_update_params.py | 15 + .../_payment_method_domain_validate_params.py | 12 + .../params/_payment_method_list_params.py | 85 + .../params/_payment_method_modify_params.py | 119 + .../params/_payment_method_retrieve_params.py | 12 + .../params/_payment_method_update_params.py | 118 + ..._report_payment_attempt_canceled_params.py | 17 + ...rd_report_payment_attempt_failed_params.py | 17 + ...eport_payment_attempt_guaranteed_params.py | 17 + ...rt_payment_attempt_informational_params.py | 101 + ...nt_record_report_payment_attempt_params.py | 196 + .../_payment_record_report_payment_params.py | 262 + .../_payment_record_report_refund_params.py | 74 + .../params/_payment_record_retrieve_params.py | 12 + .../stripe/params/_payout_cancel_params.py | 12 + .../stripe/params/_payout_create_params.py | 48 + .../stripe/params/_payout_list_params.py | 78 + .../stripe/params/_payout_modify_params.py | 16 + .../stripe/params/_payout_retrieve_params.py | 12 + .../stripe/params/_payout_reverse_params.py | 16 + .../stripe/params/_payout_update_params.py | 15 + .../stripe/params/_plan_create_params.py | 144 + .../stripe/params/_plan_delete_params.py | 7 + .../stripe/params/_plan_list_params.py | 55 + .../stripe/params/_plan_modify_params.py | 32 + .../stripe/params/_plan_retrieve_params.py | 12 + .../stripe/params/_plan_update_params.py | 31 + .../stripe/params/_price_create_params.py | 262 + .../stripe/params/_price_list_params.py | 86 + .../stripe/params/_price_modify_params.py | 109 + .../stripe/params/_price_retrieve_params.py | 12 + .../stripe/params/_price_search_params.py | 24 + .../stripe/params/_price_update_params.py | 108 + .../params/_product_create_feature_params.py | 16 + .../stripe/params/_product_create_params.py | 243 + .../params/_product_delete_feature_params.py | 7 + .../stripe/params/_product_delete_params.py | 7 + .../params/_product_feature_create_params.py | 15 + .../params/_product_feature_delete_params.py | 7 + .../params/_product_feature_list_params.py | 23 + .../_product_feature_retrieve_params.py | 11 + .../params/_product_list_features_params.py | 24 + .../stripe/params/_product_list_params.py | 67 + .../stripe/params/_product_modify_params.py | 97 + .../_product_retrieve_feature_params.py | 12 + .../stripe/params/_product_retrieve_params.py | 12 + .../stripe/params/_product_search_params.py | 24 + .../stripe/params/_product_update_params.py | 96 + .../params/_promotion_code_create_params.py | 85 + .../params/_promotion_code_list_params.py | 63 + .../params/_promotion_code_modify_params.py | 40 + .../params/_promotion_code_retrieve_params.py | 12 + .../params/_promotion_code_update_params.py | 39 + .../stripe/params/_quote_accept_params.py | 12 + .../stripe/params/_quote_cancel_params.py | 12 + ...computed_upfront_line_items_list_params.py | 23 + .../stripe/params/_quote_create_params.py | 298 + .../params/_quote_finalize_quote_params.py | 16 + .../params/_quote_line_item_list_params.py | 23 + ...list_computed_upfront_line_items_params.py | 24 + .../params/_quote_list_line_items_params.py | 24 + .../stripe/params/_quote_list_params.py | 36 + .../stripe/params/_quote_modify_params.py | 259 + .../stripe/params/_quote_pdf_params.py | 12 + .../stripe/params/_quote_retrieve_params.py | 12 + .../stripe/params/_quote_update_params.py | 258 + .../stripe/params/_refund_cancel_params.py | 12 + .../stripe/params/_refund_create_params.py | 57 + .../stripe/params/_refund_expire_params.py | 12 + .../stripe/params/_refund_list_params.py | 55 + .../stripe/params/_refund_modify_params.py | 16 + .../stripe/params/_refund_retrieve_params.py | 12 + .../stripe/params/_refund_update_params.py | 15 + .../stripe/params/_review_approve_params.py | 12 + .../stripe/params/_review_list_params.py | 47 + .../stripe/params/_review_retrieve_params.py | 12 + .../params/_setup_attempt_list_params.py | 54 + .../params/_setup_intent_cancel_params.py | 18 + .../params/_setup_intent_confirm_params.py | 1418 ++ .../params/_setup_intent_create_params.py | 1544 ++ .../params/_setup_intent_list_params.py | 61 + .../params/_setup_intent_modify_params.py | 1382 ++ .../params/_setup_intent_retrieve_params.py | 16 + .../params/_setup_intent_update_params.py | 1381 ++ ...etup_intent_verify_microdeposits_params.py | 20 + .../params/_shipping_rate_create_params.py | 101 + .../params/_shipping_rate_list_params.py | 55 + .../params/_shipping_rate_modify_params.py | 48 + .../params/_shipping_rate_retrieve_params.py | 12 + .../params/_shipping_rate_update_params.py | 47 + .../stripe/params/_source_create_params.py | 282 + .../stripe/params/_source_detach_params.py | 11 + ..._source_list_source_transactions_params.py | 24 + .../stripe/params/_source_modify_params.py | 232 + .../stripe/params/_source_retrieve_params.py | 16 + .../params/_source_transaction_list_params.py | 23 + .../stripe/params/_source_update_params.py | 231 + .../stripe/params/_source_verify_params.py | 16 + .../params/_subscription_cancel_params.py | 39 + .../params/_subscription_create_params.py | 780 + .../_subscription_delete_discount_params.py | 7 + .../_subscription_item_create_params.py | 139 + .../_subscription_item_delete_params.py | 21 + .../params/_subscription_item_list_params.py | 28 + .../_subscription_item_modify_params.py | 139 + .../_subscription_item_retrieve_params.py | 12 + .../_subscription_item_update_params.py | 138 + .../params/_subscription_list_params.py | 147 + .../params/_subscription_migrate_params.py | 34 + .../params/_subscription_modify_params.py | 765 + .../params/_subscription_resume_params.py | 26 + .../params/_subscription_retrieve_params.py | 12 + .../_subscription_schedule_cancel_params.py | 20 + .../_subscription_schedule_create_params.py | 615 + .../_subscription_schedule_list_params.py | 124 + .../_subscription_schedule_modify_params.py | 589 + .../_subscription_schedule_release_params.py | 16 + .../_subscription_schedule_retrieve_params.py | 12 + .../_subscription_schedule_update_params.py | 588 + .../params/_subscription_search_params.py | 24 + .../params/_subscription_update_params.py | 764 + .../stripe/params/_tax_code_list_params.py | 24 + .../params/_tax_code_retrieve_params.py | 12 + .../stripe/params/_tax_id_create_params.py | 150 + .../stripe/params/_tax_id_delete_params.py | 7 + .../stripe/params/_tax_id_list_params.py | 43 + .../stripe/params/_tax_id_retrieve_params.py | 12 + .../stripe/params/_tax_rate_create_params.py | 69 + .../stripe/params/_tax_rate_list_params.py | 55 + .../stripe/params/_tax_rate_modify_params.py | 61 + .../params/_tax_rate_retrieve_params.py | 12 + .../stripe/params/_tax_rate_update_params.py | 60 + .../stripe/params/_token_create_params.py | 1200 ++ .../stripe/params/_token_retrieve_params.py | 12 + .../stripe/params/_topup_cancel_params.py | 12 + .../stripe/params/_topup_create_params.py | 40 + .../stripe/params/_topup_list_params.py | 74 + .../stripe/params/_topup_modify_params.py | 20 + .../stripe/params/_topup_retrieve_params.py | 12 + .../stripe/params/_topup_update_params.py | 19 + .../stripe/params/_transfer_create_params.py | 44 + .../_transfer_create_reversal_params.py | 28 + .../stripe/params/_transfer_list_params.py | 55 + .../params/_transfer_list_reversals_params.py | 24 + .../stripe/params/_transfer_modify_params.py | 20 + .../_transfer_modify_reversal_params.py | 16 + .../params/_transfer_retrieve_params.py | 12 + .../_transfer_retrieve_reversal_params.py | 12 + .../_transfer_reversal_create_params.py | 27 + .../params/_transfer_reversal_list_params.py | 23 + .../_transfer_reversal_retrieve_params.py | 11 + .../_transfer_reversal_update_params.py | 15 + .../stripe/params/_transfer_update_params.py | 19 + .../params/_webhook_endpoint_create_params.py | 411 + .../params/_webhook_endpoint_delete_params.py | 7 + .../params/_webhook_endpoint_list_params.py | 24 + .../params/_webhook_endpoint_modify_params.py | 289 + .../_webhook_endpoint_retrieve_params.py | 12 + .../params/_webhook_endpoint_update_params.py | 288 + .../stripe/params/apps/__init__.py | 58 + .../apps/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1519 bytes .../_secret_create_params.cpython-312.pyc | Bin 0 -> 1120 bytes ...secret_delete_where_params.cpython-312.pyc | Bin 0 -> 1050 bytes .../_secret_find_params.cpython-312.pyc | Bin 0 -> 1028 bytes .../_secret_list_params.cpython-312.pyc | Bin 0 -> 1149 bytes .../params/apps/_secret_create_params.py | 39 + .../apps/_secret_delete_where_params.py | 31 + .../stripe/params/apps/_secret_find_params.py | 31 + .../stripe/params/apps/_secret_list_params.py | 39 + .../stripe/params/billing/__init__.py | 266 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 6704 bytes .../_alert_activate_params.cpython-312.pyc | Bin 0 -> 644 bytes .../_alert_archive_params.cpython-312.pyc | Bin 0 -> 642 bytes .../_alert_create_params.cpython-312.pyc | Bin 0 -> 1497 bytes .../_alert_deactivate_params.cpython-312.pyc | Bin 0 -> 648 bytes .../_alert_list_params.cpython-312.pyc | Bin 0 -> 930 bytes .../_alert_retrieve_params.cpython-312.pyc | Bin 0 -> 644 bytes ...ce_summary_retrieve_params.cpython-312.pyc | Bin 0 -> 1766 bytes ...ce_transaction_list_params.cpython-312.pyc | Bin 0 -> 911 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 684 bytes ...credit_grant_create_params.cpython-312.pyc | Bin 0 -> 2524 bytes ...credit_grant_expire_params.cpython-312.pyc | Bin 0 -> 653 bytes .../_credit_grant_list_params.cpython-312.pyc | Bin 0 -> 846 bytes ...credit_grant_modify_params.cpython-312.pyc | Bin 0 -> 821 bytes ...edit_grant_retrieve_params.cpython-312.pyc | Bin 0 -> 657 bytes ...credit_grant_update_params.cpython-312.pyc | Bin 0 -> 781 bytes ...it_grant_void_grant_params.cpython-312.pyc | Bin 0 -> 660 bytes .../_meter_create_params.cpython-312.pyc | Bin 0 -> 1759 bytes .../_meter_deactivate_params.cpython-312.pyc | Bin 0 -> 648 bytes ...t_adjustment_create_params.cpython-312.pyc | Bin 0 -> 1090 bytes ..._meter_event_create_params.cpython-312.pyc | Bin 0 -> 859 bytes ..._event_summary_list_params.cpython-312.pyc | Bin 0 -> 983 bytes ...ist_event_summaries_params.cpython-312.pyc | Bin 0 -> 1027 bytes .../_meter_list_params.cpython-312.pyc | Bin 0 -> 886 bytes .../_meter_modify_params.cpython-312.pyc | Bin 0 -> 690 bytes .../_meter_reactivate_params.cpython-312.pyc | Bin 0 -> 648 bytes .../_meter_retrieve_params.cpython-312.pyc | Bin 0 -> 644 bytes .../_meter_update_params.cpython-312.pyc | Bin 0 -> 647 bytes .../params/billing/_alert_activate_params.py | 12 + .../params/billing/_alert_archive_params.py | 12 + .../params/billing/_alert_create_params.py | 54 + .../billing/_alert_deactivate_params.py | 12 + .../params/billing/_alert_list_params.py | 32 + .../params/billing/_alert_retrieve_params.py | 12 + ..._credit_balance_summary_retrieve_params.py | 59 + ..._credit_balance_transaction_list_params.py | 32 + ...dit_balance_transaction_retrieve_params.py | 12 + .../billing/_credit_grant_create_params.py | 97 + .../billing/_credit_grant_expire_params.py | 12 + .../billing/_credit_grant_list_params.py | 28 + .../billing/_credit_grant_modify_params.py | 20 + .../billing/_credit_grant_retrieve_params.py | 12 + .../billing/_credit_grant_update_params.py | 19 + .../_credit_grant_void_grant_params.py | 12 + .../params/billing/_meter_create_params.py | 61 + .../billing/_meter_deactivate_params.py | 12 + .../_meter_event_adjustment_create_params.py | 31 + .../billing/_meter_event_create_params.py | 28 + .../_meter_event_summary_list_params.py | 39 + .../_meter_list_event_summaries_params.py | 40 + .../params/billing/_meter_list_params.py | 28 + .../params/billing/_meter_modify_params.py | 16 + .../billing/_meter_reactivate_params.py | 12 + .../params/billing/_meter_retrieve_params.py | 12 + .../params/billing/_meter_update_params.py | 15 + .../stripe/params/billing_portal/__init__.py | 317 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 6650 bytes ...onfiguration_create_params.cpython-312.pyc | Bin 0 -> 6117 bytes ..._configuration_list_params.cpython-312.pyc | Bin 0 -> 908 bytes ...onfiguration_modify_params.cpython-312.pyc | Bin 0 -> 6195 bytes ...figuration_retrieve_params.cpython-312.pyc | Bin 0 -> 667 bytes ...onfiguration_update_params.cpython-312.pyc | Bin 0 -> 6132 bytes .../_session_create_params.cpython-312.pyc | Bin 0 -> 4655 bytes .../_configuration_create_params.py | 263 + .../_configuration_list_params.py | 32 + .../_configuration_modify_params.py | 255 + .../_configuration_retrieve_params.py | 12 + .../_configuration_update_params.py | 254 + .../billing_portal/_session_create_params.py | 236 + .../stripe/params/checkout/__init__.py | 796 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 14715 bytes .../_session_create_params.cpython-312.pyc | Bin 0 -> 47348 bytes .../_session_expire_params.cpython-312.pyc | Bin 0 -> 645 bytes ...sion_line_item_list_params.cpython-312.pyc | Bin 0 -> 767 bytes ...ion_list_line_items_params.cpython-312.pyc | Bin 0 -> 812 bytes .../_session_list_params.cpython-312.pyc | Bin 0 -> 1816 bytes .../_session_modify_params.cpython-312.pyc | Bin 0 -> 4487 bytes .../_session_retrieve_params.cpython-312.pyc | Bin 0 -> 649 bytes .../_session_update_params.cpython-312.pyc | Bin 0 -> 4424 bytes .../params/checkout/_session_create_params.py | 2890 +++ .../params/checkout/_session_expire_params.py | 12 + .../_session_line_item_list_params.py | 23 + .../_session_list_line_items_params.py | 24 + .../params/checkout/_session_list_params.py | 78 + .../params/checkout/_session_modify_params.py | 199 + .../checkout/_session_retrieve_params.py | 12 + .../params/checkout/_session_update_params.py | 198 + .../stripe/params/climate/__init__.py | 92 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2408 bytes .../_order_cancel_params.cpython-312.pyc | Bin 0 -> 640 bytes .../_order_create_params.cpython-312.pyc | Bin 0 -> 1195 bytes .../_order_list_params.cpython-312.pyc | Bin 0 -> 787 bytes .../_order_modify_params.cpython-312.pyc | Bin 0 -> 1137 bytes .../_order_retrieve_params.cpython-312.pyc | Bin 0 -> 644 bytes .../_order_update_params.cpython-312.pyc | Bin 0 -> 1074 bytes .../_product_list_params.cpython-312.pyc | Bin 0 -> 791 bytes .../_product_retrieve_params.cpython-312.pyc | Bin 0 -> 648 bytes .../_supplier_list_params.cpython-312.pyc | Bin 0 -> 793 bytes .../_supplier_retrieve_params.cpython-312.pyc | Bin 0 -> 650 bytes .../params/climate/_order_cancel_params.py | 12 + .../params/climate/_order_create_params.py | 43 + .../params/climate/_order_list_params.py | 24 + .../params/climate/_order_modify_params.py | 27 + .../params/climate/_order_retrieve_params.py | 12 + .../params/climate/_order_update_params.py | 26 + .../params/climate/_product_list_params.py | 24 + .../climate/_product_retrieve_params.py | 12 + .../params/climate/_supplier_list_params.py | 24 + .../climate/_supplier_retrieve_params.py | 12 + .../stripe/params/entitlements/__init__.py | 74 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1967 bytes ...ve_entitlement_list_params.cpython-312.pyc | Bin 0 -> 851 bytes ...ntitlement_retrieve_params.cpython-312.pyc | Bin 0 -> 674 bytes .../_feature_create_params.cpython-312.pyc | Bin 0 -> 799 bytes .../_feature_list_params.cpython-312.pyc | Bin 0 -> 896 bytes .../_feature_modify_params.cpython-312.pyc | Bin 0 -> 849 bytes .../_feature_retrieve_params.cpython-312.pyc | Bin 0 -> 653 bytes .../_feature_update_params.cpython-312.pyc | Bin 0 -> 809 bytes .../_active_entitlement_list_params.py | 28 + .../_active_entitlement_retrieve_params.py | 12 + .../entitlements/_feature_create_params.py | 24 + .../entitlements/_feature_list_params.py | 32 + .../entitlements/_feature_modify_params.py | 24 + .../entitlements/_feature_retrieve_params.py | 12 + .../entitlements/_feature_update_params.py | 23 + .../params/financial_connections/__init__.py | 141 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3811 bytes ..._account_disconnect_params.cpython-312.pyc | Bin 0 -> 666 bytes ...account_list_owners_params.cpython-312.pyc | Bin 0 -> 853 bytes .../_account_list_params.cpython-312.pyc | Bin 0 -> 1207 bytes ..._account_owner_list_params.cpython-312.pyc | Bin 0 -> 808 bytes ...unt_refresh_account_params.cpython-312.pyc | Bin 0 -> 792 bytes .../_account_refresh_params.cpython-312.pyc | Bin 0 -> 737 bytes .../_account_retrieve_params.cpython-312.pyc | Bin 0 -> 662 bytes .../_account_subscribe_params.cpython-312.pyc | Bin 0 -> 758 bytes ...account_unsubscribe_params.cpython-312.pyc | Bin 0 -> 762 bytes .../_session_create_params.cpython-312.pyc | Bin 0 -> 1806 bytes .../_session_retrieve_params.cpython-312.pyc | Bin 0 -> 662 bytes .../_transaction_list_params.cpython-312.pyc | Bin 0 -> 1596 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 670 bytes .../_account_disconnect_params.py | 12 + .../_account_list_owners_params.py | 28 + .../_account_list_params.py | 43 + .../_account_owner_list_params.py | 27 + .../_account_refresh_account_params.py | 16 + .../_account_refresh_params.py | 15 + .../_account_retrieve_params.py | 12 + .../_account_subscribe_params.py | 16 + .../_account_unsubscribe_params.py | 16 + .../_session_create_params.py | 74 + .../_session_retrieve_params.py | 12 + .../_transaction_list_params.py | 62 + .../_transaction_retrieve_params.py | 12 + .../stripe/params/forwarding/__init__.py | 61 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1397 bytes .../_request_create_params.cpython-312.pyc | Bin 0 -> 1571 bytes .../_request_list_params.cpython-312.pyc | Bin 0 -> 1209 bytes .../_request_retrieve_params.cpython-312.pyc | Bin 0 -> 651 bytes .../forwarding/_request_create_params.py | 62 + .../params/forwarding/_request_list_params.py | 47 + .../forwarding/_request_retrieve_params.py | 12 + .../stripe/params/identity/__init__.py | 148 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3546 bytes ...ication_report_list_params.cpython-312.pyc | Bin 0 -> 1496 bytes ...ion_report_retrieve_params.cpython-312.pyc | Bin 0 -> 672 bytes ...tion_session_cancel_params.cpython-312.pyc | Bin 0 -> 670 bytes ...tion_session_create_params.cpython-312.pyc | Bin 0 -> 2620 bytes ...cation_session_list_params.cpython-312.pyc | Bin 0 -> 1521 bytes ...tion_session_modify_params.cpython-312.pyc | Bin 0 -> 2085 bytes ...tion_session_redact_params.cpython-312.pyc | Bin 0 -> 670 bytes ...on_session_retrieve_params.cpython-312.pyc | Bin 0 -> 674 bytes ...tion_session_update_params.cpython-312.pyc | Bin 0 -> 2022 bytes .../_verification_report_list_params.py | 59 + .../_verification_report_retrieve_params.py | 12 + .../_verification_session_cancel_params.py | 12 + .../_verification_session_create_params.py | 102 + .../_verification_session_list_params.py | 58 + .../_verification_session_modify_params.py | 71 + .../_verification_session_redact_params.py | 12 + .../_verification_session_retrieve_params.py | 12 + .../_verification_session_update_params.py | 70 + .../stripe/params/issuing/__init__.py | 1171 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 24674 bytes ...thorization_approve_params.cpython-312.pyc | Bin 0 -> 815 bytes ...thorization_capture_params.cpython-312.pyc | Bin 0 -> 5985 bytes ...uthorization_create_params.cpython-312.pyc | Bin 0 -> 16221 bytes ...thorization_decline_params.cpython-312.pyc | Bin 0 -> 766 bytes ...uthorization_expire_params.cpython-312.pyc | Bin 0 -> 656 bytes ...ion_finalize_amount_params.cpython-312.pyc | Bin 0 -> 3740 bytes ...orization_increment_params.cpython-312.pyc | Bin 0 -> 776 bytes ..._authorization_list_params.cpython-312.pyc | Bin 0 -> 1466 bytes ...uthorization_modify_params.cpython-312.pyc | Bin 0 -> 764 bytes ...thorization_respond_params.cpython-312.pyc | Bin 0 -> 699 bytes ...horization_retrieve_params.cpython-312.pyc | Bin 0 -> 660 bytes ...thorization_reverse_params.cpython-312.pyc | Bin 0 -> 715 bytes ...uthorization_update_params.cpython-312.pyc | Bin 0 -> 724 bytes .../_card_create_params.cpython-312.pyc | Bin 0 -> 12600 bytes .../_card_deliver_card_params.cpython-312.pyc | Bin 0 -> 649 bytes .../_card_fail_card_params.cpython-312.pyc | Bin 0 -> 643 bytes .../_card_list_params.cpython-312.pyc | Bin 0 -> 1642 bytes .../_card_modify_params.cpython-312.pyc | Bin 0 -> 12165 bytes .../_card_retrieve_params.cpython-312.pyc | Bin 0 -> 642 bytes .../_card_return_card_params.cpython-312.pyc | Bin 0 -> 647 bytes .../_card_ship_card_params.cpython-312.pyc | Bin 0 -> 643 bytes .../_card_submit_card_params.cpython-312.pyc | Bin 0 -> 647 bytes .../_card_update_params.cpython-312.pyc | Bin 0 -> 12102 bytes .../_cardholder_create_params.cpython-312.pyc | Bin 0 -> 13355 bytes .../_cardholder_list_params.cpython-312.pyc | Bin 0 -> 1525 bytes .../_cardholder_modify_params.cpython-312.pyc | Bin 0 -> 13271 bytes ...cardholder_retrieve_params.cpython-312.pyc | Bin 0 -> 654 bytes .../_cardholder_update_params.cpython-312.pyc | Bin 0 -> 13208 bytes .../_dispute_create_params.cpython-312.pyc | Bin 0 -> 5861 bytes .../_dispute_list_params.cpython-312.pyc | Bin 0 -> 1414 bytes .../_dispute_modify_params.cpython-312.pyc | Bin 0 -> 5545 bytes .../_dispute_retrieve_params.cpython-312.pyc | Bin 0 -> 648 bytes .../_dispute_submit_params.cpython-312.pyc | Bin 0 -> 752 bytes .../_dispute_update_params.cpython-312.pyc | Bin 0 -> 5482 bytes ...ion_design_activate_params.cpython-312.pyc | Bin 0 -> 677 bytes ...ation_design_create_params.cpython-312.pyc | Bin 0 -> 1802 bytes ...n_design_deactivate_params.cpython-312.pyc | Bin 0 -> 681 bytes ...ization_design_list_params.cpython-312.pyc | Bin 0 -> 1380 bytes ...ation_design_modify_params.cpython-312.pyc | Bin 0 -> 1878 bytes ...ation_design_reject_params.cpython-312.pyc | Bin 0 -> 1312 bytes ...ion_design_retrieve_params.cpython-312.pyc | Bin 0 -> 677 bytes ...ation_design_update_params.cpython-312.pyc | Bin 0 -> 1815 bytes ...hysical_bundle_list_params.cpython-312.pyc | Bin 0 -> 987 bytes ...cal_bundle_retrieve_params.cpython-312.pyc | Bin 0 -> 663 bytes .../_token_list_params.cpython-312.pyc | Bin 0 -> 1376 bytes .../_token_modify_params.cpython-312.pyc | Bin 0 -> 738 bytes .../_token_retrieve_params.cpython-312.pyc | Bin 0 -> 644 bytes .../_token_update_params.cpython-312.pyc | Bin 0 -> 698 bytes ...reate_force_capture_params.cpython-312.pyc | Bin 0 -> 14951 bytes ...ate_unlinked_refund_params.cpython-312.pyc | Bin 0 -> 14987 bytes .../_transaction_list_params.cpython-312.pyc | Bin 0 -> 1437 bytes ..._transaction_modify_params.cpython-312.pyc | Bin 0 -> 760 bytes ..._transaction_refund_params.cpython-312.pyc | Bin 0 -> 708 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 656 bytes ..._transaction_update_params.cpython-312.pyc | Bin 0 -> 720 bytes .../issuing/_authorization_approve_params.py | 20 + .../issuing/_authorization_capture_params.py | 273 + .../issuing/_authorization_create_params.py | 674 + .../issuing/_authorization_decline_params.py | 16 + .../issuing/_authorization_expire_params.py | 12 + .../_authorization_finalize_amount_params.py | 166 + .../_authorization_increment_params.py | 20 + .../issuing/_authorization_list_params.py | 59 + .../issuing/_authorization_modify_params.py | 16 + .../issuing/_authorization_respond_params.py | 16 + .../issuing/_authorization_retrieve_params.py | 12 + .../issuing/_authorization_reverse_params.py | 16 + .../issuing/_authorization_update_params.py | 15 + .../params/issuing/_card_create_params.py | 1103 ++ .../issuing/_card_deliver_card_params.py | 12 + .../params/issuing/_card_fail_card_params.py | 12 + .../params/issuing/_card_list_params.py | 72 + .../params/issuing/_card_modify_params.py | 1066 ++ .../params/issuing/_card_retrieve_params.py | 12 + .../issuing/_card_return_card_params.py | 12 + .../params/issuing/_card_ship_card_params.py | 12 + .../issuing/_card_submit_card_params.py | 12 + .../params/issuing/_card_update_params.py | 1065 ++ .../issuing/_cardholder_create_params.py | 1128 ++ .../params/issuing/_cardholder_list_params.py | 63 + .../issuing/_cardholder_modify_params.py | 1120 ++ .../issuing/_cardholder_retrieve_params.py | 12 + .../issuing/_cardholder_update_params.py | 1119 ++ .../params/issuing/_dispute_create_params.py | 287 + .../params/issuing/_dispute_list_params.py | 57 + .../params/issuing/_dispute_modify_params.py | 272 + .../issuing/_dispute_retrieve_params.py | 12 + .../params/issuing/_dispute_submit_params.py | 16 + .../params/issuing/_dispute_update_params.py | 271 + ..._personalization_design_activate_params.py | 12 + .../_personalization_design_create_params.py | 70 + ...ersonalization_design_deactivate_params.py | 12 + .../_personalization_design_list_params.py | 47 + .../_personalization_design_modify_params.py | 72 + .../_personalization_design_reject_params.py | 52 + ..._personalization_design_retrieve_params.py | 12 + .../_personalization_design_update_params.py | 71 + .../issuing/_physical_bundle_list_params.py | 32 + .../_physical_bundle_retrieve_params.py | 12 + .../params/issuing/_token_list_params.py | 55 + .../params/issuing/_token_modify_params.py | 16 + .../params/issuing/_token_retrieve_params.py | 12 + .../params/issuing/_token_update_params.py | 15 + ...transaction_create_force_capture_params.py | 629 + ...ansaction_create_unlinked_refund_params.py | 633 + .../issuing/_transaction_list_params.py | 59 + .../issuing/_transaction_modify_params.py | 16 + .../issuing/_transaction_refund_params.py | 16 + .../issuing/_transaction_retrieve_params.py | 12 + .../issuing/_transaction_update_params.py | 15 + .../stripe/params/radar/__init__.py | 124 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2903 bytes ..._fraud_warning_list_params.cpython-312.pyc | Bin 0 -> 1367 bytes ...ud_warning_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes .../_value_list_create_params.cpython-312.pyc | Bin 0 -> 1038 bytes .../_value_list_delete_params.cpython-312.pyc | Bin 0 -> 476 bytes ...ue_list_item_create_params.cpython-312.pyc | Bin 0 -> 723 bytes ...ue_list_item_delete_params.cpython-312.pyc | Bin 0 -> 485 bytes ...alue_list_item_list_params.cpython-312.pyc | Bin 0 -> 1334 bytes ..._list_item_retrieve_params.cpython-312.pyc | Bin 0 -> 660 bytes .../_value_list_list_params.cpython-312.pyc | Bin 0 -> 1327 bytes .../_value_list_modify_params.cpython-312.pyc | Bin 0 -> 816 bytes ...value_list_retrieve_params.cpython-312.pyc | Bin 0 -> 651 bytes .../_value_list_update_params.cpython-312.pyc | Bin 0 -> 773 bytes .../radar/_early_fraud_warning_list_params.py | 55 + .../_early_fraud_warning_retrieve_params.py | 12 + .../params/radar/_value_list_create_params.py | 41 + .../params/radar/_value_list_delete_params.py | 7 + .../radar/_value_list_item_create_params.py | 20 + .../radar/_value_list_item_delete_params.py | 7 + .../radar/_value_list_item_list_params.py | 55 + .../radar/_value_list_item_retrieve_params.py | 12 + .../params/radar/_value_list_list_params.py | 55 + .../params/radar/_value_list_modify_params.py | 24 + .../radar/_value_list_retrieve_params.py | 12 + .../params/radar/_value_list_update_params.py | 23 + .../stripe/params/reporting/__init__.py | 70 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1695 bytes .../_report_run_create_params.cpython-312.pyc | Bin 0 -> 11827 bytes .../_report_run_list_params.cpython-312.pyc | Bin 0 -> 1242 bytes ...report_run_retrieve_params.cpython-312.pyc | Bin 0 -> 655 bytes .../_report_type_list_params.cpython-312.pyc | Bin 0 -> 649 bytes ...eport_type_retrieve_params.cpython-312.pyc | Bin 0 -> 657 bytes .../reporting/_report_run_create_params.py | 697 + .../reporting/_report_run_list_params.py | 47 + .../reporting/_report_run_retrieve_params.py | 12 + .../reporting/_report_type_list_params.py | 12 + .../reporting/_report_type_retrieve_params.py | 12 + .../stripe/params/sigma/__init__.py | 39 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1126 bytes ...uled_query_run_list_params.cpython-312.pyc | Bin 0 -> 811 bytes ..._query_run_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes .../sigma/_scheduled_query_run_list_params.py | 24 + .../_scheduled_query_run_retrieve_params.py | 12 + .../stripe/params/tax/__init__.py | 1034 ++ .../tax/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 18777 bytes ..._calculation_create_params.cpython-312.pyc | Bin 0 -> 4801 bytes ...tion_line_item_list_params.cpython-312.pyc | Bin 0 -> 770 bytes ...ion_list_line_items_params.cpython-312.pyc | Bin 0 -> 815 bytes ...alculation_retrieve_params.cpython-312.pyc | Bin 0 -> 652 bytes ...registration_create_params.cpython-312.pyc | Bin 0 -> 41317 bytes .../_registration_list_params.cpython-312.pyc | Bin 0 -> 911 bytes ...registration_modify_params.cpython-312.pyc | Bin 0 -> 819 bytes ...gistration_retrieve_params.cpython-312.pyc | Bin 0 -> 654 bytes ...registration_update_params.cpython-312.pyc | Bin 0 -> 779 bytes .../_settings_modify_params.cpython-312.pyc | Bin 0 -> 1817 bytes .../_settings_retrieve_params.cpython-312.pyc | Bin 0 -> 646 bytes .../_settings_update_params.cpython-312.pyc | Bin 0 -> 1754 bytes ...te_from_calculation_params.cpython-312.pyc | Bin 0 -> 889 bytes ...ion_create_reversal_params.cpython-312.pyc | Bin 0 -> 1822 bytes ...tion_line_item_list_params.cpython-312.pyc | Bin 0 -> 770 bytes ...ion_list_line_items_params.cpython-312.pyc | Bin 0 -> 815 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 652 bytes .../params/tax/_calculation_create_params.py | 299 + .../tax/_calculation_line_item_list_params.py | 23 + .../_calculation_list_line_items_params.py | 24 + .../tax/_calculation_retrieve_params.py | 12 + .../params/tax/_registration_create_params.py | 1892 ++ .../params/tax/_registration_list_params.py | 28 + .../params/tax/_registration_modify_params.py | 20 + .../tax/_registration_retrieve_params.py | 12 + .../params/tax/_registration_update_params.py | 19 + .../params/tax/_settings_modify_params.py | 67 + .../params/tax/_settings_retrieve_params.py | 12 + .../params/tax/_settings_update_params.py | 66 + ...nsaction_create_from_calculation_params.py | 28 + .../_transaction_create_reversal_params.py | 78 + .../tax/_transaction_line_item_list_params.py | 23 + .../_transaction_list_line_items_params.py | 24 + .../tax/_transaction_retrieve_params.py | 12 + .../stripe/params/terminal/__init__.py | 857 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 16101 bytes ...onfiguration_create_params.cpython-312.pyc | Bin 0 -> 10832 bytes ...onfiguration_delete_params.cpython-312.pyc | Bin 0 -> 486 bytes ..._configuration_list_params.cpython-312.pyc | Bin 0 -> 866 bytes ...onfiguration_modify_params.cpython-312.pyc | Bin 0 -> 11078 bytes ...figuration_retrieve_params.cpython-312.pyc | Bin 0 -> 661 bytes ...onfiguration_update_params.cpython-312.pyc | Bin 0 -> 11015 bytes ...ection_token_create_params.cpython-312.pyc | Bin 0 -> 708 bytes .../_location_create_params.cpython-312.pyc | Bin 0 -> 2420 bytes .../_location_delete_params.cpython-312.pyc | Bin 0 -> 476 bytes .../_location_list_params.cpython-312.pyc | Bin 0 -> 794 bytes .../_location_modify_params.cpython-312.pyc | Bin 0 -> 2454 bytes .../_location_retrieve_params.cpython-312.pyc | Bin 0 -> 651 bytes .../_location_update_params.cpython-312.pyc | Bin 0 -> 2391 bytes ...eader_cancel_action_params.cpython-312.pyc | Bin 0 -> 656 bytes ...ader_collect_inputs_params.cpython-312.pyc | Bin 0 -> 2658 bytes ...lect_payment_method_params.cpython-312.pyc | Bin 0 -> 1557 bytes ...firm_payment_intent_params.cpython-312.pyc | Bin 0 -> 1047 bytes .../_reader_create_params.cpython-312.pyc | Bin 0 -> 884 bytes .../_reader_delete_params.cpython-312.pyc | Bin 0 -> 472 bytes .../_reader_list_params.cpython-312.pyc | Bin 0 -> 1211 bytes .../_reader_modify_params.cpython-312.pyc | Bin 0 -> 812 bytes ...sent_payment_method_params.cpython-312.pyc | Bin 0 -> 1793 bytes ...cess_payment_intent_params.cpython-312.pyc | Bin 0 -> 1610 bytes ...rocess_setup_intent_params.cpython-312.pyc | Bin 0 -> 1166 bytes ...ader_refund_payment_params.cpython-312.pyc | Bin 0 -> 1365 bytes .../_reader_retrieve_params.cpython-312.pyc | Bin 0 -> 647 bytes ..._set_reader_display_params.cpython-312.pyc | Bin 0 -> 1462 bytes ...ed_input_collection_params.cpython-312.pyc | Bin 0 -> 786 bytes ...ut_input_collection_params.cpython-312.pyc | Bin 0 -> 677 bytes .../_reader_update_params.cpython-312.pyc | Bin 0 -> 772 bytes .../terminal/_configuration_create_params.py | 591 + .../terminal/_configuration_delete_params.py | 7 + .../terminal/_configuration_list_params.py | 28 + .../terminal/_configuration_modify_params.py | 599 + .../_configuration_retrieve_params.py | 12 + .../terminal/_configuration_update_params.py | 598 + .../_connection_token_create_params.py | 16 + .../terminal/_location_create_params.py | 137 + .../terminal/_location_delete_params.py | 7 + .../params/terminal/_location_list_params.py | 24 + .../terminal/_location_modify_params.py | 137 + .../terminal/_location_retrieve_params.py | 12 + .../terminal/_location_update_params.py | 136 + .../terminal/_reader_cancel_action_params.py | 12 + .../terminal/_reader_collect_inputs_params.py | 101 + .../_reader_collect_payment_method_params.py | 50 + .../_reader_confirm_payment_intent_params.py | 29 + .../params/terminal/_reader_create_params.py | 28 + .../params/terminal/_reader_delete_params.py | 7 + .../params/terminal/_reader_list_params.py | 52 + .../params/terminal/_reader_modify_params.py | 20 + .../_reader_present_payment_method_params.py | 67 + .../_reader_process_payment_intent_params.py | 54 + .../_reader_process_setup_intent_params.py | 31 + .../terminal/_reader_refund_payment_params.py | 49 + .../terminal/_reader_retrieve_params.py | 12 + .../_reader_set_reader_display_params.py | 54 + ..._reader_succeed_input_collection_params.py | 16 + ..._reader_timeout_input_collection_params.py | 12 + .../params/terminal/_reader_update_params.py | 19 + .../stripe/params/test_helpers/__init__.py | 389 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 8292 bytes ...mation_token_create_params.cpython-312.pyc | Bin 0 -> 19925 bytes ...r_fund_cash_balance_params.cpython-312.pyc | Bin 0 -> 746 bytes .../_refund_expire_params.cpython-312.pyc | Bin 0 -> 604 bytes ..._test_clock_advance_params.cpython-312.pyc | Bin 0 -> 699 bytes .../_test_clock_create_params.cpython-312.pyc | Bin 0 -> 739 bytes .../_test_clock_delete_params.cpython-312.pyc | Bin 0 -> 483 bytes .../_test_clock_list_params.cpython-312.pyc | Bin 0 -> 801 bytes ...test_clock_retrieve_params.cpython-312.pyc | Bin 0 -> 658 bytes .../_confirmation_token_create_params.py | 925 + .../_customer_fund_cash_balance_params.py | 23 + .../test_helpers/_refund_expire_params.py | 11 + .../_test_clock_advance_params.py | 16 + .../test_helpers/_test_clock_create_params.py | 20 + .../test_helpers/_test_clock_delete_params.py | 7 + .../test_helpers/_test_clock_list_params.py | 24 + .../_test_clock_retrieve_params.py | 12 + .../params/test_helpers/issuing/__init__.py | 461 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 10622 bytes ...thorization_capture_params.cpython-312.pyc | Bin 0 -> 5935 bytes ...uthorization_create_params.cpython-312.pyc | Bin 0 -> 16171 bytes ...uthorization_expire_params.cpython-312.pyc | Bin 0 -> 626 bytes ...ion_finalize_amount_params.cpython-312.pyc | Bin 0 -> 3690 bytes ...orization_increment_params.cpython-312.pyc | Bin 0 -> 746 bytes ...thorization_respond_params.cpython-312.pyc | Bin 0 -> 669 bytes ...thorization_reverse_params.cpython-312.pyc | Bin 0 -> 685 bytes .../_card_deliver_card_params.cpython-312.pyc | Bin 0 -> 619 bytes .../_card_fail_card_params.cpython-312.pyc | Bin 0 -> 613 bytes .../_card_return_card_params.cpython-312.pyc | Bin 0 -> 617 bytes .../_card_ship_card_params.cpython-312.pyc | Bin 0 -> 613 bytes .../_card_submit_card_params.cpython-312.pyc | Bin 0 -> 617 bytes ...ion_design_activate_params.cpython-312.pyc | Bin 0 -> 647 bytes ...n_design_deactivate_params.cpython-312.pyc | Bin 0 -> 651 bytes ...ation_design_reject_params.cpython-312.pyc | Bin 0 -> 1262 bytes ...reate_force_capture_params.cpython-312.pyc | Bin 0 -> 14901 bytes ...ate_unlinked_refund_params.cpython-312.pyc | Bin 0 -> 14937 bytes ..._transaction_refund_params.cpython-312.pyc | Bin 0 -> 678 bytes .../issuing/_authorization_capture_params.py | 272 + .../issuing/_authorization_create_params.py | 673 + .../issuing/_authorization_expire_params.py | 11 + .../_authorization_finalize_amount_params.py | 165 + .../_authorization_increment_params.py | 19 + .../issuing/_authorization_respond_params.py | 15 + .../issuing/_authorization_reverse_params.py | 15 + .../issuing/_card_deliver_card_params.py | 11 + .../issuing/_card_fail_card_params.py | 11 + .../issuing/_card_return_card_params.py | 11 + .../issuing/_card_ship_card_params.py | 11 + .../issuing/_card_submit_card_params.py | 11 + ..._personalization_design_activate_params.py | 11 + ...ersonalization_design_deactivate_params.py | 11 + .../_personalization_design_reject_params.py | 51 + ...transaction_create_force_capture_params.py | 628 + ...ansaction_create_unlinked_refund_params.py | 632 + .../issuing/_transaction_refund_params.py | 15 + .../params/test_helpers/terminal/__init__.py | 61 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1658 bytes ...sent_payment_method_params.cpython-312.pyc | Bin 0 -> 1743 bytes ...ed_input_collection_params.cpython-312.pyc | Bin 0 -> 759 bytes ...ut_input_collection_params.cpython-312.pyc | Bin 0 -> 647 bytes .../_reader_present_payment_method_params.py | 66 + ..._reader_succeed_input_collection_params.py | 15 + ..._reader_timeout_input_collection_params.py | 11 + .../params/test_helpers/treasury/__init__.py | 181 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4888 bytes ...bound_transfer_fail_params.cpython-312.pyc | Bin 0 -> 1252 bytes ...rn_inbound_transfer_params.cpython-312.pyc | Bin 0 -> 664 bytes ...nd_transfer_succeed_params.cpython-312.pyc | Bin 0 -> 634 bytes ...tbound_payment_fail_params.cpython-312.pyc | Bin 0 -> 628 bytes ...tbound_payment_post_params.cpython-312.pyc | Bin 0 -> 628 bytes ...rn_outbound_payment_params.cpython-312.pyc | Bin 0 -> 1212 bytes ...ound_payment_update_params.cpython-312.pyc | Bin 0 -> 1641 bytes ...bound_transfer_fail_params.cpython-312.pyc | Bin 0 -> 630 bytes ...bound_transfer_post_params.cpython-312.pyc | Bin 0 -> 630 bytes ...n_outbound_transfer_params.cpython-312.pyc | Bin 0 -> 1218 bytes ...und_transfer_update_params.cpython-312.pyc | Bin 0 -> 1646 bytes ...eived_credit_create_params.cpython-312.pyc | Bin 0 -> 1684 bytes ...ceived_debit_create_params.cpython-312.pyc | Bin 0 -> 1658 bytes .../treasury/_inbound_transfer_fail_params.py | 38 + ...transfer_return_inbound_transfer_params.py | 11 + .../_inbound_transfer_succeed_params.py | 11 + .../treasury/_outbound_payment_fail_params.py | 11 + .../treasury/_outbound_payment_post_params.py | 11 + ..._payment_return_outbound_payment_params.py | 37 + .../_outbound_payment_update_params.py | 54 + .../_outbound_transfer_fail_params.py | 11 + .../_outbound_transfer_post_params.py | 11 + ...ransfer_return_outbound_transfer_params.py | 37 + .../_outbound_transfer_update_params.py | 54 + .../_received_credit_create_params.py | 67 + .../treasury/_received_debit_create_params.py | 67 + .../stripe/params/treasury/__init__.py | 893 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 20642 bytes ...dit_reversal_create_params.cpython-312.pyc | Bin 0 -> 786 bytes ...redit_reversal_list_params.cpython-312.pyc | Bin 0 -> 1015 bytes ...t_reversal_retrieve_params.cpython-312.pyc | Bin 0 -> 664 bytes ...bit_reversal_create_params.cpython-312.pyc | Bin 0 -> 783 bytes ...debit_reversal_list_params.cpython-312.pyc | Bin 0 -> 1087 bytes ...t_reversal_retrieve_params.cpython-312.pyc | Bin 0 -> 662 bytes ...ncial_account_close_params.cpython-312.pyc | Bin 0 -> 1140 bytes ...cial_account_create_params.cpython-312.pyc | Bin 0 -> 4978 bytes ...t_features_retrieve_params.cpython-312.pyc | Bin 0 -> 642 bytes ...unt_features_update_params.cpython-312.pyc | Bin 0 -> 4057 bytes ...ancial_account_list_params.cpython-312.pyc | Bin 0 -> 1367 bytes ...cial_account_modify_params.cpython-312.pyc | Bin 0 -> 5359 bytes ...t_retrieve_features_params.cpython-312.pyc | Bin 0 -> 685 bytes ...al_account_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes ...unt_update_features_params.cpython-312.pyc | Bin 0 -> 4120 bytes ...cial_account_update_params.cpython-312.pyc | Bin 0 -> 5296 bytes ...und_transfer_cancel_params.cpython-312.pyc | Bin 0 -> 662 bytes ...und_transfer_create_params.cpython-312.pyc | Bin 0 -> 1016 bytes ...bound_transfer_fail_params.cpython-312.pyc | Bin 0 -> 1302 bytes ...bound_transfer_list_params.cpython-312.pyc | Bin 0 -> 980 bytes ...d_transfer_retrieve_params.cpython-312.pyc | Bin 0 -> 666 bytes ...rn_inbound_transfer_params.cpython-312.pyc | Bin 0 -> 694 bytes ...nd_transfer_succeed_params.cpython-312.pyc | Bin 0 -> 664 bytes ...ound_payment_cancel_params.cpython-312.pyc | Bin 0 -> 662 bytes ...ound_payment_create_params.cpython-312.pyc | Bin 0 -> 4360 bytes ...tbound_payment_fail_params.cpython-312.pyc | Bin 0 -> 658 bytes ...tbound_payment_list_params.cpython-312.pyc | Bin 0 -> 1493 bytes ...tbound_payment_post_params.cpython-312.pyc | Bin 0 -> 658 bytes ...nd_payment_retrieve_params.cpython-312.pyc | Bin 0 -> 666 bytes ...rn_outbound_payment_params.cpython-312.pyc | Bin 0 -> 1262 bytes ...ound_payment_update_params.cpython-312.pyc | Bin 0 -> 1691 bytes ...und_transfer_cancel_params.cpython-312.pyc | Bin 0 -> 664 bytes ...und_transfer_create_params.cpython-312.pyc | Bin 0 -> 2211 bytes ...bound_transfer_fail_params.cpython-312.pyc | Bin 0 -> 660 bytes ...bound_transfer_list_params.cpython-312.pyc | Bin 0 -> 989 bytes ...bound_transfer_post_params.cpython-312.pyc | Bin 0 -> 660 bytes ...d_transfer_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes ...n_outbound_transfer_params.cpython-312.pyc | Bin 0 -> 1268 bytes ...und_transfer_update_params.cpython-312.pyc | Bin 0 -> 1696 bytes ...eived_credit_create_params.cpython-312.pyc | Bin 0 -> 1734 bytes ...eceived_credit_list_params.cpython-312.pyc | Bin 0 -> 1350 bytes ...ved_credit_retrieve_params.cpython-312.pyc | Bin 0 -> 664 bytes ...ceived_debit_create_params.cpython-312.pyc | Bin 0 -> 1708 bytes ...received_debit_list_params.cpython-312.pyc | Bin 0 -> 949 bytes ...ived_debit_retrieve_params.cpython-312.pyc | Bin 0 -> 662 bytes ...nsaction_entry_list_params.cpython-312.pyc | Bin 0 -> 1804 bytes ...tion_entry_retrieve_params.cpython-312.pyc | Bin 0 -> 668 bytes .../_transaction_list_params.cpython-312.pyc | Bin 0 -> 2093 bytes ...ransaction_retrieve_params.cpython-312.pyc | Bin 0 -> 657 bytes .../_credit_reversal_create_params.py | 20 + .../treasury/_credit_reversal_list_params.py | 36 + .../_credit_reversal_retrieve_params.py | 12 + .../treasury/_debit_reversal_create_params.py | 20 + .../treasury/_debit_reversal_list_params.py | 40 + .../_debit_reversal_retrieve_params.py | 12 + .../_financial_account_close_params.py | 33 + .../_financial_account_create_params.py | 201 + ...ancial_account_features_retrieve_params.py | 11 + ...inancial_account_features_update_params.py | 164 + .../_financial_account_list_params.py | 51 + .../_financial_account_modify_params.py | 218 + ...ancial_account_retrieve_features_params.py | 12 + .../_financial_account_retrieve_params.py | 12 + ...inancial_account_update_features_params.py | 165 + .../_financial_account_update_params.py | 217 + .../_inbound_transfer_cancel_params.py | 12 + .../_inbound_transfer_create_params.py | 40 + .../treasury/_inbound_transfer_fail_params.py | 39 + .../treasury/_inbound_transfer_list_params.py | 34 + .../_inbound_transfer_retrieve_params.py | 12 + ...transfer_return_inbound_transfer_params.py | 12 + .../_inbound_transfer_succeed_params.py | 12 + .../_outbound_payment_cancel_params.py | 12 + .../_outbound_payment_create_params.py | 193 + .../treasury/_outbound_payment_fail_params.py | 12 + .../treasury/_outbound_payment_list_params.py | 61 + .../treasury/_outbound_payment_post_params.py | 12 + .../_outbound_payment_retrieve_params.py | 12 + ..._payment_return_outbound_payment_params.py | 38 + .../_outbound_payment_update_params.py | 55 + .../_outbound_transfer_cancel_params.py | 12 + .../_outbound_transfer_create_params.py | 81 + .../_outbound_transfer_fail_params.py | 12 + .../_outbound_transfer_list_params.py | 34 + .../_outbound_transfer_post_params.py | 12 + .../_outbound_transfer_retrieve_params.py | 12 + ...ransfer_return_outbound_transfer_params.py | 38 + .../_outbound_transfer_update_params.py | 55 + .../_received_credit_create_params.py | 68 + .../treasury/_received_credit_list_params.py | 49 + .../_received_credit_retrieve_params.py | 12 + .../treasury/_received_debit_create_params.py | 68 + .../treasury/_received_debit_list_params.py | 32 + .../_received_debit_retrieve_params.py | 12 + .../_transaction_entry_list_params.py | 79 + .../_transaction_entry_retrieve_params.py | 12 + .../treasury/_transaction_list_params.py | 91 + .../treasury/_transaction_retrieve_params.py | 12 + .../stripe/params/v2/__init__.py | 28 + .../v2/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 888 bytes .../stripe/params/v2/billing/__init__.py | 63 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1635 bytes ...t_adjustment_create_params.cpython-312.pyc | Bin 0 -> 876 bytes ..._meter_event_create_params.cpython-312.pyc | Bin 0 -> 740 bytes ...vent_session_create_params.cpython-312.pyc | Bin 0 -> 487 bytes ...event_stream_create_params.cpython-312.pyc | Bin 0 -> 1004 bytes .../_meter_event_adjustment_create_params.py | 25 + .../v2/billing/_meter_event_create_params.py | 30 + .../_meter_event_session_create_params.py | 7 + .../_meter_event_stream_create_params.py | 37 + .../stripe/params/v2/core/__init__.py | 107 + .../core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2709 bytes ..._destination_create_params.cpython-312.pyc | Bin 0 -> 1827 bytes ..._destination_delete_params.cpython-312.pyc | Bin 0 -> 481 bytes ...destination_disable_params.cpython-312.pyc | Bin 0 -> 483 bytes ..._destination_enable_params.cpython-312.pyc | Bin 0 -> 481 bytes ...nt_destination_list_params.cpython-312.pyc | Bin 0 -> 721 bytes ...nt_destination_ping_params.cpython-312.pyc | Bin 0 -> 477 bytes ...estination_retrieve_params.cpython-312.pyc | Bin 0 -> 681 bytes ..._destination_update_params.cpython-312.pyc | Bin 0 -> 1247 bytes .../_event_list_params.cpython-312.pyc | Bin 0 -> 849 bytes .../_event_retrieve_params.cpython-312.pyc | Bin 0 -> 462 bytes .../core/_event_destination_create_params.py | 77 + .../core/_event_destination_delete_params.py | 7 + .../core/_event_destination_disable_params.py | 7 + .../core/_event_destination_enable_params.py | 7 + .../v2/core/_event_destination_list_params.py | 15 + .../v2/core/_event_destination_ping_params.py | 7 + .../_event_destination_retrieve_params.py | 11 + .../core/_event_destination_update_params.py | 40 + .../params/v2/core/_event_list_params.py | 35 + .../params/v2/core/_event_retrieve_params.py | 7 + .../python3.12/site-packages/stripe/py.typed | 0 .../site-packages/stripe/radar/__init__.py | 48 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1510 bytes .../_early_fraud_warning.cpython-312.pyc | Bin 0 -> 4030 bytes ...arly_fraud_warning_service.cpython-312.pyc | Bin 0 -> 3396 bytes .../__pycache__/_value_list.cpython-312.pyc | Bin 0 -> 9318 bytes .../_value_list_item.cpython-312.pyc | Bin 0 -> 7769 bytes .../_value_list_item_service.cpython-312.pyc | Bin 0 -> 5255 bytes .../_value_list_service.cpython-312.pyc | Bin 0 -> 6463 bytes .../stripe/radar/_early_fraud_warning.py | 128 + .../radar/_early_fraud_warning_service.py | 105 + .../site-packages/stripe/radar/_value_list.py | 318 + .../stripe/radar/_value_list_item.py | 263 + .../stripe/radar/_value_list_item_service.py | 189 + .../stripe/radar/_value_list_service.py | 234 + .../stripe/reporting/__init__.py | 37 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1244 bytes .../__pycache__/_report_run.cpython-312.pyc | Bin 0 -> 5965 bytes .../_report_run_service.cpython-312.pyc | Bin 0 -> 4104 bytes .../__pycache__/_report_type.cpython-312.pyc | Bin 0 -> 4139 bytes .../_report_type_service.cpython-312.pyc | Bin 0 -> 3201 bytes .../stripe/reporting/_report_run.py | 211 + .../stripe/reporting/_report_run_service.py | 142 + .../stripe/reporting/_report_type.py | 129 + .../stripe/reporting/_report_type_service.py | 101 + .../site-packages/stripe/sigma/__init__.py | 36 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1035 bytes .../_scheduled_query_run.cpython-312.pyc | Bin 0 -> 4359 bytes ...cheduled_query_run_service.cpython-312.pyc | Bin 0 -> 3221 bytes .../stripe/sigma/_scheduled_query_run.py | 145 + .../sigma/_scheduled_query_run_service.py | 101 + .../site-packages/stripe/tax/__init__.py | 69 + .../tax/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2198 bytes .../__pycache__/_calculation.cpython-312.pyc | Bin 0 -> 13584 bytes .../_calculation_line_item.cpython-312.pyc | Bin 0 -> 3044 bytes ...culation_line_item_service.cpython-312.pyc | Bin 0 -> 2254 bytes .../_calculation_service.cpython-312.pyc | Bin 0 -> 4134 bytes .../__pycache__/_registration.cpython-312.pyc | Bin 0 -> 40212 bytes .../_registration_service.cpython-312.pyc | Bin 0 -> 5151 bytes .../tax/__pycache__/_settings.cpython-312.pyc | Bin 0 -> 5303 bytes .../_settings_service.cpython-312.pyc | Bin 0 -> 2685 bytes .../__pycache__/_transaction.cpython-312.pyc | Bin 0 -> 13622 bytes .../_transaction_line_item.cpython-312.pyc | Bin 0 -> 1581 bytes ...nsaction_line_item_service.cpython-312.pyc | Bin 0 -> 2236 bytes .../_transaction_service.cpython-312.pyc | Bin 0 -> 5241 bytes .../site-packages/stripe/tax/_calculation.py | 675 + .../stripe/tax/_calculation_line_item.py | 151 + .../tax/_calculation_line_item_service.py | 60 + .../stripe/tax/_calculation_service.py | 132 + .../site-packages/stripe/tax/_registration.py | 1406 ++ .../stripe/tax/_registration_service.py | 185 + .../site-packages/stripe/tax/_settings.py | 167 + .../stripe/tax/_settings_service.py | 91 + .../site-packages/stripe/tax/_transaction.py | 630 + .../stripe/tax/_transaction_line_item.py | 71 + .../tax/_transaction_line_item_service.py | 60 + .../stripe/tax/_transaction_service.py | 173 + .../site-packages/stripe/terminal/__init__.py | 52 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1724 bytes .../_configuration.cpython-312.pyc | Bin 0 -> 18688 bytes .../_configuration_service.cpython-312.pyc | Bin 0 -> 6245 bytes .../_connection_token.cpython-312.pyc | Bin 0 -> 2311 bytes .../_connection_token_service.cpython-312.pyc | Bin 0 -> 1971 bytes .../__pycache__/_location.cpython-312.pyc | Bin 0 -> 10338 bytes .../_location_service.cpython-312.pyc | Bin 0 -> 6344 bytes .../__pycache__/_reader.cpython-312.pyc | Bin 0 -> 53678 bytes .../_reader_service.cpython-312.pyc | Bin 0 -> 16211 bytes .../stripe/terminal/_configuration.py | 778 + .../stripe/terminal/_configuration_service.py | 236 + .../stripe/terminal/_connection_token.py | 66 + .../terminal/_connection_token_service.py | 52 + .../stripe/terminal/_location.py | 401 + .../stripe/terminal/_location_service.py | 236 + .../site-packages/stripe/terminal/_reader.py | 2034 +++ .../stripe/terminal/_reader_service.py | 604 + .../stripe/test_helpers/__init__.py | 66 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2058 bytes ...confirmation_token_service.cpython-312.pyc | Bin 0 -> 1854 bytes .../_customer_service.cpython-312.pyc | Bin 0 -> 2130 bytes .../_issuing_service.cpython-312.pyc | Bin 0 -> 2253 bytes .../_refund_service.cpython-312.pyc | Bin 0 -> 2025 bytes .../_terminal_service.cpython-312.pyc | Bin 0 -> 1595 bytes .../__pycache__/_test_clock.cpython-312.pyc | Bin 0 -> 11545 bytes .../_test_clock_service.cpython-312.pyc | Bin 0 -> 6256 bytes .../_treasury_service.cpython-312.pyc | Bin 0 -> 2547 bytes .../_confirmation_token_service.py | 52 + .../stripe/test_helpers/_customer_service.py | 61 + .../stripe/test_helpers/_issuing_service.py | 59 + .../stripe/test_helpers/_refund_service.py | 59 + .../stripe/test_helpers/_terminal_service.py | 38 + .../stripe/test_helpers/_test_clock.py | 391 + .../test_helpers/_test_clock_service.py | 236 + .../stripe/test_helpers/_treasury_service.py | 72 + .../stripe/test_helpers/issuing/__init__.py | 50 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1424 bytes .../_authorization_service.cpython-312.pyc | Bin 0 -> 8975 bytes .../__pycache__/_card_service.cpython-312.pyc | Bin 0 -> 6601 bytes ...onalization_design_service.cpython-312.pyc | Bin 0 -> 4843 bytes .../_transaction_service.cpython-312.pyc | Bin 0 -> 4269 bytes .../issuing/_authorization_service.py | 335 + .../test_helpers/issuing/_card_service.py | 247 + .../_personalization_design_service.py | 153 + .../issuing/_transaction_service.py | 141 + .../stripe/test_helpers/terminal/__init__.py | 29 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 918 bytes .../_reader_service.cpython-312.pyc | Bin 0 -> 4717 bytes .../test_helpers/terminal/_reader_service.py | 153 + .../stripe/test_helpers/treasury/__init__.py | 60 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1640 bytes .../_inbound_transfer_service.cpython-312.pyc | Bin 0 -> 4896 bytes .../_outbound_payment_service.cpython-312.pyc | Bin 0 -> 5924 bytes ..._outbound_transfer_service.cpython-312.pyc | Bin 0 -> 6049 bytes .../_received_credit_service.cpython-312.pyc | Bin 0 -> 1919 bytes .../_received_debit_service.cpython-312.pyc | Bin 0 -> 1907 bytes .../treasury/_inbound_transfer_service.py | 153 + .../treasury/_outbound_payment_service.py | 200 + .../treasury/_outbound_transfer_service.py | 204 + .../treasury/_received_credit_service.py | 52 + .../treasury/_received_debit_service.py | 52 + .../site-packages/stripe/treasury/__init__.py | 134 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4032 bytes .../_credit_reversal.cpython-312.pyc | Bin 0 -> 5680 bytes .../_credit_reversal_service.cpython-312.pyc | Bin 0 -> 4163 bytes .../_debit_reversal.cpython-312.pyc | Bin 0 -> 5842 bytes .../_debit_reversal_service.cpython-312.pyc | Bin 0 -> 4007 bytes .../_financial_account.cpython-312.pyc | Bin 0 -> 18725 bytes ...financial_account_features.cpython-312.pyc | Bin 0 -> 8149 bytes ...l_account_features_service.cpython-312.pyc | Bin 0 -> 3423 bytes ..._financial_account_service.cpython-312.pyc | Bin 0 -> 7719 bytes .../_inbound_transfer.cpython-312.pyc | Bin 0 -> 22790 bytes .../_inbound_transfer_service.cpython-312.pyc | Bin 0 -> 5245 bytes .../_outbound_payment.cpython-312.pyc | Bin 0 -> 27332 bytes .../_outbound_payment_service.cpython-312.pyc | Bin 0 -> 5303 bytes .../_outbound_transfer.cpython-312.pyc | Bin 0 -> 27348 bytes ..._outbound_transfer_service.cpython-312.pyc | Bin 0 -> 5440 bytes .../_received_credit.cpython-312.pyc | Bin 0 -> 10095 bytes .../_received_credit_service.cpython-312.pyc | Bin 0 -> 3185 bytes .../_received_debit.cpython-312.pyc | Bin 0 -> 9117 bytes .../_received_debit_service.cpython-312.pyc | Bin 0 -> 3148 bytes .../__pycache__/_transaction.cpython-312.pyc | Bin 0 -> 5973 bytes .../_transaction_entry.cpython-312.pyc | Bin 0 -> 6279 bytes ..._transaction_entry_service.cpython-312.pyc | Bin 0 -> 3143 bytes .../_transaction_service.cpython-312.pyc | Bin 0 -> 3051 bytes .../stripe/treasury/_credit_reversal.py | 190 + .../treasury/_credit_reversal_service.py | 142 + .../stripe/treasury/_debit_reversal.py | 203 + .../treasury/_debit_reversal_service.py | 142 + .../stripe/treasury/_financial_account.py | 724 + .../treasury/_financial_account_features.py | 511 + .../_financial_account_features_service.py | 108 + .../treasury/_financial_account_service.py | 268 + .../stripe/treasury/_inbound_transfer.py | 815 + .../treasury/_inbound_transfer_service.py | 189 + .../stripe/treasury/_outbound_payment.py | 990 + .../treasury/_outbound_payment_service.py | 189 + .../stripe/treasury/_outbound_transfer.py | 990 + .../treasury/_outbound_transfer_service.py | 189 + .../stripe/treasury/_received_credit.py | 389 + .../treasury/_received_credit_service.py | 101 + .../stripe/treasury/_received_debit.py | 338 + .../treasury/_received_debit_service.py | 97 + .../stripe/treasury/_transaction.py | 256 + .../stripe/treasury/_transaction_entry.py | 266 + .../treasury/_transaction_entry_service.py | 101 + .../stripe/treasury/_transaction_service.py | 97 + .../site-packages/stripe/v2/__init__.py | 39 + .../v2/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1310 bytes .../v2/__pycache__/_amount.cpython-312.pyc | Bin 0 -> 728 bytes .../_billing_service.cpython-312.pyc | Bin 0 -> 2240 bytes .../__pycache__/_core_service.cpython-312.pyc | Bin 0 -> 1738 bytes .../_deleted_object.cpython-312.pyc | Bin 0 -> 577 bytes .../__pycache__/_list_object.cpython-312.pyc | Bin 0 -> 2803 bytes .../site-packages/stripe/v2/_amount.py | 14 + .../stripe/v2/_billing_service.py | 62 + .../site-packages/stripe/v2/_core_service.py | 43 + .../stripe/v2/_deleted_object.py | 15 + .../site-packages/stripe/v2/_list_object.py | 59 + .../stripe/v2/billing/__init__.py | 63 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1784 bytes .../__pycache__/_meter_event.cpython-312.pyc | Bin 0 -> 1012 bytes .../_meter_event_adjustment.cpython-312.pyc | Bin 0 -> 1280 bytes ...r_event_adjustment_service.cpython-312.pyc | Bin 0 -> 1848 bytes .../_meter_event_service.cpython-312.pyc | Bin 0 -> 1888 bytes .../_meter_event_session.cpython-312.pyc | Bin 0 -> 911 bytes ...eter_event_session_service.cpython-312.pyc | Bin 0 -> 2001 bytes ...meter_event_stream_service.cpython-312.pyc | Bin 0 -> 1771 bytes .../stripe/v2/billing/_meter_event.py | 47 + .../v2/billing/_meter_event_adjustment.py | 51 + .../_meter_event_adjustment_service.py | 52 + .../stripe/v2/billing/_meter_event_service.py | 52 + .../stripe/v2/billing/_meter_event_session.py | 36 + .../billing/_meter_event_session_service.py | 52 + .../v2/billing/_meter_event_stream_service.py | 45 + .../site-packages/stripe/v2/core/__init__.py | 50 + .../core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1353 bytes .../core/__pycache__/_event.cpython-312.pyc | Bin 0 -> 10823 bytes .../_event_destination.cpython-312.pyc | Bin 0 -> 3343 bytes ..._event_destination_service.cpython-312.pyc | Bin 0 -> 9786 bytes .../_event_service.cpython-312.pyc | Bin 0 -> 2964 bytes .../site-packages/stripe/v2/core/_event.py | 250 + .../stripe/v2/core/_event_destination.py | 128 + .../v2/core/_event_destination_service.py | 367 + .../stripe/v2/core/_event_service.py | 95 + .../urllib3-2.5.0.dist-info/INSTALLER | 1 + .../urllib3-2.5.0.dist-info/METADATA | 154 + .../urllib3-2.5.0.dist-info/RECORD | 79 + .../urllib3-2.5.0.dist-info/WHEEL | 4 + .../licenses/LICENSE.txt | 21 + .../site-packages/urllib3/__init__.py | 211 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7315 bytes .../_base_connection.cpython-312.pyc | Bin 0 -> 6853 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 0 -> 22574 bytes .../_request_methods.cpython-312.pyc | Bin 0 -> 10607 bytes .../__pycache__/_version.cpython-312.pyc | Bin 0 -> 651 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 38418 bytes .../connectionpool.cpython-312.pyc | Bin 0 -> 39740 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 16616 bytes .../__pycache__/fields.cpython-312.pyc | Bin 0 -> 12027 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 0 -> 3494 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 0 -> 24408 bytes .../__pycache__/response.cpython-312.pyc | Bin 0 -> 52718 bytes .../site-packages/urllib3/_base_connection.py | 165 + .../site-packages/urllib3/_collections.py | 479 + .../site-packages/urllib3/_request_methods.py | 278 + .../site-packages/urllib3/_version.py | 21 + .../site-packages/urllib3/connection.py | 1093 ++ .../site-packages/urllib3/connectionpool.py | 1178 ++ .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 198 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 0 -> 28221 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 0 -> 8176 bytes .../urllib3/contrib/emscripten/__init__.py | 16 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 906 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 10247 bytes .../__pycache__/fetch.cpython-312.pyc | Bin 0 -> 28637 bytes .../__pycache__/request.cpython-312.pyc | Bin 0 -> 1426 bytes .../__pycache__/response.cpython-312.pyc | Bin 0 -> 12220 bytes .../urllib3/contrib/emscripten/connection.py | 255 + .../emscripten/emscripten_fetch_worker.js | 110 + .../urllib3/contrib/emscripten/fetch.py | 728 + .../urllib3/contrib/emscripten/request.py | 22 + .../urllib3/contrib/emscripten/response.py | 277 + .../urllib3/contrib/pyopenssl.py | 564 + .../site-packages/urllib3/contrib/socks.py | 228 + .../site-packages/urllib3/exceptions.py | 335 + .../site-packages/urllib3/fields.py | 341 + .../site-packages/urllib3/filepost.py | 89 + .../site-packages/urllib3/http2/__init__.py | 53 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1751 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 17058 bytes .../http2/__pycache__/probe.cpython-312.pyc | Bin 0 -> 3702 bytes .../site-packages/urllib3/http2/connection.py | 356 + .../site-packages/urllib3/http2/probe.py | 87 + .../site-packages/urllib3/poolmanager.py | 653 + .../python3.12/site-packages/urllib3/py.typed | 2 + .../site-packages/urllib3/response.py | 1307 ++ .../site-packages/urllib3/util/__init__.py | 42 + .../util/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1011 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 4701 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 0 -> 1223 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 0 -> 8323 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 0 -> 2879 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 0 -> 20292 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 0 -> 17175 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 0 -> 5563 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 0 -> 13330 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 0 -> 11695 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 0 -> 16232 bytes .../util/__pycache__/util.cpython-312.pyc | Bin 0 -> 2000 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 0 -> 3446 bytes .../site-packages/urllib3/util/connection.py | 137 + .../site-packages/urllib3/util/proxy.py | 43 + .../site-packages/urllib3/util/request.py | 266 + .../site-packages/urllib3/util/response.py | 101 + .../site-packages/urllib3/util/retry.py | 533 + .../site-packages/urllib3/util/ssl_.py | 524 + .../urllib3/util/ssl_match_hostname.py | 159 + .../urllib3/util/ssltransport.py | 271 + .../site-packages/urllib3/util/timeout.py | 275 + .../site-packages/urllib3/util/url.py | 469 + .../site-packages/urllib3/util/util.py | 42 + .../site-packages/urllib3/util/wait.py | 124 + Frontend/package-lock.json | 41 +- Frontend/package.json | 2 + Frontend/src/App.tsx | 40 +- .../src/components/common/CurrencyIcon.tsx | 41 + .../components/common/CurrencySelector.tsx | 126 + .../common/PaymentMethodSelector.tsx | 41 +- Frontend/src/components/layout/Header.tsx | 98 +- .../src/components/layout/SidebarAdmin.tsx | 269 +- .../components/payments/StripePaymentForm.tsx | 174 + .../payments/StripePaymentWrapper.tsx | 197 + Frontend/src/components/rooms/Pagination.tsx | 24 +- .../src/components/rooms/RoomAmenities.tsx | 607 +- Frontend/src/components/rooms/RoomCard.tsx | 32 +- .../src/components/rooms/RoomCardSkeleton.tsx | 43 +- Frontend/src/components/rooms/RoomFilter.tsx | 261 +- Frontend/src/contexts/CurrencyContext.tsx | 102 + Frontend/src/hooks/useFormatCurrency.ts | 20 + Frontend/src/pages/AdminLayout.tsx | 6 +- .../src/pages/admin/BookingManagementPage.tsx | 442 +- Frontend/src/pages/admin/CheckInPage.tsx | 5 +- Frontend/src/pages/admin/CheckOutPage.tsx | 33 +- .../src/pages/admin/CookieSettingsPage.tsx | 244 +- .../src/pages/admin/CurrencySettingsPage.tsx | 187 + Frontend/src/pages/admin/DashboardPage.tsx | 294 +- .../src/pages/admin/InvoiceManagementPage.tsx | 306 + .../src/pages/admin/PaymentManagementPage.tsx | 192 +- .../pages/admin/PromotionManagementPage.tsx | 620 +- Frontend/src/pages/admin/ReportsPage.tsx | 10 +- .../src/pages/admin/RoomManagementPage.tsx | 1253 +- .../src/pages/admin/ServiceManagementPage.tsx | 350 +- .../src/pages/admin/StripeSettingsPage.tsx | 366 + .../src/pages/admin/UserManagementPage.tsx | 405 +- Frontend/src/pages/admin/index.ts | 3 + .../src/pages/customer/BookingDetailPage.tsx | 174 +- .../src/pages/customer/BookingListPage.tsx | 10 +- Frontend/src/pages/customer/BookingPage.tsx | 532 +- .../src/pages/customer/BookingSuccessPage.tsx | 34 +- Frontend/src/pages/customer/DashboardPage.tsx | 134 +- .../src/pages/customer/DepositPaymentPage.tsx | 342 +- .../src/pages/customer/FullPaymentPage.tsx | 437 + Frontend/src/pages/customer/InvoicePage.tsx | 330 + .../src/pages/customer/MyBookingsPage.tsx | 35 +- .../customer/PaymentConfirmationPage.tsx | 9 +- .../src/pages/customer/RoomDetailPage.tsx | 364 +- Frontend/src/pages/customer/RoomListPage.tsx | 111 +- Frontend/src/services/api/authService.ts | 2 + Frontend/src/services/api/bookingService.ts | 4 +- Frontend/src/services/api/index.ts | 3 + Frontend/src/services/api/invoiceService.ts | 175 + Frontend/src/services/api/paymentService.ts | 116 +- Frontend/src/services/api/roomService.ts | 37 +- .../src/services/api/systemSettingsService.ts | 88 + Frontend/src/styles/datepicker.css | 68 +- Frontend/src/styles/index.css | 113 + Frontend/src/utils/constants.ts | 1 + Frontend/src/utils/format.ts | 96 +- Frontend/src/validators/bookingValidator.ts | 4 +- 2535 files changed, 278997 insertions(+), 2480 deletions(-) create mode 100644 Backend/alembic/versions/6a126cc5b23c_add_capacity_room_size_view_to_rooms.py create mode 100644 Backend/alembic/versions/96c23dad405d_add_system_settings_table.py create mode 100644 Backend/alembic/versions/__pycache__/6a126cc5b23c_add_capacity_room_size_view_to_rooms.cpython-312.pyc create mode 100644 Backend/alembic/versions/__pycache__/96c23dad405d_add_system_settings_table.cpython-312.pyc create mode 100644 Backend/alembic/versions/__pycache__/add_stripe_payment_method.cpython-312.pyc create mode 100644 Backend/alembic/versions/add_stripe_payment_method.py create mode 100644 Backend/src/models/__pycache__/invoice.cpython-312.pyc create mode 100644 Backend/src/models/__pycache__/system_settings.cpython-312.pyc create mode 100644 Backend/src/models/invoice.py create mode 100644 Backend/src/models/system_settings.py create mode 100644 Backend/src/routes/__pycache__/invoice_routes.cpython-312.pyc create mode 100644 Backend/src/routes/__pycache__/system_settings_routes.cpython-312.pyc create mode 100644 Backend/src/routes/invoice_routes.py create mode 100644 Backend/src/routes/system_settings_routes.py create mode 100644 Backend/src/services/__pycache__/invoice_service.cpython-312.pyc create mode 100644 Backend/src/services/__pycache__/stripe_service.cpython-312.pyc create mode 100644 Backend/src/services/currency_service.py create mode 100644 Backend/src/services/invoice_service.py create mode 100644 Backend/src/services/stripe_service.py create mode 100755 Backend/venv/bin/normalizer create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/__main__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/core.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/cacert.pem create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/core.py create mode 100644 Backend/venv/lib/python3.12/site-packages/certifi/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/cd.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/legacy.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/version.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/api.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/cd.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/constant.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py create mode 100755 Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.py create mode 100755 Backend/venv/lib/python3.12/site-packages/charset_normalizer/md__mypyc.cpython-312-x86_64-linux-gnu.so create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/models.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/utils.py create mode 100644 Backend/venv/lib/python3.12/site-packages/charset_normalizer/version.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/__version__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/adapters.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/certs.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/compat.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/models.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/structures.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/__version__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/_internal_utils.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/adapters.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/api.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/auth.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/certs.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/compat.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/cookies.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/exceptions.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/help.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/hooks.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/models.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/packages.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/sessions.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/status_codes.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/structures.py create mode 100644 Backend/venv/lib/python3.12/site-packages/requests/utils.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/REQUESTED create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/licenses/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_capability_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_external_account_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_link.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_link_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_login_link_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_person_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_any_iterator.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_mode.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_requestor.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_version.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_app_info.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apple_pay_domain.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apple_pay_domain_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apps_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_bank_account.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_base_address.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_billing_portal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_billing_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_capability.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_card.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_cash_balance.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_checkout_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_client_options.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_climate_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_connect_collection_transfer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_country_spec.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_country_spec_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_coupon.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_coupon_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_createable_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_preview_lines_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_custom_method.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_balance_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_balance_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_funding_instructions_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_payment_method_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_payment_source_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_tax_id_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_deletable_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_discount.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_dispute.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_dispute_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_encode.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_entitlements_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_ephemeral_key.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_ephemeral_key_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_error.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_error_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_expandable_field.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_financial_connections_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_forwarding_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_funding_instructions.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_http_client.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_identity_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_payment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_payment_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_issuing_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_list_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_listable_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_login_link.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_multipart_data_generator.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_nested_resource_class_methods.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_oauth.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_oauth_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_object_classes.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_attempt_record.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_attempt_record_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_record.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_record_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payout.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payout_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_person.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_plan.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_plan_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_price.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_price_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product_feature.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product_feature_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_promotion_code.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_promotion_code_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_computed_upfront_line_items_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_radar_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_refund.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_refund_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reporting_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_request_metrics.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_request_options.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_requestor_options.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reserve_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reversal.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_search_result_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_searchable_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_intent.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_intent_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_shipping_rate.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_shipping_rate_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_sigma_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_singleton_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_mandate_notification.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_client.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_context.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_response.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_code.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_code_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_deducted_at_source.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_id.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_id_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_rate.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_rate_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_terminal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_test_helpers.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_test_helpers_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_token.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_token_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_topup.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_topup_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_reversal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_treasury_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_updateable_api_resource.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v1_services.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v2_services.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_verify_mixin.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_version.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/oauth_error.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_capability_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_external_account_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_link.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_link_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_login_link_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_person_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_account_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_any_iterator.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_api_mode.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_api_requestor.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_api_version.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_app_info.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_application.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_application_fee.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_apps_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_bank_account.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_base_address.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_billing_portal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_billing_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_capability.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_card.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_cash_balance.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_charge.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_charge_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_checkout_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_client_options.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_climate_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_connect_collection_transfer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_country_spec.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_country_spec_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_coupon.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_coupon_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_createable_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_credit_note.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_preview_lines_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_custom_method.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_funding_instructions_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_method_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_source_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_customer_tax_id_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_deletable_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_discount.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_dispute.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_dispute_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_encode.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_entitlements_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_error.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_error_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_event_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_expandable_field.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_file.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_file_link.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_file_link_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_file_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_financial_connections_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_forwarding_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_funding_instructions.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_http_client.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_identity_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_invoice_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_issuing_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_list_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_listable_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_login_link.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_mandate.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_mandate_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_multipart_data_generator.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_nested_resource_class_methods.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_oauth.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_oauth_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_object_classes.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_link.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_record.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payment_record_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payout.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_payout_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_person.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_plan.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_plan_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_price.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_price_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_product.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_product_feature.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_product_feature_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_product_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_quote.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_quote_computed_upfront_line_items_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_quote_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_quote_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_radar_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_refund.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_refund_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_reporting_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_request_metrics.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_request_options.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_requestor_options.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_reserve_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_reversal.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_review.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_review_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_search_result_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_searchable_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_sigma_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_singleton_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_source.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_source_mandate_notification.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_source_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_stripe_client.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_stripe_context.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_stripe_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_stripe_response.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_stripe_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_subscription_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_code.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_code_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_deducted_at_source.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_id.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_id_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_tax_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_terminal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_token.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_token_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_topup.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_topup_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_transfer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_transfer_reversal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_transfer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_treasury_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_updateable_api_resource.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_util.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_v1_services.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_v2_services.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_verify_mixin.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_version.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_webhook.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/_secret.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/_secret_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/_secret.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/apps/_secret_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert_triggered.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_summary.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_summary_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_grant.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_grant_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_adjustment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_summary.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_summary_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_triggered.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_order.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_order_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_product.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_product_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_supplier.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_supplier_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_order.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_order_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_product.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_product_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/data/ca-certificates.crt create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_active_entitlement.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_active_entitlement_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_active_entitlement_summary.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_summary.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_event_classes.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_error_report_triggered_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_no_meter_found_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v2_core_event_destination_ping_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/_event_classes.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_error_report_triggered_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_no_meter_found_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/events/_v2_core_event_destination_ping_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_owner.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_owner_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_ownership.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_ownership.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/_request_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/forwarding/_request_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_report.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_report_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_report.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_report_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_authorization.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_authorization_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_cardholder.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_cardholder_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_dispute.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_dispute_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/oauth_error.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_external_account_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_login_link_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_person_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_external_account_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_person_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_link_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_capabilities_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_external_accounts_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_persons_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_login_link_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_capability_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_external_account_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_person_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_persons_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_reject_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_capability_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_current_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_external_account_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_person_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_create_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_list_refunds_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_modify_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_retrieve_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_bank_account_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_card_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_refunds_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_retrieve_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_confirmation_token_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_confirmation_token_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_country_spec_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_country_spec_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_lines_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_void_credit_note_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_cash_balance_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_cash_balance_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_cash_balance_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_cash_balance_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_balance_transaction_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_funding_instructions_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_source_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_tax_id_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_discount_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_source_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_tax_id_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_funding_instructions_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_balance_transactions_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_cash_balance_transactions_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_payment_methods_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_sources_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_tax_ids_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_balance_transaction_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_cash_balance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_source_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_method_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_method_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_verify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_balance_transaction_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_transaction_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_payment_method_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_source_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_tax_id_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_close_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_exchange_rate_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_exchange_rate_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_add_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_attach_payment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_create_preview_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_finalize_invoice_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_line_item_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_list_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_mark_uncollectible_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_pay_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_payment_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_payment_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_remove_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_archive_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_unarchive_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_send_invoice_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_update_lines_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_void_invoice_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_mandate_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_attempt_record_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_attempt_record_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_amount_details_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_apply_customer_balance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_confirm_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_increment_authorization_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_amount_details_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_verify_microdeposits_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_attach_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_detach_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_validate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_canceled_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_failed_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_guaranteed_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_informational_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_reverse_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_create_feature_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_feature_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_features_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_feature_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_accept_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_computed_upfront_line_items_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_finalize_quote_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_computed_upfront_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_pdf_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_review_approve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_review_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_review_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_attempt_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_confirm_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_verify_microdeposits_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_detach_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_list_source_transactions_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_verify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_delete_discount_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_migrate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_resume_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_release_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_search_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_create_reversal_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_reversals_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_modify_reversal_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_reversal_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_capability_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_capability_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_capability_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_create_external_account_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_create_login_link_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_create_person_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_delete_external_account_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_delete_person_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_external_account_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_external_account_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_external_account_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_external_account_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_external_account_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_link_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_list_capabilities_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_list_external_accounts_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_list_persons_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_login_link_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_modify_capability_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_modify_external_account_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_modify_person_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_person_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_person_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_person_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_person_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_person_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_persons_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_reject_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_retrieve_capability_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_retrieve_current_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_retrieve_external_account_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_retrieve_person_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_account_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_apple_pay_domain_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_apple_pay_domain_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_apple_pay_domain_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_apple_pay_domain_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_create_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_list_refunds_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_modify_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_refund_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_refund_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_refund_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_refund_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_application_fee_retrieve_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_settings_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_settings_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_settings_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_balance_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_bank_account_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_card_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_list_refunds_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_retrieve_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_charge_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_confirmation_token_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_confirmation_token_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_country_spec_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_country_spec_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_coupon_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_list_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_preview_lines_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_preview_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_preview_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_credit_note_void_credit_note_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_balance_transaction_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_balance_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_balance_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_balance_transaction_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_cash_balance_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_cash_balance_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_cash_balance_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_cash_balance_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_create_balance_transaction_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_create_funding_instructions_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_create_source_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_create_tax_id_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_delete_discount_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_delete_source_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_delete_tax_id_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_fund_cash_balance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_funding_instructions_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_balance_transactions_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_cash_balance_transactions_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_payment_methods_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_sources_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_list_tax_ids_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_modify_balance_transaction_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_modify_cash_balance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_modify_source_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_method_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_method_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_payment_source_verify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_balance_transaction_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_cash_balance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_cash_balance_transaction_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_payment_method_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_source_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_retrieve_tax_id_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_tax_id_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_tax_id_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_tax_id_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_tax_id_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_customer_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_dispute_close_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_dispute_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_dispute_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_dispute_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_dispute_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_ephemeral_key_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_ephemeral_key_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_event_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_event_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_exchange_rate_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_exchange_rate_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_link_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_link_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_link_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_link_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_link_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_file_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_add_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_attach_payment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_create_preview_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_finalize_invoice_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_item_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_line_item_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_list_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_mark_uncollectible_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_pay_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_payment_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_payment_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_remove_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_rendering_template_archive_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_rendering_template_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_rendering_template_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_rendering_template_unarchive_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_send_invoice_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_update_lines_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_invoice_void_invoice_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_mandate_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_attempt_record_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_attempt_record_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_amount_details_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_apply_customer_balance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_confirm_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_increment_authorization_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_list_amount_details_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_intent_verify_microdeposits_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_list_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_link_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_attach_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_configuration_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_configuration_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_configuration_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_configuration_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_configuration_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_detach_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_domain_validate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_method_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_attempt_canceled_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_attempt_failed_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_attempt_guaranteed_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_attempt_informational_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_attempt_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_payment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_report_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payment_record_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_reverse_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_payout_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_price_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_feature_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_feature_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_features_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_feature_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_product_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_accept_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_computed_upfront_line_items_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_finalize_quote_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_computed_upfront_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_pdf_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_review_approve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_review_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_review_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_attempt_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_confirm_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_verify_microdeposits_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_detach_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_list_source_transactions_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_source_verify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_delete_discount_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_migrate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_resume_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_release_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_search_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_token_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_token_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_reversal_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_reversals_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_reversal_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_reversal_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_delete_where_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_find_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/_secret_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/_secret_delete_where_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/_secret_find_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/apps/_secret_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_activate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_archive_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_deactivate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_summary_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_void_grant_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_deactivate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_event_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_event_summary_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_list_event_summaries_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_reactivate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_activate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_archive_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_deactivate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_summary_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_void_grant_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_deactivate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_adjustment_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_summary_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_event_summaries_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_reactivate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_configuration_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_configuration_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_configuration_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_configuration_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_configuration_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_list_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_product_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_product_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_supplier_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_supplier_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_active_entitlement_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_active_entitlement_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_disconnect_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_list_owners_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_owner_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_refresh_account_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_refresh_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_subscribe_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_unsubscribe_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_disconnect_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_owners_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_owner_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_account_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_subscribe_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_unsubscribe_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/_request_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/_request_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/_request_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_report_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_report_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_redact_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_redact_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_approve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_decline_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_reverse_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_return_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_submit_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_approve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_decline_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_finalize_amount_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_increment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_respond_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_reverse_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_authorization_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_deliver_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_fail_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_return_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_ship_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_submit_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_card_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_cardholder_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_cardholder_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_cardholder_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_cardholder_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_cardholder_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_submit_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_dispute_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_activate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_deactivate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_reject_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_personalization_design_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_physical_bundle_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_physical_bundle_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_token_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_token_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_token_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_token_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_create_force_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_create_unlinked_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/_transaction_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_early_fraud_warning_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_early_fraud_warning_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_item_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_item_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_item_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_type_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_type_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/_report_run_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/_report_run_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/_report_run_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/_report_type_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/_report_type_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/_scheduled_query_run_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/_scheduled_query_run_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_list_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_settings_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_settings_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_settings_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_from_calculation_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_reversal_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_line_item_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_list_line_items_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_list_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_from_calculation_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_reversal_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_line_item_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_list_line_items_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_connection_token_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_cancel_action_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_collect_inputs_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_collect_payment_method_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_confirm_payment_intent_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_payment_intent_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_setup_intent_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_refund_payment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_set_reader_display_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_timeout_input_collection_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_connection_token_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_cancel_action_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_inputs_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_payment_method_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_confirm_payment_intent_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_present_payment_method_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_payment_intent_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_setup_intent_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_refund_payment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_set_reader_display_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_succeed_input_collection_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_timeout_input_collection_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_confirmation_token_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_refund_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_advance_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_confirmation_token_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_customer_fund_cash_balance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_refund_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_test_clock_advance_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_test_clock_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_test_clock_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_test_clock_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/_test_clock_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_reverse_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_return_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_expire_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_finalize_amount_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_increment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_respond_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_reverse_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_deliver_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_fail_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_return_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_ship_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_submit_card_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_activate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_deactivate_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_reject_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_force_capture_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_unlinked_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_refund_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/_reader_timeout_input_collection_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_present_payment_method_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_succeed_input_collection_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_timeout_input_collection_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_return_inbound_transfer_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_succeed_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_post_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_return_outbound_payment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_post_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_return_outbound_transfer_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_credit_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_debit_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_close_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_features_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_features_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_modify_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_features_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_features_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_cancel_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_entry_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_entry_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_close_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_modify_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_features_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_features_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_return_inbound_transfer_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_succeed_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_post_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_return_outbound_payment_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_cancel_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_fail_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_post_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_return_outbound_transfer_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_session_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_stream_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/_meter_event_adjustment_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/_meter_event_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/_meter_event_session_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/_meter_event_stream_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_create_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_delete_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_disable_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_enable_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_ping_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_update_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_list_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_retrieve_params.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_create_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_delete_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_disable_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_enable_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_ping_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_destination_update_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_list_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/_event_retrieve_params.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_early_fraud_warning.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_early_fraud_warning_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_run.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_run_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_run.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_run_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/_scheduled_query_run.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/_scheduled_query_run_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_line_item.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_line_item_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_location.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_location_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_confirmation_token_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_customer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_issuing_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_refund_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_terminal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_treasury_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_confirmation_token_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_customer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_issuing_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_refund_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_terminal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_treasury_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_authorization_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_card_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_personalization_design_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_authorization_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_card_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_personalization_design_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__pycache__/_reader_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/_reader_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_outbound_payment_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_outbound_transfer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_credit_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_debit_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_inbound_transfer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_payment_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_transfer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_credit_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_debit_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_credit_reversal.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_credit_reversal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_features.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_features_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_inbound_transfer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_payment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_payment_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_transfer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_transfer_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_credit.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_credit_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_debit.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_debit_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_credit_reversal.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_credit_reversal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_amount.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_billing_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_core_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_deleted_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_list_object.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/_amount.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/_billing_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/_core_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/_deleted_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/_list_object.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_adjustment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_stream_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_stream_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/_event.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/_event_destination.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/_event_destination_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/_event_service.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_service.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/licenses/LICENSE.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_base_connection.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_version.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/exceptions.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/poolmanager.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/_base_connection.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/_collections.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/_request_methods.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/_version.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/connection.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/connectionpool.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/socks.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/exceptions.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/fields.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/filepost.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/connection.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/http2/probe.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/poolmanager.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/response.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/connection.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/connection.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/proxy.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/response.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/retry.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/timeout.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/url.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/util.py create mode 100644 Backend/venv/lib/python3.12/site-packages/urllib3/util/wait.py create mode 100644 Frontend/src/components/common/CurrencyIcon.tsx create mode 100644 Frontend/src/components/common/CurrencySelector.tsx create mode 100644 Frontend/src/components/payments/StripePaymentForm.tsx create mode 100644 Frontend/src/components/payments/StripePaymentWrapper.tsx create mode 100644 Frontend/src/contexts/CurrencyContext.tsx create mode 100644 Frontend/src/hooks/useFormatCurrency.ts create mode 100644 Frontend/src/pages/admin/CurrencySettingsPage.tsx create mode 100644 Frontend/src/pages/admin/InvoiceManagementPage.tsx create mode 100644 Frontend/src/pages/admin/StripeSettingsPage.tsx create mode 100644 Frontend/src/pages/customer/FullPaymentPage.tsx create mode 100644 Frontend/src/pages/customer/InvoicePage.tsx create mode 100644 Frontend/src/services/api/invoiceService.ts create mode 100644 Frontend/src/services/api/systemSettingsService.ts diff --git a/Backend/alembic/versions/6a126cc5b23c_add_capacity_room_size_view_to_rooms.py b/Backend/alembic/versions/6a126cc5b23c_add_capacity_room_size_view_to_rooms.py new file mode 100644 index 00000000..28ff8e19 --- /dev/null +++ b/Backend/alembic/versions/6a126cc5b23c_add_capacity_room_size_view_to_rooms.py @@ -0,0 +1,29 @@ +"""add_capacity_room_size_view_to_rooms + +Revision ID: 6a126cc5b23c +Revises: add_stripe_payment_method +Create Date: 2025-11-17 16:25:09.581786 + +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '6a126cc5b23c' +down_revision = 'add_stripe_payment_method' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Add the three new columns to rooms table + op.add_column('rooms', sa.Column('capacity', sa.Integer(), nullable=True)) + op.add_column('rooms', sa.Column('room_size', sa.String(length=50), nullable=True)) + op.add_column('rooms', sa.Column('view', sa.String(length=100), nullable=True)) + + +def downgrade() -> None: + # Remove the three columns from rooms table + op.drop_column('rooms', 'view') + op.drop_column('rooms', 'room_size') + op.drop_column('rooms', 'capacity') diff --git a/Backend/alembic/versions/96c23dad405d_add_system_settings_table.py b/Backend/alembic/versions/96c23dad405d_add_system_settings_table.py new file mode 100644 index 00000000..348e7209 --- /dev/null +++ b/Backend/alembic/versions/96c23dad405d_add_system_settings_table.py @@ -0,0 +1,60 @@ +"""add_system_settings_table + +Revision ID: 96c23dad405d +Revises: 59baf2338f8a +Create Date: 2025-11-17 11:51:28.369031 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = '96c23dad405d' +down_revision = '59baf2338f8a' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Create system_settings table (if it doesn't exist) + from sqlalchemy import inspect + bind = op.get_bind() + inspector = inspect(bind) + tables = inspector.get_table_names() + + if 'system_settings' not in tables: + op.create_table('system_settings', + sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), + sa.Column('key', sa.String(length=100), nullable=False), + sa.Column('value', sa.Text(), nullable=False), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=False), + sa.Column('updated_by_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['updated_by_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_system_settings_id'), 'system_settings', ['id'], unique=False) + op.create_index(op.f('ix_system_settings_key'), 'system_settings', ['key'], unique=True) + + # Add currency column to users table (if it doesn't exist) + columns = [col['name'] for col in inspector.get_columns('users')] + if 'currency' not in columns: + op.add_column('users', sa.Column('currency', sa.String(length=3), nullable=False, server_default='VND')) + # ### end Alembic commands ### + + +def downgrade() -> None: + # Drop currency column from users table + try: + op.drop_column('users', 'currency') + except Exception: + # Column might not exist, skip + pass + + # Drop system_settings table + op.drop_index(op.f('ix_system_settings_key'), table_name='system_settings') + op.drop_index(op.f('ix_system_settings_id'), table_name='system_settings') + op.drop_table('system_settings') + # ### end Alembic commands ### + diff --git a/Backend/alembic/versions/__pycache__/59baf2338f8a_initial_migration_create_all_tables_.cpython-312.pyc b/Backend/alembic/versions/__pycache__/59baf2338f8a_initial_migration_create_all_tables_.cpython-312.pyc index 1cf866f581d46155e46cd0d34f8810bad713d0d3..8852a425ffc1254323da0a010aba86f71a71f9cf 100644 GIT binary patch delta 20 acmX@Mm+{zMM$Xf`yj%=G(6^CuZyW$hg9c;( delta 20 acmX@Mm+{zMM$Xf`yj%=G;J1-;ZyW$gLk1)O diff --git a/Backend/alembic/versions/__pycache__/6a126cc5b23c_add_capacity_room_size_view_to_rooms.cpython-312.pyc b/Backend/alembic/versions/__pycache__/6a126cc5b23c_add_capacity_room_size_view_to_rooms.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a578129ee117b9965473dc9d6318afd2cd6df0f GIT binary patch literal 1585 zcmcIkO=uHA6yDuTHk;K*Eo!m#5cHryYnqj|Hi(B>#2*^4trerNYz>J3y* zgHD0g8;M-{+HDJC)3$ueu7wSgQR5{NYv3`sZDSyS4h|nKj2<4*^<`05PUZ^rOMLTc7{2q5*W2xG#3~IE+9jffGw;QJ}(FY~#rPik)1A9aEuoe@9|)@x?!*57Ay~LA(QUTXG6q|w1t9foHTQQ+GYC1Qu71wd~YMFC-PhxH=8&^D2*}715+0ZoW!glCOAI^AjYP52>F&K||sU zj#D}hdHHe6o+lp8TMlvOYIc5sFhTJkznXaFM&{$7-{7gbUtty|tPj9@VFwO~rt}%9 zHz%)8-r4)WcsO={>{0o7?~DGY{m*v2M$y1zgi0URBwTpD`$g_)?v)W4$KReg8x71x z=-k?**`=u`=O3ScX-9+OuVLrUAi0JPo(NSbrL@vT^p}#9!p1ZZ5DQ zSz;-856cK4sLjM|<&@TE-h>(TO*{U!Y@3LRve*s~JdNoUuhr##@OQ!v4uEKNxpcjB zXY}6j2<;KwYI&z4w6E)(dWZJL*X0zhG7{FASITYTDbvK%Hcg&tQ=v_`;Id;mc9pmd z)+69G*8U6fjChFIb?2Dn*;NxrO`L%1nD{`fz@%Qx1|}Z6rj{St5trh+LyodN5EYXg z90KtrA literal 0 HcmV?d00001 diff --git a/Backend/alembic/versions/__pycache__/96c23dad405d_add_system_settings_table.cpython-312.pyc b/Backend/alembic/versions/__pycache__/96c23dad405d_add_system_settings_table.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e79eea6824d4ef3faa45c3340018c24d9d88fffb GIT binary patch literal 3308 zcmb_eU2Gf25#IYDc|7u{AIqX7G&W<)N}1N8eoRTGloXI9M`~d;NQ@#<(OyrtYx-pJ zNbembF_i$eD9{QHUAA`KqKws#Js-3L^v?%)EH#Jg$)=%9% z@}x`5wnp0}I6F5x`|a%P&dmN+QDi{dFSa|3Hzff6%s$-4*O;9N%3J{u%mBziKEq}C z8J=UjkP&7?+KU-q)<5H?GT%%9`e!64%mnFQhCvwki8vFYy+r$PQHaa$+8TtaRkUoB zRV`%OhMBfhTbs=wS$+%68=u$WsV0+V2NAjs)A*H ziJuGZ>$%*Xz5s{}LL>ymGt!=s-49jS-t@n^kT-0B&x7aLJ;Y{0gScGo-Zd2ygfe>zRE zI=?I~fOy9gW=BcWR=_Z=Jko8_@TL4ocmtk29p{On73`d0>KJ8_X%opTWHKzZ65#?W zK7~~ne+HRp`+S_kVJaZLc`Z{wBm|MAVknl?%!O#E-#m=+--o<)n)WvrN-HK<`Nr*jw?Y4cmCcq(UFHr5R4(v~-| zk=1bVi&A$PY6Ds%+&L0rhUm^p7Li%WtA51&j@?9b%njBKG)Jv)thR_i^+=#L(_%Fx z=Co(CiSxNEN~F!j#2B(J*tvXSB4?w_@zGrF0<}Les_7Sy2@_fdWoHdNK|RN6sg>|n zIrU#w-|l>o1Pb{y)*!k<6ZAtlU0Z1?Z<8uKtoaUSh@tZ^8iGES1 z$FtYiD};r@&JlWES3nThwU-6}bM8ZKPZ>B5x&3_O(XI1_@r<&F`%;5~n_;22;rl;f z`u`(ly_e8lC1V-%D6ng982~zIn&7}Rc(1Sk7KLfBz{LYoI7)YdSqZ?bkYiT;XzG&p zlLuyx5E`#eiU~oS%hzI<1jiS3R7;eO+zEU9D%B^lBXCfD4tA&n;65e~!rX#c4XzRT zouGefj*=4C7Db=JE<}P?w#08g z5&hnQ?#<>zdF0HNI8_@cHy_;+JO94h0Kx}92fR=DlN8?e(f*m$M3?(<>nIOC;e(?Q z;S+_Uloky?Ms@+4Q*ng^R2AlQRV9I17IAiuU!pTHtFPq1egf`>2368+3o}m>3D+L) zL}6Q1_djQ`X6olvT8L1FCPRqwG)-A*&UDfYX70c#Mur(--g+jDWOJ~PL9gR+`pNFH zH9*O>z;WDPc|RxqEdsdcA3*doaEyjrxT7RJZah>{9yhj7qBND{9e*2lk=q>#amO6o Fe*zo^#D4$) literal 0 HcmV?d00001 diff --git a/Backend/alembic/versions/__pycache__/add_stripe_payment_method.cpython-312.pyc b/Backend/alembic/versions/__pycache__/add_stripe_payment_method.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30dfef5ef50058864bc3d3fdbe3ff65a3a2356ba GIT binary patch literal 1494 zcmdT^%TLrm7@u~Rwp+Fc!3cWLCTf;7!Y(L27BvAD#bj9wfrGs?-Ok9C?PHxOk0qEa ziHSiD9P#Lt@TYjvi)4%^y?Da_7f#NU5=fN9n{nFteUEv3GxPmsK4_W>Sb4vH$?28> z_{NRnBF4(zI8!zO1O|Wt6kWj+4N>5F!c7=SCX;T9Cm9m+wHPv#3V`-`zkkOb zxCJeEJ3k23QH-n*=|u(weIP$D*qiU~?Z2z{4;1ow_V?wZqN+dm&awg(gL;{X7Oz2G zy7c0i@o4&V96LUjNF*5Yy7!jBCJ2Sd%V6&K_>LV+ZpZp7uma|iry62)PWs&kg<1~) z_`<1~l|S?nx8ukHXs|DvC}SRAd40GvJvOCJ508|_^!T)iJ~3H*`uMp%I$4^TC?C7y zB}!s zXHhy?B?Sgeu-^vKZ5u;tL+cNl#T~iz&C2S^XSw^M-2Lv!C;95W1X8UV>YBPM0?iN) z5@Jf-O@oxS$3}zyiX5x|h#V)Bz?{oiV{nvfe2%F!1%pNZC^tMWjQ@b#W6%WOTeZK; z%(FN%GElDJ4mLO|QVFAQ9{c62MrG54fo+;pj!APwO_ePy{ua F_7_RnaC`s& literal 0 HcmV?d00001 diff --git a/Backend/alembic/versions/add_stripe_payment_method.py b/Backend/alembic/versions/add_stripe_payment_method.py new file mode 100644 index 00000000..a442b6a3 --- /dev/null +++ b/Backend/alembic/versions/add_stripe_payment_method.py @@ -0,0 +1,50 @@ +"""add_stripe_payment_method + +Revision ID: add_stripe_payment_method +Revises: 96c23dad405d +Create Date: 2025-01-17 12:00:00.000000 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = 'add_stripe_payment_method' +down_revision = '96c23dad405d' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Note: MySQL ENUM modifications can be tricky. + # If payments table already has data with existing enum values, + # we need to preserve them when adding 'stripe' + + # For MySQL, we need to alter the ENUM column to include the new value + # Check if we're using MySQL + bind = op.get_bind() + if bind.dialect.name == 'mysql': + # Alter the ENUM column to include 'stripe' + # This preserves existing values and adds 'stripe' + op.execute( + "ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet', 'stripe') NOT NULL" + ) + else: + # For other databases (PostgreSQL, SQLite), enum changes are handled differently + # For SQLite, this might not be needed as it doesn't enforce enum constraints + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # Remove 'stripe' from the ENUM (be careful if there are existing stripe payments) + bind = op.get_bind() + if bind.dialect.name == 'mysql': + # First, check if there are any stripe payments - if so, this will fail + # In production, you'd want to migrate existing stripe payments first + op.execute( + "ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet') NOT NULL" + ) + # ### end Alembic commands ### + diff --git a/Backend/requirements.txt b/Backend/requirements.txt index 0b60cf4d..f805fe39 100644 --- a/Backend/requirements.txt +++ b/Backend/requirements.txt @@ -16,6 +16,7 @@ pillow==10.1.0 aiosmtplib==3.0.1 jinja2==3.1.2 alembic==1.12.1 +stripe>=13.2.0 # Enterprise features (optional but recommended) # redis==5.0.1 # Uncomment if using Redis caching diff --git a/Backend/src/__pycache__/main.cpython-312.pyc b/Backend/src/__pycache__/main.cpython-312.pyc index 8a1eb58b9e6d4f271ec93c17c57950dd4b9a13bb..214e3ce3e1de04ca39020337387fb263a8475ac0 100644 GIT binary patch delta 531 zcmdm(@;06CG%qg~0}vdyk5#y zQY%vYs<;^#Rx^TJ$iNU)2^1}#{6Ij2EyX`oKI_|L1zu6cA0Tq_cL6ccUl3);WY*uw zr{$z3+XzZBR!$BRjAp#Od6Qr%A0yvn4Fx?8zRbL`{LJLk$$knm1aFBIR~DC~=EfJN zmXu`Xr5A6$uVBl>+5j}}?Pf(~M@Gil$;m3Ztj$1yZ=0v8FfuaMZ=SB&4iw)kuO7g} zSUmg0SXwVS|gp20O$qFbG{?aF{$p zKXdY7efiCd2KIxCZqr4SB6HSDTWMB3|Uh}nV*=6qzW)U H6#%gTsx+V+ delta 368 zcmaExzA=UGG%qg~0}#C6mdec0n8+u=G(&Ksh85=|Zpq2(c|<2SaH($I%UQ>?c|Ff0 z=E-*jR2UymW)jq7ElTyvdOX=cP*b=#wIsziTZ4h2XmSce3U5wnRO#d#L1)u4CWh3w z)Up)6DsBdb)r=rZ7#O0;fuf~ZA0RwrGQ~etKI_vYUQxy`Kw>h#kl5tMg2GH$KPUf} zmzo?RB*|DlIZr5>(SP$Pp;A6Zp2-f1dXwuECu~+zGGk(`0~+;WbE1kPBV+aC#j3ij zjX;5qo3E-eGBVa~zOL2|6yF@L5x~S)J9&eaz2Gg5{Ji+ovedkiB9PXi#>rgTY1}7( zOprs1AFyw()>dT^VPRzY&Hy7mgIFK*Qs|Mxsfo43AVst&Y4-pC diff --git a/Backend/src/config/__pycache__/settings.cpython-312.pyc b/Backend/src/config/__pycache__/settings.cpython-312.pyc index a44e4b3168a77c94238f722ec7b712297ccc272f..ed6ad98ba675291f9a81bb6233738b303fa32e93 100644 GIT binary patch delta 591 zcmbPfa?p(LG%qg~0}w3uB9&<+x{*(Sk#WvudB)c)^-K(@Y$@_76>B(GGl5hvFhrT8 za-?#mRN4U9P}wRZSyQlVHIi%%lB^k6wiYCtYMxS;%8|yDQs2U|8e}jKL|K4Ed4Zx0 zU{Q03uq9l$5lOKX+=wP5QR~WP&6dq+Y@0dis|15fiZTmQ6^c`ni&9GzvQsN>2?mD* zc?P(~2fI24xrW4hyGB-tK~)u$Cgo%nXCx-&q=J=-L6ruCI{A18dpJ7zxPsM-Le-b2 zCS~O3XG2ZDB??s@?&{>>@9!NS%nG(*vn0O}BV+PpAAv`VQIqurO(**ZDNJq=>}HDx zdafvHvZ#;wUJ}FGwvasVs^Ci6w%FWDt=$d7G#r619w( plXE098A~T$lT?$9%U*DAEO53jq0ar*Z%Q delta 297 zcmX?THq(UfG%qg~0}v!Vmdq3r*~llr$mq0Lp7AwHOsYvrMJh)cQ%YqE%W9AkAc!&r zi}C_RtB^#^;G)$?qULZDYLG-NDr+_CHXmTy%(3}9zY!y2++;1mM~vZSl`pT2>T3`LmEYW5#A}VFyO;P>@InhzOfpCZYn=F str: """Construct database URL""" diff --git a/Backend/src/main.py b/Backend/src/main.py index ce48c970..ecfda6d7 100644 --- a/Backend/src/main.py +++ b/Backend/src/main.py @@ -193,15 +193,17 @@ app.include_router(privacy_routes.router, prefix=settings.API_V1_PREFIX) # Import and include other routes from .routes import ( - room_routes, booking_routes, payment_routes, banner_routes, + room_routes, booking_routes, payment_routes, invoice_routes, banner_routes, favorite_routes, service_routes, promotion_routes, report_routes, - review_routes, user_routes, audit_routes, admin_privacy_routes + review_routes, user_routes, audit_routes, admin_privacy_routes, + system_settings_routes ) # Legacy routes (maintain backward compatibility) app.include_router(room_routes.router, prefix="/api") app.include_router(booking_routes.router, prefix="/api") app.include_router(payment_routes.router, prefix="/api") +app.include_router(invoice_routes.router, prefix="/api") app.include_router(banner_routes.router, prefix="/api") app.include_router(favorite_routes.router, prefix="/api") app.include_router(service_routes.router, prefix="/api") @@ -211,11 +213,13 @@ app.include_router(review_routes.router, prefix="/api") app.include_router(user_routes.router, prefix="/api") app.include_router(audit_routes.router, prefix="/api") app.include_router(admin_privacy_routes.router, prefix="/api") +app.include_router(system_settings_routes.router, prefix="/api") # Versioned routes (v1) app.include_router(room_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(booking_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(payment_routes.router, prefix=settings.API_V1_PREFIX) +app.include_router(invoice_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(banner_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(favorite_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(service_routes.router, prefix=settings.API_V1_PREFIX) @@ -225,6 +229,7 @@ app.include_router(review_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(user_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(audit_routes.router, prefix=settings.API_V1_PREFIX) app.include_router(admin_privacy_routes.router, prefix=settings.API_V1_PREFIX) +app.include_router(system_settings_routes.router, prefix=settings.API_V1_PREFIX) logger.info("All routes registered successfully") diff --git a/Backend/src/middleware/__pycache__/security.cpython-312.pyc b/Backend/src/middleware/__pycache__/security.cpython-312.pyc index a4e0fb76dbc0ff52468721dcc2d14b1742841dab..3ffd272c7935c841dc54fdd3242e6e60d2badb81 100644 GIT binary patch delta 19 ZcmaFD|Ae3GG%qg~0}#jvY~;Gd4gfV71gHQ2 delta 19 ZcmaFD|Ae3GG%qg~0}#yR-^g`~9RN5Q1t#K1UF_s~)AE zs}ZHa$dJyEBD#n%O0!Z-Q+%=j;}31dTYSNl#U-h^!Ko!BnR)5OnoPIYJ@d-)Gm}$q zaYGrNKzU8k$(&44LPerL8;it1ggB7!)709W#$?Q>%3lmNCB7JH3|QSQ_DqOLPz{r( mGRJWl0JSj!ak0nbzsz<*cNw(rGiZKd5#wfRWG~VKN&o=0=sN}g delta 92 zcmX@jd7OjqG%qg~0}wQDOJ#0jp2#P`^n_ue#vPt?h7{pNj8Q6;BATL;br^pz3QhKB siemQDRNcIr$(V7nI7<|lHc%fU5Ena5u4b|0`NSg3&D6+VqzM!P05Dk#t(4Z3*?fGp{T^GkNk;RwG8W%@S;S wj2s-9V4>8>F6@qs{+rv_RTwAF=D5V@KRJ)nN>G9^fw3dyD+7owk_OrV04iQ5ApigX delta 119 zcmew)yi=I>G%qg~0}%W>FPZ7Gk(Z5$(Ppv;lLA|DYEfBg(PV3;6h^Df3z+nn1Xsg%-`-u#t?lW{UTn*pQhW(zhw#>oZj_KXgjH?XTPPJYaBn9+Cga!xBj SamED3j+CzqAi78zs2Kn~Hy!=} diff --git a/Backend/src/models/__pycache__/invoice.cpython-312.pyc b/Backend/src/models/__pycache__/invoice.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b443ac2b6d337bebe6563b7af2b367d989881b2a GIT binary patch literal 4860 zcma)AOKcm*8D73AK1GQXWyx~@05g4$4VBi9#qWr<63G_Hlmh z0*4}>aVU!Waq@PmJ$>i%QP64g85`RN*ceVf3b@(F zR8$(dq#Aeu6B@o|5J_F2(J9fubCQB-8J5bZORd;eC@*1{?Uh*2(#PhP4V(>UkgrubG-Z<4&o5ik_gxYzc|2T&X(+DKS=ay8}o8uT#fH)66L=FNU`Z-E)=jpEd&g&YObR`G zzS~20u!ruDtqXzdL!GyTd2eUs!#|0bun}+b9uzE6{)X=svKCRl;w{`?4B`}2hW4V$WT7qWX)HDy^W$(Za0 z%Y%5yNx}MrgjRfHAJaum9TQvOrxAqbMN>9x%X7x=gi-2$;NN~${I-P@p!Yn)#CJ>} zCSF3?ECg&5jcTe{VZ3I;ZT4fCf5k^rB}o24MXQ)Vf>@`)>o9x4PZRSFS+c$9G{R5> z&lh}T5`5FR8;?r{R%pbH$%6q=mJjU&{=f!4tdYts;8#C6#s);nqFxpezEU_r@}MBY zOl)JOq#zh9A}*V;D@Rz3K>ZRTY)>@hP9Ok_moOnL4m9S5PGIE8LIw@Oc!ngIIcyqb zRr@`SNxE)gf$bfbz1`|#oNFsdgrTFlSu!+3lxfru?+b*XW2_}Anh6}8Mv`7;t+paz zquaf>0~2f}kC#N5QMdrJkv_H{n?V^%)3ELo0Ex1uR7ACElRII=O4DtXh!DZLPLpj# z<(8)6P8TbpB-2#e%2o*>=x_IBZ9x-EBEtYvH-PwwJqZkGcO3`)UcWtI2jR?^_7LtI zAr;C7oo3-0DY_u4NGNM6lI+@vW-DTqU3o!Lb%U5?N1KEf0fLEyQkAVT>DR^{}OC2Mg_x1b0v;BP`H%@xgeU>}U(9gE{?6;A<#avO8** z|J9dXj5Ow2*|j;VZ>Dy3BR9HqzHwxErfEFJ-yO4Zzo=c=$mHvhZ$_Gz*LR&>yKZG> zYcm_E?Bb23+s%>n9mgJGW* zR4ca@v@+A+b!hw2jmD?V%<|0^hIJ3k)UIv}Zd=;l*xeA9CtAm?!Be%LZww4CCgS^l7vwX&1Yw*z@}dA2ofOS>LUdWgg(FUc-1DG#%G zrf!T~Yyap>PUY?FIMr39b#`pm;ciUQJrVF-6Y8)*oW1=n9Kn_c>im9h=d6a#qYN5Y z9rX6fD&joKwmtK#{>`JD*B_}474n2tzckqd%w?pd#-v!Pa84 z`~o!K`Qc-72tLSRCJusl5G9(Xuwf74kQwj6_e$0w2N=Lkd?nU83W5ed1t^VNb6{5r zqg&XQe88X{=aLUu*Wp)h%`OYa5!TB@s<6cFvL<{9RSn5t30aj40m`8=CezHt1vYt1 zmQ*Y_yc%I^W)u)}m%NFt$tP^kZ<%1ZpPT|ggKP+mxcIFZo(0y9?kqI)S0Gr1-_s+* zzn;zE1%~uF)Ceq(Hce~bI3!9t6>mw;-Kp5hoUqgT>j}G8a(-=9E1BoUzQa`nx+WYW=lSf!Y3Rwv7U0IaNx3E&}I#^an zIpq;6cI|IFh~k`tT}%Zr`~3te6m?!&n1EVJEWs}#B+W(zfbE?M z$G&>@v1}&eSJ4lhUoL(|Oc=qw&Fk!b{1EW@eE;N1-*ctEbERk8{%73SKe+faZuiS@ t$hUp*Ts`~swxw+^Iq1CXKk56O?+@rD$39=)^9}pgAaT2{|A?x;9~#) literal 0 HcmV?d00001 diff --git a/Backend/src/models/__pycache__/payment.cpython-312.pyc b/Backend/src/models/__pycache__/payment.cpython-312.pyc index 0797cabd1ec3dc32090e848c1a8e570e023ef705..b053a6dfd41d5d13794599cc9c90a34c7130c6fb 100644 GIT binary patch delta 475 zcmew=+9SqynwOW00SFd+k;>#|-^e$ckx^yxDn><)6t*aiN_I_-$>$l}xo@!*mlS0d zr21)cPL^b{W4Y zlAe5;DLq^qsI*7|L`Z@Nc@UuhA{0S{6o`-p5i%e`4n_z98O0!?h2aLbV1vsIKJfBiX>tmY;l=-HHut zxXNT%jvh%gYc)Zpf(W_Ihd87eA@*uce#}{=3DytR308!v@fU|pZhlH>PO4pz-{dwf f4Iws0u?fyIMCMD*l>EW~_F^Ob=kC delta 450 zcmeAX`zp$JnwOW00SNw`m(2Xiwvlf(BcsA(MrKK#6qYEq6xJyAN;XaQ$(I@3nf)|5 zCaW^pa;{|f4ASt+W^w_O0$XuvQCVuy2ni4&2O{J_gaU|=1QB2j(jb;Bj1ZXIz%0cEmXHOSRAPf>j50`}3W!hz5o#a; z%`7F57>E#?9Ka&a1vU%BO`a$yy19>~h>1~mG9$a9j6O)6E|AbjOU{)1!T{ua5tw|P%a8@+ F9RR>4R`mb? diff --git a/Backend/src/models/__pycache__/room.cpython-312.pyc b/Backend/src/models/__pycache__/room.cpython-312.pyc index 90ed2248430b675da4699463b3852fb5558fedd1..71ea50daadd6e56ad0d2bd9d4e6a26facd18b4f6 100644 GIT binary patch delta 462 zcmZ1>cut7#G%qg~0}zDkOJ{y%+sOBwkY!!OkW*Y zQ<&DUt!4r#XJCjDVPZ&S0b$p@H4wfR;vL(GqoN60`#kV%;OME=z*Q1uEx^@=G1DU53b;qF!fiwUI&BZ(=4 z#Y9lVRKQ}QDZ(jYYsBF$P_2~El$>0~(!~DK2x!U6l*wONDg|_a%vnv_g>YG%qg~0}!0QAeniebtB(*Mn=oYY)lGl#i>PQsYR1@nPQk;Fi!4f`YI}t z!nB5MH4{iR14EQ36GJLXs>tMn%H5OHKOg>?X!xTmrLPGVO+xxcY{1wOu!~Z5J^x0EGUE`rU(`jP7zEIStAN}l2WCZrugL3EKQTc zS<3{pfEL|iPfjdOPE1Ml(^Q^(m$hqh6Want_Q}fZ?VGQ$>o799PiE${5)@&KW9%^b L$^fE^q=DK1{|Y|I diff --git a/Backend/src/models/__pycache__/system_settings.cpython-312.pyc b/Backend/src/models/__pycache__/system_settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e1c5364ae7f8f9b3813bdfbee14d6145a30dfc2 GIT binary patch literal 1398 zcmZux&2QX96d$j5yj3Y;VS6 z8t1g2igOT$?y=lbB@+Az;lzOp5-Xt{DFVbP7bpr`dg6_}n^cHrdFD62_vXDfZ=U@_ zy>1|oU;n)9f1)DvyIjnrGy`XM0X#$)VTGbVv6Y};7XsB*gQ8swN_HvGY)z5+0xbu+ zt!G%Jm7ro*02gtI8bQ^rDyV=yL|A)(aG6vOA)XYwmg?=wsf2A!XxAc|1feK@6mrrh zOlX^&`C(t^*IiD!en3RAOLn<1HX=s+et46lZAH`=p)U8MFy8iuu+}kHbFe-wNWY3G zuDLPsWRSUNGjR3?fQN`6TfxXKV8vE(!7dgMDG?2;@;NFV7ISO6EO~f!Tsl;84lKa# zsC;fy$@UspJJJtjco4ffBUGmSY3HVNlY-FWW{!vx96mHR#>W;|1wUKDZ`QA)7cOHCIC ze(1-XxjbU=YQ7C1iOm5?S3Y%VLd>D-v)J5JNzNC5(~K zOW!gH_i|5SAb-gF(9Gc1Lp+G#-Z+B zdb_qf*0U0I8w0bISc=6VAXVk>5z1;-*Zw*GSmtHYEvz*jcN zl;h7~c!2&Ys3rZ0j+R~@-TJMvuwQ=E{kC=7om4ubwW)FG%jd`HS1$p#e%zWE8>4H} z+T#AzN3Tt4%cJ$_;)~*33$m7keS^(p6{-w+BBAR+~p)%MxV)-vsnje?M=557;U!<)0unVR)h{it-EU c{ERv$=#3L}jAGY9^?d6j)3sMHop;8Z0J~BAg<+MhtGf3|Le=MIuFVjTBr|7Ah*8BC|%y z0xm2E7M4XZRvs)Shi0rorM#xXWIg6wt(TyHy2Tvk=c36}Bm!cyr=+GOmgbZI`O-i> zSWuI>NP6;a<~T;V$xNoIr## jkod)6lbfGXnv-f*$ delta 453 zcmew@ut|XTG%qg~0}!0QAem{qk(ZT`QEam?BRgY#s$dFh3ey_y)yyDi28JjhCWcg& zRN+*SEG>u#GMU1?x^fiKRIuK)xi94;Iv9E|Q%5oH>qBX0jVgB#>Od;=-sf`6)~9 z-NmztlEqjnjDjFiJPz%#Q{y5%qQ_%DiO#i0ueiaxL6tJ!WRrb8W=wC$xl|6jFGt^s(4*g z^`fZif~?D;hF=6Z#kjsRa0+mBuzV1k+$$-~E(+xQ{Gv2@y=140Dr1Wii<3CRAr3|- zQImfT`V$xJQ*`vR;9ta2s8 zXP`Voku#9^#bJ}1pHiBWYFAXbSx;dfqoyh&*9{@D56nRN0gz?|(jVA>9{a=&WPN64 UV3PR21QH9FEUHw&QUNpr07hAOn*aa+ delta 415 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 H;>P?x?K=&F diff --git a/Backend/src/routes/__pycache__/invoice_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/invoice_routes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe3adf71f1194df63b7bc7a22a4bec00f541685b GIT binary patch literal 9895 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 literal 0 HcmV?d00001 diff --git a/Backend/src/routes/__pycache__/payment_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/payment_routes.cpython-312.pyc index d73a5c9ab09204a8411a53e35a98244de909bdbb..ee76f0cd0e3930b64d062450ef8d4a1ab5d2a8f6 100644 GIT binary patch delta 10489 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 BY>5B> diff --git a/Backend/src/routes/__pycache__/room_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/room_routes.cpython-312.pyc index 540b142bc66156853fea19bddaac65970602605b..8132d57a17a92c7b06499eebfaa4885359dd574c 100644 GIT binary patch delta 11373 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 delta 3715 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 literal 0 HcmV?d00001 diff --git a/Backend/src/routes/__pycache__/user_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/user_routes.cpython-312.pyc index defef0679053812cc0179f54855301d59e0fff78..83eb01527987281061ea5ef1eb81d1daa418e7f1 100644 GIT binary patch delta 3691 zcma)8YitzP6`t9d*`3+9_r3PoUNBy~eqdu0W55aF5%8lX1p)N9c7qAQO{n&hn~4eat1;3(;$3eGmz$U=XIZ<`ZnN;_j=^)p@X`9M{tm8;c!L4mB_th$G zOBw6#1>V5#c^1G6wpSp4g8PDdil5@n3P-sq3;!cwijR9~-kPZ&nIt5c9hoi)hxhF+ z%BgH(L`$7Xk`|b`FYcs|t-TUygAQ%6U7x8fN~b52WSY1@Q#6mJGFp-l1v;b?HDV?; zmLwao--V(F1x8wwMskx`ttjV+nk2&~rU}Me6xC#Yq-f5Kj^>jZX+V{b$Ye+d&U*$$ zH|i`WlUhR4NQgwSD`pep$)b|V=SFj6JfV@T^dKAZKCb>*A7(4Ujq&!^M^`>GKELMXQ&0LIyXwDl^ z5+sPLU{)QfQ#Yr0)kVjA4SX-X;tLCIZ984?)%&dl%LU5{hYbo>(LedR*6)PnK9@i+ zo{|lSa0^H~3WLZZ>7ecYuo+nwchMvM`Xk6JV+InGm{BmkMiHSQ!4E3RCvv&5RQ6<^ zY(w246x&hk01=N8q#er#vIkKI{m5T;xE~?&F@Ok}O}>JHlz=iW%RS8xyUY(OlZkyHaQiY%qK~-X@@$V z%0_e9%ygU`U{Rh(P8w z#HwcIL}FyjAeM)WqW=o9n77Kuu;`*_!m{QdBJ^04lV?+T4U(nkEbq`T{bOD25X+hh zBRybTW@P0}j-U_Q2;2T)+KXaXJO{8H9nnuM3fuWn?WSv4-QA zUF7R1j-g)5Dj_nNgr%LU%i((orSx&OG@McNQqp0Mc1G<&G z17xJ$THEA=3Z>7;J*?6X;K{$aa$$0BUzD11{Dxq3zWQFU^-|wMmuI%;^};;=YuB3j zQ@@XO--~tsCf4&H+VlhGyUzR3j#=?L4muXU`2VJBY%m0OD(^suTMF`kmqMOFzp&IC z8*~eI+!EkBeqk`Qc%k{9CVzzvj2#drM^f~)wl;nn{h%$jF^dZ0Bz>!oj-BaoG++l? zg(yMo8@gut02a+^GLwYMEjx-;2VnlP|8CJ`+?JX8{}^T_I%?Yi7nlCV=U zbH2!1yRJT4vaqhq*_m23>!Id8D!V9?1a?ti!tJ`p(6F1}=9>SHF(B)?Yu za`mOX?{2=a{b!r+x9qy#u>0;>I@DR$+zBDbwvqtvN1i}Qf;TJ-jx2!C&tC9@$~3*! z+1dv?`3m9XuccFQMsG`t8>kkJ@|#_9>F7+C?S9u5VVCs8P`$};%tA( Q#Iy(Ki(SLwb=bN80?Iob#sB~S delta 3132 zcmZ`*TWlN072V}>$z48{E0Rl^)Ps^G)1hTqlJ%(dtP&fNsm4xV$3j!b7AP*Ikfum^ zxQyb2wCgqnA~Z!33|ge9`ar*G*hQQ2qhBrDHgGKG!{~>LV%rY~{b_&{W#Xb}Qy}iW zv!ZAV?Erh`%)NIWJ9Fmlew6#git>Ti>*Ao?{zD|Ya^PJ>5nVoLejT0%$7^x%p3Qdd z-}IsL2lN9e1W&u*tSIzqTx(TwPhiK#3kg-gPE&G#+T?(v!0Qr(r<_50R*vv}^uuUW z0;3F3ho~CR1gs(2aw+K2U7Oyjuj0)O(yMJj`cQT`-uRE5)7`Yi)t>Tf+I8=yO;R9q$j~4IXtC$B z7c!(D+k*(B2)HIwOc%=q!<33d&ydBXO9WSE+VxB+Z90m}%cYD#y3r)0@_BLy`wbxs zBXk0o_Cm_Hnla^UskmGut0{vVq2Kb%MvtOXBE@`WaW%EZW+UU+D@p(6+0Yh%s_>Ma zgg5^y_ph&V_0UZ1o8AFl_>@!Wuayz{P+4qkRU*pk$$AIp4ZL|`T`STx~0lcPMF2N1eQ%34B1>+@W z3g&A0$dq8O_&~E)+cf%KTfndTH=R{g59mQ%tEh1LA^NZ_64=R*kezy~Efrg?7gM0h zbA}g&V?_@eee_IwOxsg!x!kf#91*$!9^7VAT1%Bm>ySQJrXh#vuiEEM&4A}Kv1}~& z9Z5K>1ev-zZrXtut&G%qS?8Fcz>t~UT z(qe4H&7@;VhW;$py8jHgOm~`OQbuMGkCD6r779=4y{2T2)INzV@bu4N$row=VaInn zKJiIRIw6|tT9}@j2I-8=PII@Wc;L6D{c{t-`)Yh{RCs?>L_Q&aJ#B|!8wJJ6#L-jx zyvrlFPgQu`9|2=7LO+ZI!hyyIs45w)jZV2X5JRh1e#Fv&c~6uo@^u@%>x@SAosJdz zVoReVWW9Z;BL~j`-OqC6`S>OJ_jq4R5QON`H9e${2RQ8=K}OjAznZNA@y8Gnsjy*+^zs6HBS(HApkt zO07c3J$Opb?R=-zadGl~t&+&|G}gQR{{$PKSK-_2PO99Nj|aY``scmE*53HMB;1ii z;CH;jyjmMM_z#=bJfazxi{Q@?S*Fwdef${B_s0h>puyVb;O>oOJI;2OZ9B@5oTtC* zAG$IN)O6^XdB3Rk%l zYu@L!T6y66JYS%J!>^uU2mcJNN5~covH*DPu zaO7*;13-?=`o#Wo3jKI!^uQoY zCAsSY)c5_Nx(GE)03DpbFn$i=(fA^LdU*7}G=%#CbpdJ?4)u08FbqEi;b?q{-Wcv0 odlKIShevWBI*Lf32Q1FXsDyLLNU^t8w=wH+>KIwHe;an_zsAL}!2kdN diff --git a/Backend/src/routes/auth_routes.py b/Backend/src/routes/auth_routes.py index a8f365ea..bf42926f 100644 --- a/Backend/src/routes/auth_routes.py +++ b/Backend/src/routes/auth_routes.py @@ -196,7 +196,8 @@ async def update_profile( email=profile_data.get("email"), phone_number=profile_data.get("phone_number"), password=profile_data.get("password"), - current_password=profile_data.get("currentPassword") + current_password=profile_data.get("currentPassword"), + currency=profile_data.get("currency") ) return { "status": "success", diff --git a/Backend/src/routes/booking_routes.py b/Backend/src/routes/booking_routes.py index 37a88312..13a9110a 100644 --- a/Backend/src/routes/booking_routes.py +++ b/Backend/src/routes/booking_routes.py @@ -1,5 +1,5 @@ from fastapi import APIRouter, Depends, HTTPException, status, Query -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, joinedload, selectinload from sqlalchemy import and_, or_ from typing import Optional from datetime import datetime @@ -11,9 +11,11 @@ from ..config.settings import settings from ..middleware.auth import get_current_user, authorize_roles from ..models.user import User from ..models.booking import Booking, BookingStatus -from ..models.room import Room +from ..models.room import Room, RoomStatus from ..models.room_type import RoomType from ..models.payment import Payment, PaymentMethod, PaymentType, PaymentStatus +from ..services.room_service import normalize_images, get_base_url +from fastapi import Request from ..utils.mailer import send_email from ..utils.email_templates import ( booking_confirmation_email_template, @@ -129,6 +131,7 @@ async def get_all_bookings( @router.get("/me") async def get_my_bookings( + request: Request, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): @@ -138,6 +141,7 @@ async def get_my_bookings( Booking.user_id == current_user.id ).order_by(Booking.created_at.desc()).all() + base_url = get_base_url(request) result = [] for booking in bookings: booking_dict = { @@ -157,11 +161,25 @@ async def get_my_bookings( # Add room info if booking.room and booking.room.room_type: + # Normalize room images if they exist + room_images = [] + if booking.room.images: + try: + room_images = normalize_images(booking.room.images, base_url) + except: + room_images = [] + booking_dict["room"] = { "id": booking.room.id, "room_number": booking.room.room_number, + "floor": booking.room.floor, + "images": room_images, # Include room images "room_type": { + "id": booking.room.room_type.id, "name": booking.room.room_type.name, + "base_price": float(booking.room.room_type.base_price) if booking.room.room_type.base_price else 0.0, + "capacity": booking.room.room_type.capacity, + "images": room_images, # Also include in room_type for backwards compatibility } } @@ -221,10 +239,17 @@ async def create_booking( booking_number = generate_booking_number() # Determine if deposit is required + # Cash requires deposit, Stripe doesn't require deposit (full payment or deposit handled via payment flow) requires_deposit = payment_method == "cash" deposit_percentage = 20 if requires_deposit else 0 deposit_amount = (float(total_price) * deposit_percentage) / 100 if requires_deposit else 0 + # For Stripe, booking can be confirmed immediately after payment + initial_status = BookingStatus.pending + if payment_method == "stripe": + # Will be confirmed after successful Stripe payment + initial_status = BookingStatus.pending + # Create booking booking = Booking( booking_number=booking_number, @@ -235,7 +260,7 @@ async def create_booking( num_guests=guest_count, total_price=total_price, special_requests=notes, - status=BookingStatus.pending, + status=initial_status, requires_deposit=requires_deposit, deposit_paid=False, ) @@ -243,24 +268,101 @@ async def create_booking( db.add(booking) db.flush() - # Create deposit payment if required - if requires_deposit: + # Create payment record if Stripe payment method is selected + if payment_method == "stripe": + from ..models.payment import Payment, PaymentMethod, PaymentStatus, PaymentType payment = Payment( booking_id=booking.id, - amount=deposit_amount, - payment_method=PaymentMethod.bank_transfer, - payment_type=PaymentType.deposit, - deposit_percentage=deposit_percentage, + amount=total_price, + payment_method=PaymentMethod.stripe, + payment_type=PaymentType.full, payment_status=PaymentStatus.pending, - notes=f"Deposit payment ({deposit_percentage}%) for booking {booking_number}", + payment_date=None, ) db.add(payment) + db.flush() + + # Create deposit payment if required (for cash method) + # Note: For cash payments, deposit is paid on arrival, so we don't create a pending payment record + # The payment will be created when the customer pays at check-in db.commit() db.refresh(booking) - # Fetch with relations - booking = db.query(Booking).filter(Booking.id == booking.id).first() + # Fetch with relations for proper serialization (eager load payments) + from sqlalchemy.orm import joinedload + booking = db.query(Booking).options(joinedload(Booking.payments)).filter(Booking.id == booking.id).first() + + # Determine payment_method and payment_status from payments + payment_method_from_payments = None + payment_status_from_payments = "unpaid" + if booking.payments: + latest_payment = sorted(booking.payments, key=lambda p: p.created_at, reverse=True)[0] + payment_method_from_payments = latest_payment.payment_method.value if isinstance(latest_payment.payment_method, PaymentMethod) else latest_payment.payment_method + if latest_payment.payment_status == PaymentStatus.completed: + payment_status_from_payments = "paid" + elif latest_payment.payment_status == PaymentStatus.refunded: + payment_status_from_payments = "refunded" + + # Serialize booking properly + booking_dict = { + "id": booking.id, + "booking_number": booking.booking_number, + "user_id": booking.user_id, + "room_id": booking.room_id, + "check_in_date": booking.check_in_date.isoformat() if booking.check_in_date else None, + "check_out_date": booking.check_out_date.isoformat() if booking.check_out_date else None, + "guest_count": booking.num_guests, + "total_price": float(booking.total_price) if booking.total_price else 0.0, + "status": booking.status.value if isinstance(booking.status, BookingStatus) else booking.status, + "payment_method": payment_method_from_payments or payment_method, + "payment_status": payment_status_from_payments, + "deposit_paid": booking.deposit_paid, + "requires_deposit": booking.requires_deposit, + "notes": booking.special_requests, + "guest_info": { + "full_name": current_user.full_name, + "email": current_user.email, + "phone": current_user.phone_number if hasattr(current_user, 'phone_number') else (current_user.phone if hasattr(current_user, 'phone') else ""), + }, + "createdAt": booking.created_at.isoformat() if booking.created_at else None, + "updatedAt": booking.updated_at.isoformat() if booking.updated_at else None, + "created_at": booking.created_at.isoformat() if booking.created_at else None, + } + + # Add payments if they exist + if booking.payments: + booking_dict["payments"] = [ + { + "id": p.id, + "booking_id": p.booking_id, + "amount": float(p.amount) if p.amount else 0.0, + "payment_method": p.payment_method.value if isinstance(p.payment_method, PaymentMethod) else p.payment_method, + "payment_type": p.payment_type.value if isinstance(p.payment_type, PaymentType) else p.payment_type, + "deposit_percentage": p.deposit_percentage, + "payment_status": p.payment_status.value if isinstance(p.payment_status, PaymentStatus) else p.payment_status, + "transaction_id": p.transaction_id, + "payment_date": p.payment_date.isoformat() if p.payment_date else None, + "notes": p.notes, + "created_at": p.created_at.isoformat() if p.created_at else None, + } + for p in booking.payments + ] + + # Add room info if available + if booking.room: + booking_dict["room"] = { + "id": booking.room.id, + "room_number": booking.room.room_number, + "floor": booking.room.floor, + } + if booking.room.room_type: + booking_dict["room"]["room_type"] = { + "id": booking.room.room_type.id, + "name": booking.room.room_type.name, + "base_price": float(booking.room.room_type.base_price) if booking.room.room_type.base_price else 0.0, + "capacity": booking.room.room_type.capacity, + } # Send booking confirmation email (non-blocking) try: @@ -291,7 +393,7 @@ async def create_booking( return { "success": True, - "data": {"booking": booking}, + "data": {"booking": booking_dict}, "message": f"Booking created. Please pay {deposit_percentage}% deposit to confirm." if requires_deposit else "Booking created successfully" } except HTTPException: @@ -304,12 +406,22 @@ async def create_booking( @router.get("/{id}") async def get_booking_by_id( id: int, + request: Request, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """Get booking by ID""" try: - booking = db.query(Booking).filter(Booking.id == id).first() + # Eager load all relationships to avoid N+1 queries + # Using selectinload for better performance with multiple relationships + booking = db.query(Booking)\ + .options( + selectinload(Booking.payments), + joinedload(Booking.user), + joinedload(Booking.room).joinedload(Room.room_type) + )\ + .filter(Booking.id == id)\ + .first() if not booking: raise HTTPException(status_code=404, detail="Booking not found") @@ -318,6 +430,19 @@ async def get_booking_by_id( if current_user.role_id != 1 and booking.user_id != current_user.id: # Not admin raise HTTPException(status_code=403, detail="Forbidden") + # Determine payment_method and payment_status from payments + # Get latest payment efficiently (already loaded via joinedload) + payment_method = None + payment_status = "unpaid" + if booking.payments: + # Find latest payment (payments are already loaded, so this is fast) + latest_payment = max(booking.payments, key=lambda p: p.created_at if p.created_at else datetime.min) + payment_method = latest_payment.payment_method.value if isinstance(latest_payment.payment_method, PaymentMethod) else latest_payment.payment_method + if latest_payment.payment_status == PaymentStatus.completed: + payment_status = "paid" + elif latest_payment.payment_status == PaymentStatus.refunded: + payment_status = "refunded" + booking_dict = { "id": booking.id, "booking_number": booking.booking_number, @@ -325,24 +450,56 @@ async def get_booking_by_id( "room_id": booking.room_id, "check_in_date": booking.check_in_date.isoformat() if booking.check_in_date else None, "check_out_date": booking.check_out_date.isoformat() if booking.check_out_date else None, - "num_guests": booking.num_guests, + "guest_count": booking.num_guests, # Frontend expects guest_count "total_price": float(booking.total_price) if booking.total_price else 0.0, "status": booking.status.value if isinstance(booking.status, BookingStatus) else booking.status, + "payment_method": payment_method or "cash", + "payment_status": payment_status, "deposit_paid": booking.deposit_paid, "requires_deposit": booking.requires_deposit, - "special_requests": booking.special_requests, + "notes": booking.special_requests, # Frontend expects notes + "guest_info": { + "full_name": booking.user.full_name if booking.user else "", + "email": booking.user.email if booking.user else "", + "phone": booking.user.phone_number if booking.user and hasattr(booking.user, 'phone_number') else (booking.user.phone if booking.user and hasattr(booking.user, 'phone') else ""), + } if booking.user else None, + "createdAt": booking.created_at.isoformat() if booking.created_at else None, + "updatedAt": booking.updated_at.isoformat() if booking.updated_at else None, "created_at": booking.created_at.isoformat() if booking.created_at else None, } # Add relations + # Only get base_url if we need it (room has images) + if booking.room and booking.room.images: + base_url = get_base_url(request) + # Normalize room images if they exist + try: + room_images = normalize_images(booking.room.images, base_url) + except: + room_images = [] + else: + room_images = [] + if booking.room: + booking_dict["room"] = { "id": booking.room.id, "room_number": booking.room.room_number, + "floor": booking.room.floor, + "status": booking.room.status.value if isinstance(booking.room.status, RoomStatus) else booking.room.status, + "images": room_images, # Include room images directly on room object } if booking.room.room_type: + # Use room images if room_type doesn't have images (which is typical) + # RoomType doesn't have images column, images are stored on Room + room_type_images = room_images if room_images else [] + booking_dict["room"]["room_type"] = { + "id": booking.room.room_type.id, "name": booking.room.room_type.name, + "base_price": float(booking.room.room_type.base_price) if booking.room.room_type.base_price else 0.0, + "capacity": booking.room.room_type.capacity, + "images": room_type_images, } if booking.payments: @@ -385,6 +542,20 @@ async def cancel_booking( if booking.status == BookingStatus.cancelled: raise HTTPException(status_code=400, detail="Booking already cancelled") + # Prevent cancellation of confirmed bookings + if booking.status == BookingStatus.confirmed: + raise HTTPException( + status_code=400, + detail="Cannot cancel a confirmed booking. Please contact support for assistance." + ) + + # Only allow cancellation of pending bookings + if booking.status != BookingStatus.pending: + raise HTTPException( + status_code=400, + detail=f"Cannot cancel booking with status: {booking.status.value}. Only pending bookings can be cancelled." + ) + booking.status = BookingStatus.cancelled db.commit() diff --git a/Backend/src/routes/invoice_routes.py b/Backend/src/routes/invoice_routes.py new file mode 100644 index 00000000..72a6be88 --- /dev/null +++ b/Backend/src/routes/invoice_routes.py @@ -0,0 +1,249 @@ +from fastapi import APIRouter, Depends, HTTPException, status, Query +from sqlalchemy.orm import Session +from typing import Optional +from datetime import datetime + +from ..config.database import get_db +from ..middleware.auth import get_current_user, authorize_roles +from ..models.user import User +from ..models.invoice import Invoice, InvoiceStatus +from ..models.booking import Booking +from ..services.invoice_service import InvoiceService + +router = APIRouter(prefix="/invoices", tags=["invoices"]) + + +@router.get("/") +async def get_invoices( + booking_id: Optional[int] = Query(None), + status_filter: Optional[str] = Query(None, alias="status"), + page: int = Query(1, ge=1), + limit: int = Query(10, ge=1, le=100), + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Get invoices for current user (or all invoices for admin)""" + try: + # Admin can see all invoices, users can only see their own + user_id = None if current_user.role_id == 1 else current_user.id + + result = InvoiceService.get_invoices( + db=db, + user_id=user_id, + booking_id=booking_id, + status=status_filter, + page=page, + limit=limit + ) + + return { + "status": "success", + "data": result + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/{id}") +async def get_invoice_by_id( + id: int, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Get invoice by ID""" + try: + invoice = InvoiceService.get_invoice(id, db) + + if not invoice: + raise HTTPException(status_code=404, detail="Invoice not found") + + # Check access: admin can see all, users can only see their own + if current_user.role_id != 1 and invoice["user_id"] != current_user.id: + raise HTTPException(status_code=403, detail="Forbidden") + + return { + "status": "success", + "data": {"invoice": invoice} + } + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/") +async def create_invoice( + invoice_data: dict, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Create a new invoice from a booking (Admin/Staff only)""" + try: + # Only admin/staff can create invoices + if current_user.role_id not in [1, 2]: + raise HTTPException(status_code=403, detail="Forbidden") + + booking_id = invoice_data.get("booking_id") + if not booking_id: + raise HTTPException(status_code=400, detail="booking_id is required") + + # Check if booking exists + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise HTTPException(status_code=404, detail="Booking not found") + + # Create invoice + invoice = InvoiceService.create_invoice_from_booking( + booking_id=booking_id, + db=db, + created_by_id=current_user.id, + tax_rate=invoice_data.get("tax_rate", 0.0), + discount_amount=invoice_data.get("discount_amount", 0.0), + due_days=invoice_data.get("due_days", 30), + company_name=invoice_data.get("company_name"), + company_address=invoice_data.get("company_address"), + company_phone=invoice_data.get("company_phone"), + company_email=invoice_data.get("company_email"), + company_tax_id=invoice_data.get("company_tax_id"), + company_logo_url=invoice_data.get("company_logo_url"), + customer_tax_id=invoice_data.get("customer_tax_id"), + notes=invoice_data.get("notes"), + terms_and_conditions=invoice_data.get("terms_and_conditions"), + payment_instructions=invoice_data.get("payment_instructions"), + ) + + return { + "status": "success", + "message": "Invoice created successfully", + "data": {"invoice": invoice} + } + except HTTPException: + raise + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.put("/{id}") +async def update_invoice( + id: int, + invoice_data: dict, + current_user: User = Depends(authorize_roles("admin", "staff")), + db: Session = Depends(get_db) +): + """Update an invoice (Admin/Staff only)""" + try: + invoice = db.query(Invoice).filter(Invoice.id == id).first() + if not invoice: + raise HTTPException(status_code=404, detail="Invoice not found") + + # Update invoice + updated_invoice = InvoiceService.update_invoice( + invoice_id=id, + db=db, + updated_by_id=current_user.id, + **invoice_data + ) + + return { + "status": "success", + "message": "Invoice updated successfully", + "data": {"invoice": updated_invoice} + } + except HTTPException: + raise + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/{id}/mark-paid") +async def mark_invoice_as_paid( + id: int, + payment_data: dict, + current_user: User = Depends(authorize_roles("admin", "staff")), + db: Session = Depends(get_db) +): + """Mark an invoice as paid (Admin/Staff only)""" + try: + amount = payment_data.get("amount") + + updated_invoice = InvoiceService.mark_invoice_as_paid( + invoice_id=id, + db=db, + amount=amount, + updated_by_id=current_user.id + ) + + return { + "status": "success", + "message": "Invoice marked as paid successfully", + "data": {"invoice": updated_invoice} + } + except HTTPException: + raise + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.delete("/{id}") +async def delete_invoice( + id: int, + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Delete an invoice (Admin only)""" + try: + invoice = db.query(Invoice).filter(Invoice.id == id).first() + if not invoice: + raise HTTPException(status_code=404, detail="Invoice not found") + + db.delete(invoice) + db.commit() + + return { + "status": "success", + "message": "Invoice deleted successfully" + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/booking/{booking_id}") +async def get_invoices_by_booking( + booking_id: int, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Get all invoices for a specific booking""" + try: + # Check if booking exists and user has access + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise HTTPException(status_code=404, detail="Booking not found") + + # Check access: admin can see all, users can only see their own bookings + if current_user.role_id != 1 and booking.user_id != current_user.id: + raise HTTPException(status_code=403, detail="Forbidden") + + result = InvoiceService.get_invoices( + db=db, + booking_id=booking_id + ) + + return { + "status": "success", + "data": result + } + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + diff --git a/Backend/src/routes/payment_routes.py b/Backend/src/routes/payment_routes.py index 554fc8e6..a12ff975 100644 --- a/Backend/src/routes/payment_routes.py +++ b/Backend/src/routes/payment_routes.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Depends, HTTPException, status, Query +from fastapi import APIRouter, Depends, HTTPException, status, Query, Request, Header from sqlalchemy.orm import Session from typing import Optional from datetime import datetime @@ -12,6 +12,7 @@ from ..models.payment import Payment, PaymentMethod, PaymentType, PaymentStatus from ..models.booking import Booking, BookingStatus from ..utils.mailer import send_email from ..utils.email_templates import payment_confirmation_email_template +from ..services.stripe_service import StripeService router = APIRouter(prefix="/payments", tags=["payments"]) @@ -340,3 +341,250 @@ async def update_payment_status( except Exception as e: db.rollback() raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/stripe/create-intent") +async def create_stripe_payment_intent( + intent_data: dict, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Create a Stripe payment intent""" + try: + # Check if Stripe is configured (from database or environment) + from ..services.stripe_service import get_stripe_secret_key + secret_key = get_stripe_secret_key(db) + if not secret_key: + secret_key = settings.STRIPE_SECRET_KEY + + if not secret_key: + raise HTTPException( + status_code=500, + detail="Stripe is not configured. Please configure Stripe settings in Admin Panel or set STRIPE_SECRET_KEY environment variable." + ) + + booking_id = intent_data.get("booking_id") + amount = float(intent_data.get("amount", 0)) + currency = intent_data.get("currency", "usd") + + # Log the incoming amount for debugging + import logging + logger = logging.getLogger(__name__) + logger.info(f"Creating Stripe payment intent - Booking ID: {booking_id}, Amount: ${amount:,.2f}, Currency: {currency}") + + if not booking_id or amount <= 0: + raise HTTPException( + status_code=400, + detail="booking_id and amount are required" + ) + + # Validate amount is reasonable (Stripe max is $999,999.99) + if amount > 999999.99: + logger.error(f"Amount ${amount:,.2f} exceeds Stripe's maximum of $999,999.99") + raise HTTPException( + status_code=400, + detail=f"Amount ${amount:,.2f} exceeds Stripe's maximum of $999,999.99. Please contact support for large payments." + ) + + # Verify booking exists and user has access + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise HTTPException(status_code=404, detail="Booking not found") + + if current_user.role_id != 1 and booking.user_id != current_user.id: + raise HTTPException(status_code=403, detail="Forbidden") + + # Create payment intent + intent = StripeService.create_payment_intent( + amount=amount, + currency=currency, + metadata={ + "booking_id": str(booking_id), + "booking_number": booking.booking_number, + "user_id": str(current_user.id), + }, + db=db + ) + + # Get publishable key from database or environment + from ..services.stripe_service import get_stripe_publishable_key + publishable_key = get_stripe_publishable_key(db) + if not publishable_key: + publishable_key = settings.STRIPE_PUBLISHABLE_KEY + + if not publishable_key: + import logging + logger = logging.getLogger(__name__) + logger.warning("Stripe publishable key is not configured") + raise HTTPException( + status_code=500, + detail="Stripe publishable key is not configured. Please configure it in Admin Panel (Settings > Stripe Settings) or set STRIPE_PUBLISHABLE_KEY environment variable." + ) + + if not intent.get("client_secret"): + import logging + logger = logging.getLogger(__name__) + logger.error("Payment intent created but client_secret is missing") + raise HTTPException( + status_code=500, + detail="Failed to create payment intent. Client secret is missing." + ) + + return { + "status": "success", + "message": "Payment intent created successfully", + "data": { + "client_secret": intent["client_secret"], + "payment_intent_id": intent["id"], + "publishable_key": publishable_key, + } + } + except HTTPException: + raise + except ValueError as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Payment intent creation error: {str(e)}") + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Unexpected error creating payment intent: {str(e)}", exc_info=True) + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/stripe/confirm") +async def confirm_stripe_payment( + payment_data: dict, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Confirm a Stripe payment""" + try: + payment_intent_id = payment_data.get("payment_intent_id") + booking_id = payment_data.get("booking_id") + + if not payment_intent_id: + raise HTTPException( + status_code=400, + detail="payment_intent_id is required" + ) + + # Confirm payment (this commits the transaction internally) + payment = StripeService.confirm_payment( + payment_intent_id=payment_intent_id, + db=db, + booking_id=booking_id + ) + + # Ensure the transaction is committed before proceeding + # The service method already commits, but we ensure it here too + try: + db.commit() + except Exception: + # If already committed, this will raise an error, which we can ignore + pass + + # Get fresh booking from database to get updated status (after commit) + booking = db.query(Booking).filter(Booking.id == payment["booking_id"]).first() + if booking: + db.refresh(booking) + + # Send payment confirmation email (non-blocking, after commit) + # This won't affect the transaction since it's already committed + if booking and booking.user: + try: + client_url = settings.CLIENT_URL or os.getenv("CLIENT_URL", "http://localhost:5173") + email_html = payment_confirmation_email_template( + booking_number=booking.booking_number, + guest_name=booking.user.full_name, + amount=payment["amount"], + payment_method="stripe", + transaction_id=payment["transaction_id"], + client_url=client_url + ) + await send_email( + to=booking.user.email, + subject=f"Payment Confirmed - {booking.booking_number}", + html=email_html + ) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.warning(f"Failed to send payment confirmation email: {e}") + + return { + "status": "success", + "message": "Payment confirmed successfully", + "data": { + "payment": payment, + "booking": { + "id": booking.id if booking else None, + "booking_number": booking.booking_number if booking else None, + "status": booking.status.value if booking else None, + } + } + } + except HTTPException: + db.rollback() + raise + except ValueError as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Payment confirmation error: {str(e)}") + db.rollback() + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Unexpected error confirming payment: {str(e)}", exc_info=True) + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/stripe/webhook") +async def stripe_webhook( + request: Request, + db: Session = Depends(get_db) +): + """Handle Stripe webhook events""" + try: + # Check if webhook secret is configured (from database or environment) + from ..services.stripe_service import get_stripe_webhook_secret + webhook_secret = get_stripe_webhook_secret(db) + if not webhook_secret: + webhook_secret = settings.STRIPE_WEBHOOK_SECRET + + if not webhook_secret: + raise HTTPException( + status_code=503, + detail={ + "status": "error", + "message": "Stripe webhook secret is not configured. Please configure it in Admin Panel (Settings > Stripe Settings) or set STRIPE_WEBHOOK_SECRET environment variable." + } + ) + + payload = await request.body() + signature = request.headers.get("stripe-signature") + + if not signature: + raise HTTPException( + status_code=400, + detail="Missing stripe-signature header" + ) + + result = StripeService.handle_webhook( + payload=payload, + signature=signature, + db=db + ) + + return { + "status": "success", + "data": result + } + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) diff --git a/Backend/src/routes/room_routes.py b/Backend/src/routes/room_routes.py index e13344fb..b59173ae 100644 --- a/Backend/src/routes/room_routes.py +++ b/Backend/src/routes/room_routes.py @@ -197,7 +197,7 @@ async def search_available_rooms( raise HTTPException(status_code=500, detail=str(e)) -@router.get("/{id}") +@router.get("/id/{id}") async def get_room_by_id(id: int, request: Request, db: Session = Depends(get_db)): """Get room by ID""" try: @@ -225,9 +225,81 @@ async def get_room_by_id(id: int, request: Request, db: Session = Depends(get_db "room_number": room.room_number, "floor": room.floor, "status": room.status.value if isinstance(room.status, RoomStatus) else room.status, - "price": float(room.price) if room.price else 0.0, + "price": float(room.price) if room.price is not None and room.price > 0 else None, "featured": room.featured, "description": room.description, + "capacity": room.capacity, + "room_size": room.room_size, + "view": room.view, + "amenities": room.amenities, + "created_at": room.created_at.isoformat() if room.created_at else None, + "updated_at": room.updated_at.isoformat() if room.updated_at else None, + "average_rating": round(float(review_stats.average_rating or 0), 1) if review_stats and review_stats.average_rating else None, + "total_reviews": review_stats.total_reviews or 0 if review_stats else 0, + } + + # Normalize images + try: + room_dict["images"] = normalize_images(room.images, base_url) + except: + room_dict["images"] = [] + + # Add room type + if room.room_type: + room_dict["room_type"] = { + "id": room.room_type.id, + "name": room.room_type.name, + "description": room.room_type.description, + "base_price": float(room.room_type.base_price) if room.room_type.base_price else 0.0, + "capacity": room.room_type.capacity, + "amenities": room.room_type.amenities, + "images": [] # RoomType doesn't have images column in DB + } + + return { + "status": "success", + "data": {"room": room_dict} + } + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/{room_number}") +async def get_room_by_number(room_number: str, request: Request, db: Session = Depends(get_db)): + """Get room by room number""" + try: + room = db.query(Room).filter(Room.room_number == room_number).first() + + if not room: + raise HTTPException(status_code=404, detail="Room not found") + + # Get review stats + review_stats = db.query( + func.avg(Review.rating).label('average_rating'), + func.count(Review.id).label('total_reviews') + ).filter( + and_( + Review.room_id == room.id, + Review.status == ReviewStatus.approved + ) + ).first() + + base_url = get_base_url(request) + + room_dict = { + "id": room.id, + "room_type_id": room.room_type_id, + "room_number": room.room_number, + "floor": room.floor, + "status": room.status.value if isinstance(room.status, RoomStatus) else room.status, + "price": float(room.price) if room.price is not None and room.price > 0 else None, + "featured": room.featured, + "description": room.description, + "capacity": room.capacity, + "room_size": room.room_size, + "view": room.view, "amenities": room.amenities, "created_at": room.created_at.isoformat() if room.created_at else None, "updated_at": room.updated_at.isoformat() if room.updated_at else None, @@ -266,6 +338,7 @@ async def get_room_by_id(id: int, request: Request, db: Session = Depends(get_db @router.post("/", dependencies=[Depends(authorize_roles("admin"))]) async def create_room( room_data: dict, + request: Request, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): @@ -281,6 +354,13 @@ async def create_room( if existing: raise HTTPException(status_code=400, detail="Room number already exists") + # Ensure amenities is always a list + amenities_value = room_data.get("amenities", []) + if amenities_value is None: + amenities_value = [] + elif not isinstance(amenities_value, list): + amenities_value = [] + room = Room( room_type_id=room_data.get("room_type_id"), room_number=room_data.get("room_number"), @@ -288,16 +368,60 @@ async def create_room( status=RoomStatus(room_data.get("status", "available")), featured=room_data.get("featured", False), price=room_data.get("price", room_type.base_price), + description=room_data.get("description"), + capacity=room_data.get("capacity"), + room_size=room_data.get("room_size"), + view=room_data.get("view"), + amenities=amenities_value, ) db.add(room) db.commit() db.refresh(room) + # Get base URL for proper response + base_url = get_base_url(request) + + # Serialize room data + room_dict = { + "id": room.id, + "room_type_id": room.room_type_id, + "room_number": room.room_number, + "floor": room.floor, + "status": room.status.value if isinstance(room.status, RoomStatus) else room.status, + "price": float(room.price) if room.price is not None and room.price > 0 else None, + "featured": room.featured, + "description": room.description, + "capacity": room.capacity, + "room_size": room.room_size, + "view": room.view, + "amenities": room.amenities if room.amenities else [], + "created_at": room.created_at.isoformat() if room.created_at else None, + "updated_at": room.updated_at.isoformat() if room.updated_at else None, + } + + # Normalize images + try: + room_dict["images"] = normalize_images(room.images, base_url) + except: + room_dict["images"] = [] + + # Add room type info + if room.room_type: + room_dict["room_type"] = { + "id": room.room_type.id, + "name": room.room_type.name, + "description": room.room_type.description, + "base_price": float(room.room_type.base_price) if room.room_type.base_price else 0.0, + "capacity": room.room_type.capacity, + "amenities": room.room_type.amenities if room.room_type.amenities else [], + "images": [] + } + return { "status": "success", "message": "Room created successfully", - "data": {"room": room} + "data": {"room": room_dict} } except HTTPException: raise @@ -310,6 +434,7 @@ async def create_room( async def update_room( id: int, room_data: dict, + request: Request, current_user: User = Depends(authorize_roles("admin")), db: Session = Depends(get_db) ): @@ -337,14 +462,70 @@ async def update_room( room.featured = room_data["featured"] if "price" in room_data: room.price = room_data["price"] + if "description" in room_data: + room.description = room_data["description"] + if "capacity" in room_data: + room.capacity = room_data["capacity"] + if "room_size" in room_data: + room.room_size = room_data["room_size"] + if "view" in room_data: + room.view = room_data["view"] + if "amenities" in room_data: + # Ensure amenities is always a list + amenities_value = room_data["amenities"] + if amenities_value is None: + room.amenities = [] + elif isinstance(amenities_value, list): + room.amenities = amenities_value + else: + room.amenities = [] db.commit() db.refresh(room) + # Get base URL for proper response + base_url = get_base_url(request) + + # Serialize room data similar to get_room_by_id + room_dict = { + "id": room.id, + "room_type_id": room.room_type_id, + "room_number": room.room_number, + "floor": room.floor, + "status": room.status.value if isinstance(room.status, RoomStatus) else room.status, + "price": float(room.price) if room.price is not None and room.price > 0 else None, + "featured": room.featured, + "description": room.description, + "capacity": room.capacity, + "room_size": room.room_size, + "view": room.view, + "amenities": room.amenities if room.amenities else [], + "created_at": room.created_at.isoformat() if room.created_at else None, + "updated_at": room.updated_at.isoformat() if room.updated_at else None, + } + + # Normalize images + try: + room_dict["images"] = normalize_images(room.images, base_url) + except: + room_dict["images"] = [] + + # Add room type info + if room.room_type: + room_dict["room_type"] = { + "id": room.room_type.id, + "name": room.room_type.name, + "description": room.room_type.description, + "base_price": float(room.room_type.base_price) if room.room_type.base_price else 0.0, + "capacity": room.room_type.capacity, + "amenities": room.room_type.amenities if room.room_type.amenities else [], + "images": [] + } + return { "status": "success", "message": "Room updated successfully", - "data": {"room": room} + "data": {"room": room_dict} } except HTTPException: raise @@ -379,6 +560,57 @@ async def delete_room( raise HTTPException(status_code=500, detail=str(e)) +@router.post("/bulk-delete", dependencies=[Depends(authorize_roles("admin"))]) +async def bulk_delete_rooms( + room_ids: dict, + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Bulk delete rooms (Admin only)""" + try: + ids = room_ids.get("ids", []) + if not ids or not isinstance(ids, list): + raise HTTPException(status_code=400, detail="Invalid room IDs provided") + + if len(ids) == 0: + raise HTTPException(status_code=400, detail="No room IDs provided") + + # Validate all IDs are integers + try: + ids = [int(id) for id in ids] + except (ValueError, TypeError): + raise HTTPException(status_code=400, detail="All room IDs must be integers") + + # Check if all rooms exist + rooms = db.query(Room).filter(Room.id.in_(ids)).all() + found_ids = [room.id for room in rooms] + not_found_ids = [id for id in ids if id not in found_ids] + + if not_found_ids: + raise HTTPException( + status_code=404, + detail=f"Rooms with IDs {not_found_ids} not found" + ) + + # Delete all rooms + deleted_count = db.query(Room).filter(Room.id.in_(ids)).delete(synchronize_session=False) + db.commit() + + return { + "status": "success", + "message": f"Successfully deleted {deleted_count} room(s)", + "data": { + "deleted_count": deleted_count, + "deleted_ids": ids + } + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + @router.post("/{id}/images", dependencies=[Depends(authorize_roles("admin", "staff"))]) async def upload_room_images( id: int, @@ -435,7 +667,7 @@ async def upload_room_images( @router.delete("/{id}/images", dependencies=[Depends(authorize_roles("admin", "staff"))]) async def delete_room_images( id: int, - image_url: str, + image_url: str = Query(..., description="Image URL or path to delete"), current_user: User = Depends(authorize_roles("admin", "staff")), db: Session = Depends(get_db) ): @@ -445,12 +677,39 @@ async def delete_room_images( if not room: raise HTTPException(status_code=404, detail="Room not found") - # Update room images (images are stored on Room, not RoomType) + # Normalize the incoming image_url to extract the path + # Handle both full URLs and relative paths + normalized_url = image_url + if image_url.startswith('http://') or image_url.startswith('https://'): + # Extract path from URL + from urllib.parse import urlparse + parsed = urlparse(image_url) + normalized_url = parsed.path + + # Normalize paths for comparison (ensure leading slash) + if not normalized_url.startswith('/'): + normalized_url = f"/{normalized_url}" + + # Get filename from normalized path + filename = Path(normalized_url).name + + # Update room images - compare by filename or full path existing_images = room.images or [] - updated_images = [img for img in existing_images if img != image_url] + updated_images = [] + + for img in existing_images: + # Normalize stored image path + stored_path = img if img.startswith('/') else f"/{img}" + stored_filename = Path(stored_path).name + + # Compare by filename or full path + # Keep images that don't match + if (img != normalized_url and + stored_path != normalized_url and + stored_filename != filename): + updated_images.append(img) # Delete file from disk - filename = Path(image_url).name file_path = Path(__file__).parent.parent.parent / "uploads" / "rooms" / filename if file_path.exists(): file_path.unlink() diff --git a/Backend/src/routes/system_settings_routes.py b/Backend/src/routes/system_settings_routes.py new file mode 100644 index 00000000..e197a835 --- /dev/null +++ b/Backend/src/routes/system_settings_routes.py @@ -0,0 +1,302 @@ +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.orm import Session +from typing import Optional + +from ..config.database import get_db +from ..middleware.auth import get_current_user, authorize_roles +from ..models.user import User +from ..models.system_settings import SystemSettings + +router = APIRouter(prefix="/admin/system-settings", tags=["admin-system-settings"]) + + +@router.get("/currency") +async def get_platform_currency( + db: Session = Depends(get_db) +): + """Get platform currency setting (public endpoint for frontend)""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "platform_currency" + ).first() + + if not setting: + # Default to VND if not set + return { + "status": "success", + "data": { + "currency": "VND", + "updated_at": None, + "updated_by": None + } + } + + return { + "status": "success", + "data": { + "currency": setting.value, + "updated_at": setting.updated_at.isoformat() if setting.updated_at else None, + "updated_by": setting.updated_by.full_name if setting.updated_by else None + } + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.put("/currency") +async def update_platform_currency( + currency_data: dict, + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Update platform currency (Admin only)""" + try: + currency = currency_data.get("currency", "").upper() + + # Validate currency code + if not currency or len(currency) != 3 or not currency.isalpha(): + raise HTTPException( + status_code=400, + detail="Invalid currency code. Must be a 3-letter ISO 4217 code (e.g., USD, EUR, VND)" + ) + + # Get or create setting + setting = db.query(SystemSettings).filter( + SystemSettings.key == "platform_currency" + ).first() + + if setting: + setting.value = currency + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="platform_currency", + value=currency, + description="Platform-wide currency setting for displaying prices across the application", + updated_by_id=current_user.id + ) + db.add(setting) + + db.commit() + db.refresh(setting) + + return { + "status": "success", + "message": "Platform currency updated successfully", + "data": { + "currency": setting.value, + "updated_at": setting.updated_at.isoformat() if setting.updated_at else None, + "updated_by": setting.updated_by.full_name if setting.updated_by else None + } + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/") +async def get_all_settings( + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Get all system settings (Admin only)""" + try: + settings = db.query(SystemSettings).all() + + result = [] + for setting in settings: + result.append({ + "key": setting.key, + "value": setting.value, + "description": setting.description, + "updated_at": setting.updated_at.isoformat() if setting.updated_at else None, + "updated_by": setting.updated_by.full_name if setting.updated_by else None + }) + + return { + "status": "success", + "data": { + "settings": result + } + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/stripe") +async def get_stripe_settings( + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Get Stripe payment settings (Admin only)""" + try: + secret_key_setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_secret_key" + ).first() + + publishable_key_setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_publishable_key" + ).first() + + webhook_secret_setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_webhook_secret" + ).first() + + # Mask secret keys for security (only show last 4 characters) + def mask_key(key_value: str) -> str: + if not key_value or len(key_value) < 4: + return "" + return "*" * (len(key_value) - 4) + key_value[-4:] + + result = { + "stripe_secret_key": "", + "stripe_publishable_key": "", + "stripe_webhook_secret": "", + "stripe_secret_key_masked": "", + "stripe_webhook_secret_masked": "", + "has_secret_key": False, + "has_publishable_key": False, + "has_webhook_secret": False, + } + + if secret_key_setting: + result["stripe_secret_key"] = secret_key_setting.value + result["stripe_secret_key_masked"] = mask_key(secret_key_setting.value) + result["has_secret_key"] = bool(secret_key_setting.value) + result["updated_at"] = secret_key_setting.updated_at.isoformat() if secret_key_setting.updated_at else None + result["updated_by"] = secret_key_setting.updated_by.full_name if secret_key_setting.updated_by else None + + if publishable_key_setting: + result["stripe_publishable_key"] = publishable_key_setting.value + result["has_publishable_key"] = bool(publishable_key_setting.value) + + if webhook_secret_setting: + result["stripe_webhook_secret"] = webhook_secret_setting.value + result["stripe_webhook_secret_masked"] = mask_key(webhook_secret_setting.value) + result["has_webhook_secret"] = bool(webhook_secret_setting.value) + + return { + "status": "success", + "data": result + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.put("/stripe") +async def update_stripe_settings( + stripe_data: dict, + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Update Stripe payment settings (Admin only)""" + try: + secret_key = stripe_data.get("stripe_secret_key", "").strip() + publishable_key = stripe_data.get("stripe_publishable_key", "").strip() + webhook_secret = stripe_data.get("stripe_webhook_secret", "").strip() + + # Validate secret key format (should start with sk_) + if secret_key and not secret_key.startswith("sk_"): + raise HTTPException( + status_code=400, + detail="Invalid Stripe secret key format. Must start with 'sk_'" + ) + + # Validate publishable key format (should start with pk_) + if publishable_key and not publishable_key.startswith("pk_"): + raise HTTPException( + status_code=400, + detail="Invalid Stripe publishable key format. Must start with 'pk_'" + ) + + # Validate webhook secret format (should start with whsec_) + if webhook_secret and not webhook_secret.startswith("whsec_"): + raise HTTPException( + status_code=400, + detail="Invalid Stripe webhook secret format. Must start with 'whsec_'" + ) + + # Update or create secret key setting + if secret_key: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_secret_key" + ).first() + + if setting: + setting.value = secret_key + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="stripe_secret_key", + value=secret_key, + description="Stripe secret key for processing payments", + updated_by_id=current_user.id + ) + db.add(setting) + + # Update or create publishable key setting + if publishable_key: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_publishable_key" + ).first() + + if setting: + setting.value = publishable_key + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="stripe_publishable_key", + value=publishable_key, + description="Stripe publishable key for frontend payment forms", + updated_by_id=current_user.id + ) + db.add(setting) + + # Update or create webhook secret setting + if webhook_secret: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_webhook_secret" + ).first() + + if setting: + setting.value = webhook_secret + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="stripe_webhook_secret", + value=webhook_secret, + description="Stripe webhook secret for verifying webhook events", + updated_by_id=current_user.id + ) + db.add(setting) + + db.commit() + + # Return masked values + def mask_key(key_value: str) -> str: + if not key_value or len(key_value) < 4: + return "" + return "*" * (len(key_value) - 4) + key_value[-4:] + + return { + "status": "success", + "message": "Stripe settings updated successfully", + "data": { + "stripe_secret_key": secret_key if secret_key else "", + "stripe_publishable_key": publishable_key, + "stripe_webhook_secret": webhook_secret if webhook_secret else "", + "stripe_secret_key_masked": mask_key(secret_key) if secret_key else "", + "stripe_webhook_secret_masked": mask_key(webhook_secret) if webhook_secret else "", + "has_secret_key": bool(secret_key), + "has_publishable_key": bool(publishable_key), + "has_webhook_secret": bool(webhook_secret), + } + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + diff --git a/Backend/src/routes/user_routes.py b/Backend/src/routes/user_routes.py index d2246d9c..d908d115 100644 --- a/Backend/src/routes/user_routes.py +++ b/Backend/src/routes/user_routes.py @@ -66,6 +66,7 @@ async def get_users( "phone_number": user.phone, # For frontend compatibility "address": user.address, "avatar": user.avatar, + "currency": getattr(user, 'currency', 'VND'), "is_active": user.is_active, "status": "active" if user.is_active else "inactive", "role_id": user.role_id, @@ -117,6 +118,7 @@ async def get_user_by_id( "phone_number": user.phone, "address": user.address, "avatar": user.avatar, + "currency": getattr(user, 'currency', 'VND'), "is_active": user.is_active, "status": "active" if user.is_active else "inactive", "role_id": user.role_id, @@ -194,6 +196,7 @@ async def create_user( "full_name": user.full_name, "phone": user.phone, "phone_number": user.phone, + "currency": getattr(user, 'currency', 'VND'), "role_id": user.role_id, "is_active": user.is_active, } @@ -248,6 +251,10 @@ async def update_user( user.role_id = role_map.get(user_data["role"], 3) if "status" in user_data and current_user.role_id == 1: user.is_active = user_data["status"] == "active" + if "currency" in user_data: + currency = user_data["currency"] + if len(currency) == 3 and currency.isalpha(): + user.currency = currency.upper() if "password" in user_data: password_bytes = user_data["password"].encode('utf-8') salt = bcrypt.gensalt() @@ -263,6 +270,7 @@ async def update_user( "full_name": user.full_name, "phone": user.phone, "phone_number": user.phone, + "currency": getattr(user, 'currency', 'VND'), "role_id": user.role_id, "is_active": user.is_active, } diff --git a/Backend/src/services/__pycache__/auth_service.cpython-312.pyc b/Backend/src/services/__pycache__/auth_service.cpython-312.pyc index d3c01b91ec0c8311a98968f1067094200ac01b80..cdd0f9ed2a6b13dd10d10f2e985fbb55a5878a1d 100644 GIT binary patch delta 2636 zcmZuyeQZ-z6o0qvYx~-+?bdGVwvN4SZ18Ywg8`dvP(B?aY#`epPNa5w4_4^fa{CI~ zC~SNOiF{qeAtX!);(&AUHEW^9RE4W<}NRwUU@fry5 zHG65b8Ly*cQrH{|27Mtvwdtfh?gCg3Py(<4po3hn??T5(N$xDm&#tmD-PqQvmE*2P zvLbhBox@}|r8tvdO676wXdQa=On@ut=JupU?!g`4Chb3QGj}O(?|vp|2C6F|6j~AL zBraEj8REjd02@fRt1>?Tq#K|VzzWb!PP-aCnHFal5yz_PGR%7UH45;zR{Hh_H; zl4fNf62OB#**_S?eIT9#aFFS+qEeNDaTt>u6?KRteydRV*IB4dV8*h6CQoO>&aMKM zrKAID2!J_$6DXDebULmDm_|X;PYUz|xg~8u;|X!ree}Zf+&}XoY5%vawz?WkBsNy_ znwQwNY>nCFPpNUb7a#&wD&138ze3E}+C4FS=*ay|%Ok$A!$T^O|{t7vAkMb(Y3Bxq!UMy3Z}lADL1+r4sIR> zTmg`s1TcD%+Mp6j8Uj&&Fw*Bw^07#Sb~FsFbTbYD#U9?2rZ7+HFV@sqzwg2x_MFZE z#hlsLquNXPC|s#X{;qFw@bnI&Z&CQ2`)hATd-KqsYRyE!eXI`?tXB`*oPUzmwxnCgO@kGW8w%@UDC(ZMHx|XsQ zPvXM-AVN(EOT%Km=mT7Y)vT5=aD%GbU#3dSQbU~VIU*q;Gza) z%4^9^q>sS{Qo$^HR&@6IvhNxm1I|vSTwvL;ZlKs~W#cJMJl^8@Y)I_^4ZEumN=Z4B zip-8?RlE#F9|81{h&R6+9$ZqOe@Tk!i{T(X0K6#@^anydRT)t6L2}8v5-mxjyk8m6 zD7oHp1Z^YUl>?bXZ?Bv+{0ZG8m8A#mMezM0KrO%}09FW=uL^8E02^G-@=faKU!$BJ zZUU%TO;~l(JqR+^f^5vCQwJGj)`{&v<^Ze$cwRY7lghyYU`@s zTbH53iGN#nY0Ua|wxkj~O!lv?MIyH+H>?MM(S#2H90xcJa0cKkz!-%juf`(u zJ+qs?4$@nssBId`BaLlwhlMv?cBVM`xjKCUK9Ahwo3<~9@0C|Qa?Imvf3-MLJpHEh zTwZ?40F;q)x<{9tT$mDoGjVp;sP@S2lo>b+S6DV0J=vei0nW-fN=EBX&Q95YvvVaC zWA$fer*eVI%jn>gl#?@AC-Q*`A{{S{kw4q}^&dd67fE2vLp|%QU1ZbR!s0JLS_x1= m;fb-iKP<+$ACcqnXnHXIM;N0-$A#oowqG) z&@m7M(XeD310xdTLll3QfHgr0#-RQ%@rT5pjR++C&|h{g!H++9&+WF(hMV+x&pG#; zbMJlbIk#|~oV-eMe$37`3v7HRI{oUpTR8?;LHh7rx+A^l_-Qjl9gD&~M9qunLHUx=EVg&A$ z+V#|#65ye|cqOyzn0sD2d|sl(&$nZkqKX&g4nftWzHU7#ZimoD@tZb5ar7NIRKXFwiRI- z&(UPTO;8^~7hH2xLVB50T3A(BMFya!u!ro4 ze^vOUoZrXXerJ~^(0+s!2pXKMtTqlav6BYjcIBS75hlA!=$kl;cTFh*-+vgT2tpRZ zqRpcEG6G+FB}#gPQRsD5PDD{WfUuoGLT2|6==1dt(J{0gMmU1tLEs0=T68eJG|&4s z&hJDx${=CUMo0W~%&Ypw!gK)54G72i9MvLhN~1JH;hC$RoQ>BnjYwVSOhWvKE~rgo1iPy7x_2jH>WY2ai}0;%3devbRApO6=xmnjv%qTJ%5qfEkRO%3@o ze!WK0y_CT)XETH0R3+froE80CDtNM@h5Q4{>dujF_`1&J=$Dz#{E(P{9L#PO!CHGp zlw&ensV#($>sJvO8xFoH$p=G2jZO9%=YwM6F=I?*o~;eHMN`ZK&l-x#WbZ;Z$0Rl{ z#bmE#A%ei;5i#Y#W`U0#pD+qN6R}nZ@oDzyEZ+70;3zQ`Etm4#E^Ydqq)5ZzRC@Ee;DRwXy z9=?-eRa4wIf8tVaS_Wf_tBY@-8QnQqoHkD2R=G(%u*W;cM%NJx?B23+j78J*{czQf(K`l!tD4PyX4JWfv%Molv)1Il?WG-roP~^Joxlo(LyvaPloHJ`f zsTYpyqJ~Sjv&-;w*B?#106F=%-9(lz8rkncIHX1c+B*6J a6u0*lzHT7q8G&OgOHhj58$XuC-TwmyrxBU} diff --git a/Backend/src/services/__pycache__/invoice_service.cpython-312.pyc b/Backend/src/services/__pycache__/invoice_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..652abef1fad6e8bad0d6cd3e2e2d5dfd3ae5ba05 GIT binary patch literal 18200 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 X0+N-3PciwQ-RBJ&>k|TFVJ81CVa1H{ literal 0 HcmV?d00001 diff --git a/Backend/src/services/__pycache__/room_service.cpython-312.pyc b/Backend/src/services/__pycache__/room_service.cpython-312.pyc index b0224e596c3c447fa6b8c6f164251aef786f3cc1..0718623308a2d2b1298f0862df005abc1dfb82ab 100644 GIT binary patch literal 12619 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 diff --git a/Backend/src/services/__pycache__/stripe_service.cpython-312.pyc b/Backend/src/services/__pycache__/stripe_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e4239393b6643b1bf0fee9e10b0454b0b5365d2 GIT binary patch literal 16630 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 z dict: """Update user profile""" user = db.query(User).filter(User.id == user_id).first() @@ -295,6 +297,12 @@ class AuthService: user.email = email if phone_number is not None: user.phone = phone_number + if currency is not None: + # Validate currency code (ISO 4217, 3 characters) + if len(currency) == 3 and currency.isalpha(): + user.currency = currency.upper() + else: + raise ValueError("Invalid currency code. Must be a 3-letter ISO 4217 code (e.g., USD, EUR, VND)") db.commit() db.refresh(user) diff --git a/Backend/src/services/currency_service.py b/Backend/src/services/currency_service.py new file mode 100644 index 00000000..f45d8536 --- /dev/null +++ b/Backend/src/services/currency_service.py @@ -0,0 +1,101 @@ +""" +Currency conversion service +Handles currency conversion between different currencies +""" +from typing import Dict +from decimal import Decimal + +# Base currency is VND (Vietnamese Dong) +# Exchange rates relative to VND (1 VND = base) +# These are approximate rates - in production, fetch from an API like exchangerate-api.com +EXCHANGE_RATES: Dict[str, Decimal] = { + 'VND': Decimal('1.0'), # Base currency + 'USD': Decimal('0.000041'), # 1 VND = 0.000041 USD (approx 24,000 VND = 1 USD) + 'EUR': Decimal('0.000038'), # 1 VND = 0.000038 EUR (approx 26,000 VND = 1 EUR) + 'GBP': Decimal('0.000033'), # 1 VND = 0.000033 GBP (approx 30,000 VND = 1 GBP) + 'JPY': Decimal('0.0061'), # 1 VND = 0.0061 JPY (approx 164 VND = 1 JPY) + 'CNY': Decimal('0.00029'), # 1 VND = 0.00029 CNY (approx 3,400 VND = 1 CNY) + 'KRW': Decimal('0.055'), # 1 VND = 0.055 KRW (approx 18 VND = 1 KRW) + 'SGD': Decimal('0.000055'), # 1 VND = 0.000055 SGD (approx 18,000 VND = 1 SGD) + 'THB': Decimal('0.0015'), # 1 VND = 0.0015 THB (approx 667 VND = 1 THB) + 'AUD': Decimal('0.000062'), # 1 VND = 0.000062 AUD (approx 16,000 VND = 1 AUD) + 'CAD': Decimal('0.000056'), # 1 VND = 0.000056 CAD (approx 18,000 VND = 1 CAD) +} + +# Supported currencies list +SUPPORTED_CURRENCIES = list(EXCHANGE_RATES.keys()) + + +class CurrencyService: + """Service for currency conversion""" + + @staticmethod + def get_supported_currencies() -> list: + """Get list of supported currency codes""" + return SUPPORTED_CURRENCIES + + @staticmethod + def convert_amount(amount: float, from_currency: str, to_currency: str) -> float: + """ + Convert amount from one currency to another + + Args: + amount: Amount to convert + from_currency: Source currency code (ISO 4217) + to_currency: Target currency code (ISO 4217) + + Returns: + Converted amount + """ + from_currency = from_currency.upper() + to_currency = to_currency.upper() + + if from_currency == to_currency: + return amount + + if from_currency not in EXCHANGE_RATES: + raise ValueError(f"Unsupported source currency: {from_currency}") + if to_currency not in EXCHANGE_RATES: + raise ValueError(f"Unsupported target currency: {to_currency}") + + # Convert to VND first, then to target currency + amount_vnd = Decimal(str(amount)) / EXCHANGE_RATES[from_currency] + converted_amount = amount_vnd * EXCHANGE_RATES[to_currency] + + return float(converted_amount) + + @staticmethod + def get_exchange_rate(from_currency: str, to_currency: str) -> float: + """ + Get exchange rate between two currencies + + Args: + from_currency: Source currency code + to_currency: Target currency code + + Returns: + Exchange rate (1 from_currency = X to_currency) + """ + from_currency = from_currency.upper() + to_currency = to_currency.upper() + + if from_currency == to_currency: + return 1.0 + + if from_currency not in EXCHANGE_RATES: + raise ValueError(f"Unsupported source currency: {from_currency}") + if to_currency not in EXCHANGE_RATES: + raise ValueError(f"Unsupported target currency: {to_currency}") + + # Rate = (1 / from_rate) * to_rate + rate = EXCHANGE_RATES[to_currency] / EXCHANGE_RATES[from_currency] + return float(rate) + + @staticmethod + def format_currency_code(currency: str) -> str: + """Format currency code to uppercase""" + return currency.upper() if currency else 'VND' + + +currency_service = CurrencyService() + diff --git a/Backend/src/services/invoice_service.py b/Backend/src/services/invoice_service.py new file mode 100644 index 00000000..2e4665a7 --- /dev/null +++ b/Backend/src/services/invoice_service.py @@ -0,0 +1,388 @@ +""" +Invoice service for managing invoices +""" +from sqlalchemy.orm import Session +from sqlalchemy import func, and_, or_ +from typing import Optional, Dict, Any, List +from datetime import datetime, timedelta +from ..models.invoice import Invoice, InvoiceItem, InvoiceStatus +from ..models.booking import Booking +from ..models.payment import Payment, PaymentStatus +from ..models.user import User + + +def generate_invoice_number(db: Session) -> str: + """Generate a unique invoice number""" + # Format: INV-YYYYMMDD-XXXX + today = datetime.utcnow().strftime("%Y%m%d") + + # Get the last invoice number for today + last_invoice = db.query(Invoice).filter( + Invoice.invoice_number.like(f"INV-{today}-%") + ).order_by(Invoice.invoice_number.desc()).first() + + if last_invoice: + # Extract the sequence number and increment + try: + sequence = int(last_invoice.invoice_number.split("-")[-1]) + sequence += 1 + except (ValueError, IndexError): + sequence = 1 + else: + sequence = 1 + + return f"INV-{today}-{sequence:04d}" + + +class InvoiceService: + """Service for managing invoices""" + + @staticmethod + def create_invoice_from_booking( + booking_id: int, + db: Session, + created_by_id: Optional[int] = None, + tax_rate: float = 0.0, + discount_amount: float = 0.0, + due_days: int = 30, + **kwargs + ) -> Dict[str, Any]: + """ + Create an invoice from a booking + + Args: + booking_id: Booking ID + db: Database session + created_by_id: User ID who created the invoice + tax_rate: Tax rate percentage (default: 0.0) + discount_amount: Discount amount (default: 0.0) + due_days: Number of days until due date (default: 30) + **kwargs: Additional invoice fields (company info, notes, etc.) + + Returns: + Invoice dictionary + """ + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise ValueError("Booking not found") + + user = db.query(User).filter(User.id == booking.user_id).first() + if not user: + raise ValueError("User not found") + + # Generate invoice number + invoice_number = generate_invoice_number(db) + + # Calculate amounts + subtotal = float(booking.total_price) + tax_amount = (subtotal - discount_amount) * (tax_rate / 100) + total_amount = subtotal + tax_amount - discount_amount + + # Calculate amount paid from completed payments + amount_paid = sum( + float(p.amount) for p in booking.payments + if p.payment_status == PaymentStatus.completed + ) + balance_due = total_amount - amount_paid + + # Determine status + if balance_due <= 0: + status = InvoiceStatus.paid + paid_date = datetime.utcnow() + elif amount_paid > 0: + status = InvoiceStatus.sent + paid_date = None + else: + status = InvoiceStatus.draft + paid_date = None + + # Create invoice + invoice = Invoice( + invoice_number=invoice_number, + booking_id=booking_id, + user_id=booking.user_id, + issue_date=datetime.utcnow(), + due_date=datetime.utcnow() + timedelta(days=due_days), + paid_date=paid_date, + subtotal=subtotal, + tax_rate=tax_rate, + tax_amount=tax_amount, + discount_amount=discount_amount, + total_amount=total_amount, + amount_paid=amount_paid, + balance_due=balance_due, + status=status, + company_name=kwargs.get("company_name"), + company_address=kwargs.get("company_address"), + company_phone=kwargs.get("company_phone"), + company_email=kwargs.get("company_email"), + company_tax_id=kwargs.get("company_tax_id"), + company_logo_url=kwargs.get("company_logo_url"), + customer_name=user.full_name or f"{user.email}", + customer_email=user.email, + customer_address=user.address, + customer_phone=user.phone, + customer_tax_id=kwargs.get("customer_tax_id"), + notes=kwargs.get("notes"), + terms_and_conditions=kwargs.get("terms_and_conditions"), + payment_instructions=kwargs.get("payment_instructions"), + created_by_id=created_by_id, + ) + + db.add(invoice) + + # Create invoice items from booking + # Room item + room_item = InvoiceItem( + invoice_id=invoice.id, + description=f"Room: {booking.room.room_number} - {booking.room.room_type.name if booking.room.room_type else 'N/A'}", + quantity=1, + unit_price=float(booking.total_price), + tax_rate=tax_rate, + discount_amount=0.0, + line_total=float(booking.total_price), + room_id=booking.room_id, + ) + db.add(room_item) + + # Add service items if any + for service_usage in booking.service_usages: + service_item = InvoiceItem( + invoice_id=invoice.id, + description=f"Service: {service_usage.service.name}", + quantity=float(service_usage.quantity), + unit_price=float(service_usage.service.price), + tax_rate=tax_rate, + discount_amount=0.0, + line_total=float(service_usage.quantity) * float(service_usage.service.price), + service_id=service_usage.service_id, + ) + db.add(service_item) + subtotal += float(service_usage.quantity) * float(service_usage.service.price) + + # Recalculate totals if services were added + if booking.service_usages: + tax_amount = (subtotal - discount_amount) * (tax_rate / 100) + total_amount = subtotal + tax_amount - discount_amount + balance_due = total_amount - amount_paid + + invoice.subtotal = subtotal + invoice.tax_amount = tax_amount + invoice.total_amount = total_amount + invoice.balance_due = balance_due + + db.commit() + db.refresh(invoice) + + return InvoiceService.invoice_to_dict(invoice) + + @staticmethod + def update_invoice( + invoice_id: int, + db: Session, + updated_by_id: Optional[int] = None, + **kwargs + ) -> Dict[str, Any]: + """ + Update an invoice + + Args: + invoice_id: Invoice ID + db: Database session + updated_by_id: User ID who updated the invoice + **kwargs: Fields to update + + Returns: + Updated invoice dictionary + """ + invoice = db.query(Invoice).filter(Invoice.id == invoice_id).first() + if not invoice: + raise ValueError("Invoice not found") + + # Update allowed fields + allowed_fields = [ + "company_name", "company_address", "company_phone", "company_email", + "company_tax_id", "company_logo_url", "notes", "terms_and_conditions", + "payment_instructions", "status", "due_date", "tax_rate", "discount_amount" + ] + + for field in allowed_fields: + if field in kwargs: + setattr(invoice, field, kwargs[field]) + + # Recalculate if tax_rate or discount_amount changed + if "tax_rate" in kwargs or "discount_amount" in kwargs: + tax_rate = kwargs.get("tax_rate", invoice.tax_rate) + discount_amount = kwargs.get("discount_amount", invoice.discount_amount) + + invoice.tax_amount = (invoice.subtotal - discount_amount) * (float(tax_rate) / 100) + invoice.total_amount = invoice.subtotal + invoice.tax_amount - discount_amount + invoice.balance_due = invoice.total_amount - invoice.amount_paid + + # Update status based on balance + if invoice.balance_due <= 0 and invoice.status != InvoiceStatus.paid: + invoice.status = InvoiceStatus.paid + invoice.paid_date = datetime.utcnow() + elif invoice.balance_due > 0 and invoice.status == InvoiceStatus.paid: + invoice.status = InvoiceStatus.sent + invoice.paid_date = None + + invoice.updated_by_id = updated_by_id + invoice.updated_at = datetime.utcnow() + + db.commit() + db.refresh(invoice) + + return InvoiceService.invoice_to_dict(invoice) + + @staticmethod + def mark_invoice_as_paid( + invoice_id: int, + db: Session, + amount: Optional[float] = None, + updated_by_id: Optional[int] = None + ) -> Dict[str, Any]: + """ + Mark an invoice as paid + + Args: + invoice_id: Invoice ID + db: Database session + amount: Payment amount (if None, uses balance_due) + updated_by_id: User ID who marked as paid + + Returns: + Updated invoice dictionary + """ + invoice = db.query(Invoice).filter(Invoice.id == invoice_id).first() + if not invoice: + raise ValueError("Invoice not found") + + payment_amount = amount if amount is not None else float(invoice.balance_due) + invoice.amount_paid += payment_amount + invoice.balance_due = invoice.total_amount - invoice.amount_paid + + if invoice.balance_due <= 0: + invoice.status = InvoiceStatus.paid + invoice.paid_date = datetime.utcnow() + else: + invoice.status = InvoiceStatus.sent + + invoice.updated_by_id = updated_by_id + invoice.updated_at = datetime.utcnow() + + db.commit() + db.refresh(invoice) + + return InvoiceService.invoice_to_dict(invoice) + + @staticmethod + def get_invoice(invoice_id: int, db: Session) -> Optional[Dict[str, Any]]: + """Get invoice by ID""" + invoice = db.query(Invoice).filter(Invoice.id == invoice_id).first() + if not invoice: + return None + return InvoiceService.invoice_to_dict(invoice) + + @staticmethod + def get_invoices( + db: Session, + user_id: Optional[int] = None, + booking_id: Optional[int] = None, + status: Optional[str] = None, + page: int = 1, + limit: int = 10 + ) -> Dict[str, Any]: + """ + Get invoices with filters + + Args: + db: Database session + user_id: Filter by user ID + booking_id: Filter by booking ID + status: Filter by status + page: Page number + limit: Items per page + + Returns: + Dictionary with invoices and pagination info + """ + query = db.query(Invoice) + + if user_id: + query = query.filter(Invoice.user_id == user_id) + if booking_id: + query = query.filter(Invoice.booking_id == booking_id) + if status: + try: + status_enum = InvoiceStatus(status) + query = query.filter(Invoice.status == status_enum) + except ValueError: + pass + + # Get total count + total = query.count() + + # Apply pagination + offset = (page - 1) * limit + invoices = query.order_by(Invoice.created_at.desc()).offset(offset).limit(limit).all() + + return { + "invoices": [InvoiceService.invoice_to_dict(inv) for inv in invoices], + "total": total, + "page": page, + "limit": limit, + "total_pages": (total + limit - 1) // limit + } + + @staticmethod + def invoice_to_dict(invoice: Invoice) -> Dict[str, Any]: + """Convert invoice model to dictionary""" + return { + "id": invoice.id, + "invoice_number": invoice.invoice_number, + "booking_id": invoice.booking_id, + "user_id": invoice.user_id, + "issue_date": invoice.issue_date.isoformat() if invoice.issue_date else None, + "due_date": invoice.due_date.isoformat() if invoice.due_date else None, + "paid_date": invoice.paid_date.isoformat() if invoice.paid_date else None, + "subtotal": float(invoice.subtotal) if invoice.subtotal else 0.0, + "tax_rate": float(invoice.tax_rate) if invoice.tax_rate else 0.0, + "tax_amount": float(invoice.tax_amount) if invoice.tax_amount else 0.0, + "discount_amount": float(invoice.discount_amount) if invoice.discount_amount else 0.0, + "total_amount": float(invoice.total_amount) if invoice.total_amount else 0.0, + "amount_paid": float(invoice.amount_paid) if invoice.amount_paid else 0.0, + "balance_due": float(invoice.balance_due) if invoice.balance_due else 0.0, + "status": invoice.status.value if invoice.status else None, + "company_name": invoice.company_name, + "company_address": invoice.company_address, + "company_phone": invoice.company_phone, + "company_email": invoice.company_email, + "company_tax_id": invoice.company_tax_id, + "company_logo_url": invoice.company_logo_url, + "customer_name": invoice.customer_name, + "customer_email": invoice.customer_email, + "customer_address": invoice.customer_address, + "customer_phone": invoice.customer_phone, + "customer_tax_id": invoice.customer_tax_id, + "notes": invoice.notes, + "terms_and_conditions": invoice.terms_and_conditions, + "payment_instructions": invoice.payment_instructions, + "items": [ + { + "id": item.id, + "description": item.description, + "quantity": float(item.quantity) if item.quantity else 0.0, + "unit_price": float(item.unit_price) if item.unit_price else 0.0, + "tax_rate": float(item.tax_rate) if item.tax_rate else 0.0, + "discount_amount": float(item.discount_amount) if item.discount_amount else 0.0, + "line_total": float(item.line_total) if item.line_total else 0.0, + "room_id": item.room_id, + "service_id": item.service_id, + } + for item in invoice.items + ], + "created_at": invoice.created_at.isoformat() if invoice.created_at else None, + "updated_at": invoice.updated_at.isoformat() if invoice.updated_at else None, + } + diff --git a/Backend/src/services/room_service.py b/Backend/src/services/room_service.py index 7335bdc9..806fb97e 100644 --- a/Backend/src/services/room_service.py +++ b/Backend/src/services/room_service.py @@ -40,7 +40,20 @@ def normalize_images(images, base_url: str) -> List[str]: def get_base_url(request) -> str: """Get base URL for image normalization""" - return os.getenv("SERVER_URL") or f"http://{request.headers.get('host', 'localhost:3000')}" + # Try to get from environment first + server_url = os.getenv("SERVER_URL") + if server_url: + return server_url.rstrip('/') + + # Get from request host header + host = request.headers.get('host', 'localhost:8000') + # Ensure we use the backend port if host doesn't have a port + if ':' not in host: + host = f"{host}:8000" + + # Use http or https based on scheme + scheme = request.url.scheme if hasattr(request.url, 'scheme') else 'http' + return f"{scheme}://{host}" async def get_rooms_with_ratings( @@ -72,6 +85,9 @@ async def get_rooms_with_ratings( "price": float(room.price) if room.price else 0.0, "featured": room.featured, "description": room.description, + "capacity": room.capacity, + "room_size": room.room_size, + "view": room.view, "amenities": room.amenities, "created_at": room.created_at.isoformat() if room.created_at else None, "updated_at": room.updated_at.isoformat() if room.updated_at else None, @@ -102,44 +118,319 @@ async def get_rooms_with_ratings( return result +def get_predefined_amenities() -> List[str]: + """Get comprehensive list of predefined hotel room amenities""" + return [ + # Basic Amenities + "Free WiFi", + "WiFi", + "High-Speed Internet", + "WiFi in Room", + + # Entertainment + "Flat-Screen TV", + "TV", + "Cable TV", + "Satellite TV", + "Smart TV", + "Netflix", + "Streaming Services", + "DVD Player", + "Stereo System", + "Radio", + "iPod Dock", + + # Climate Control + "Air Conditioning", + "AC", + "Heating", + "Climate Control", + "Ceiling Fan", + "Air Purifier", + + # Bathroom Features + "Private Bathroom", + "Ensuite Bathroom", + "Bathtub", + "Jacuzzi Bathtub", + "Hot Tub", + "Shower", + "Rain Shower", + "Walk-in Shower", + "Bidet", + "Hair Dryer", + "Hairdryer", + "Bathrobes", + "Slippers", + "Toiletries", + "Premium Toiletries", + "Towels", + + # Food & Beverage + "Mini Bar", + "Minibar", + "Refrigerator", + "Fridge", + "Microwave", + "Coffee Maker", + "Electric Kettle", + "Tea Making Facilities", + "Coffee Machine", + "Nespresso Machine", + "Kitchenette", + "Dining Table", + "Room Service", + "Breakfast Included", + "Breakfast", + "Complimentary Water", + "Bottled Water", + + # Furniture & Space + "Desk", + "Writing Desk", + "Office Desk", + "Work Desk", + "Sofa", + "Sitting Area", + "Lounge Area", + "Dining Area", + "Separate Living Area", + "Wardrobe", + "Closet", + "Dresser", + "Mirror", + "Full-Length Mirror", + "Seating Area", + + # Bed & Sleep + "King Size Bed", + "Queen Size Bed", + "Double Bed", + "Twin Beds", + "Single Bed", + "Extra Bedding", + "Pillow Menu", + "Premium Bedding", + "Blackout Curtains", + "Soundproofing", + + # Safety & Security + "Safe", + "In-Room Safe", + "Safety Deposit Box", + "Smoke Detector", + "Fire Extinguisher", + "Security System", + "Key Card Access", + "Door Lock", + "Pepper Spray", + + # Technology + "USB Charging Ports", + "USB Ports", + "USB Outlets", + "Power Outlets", + "Charging Station", + "Laptop Safe", + "HDMI Port", + "Phone", + "Desk Phone", + "Wake-Up Service", + "Alarm Clock", + "Digital Clock", + + # View & Outdoor + "Balcony", + "Private Balcony", + "Terrace", + "Patio", + "City View", + "Ocean View", + "Sea View", + "Mountain View", + "Garden View", + "Pool View", + "Park View", + "Window", + "Large Windows", + "Floor-to-Ceiling Windows", + + # Services + "24-Hour Front Desk", + "24 Hour Front Desk", + "24/7 Front Desk", + "Concierge Service", + "Butler Service", + "Housekeeping", + "Daily Housekeeping", + "Turndown Service", + "Laundry Service", + "Dry Cleaning", + "Ironing Service", + "Luggage Storage", + "Bell Service", + "Valet Parking", + "Parking", + "Free Parking", + "Airport Shuttle", + "Shuttle Service", + "Car Rental", + "Taxi Service", + + # Fitness & Wellness + "Gym Access", + "Fitness Center", + "Fitness Room", + "Spa Access", + "Spa", + "Sauna", + "Steam Room", + "Hot Tub", + "Massage Service", + "Beauty Services", + + # Recreation + "Swimming Pool", + "Pool", + "Indoor Pool", + "Outdoor Pool", + "Infinity Pool", + "Pool Access", + "Golf Course", + "Tennis Court", + "Beach Access", + "Water Sports", + + # Business & Work + "Business Center", + "Meeting Room", + "Conference Room", + "Fax Service", + "Photocopying", + "Printing Service", + "Secretarial Services", + + # Accessibility + "Wheelchair Accessible", + "Accessible Room", + "Elevator Access", + "Ramp Access", + "Accessible Bathroom", + "Lowered Sink", + "Grab Bars", + "Hearing Accessible", + "Visual Alarm", + + # Family & Pets + "Family Room", + "Kids Welcome", + "Baby Crib", + "Extra Bed", + "Crib", + "Childcare Services", + "Pets Allowed", + "Pet Friendly", + + # Additional Features + "Smoking Room", + "Non-Smoking Room", + "No Smoking", + "Interconnecting Rooms", + "Adjoining Rooms", + "Suite", + "Separate Bedroom", + "Kitchen", + "Full Kitchen", + "Dishwasher", + "Oven", + "Stove", + "Washing Machine", + "Dryer", + "Iron", + "Ironing Board", + "Clothes Rack", + "Umbrella", + "Shoe Shine Service", + + # Luxury Features + "Fireplace", + "Jacuzzi", + "Steam Shower", + "Spa Bath", + "Bidet Toilet", + "Smart Home System", + "Lighting Control", + "Curtain Control", + "Automated Systems", + "Personalized Service", + "VIP Treatment", + "Butler", + "Private Entrance", + "Private Elevator", + "Panic Button", + + # Entertainment & Media + "Blu-ray Player", + "Gaming Console", + "PlayStation", + "Xbox", + "Sound System", + "Surround Sound", + "Music System", + + # Special Features + "Library", + "Reading Room", + "Study Room", + "Private Pool", + "Private Garden", + "Yard", + "Courtyard", + "Outdoor Furniture", + "BBQ Facilities", + "Picnic Area", + ] + + async def get_amenities_list(db: Session) -> List[str]: - """Get all unique amenities from room types and rooms""" - all_amenities = [] + """Get all unique amenities from room types and rooms, plus predefined amenities""" + # Start with predefined comprehensive list + all_amenities = set(get_predefined_amenities()) # Get from room types room_types = db.query(RoomType.amenities).all() for rt in room_types: if rt.amenities: if isinstance(rt.amenities, list): - all_amenities.extend([str(a).strip() for a in rt.amenities]) + all_amenities.update([str(a).strip() for a in rt.amenities if str(a).strip()]) elif isinstance(rt.amenities, str): try: import json parsed = json.loads(rt.amenities) if isinstance(parsed, list): - all_amenities.extend([str(a).strip() for a in parsed]) + all_amenities.update([str(a).strip() for a in parsed if str(a).strip()]) else: - all_amenities.extend([s.strip() for s in rt.amenities.split(',')]) + all_amenities.update([s.strip() for s in rt.amenities.split(',') if s.strip()]) except: - all_amenities.extend([s.strip() for s in rt.amenities.split(',')]) + all_amenities.update([s.strip() for s in rt.amenities.split(',') if s.strip()]) # Get from rooms rooms = db.query(Room.amenities).all() for r in rooms: if r.amenities: if isinstance(r.amenities, list): - all_amenities.extend([str(a).strip() for a in r.amenities]) + all_amenities.update([str(a).strip() for a in r.amenities if str(a).strip()]) elif isinstance(r.amenities, str): try: import json parsed = json.loads(r.amenities) if isinstance(parsed, list): - all_amenities.extend([str(a).strip() for a in parsed]) + all_amenities.update([str(a).strip() for a in parsed if str(a).strip()]) else: - all_amenities.extend([s.strip() for s in r.amenities.split(',')]) + all_amenities.update([s.strip() for s in r.amenities.split(',') if s.strip()]) except: - all_amenities.extend([s.strip() for s in r.amenities.split(',')]) + all_amenities.update([s.strip() for s in r.amenities.split(',') if s.strip()]) - # Return unique, non-empty values - return sorted(list(set([a for a in all_amenities if a]))) + # Return unique, sorted values + return sorted(list(all_amenities)) diff --git a/Backend/src/services/stripe_service.py b/Backend/src/services/stripe_service.py new file mode 100644 index 00000000..b27e562e --- /dev/null +++ b/Backend/src/services/stripe_service.py @@ -0,0 +1,409 @@ +""" +Stripe payment service for processing card payments +""" +import stripe +from typing import Optional, Dict, Any +from ..config.settings import settings +from ..models.payment import Payment, PaymentMethod, PaymentType, PaymentStatus +from ..models.booking import Booking, BookingStatus +from ..models.system_settings import SystemSettings +from sqlalchemy.orm import Session +from datetime import datetime + + +def get_stripe_secret_key(db: Session) -> Optional[str]: + """Get Stripe secret key from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_secret_key" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.STRIPE_SECRET_KEY if settings.STRIPE_SECRET_KEY else None + + +def get_stripe_publishable_key(db: Session) -> Optional[str]: + """Get Stripe publishable key from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_publishable_key" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.STRIPE_PUBLISHABLE_KEY if settings.STRIPE_PUBLISHABLE_KEY else None + + +def get_stripe_webhook_secret(db: Session) -> Optional[str]: + """Get Stripe webhook secret from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "stripe_webhook_secret" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.STRIPE_WEBHOOK_SECRET if settings.STRIPE_WEBHOOK_SECRET else None + + +class StripeService: + """Service for handling Stripe payments""" + + @staticmethod + def create_payment_intent( + amount: float, + currency: str = "usd", + metadata: Optional[Dict[str, Any]] = None, + customer_id: Optional[str] = None, + db: Optional[Session] = None + ) -> Dict[str, Any]: + """ + Create a Stripe Payment Intent + + Args: + amount: Payment amount in smallest currency unit (cents for USD) + currency: Currency code (default: usd) + metadata: Additional metadata to attach to the payment intent + customer_id: Optional Stripe customer ID + db: Optional database session to get keys from database + + Returns: + Payment intent object + """ + # Get secret key from database or environment + secret_key = None + if db: + secret_key = get_stripe_secret_key(db) + if not secret_key: + secret_key = settings.STRIPE_SECRET_KEY + + if not secret_key: + raise ValueError("Stripe secret key is not configured") + + # Set the API key for this request + stripe.api_key = secret_key + + # Validate amount is reasonable (Stripe max is $999,999.99) + if amount <= 0: + raise ValueError("Amount must be greater than 0") + if amount > 999999.99: + raise ValueError(f"Amount ${amount:,.2f} exceeds Stripe's maximum of $999,999.99") + + # Convert amount to cents (smallest currency unit) + # Amount should be in dollars, so multiply by 100 to get cents + amount_in_cents = int(round(amount * 100)) + + # Double-check the cents amount doesn't exceed Stripe's limit + if amount_in_cents > 99999999: # $999,999.99 in cents + raise ValueError(f"Amount ${amount:,.2f} (${amount_in_cents} cents) exceeds Stripe's maximum") + + intent_params = { + "amount": amount_in_cents, + "currency": currency, + "automatic_payment_methods": { + "enabled": True, + }, + "metadata": metadata or {}, + } + + if customer_id: + intent_params["customer"] = customer_id + + try: + intent = stripe.PaymentIntent.create(**intent_params) + return { + "client_secret": intent.client_secret, + "id": intent.id, + "status": intent.status, + "amount": intent.amount, + "currency": intent.currency, + } + except stripe.StripeError as e: + raise ValueError(f"Stripe error: {str(e)}") + + @staticmethod + def retrieve_payment_intent( + payment_intent_id: str, + db: Optional[Session] = None + ) -> Dict[str, Any]: + """ + Retrieve a payment intent by ID + + Args: + payment_intent_id: Stripe payment intent ID + db: Optional database session to get keys from database + + Returns: + Payment intent object + """ + # Get secret key from database or environment + secret_key = None + if db: + secret_key = get_stripe_secret_key(db) + if not secret_key: + secret_key = settings.STRIPE_SECRET_KEY + + if not secret_key: + raise ValueError("Stripe secret key is not configured") + + # Set the API key for this request + stripe.api_key = secret_key + + try: + intent = stripe.PaymentIntent.retrieve(payment_intent_id) + # Safely access charges - they may not exist on all payment intents + charges = [] + if hasattr(intent, 'charges') and intent.charges: + charges_data = getattr(intent.charges, 'data', []) + charges = [ + { + "id": charge.id, + "paid": charge.paid, + "status": charge.status, + } + for charge in charges_data + ] + + return { + "id": intent.id, + "status": intent.status, + "amount": intent.amount / 100, # Convert from cents + "currency": intent.currency, + "metadata": intent.metadata, + "charges": charges, + } + except stripe.StripeError as e: + raise ValueError(f"Stripe error: {str(e)}") + + @staticmethod + def confirm_payment( + payment_intent_id: str, + db: Session, + booking_id: Optional[int] = None + ) -> Dict[str, Any]: + """ + Confirm a payment and update database records + + Args: + payment_intent_id: Stripe payment intent ID + db: Database session + booking_id: Optional booking ID for metadata lookup + + Returns: + Payment record dictionary + """ + try: + intent_data = StripeService.retrieve_payment_intent(payment_intent_id, db) + + # Find or get booking_id from metadata + if not booking_id and intent_data.get("metadata"): + booking_id = intent_data["metadata"].get("booking_id") + if booking_id: + booking_id = int(booking_id) + + if not booking_id: + raise ValueError("Booking ID is required") + + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise ValueError("Booking not found") + + # Check payment intent status + payment_status = intent_data.get("status") + print(f"Payment intent status: {payment_status}") + + # Accept succeeded or processing status (processing means payment is being processed) + if payment_status not in ["succeeded", "processing"]: + raise ValueError(f"Payment intent not in a valid state. Status: {payment_status}. Payment may still be processing or may have failed.") + + # Find existing payment or create new one + payment = db.query(Payment).filter( + Payment.booking_id == booking_id, + Payment.transaction_id == payment_intent_id, + Payment.payment_method == PaymentMethod.stripe + ).first() + + amount = intent_data["amount"] + + if payment: + # Update existing payment + # Only mark as completed if payment intent succeeded + if payment_status == "succeeded": + payment.payment_status = PaymentStatus.completed + payment.payment_date = datetime.utcnow() + # If processing, keep as pending (will be updated by webhook) + payment.amount = amount + else: + # Create new payment record + payment_type = PaymentType.full + if booking.requires_deposit and not booking.deposit_paid: + payment_type = PaymentType.deposit + + # Only mark as completed if payment intent succeeded + payment_status_enum = PaymentStatus.completed if payment_status == "succeeded" else PaymentStatus.pending + payment_date = datetime.utcnow() if payment_status == "succeeded" else None + + payment = Payment( + booking_id=booking_id, + amount=amount, + payment_method=PaymentMethod.stripe, + payment_type=payment_type, + payment_status=payment_status_enum, + transaction_id=payment_intent_id, + payment_date=payment_date, + notes=f"Stripe payment - Intent: {payment_intent_id} (Status: {payment_status})", + ) + db.add(payment) + + # Commit payment first to ensure it's saved + db.commit() + db.refresh(payment) + + # Update booking status only if payment is completed + if payment.payment_status == PaymentStatus.completed: + # Refresh booking to get updated payments relationship + db.refresh(booking) + + if payment.payment_type == PaymentType.deposit: + # Mark deposit as paid and confirm booking + booking.deposit_paid = True + if booking.status == BookingStatus.pending: + booking.status = BookingStatus.confirmed + elif payment.payment_type == PaymentType.full: + # Calculate total paid from all completed payments (now includes current payment) + total_paid = sum( + float(p.amount) for p in booking.payments + if p.payment_status == PaymentStatus.completed + ) + + # Confirm booking if: + # 1. Total paid (all payments) covers the booking price, OR + # 2. This single payment covers the entire booking amount + if total_paid >= float(booking.total_price) or float(payment.amount) >= float(booking.total_price): + booking.status = BookingStatus.confirmed + + # Commit booking status update + db.commit() + db.refresh(booking) + + # Safely get enum values + def get_enum_value(enum_obj): + """Safely extract value from enum or return as-is""" + if enum_obj is None: + return None + if isinstance(enum_obj, (PaymentMethod, PaymentType, PaymentStatus)): + return enum_obj.value + return enum_obj + + try: + return { + "id": payment.id, + "booking_id": payment.booking_id, + "amount": float(payment.amount) if payment.amount else 0.0, + "payment_method": get_enum_value(payment.payment_method), + "payment_type": get_enum_value(payment.payment_type), + "payment_status": get_enum_value(payment.payment_status), + "transaction_id": payment.transaction_id, + "payment_date": payment.payment_date.isoformat() if payment.payment_date else None, + } + except AttributeError as ae: + print(f"AttributeError accessing payment fields: {ae}") + print(f"Payment object: {payment}") + print(f"Payment payment_method: {payment.payment_method if hasattr(payment, 'payment_method') else 'missing'}") + print(f"Payment payment_type: {payment.payment_type if hasattr(payment, 'payment_type') else 'missing'}") + print(f"Payment payment_status: {payment.payment_status if hasattr(payment, 'payment_status') else 'missing'}") + raise + + except ValueError as e: + # Re-raise ValueError as-is (these are expected errors) + db.rollback() + raise + except Exception as e: + import traceback + error_details = traceback.format_exc() + error_msg = str(e) if str(e) else f"{type(e).__name__}: {repr(e)}" + print(f"Error in confirm_payment: {error_msg}") + print(f"Traceback: {error_details}") + db.rollback() + raise ValueError(f"Error confirming payment: {error_msg}") + + @staticmethod + def handle_webhook( + payload: bytes, + signature: str, + db: Session + ) -> Dict[str, Any]: + """ + Handle Stripe webhook events + + Args: + payload: Raw webhook payload + signature: Stripe signature header + db: Database session + + Returns: + Webhook event data + """ + webhook_secret = get_stripe_webhook_secret(db) + if not webhook_secret: + webhook_secret = settings.STRIPE_WEBHOOK_SECRET + + if not webhook_secret: + raise ValueError("Stripe webhook secret is not configured. Please configure it in Admin Panel (Settings > Stripe Settings) or set STRIPE_WEBHOOK_SECRET environment variable.") + + try: + event = stripe.Webhook.construct_event( + payload, signature, webhook_secret + ) + except ValueError as e: + raise ValueError(f"Invalid payload: {str(e)}") + except stripe.SignatureVerificationError as e: + raise ValueError(f"Invalid signature: {str(e)}") + + # Handle the event + if event["type"] == "payment_intent.succeeded": + payment_intent = event["data"]["object"] + payment_intent_id = payment_intent["id"] + metadata = payment_intent.get("metadata", {}) + booking_id = metadata.get("booking_id") + + if booking_id: + try: + StripeService.confirm_payment( + payment_intent_id=payment_intent_id, + db=db, + booking_id=int(booking_id) + ) + except Exception as e: + print(f"Error processing webhook for booking {booking_id}: {str(e)}") + + elif event["type"] == "payment_intent.payment_failed": + payment_intent = event["data"]["object"] + payment_intent_id = payment_intent["id"] + metadata = payment_intent.get("metadata", {}) + booking_id = metadata.get("booking_id") + + if booking_id: + # Update payment status to failed + payment = db.query(Payment).filter( + Payment.transaction_id == payment_intent_id, + Payment.booking_id == int(booking_id) + ).first() + + if payment: + payment.payment_status = PaymentStatus.failed + db.commit() + + return { + "status": "success", + "event_type": event["type"], + "event_id": event["id"], + } + diff --git a/Backend/venv/bin/normalizer b/Backend/venv/bin/normalizer new file mode 100755 index 00000000..0d8c6ae2 --- /dev/null +++ b/Backend/venv/bin/normalizer @@ -0,0 +1,7 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 +import sys +from charset_normalizer.cli import cli_detect +if __name__ == '__main__': + if sys.argv[0].endswith('.exe'): + sys.argv[0] = sys.argv[0][:-4] + sys.exit(cli_detect()) diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/METADATA new file mode 100644 index 00000000..6939bac7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/METADATA @@ -0,0 +1,78 @@ +Metadata-Version: 2.4 +Name: certifi +Version: 2025.11.12 +Summary: Python package for providing Mozilla's CA Bundle. +Home-page: https://github.com/certifi/python-certifi +Author: Kenneth Reitz +Author-email: me@kennethreitz.com +License: MPL-2.0 +Project-URL: Source, https://github.com/certifi/python-certifi +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Natural Language :: English +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Requires-Python: >=3.7 +License-File: LICENSE +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: requires-python +Dynamic: summary + +Certifi: Python SSL Certificates +================================ + +Certifi provides Mozilla's carefully curated collection of Root Certificates for +validating the trustworthiness of SSL certificates while verifying the identity +of TLS hosts. It has been extracted from the `Requests`_ project. + +Installation +------------ + +``certifi`` is available on PyPI. Simply install it with ``pip``:: + + $ pip install certifi + +Usage +----- + +To reference the installed certificate authority (CA) bundle, you can use the +built-in function:: + + >>> import certifi + + >>> certifi.where() + '/usr/local/lib/python3.7/site-packages/certifi/cacert.pem' + +Or from the command line:: + + $ python -m certifi + /usr/local/lib/python3.7/site-packages/certifi/cacert.pem + +Enjoy! + +.. _`Requests`: https://requests.readthedocs.io/en/master/ + +Addition/Removal of Certificates +-------------------------------- + +Certifi does not support any addition/removal or other modification of the +CA trust store content. This project is intended to provide a reliable and +highly portable root of trust to python deployments. Look to upstream projects +for methods to use alternate trust. diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/RECORD new file mode 100644 index 00000000..2a3994ca --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/RECORD @@ -0,0 +1,14 @@ +certifi-2025.11.12.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +certifi-2025.11.12.dist-info/METADATA,sha256=_JprGu_1lWSdHlruRBKcorXnrfvBDhvX_6KRr8HQbLc,2475 +certifi-2025.11.12.dist-info/RECORD,, +certifi-2025.11.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91 +certifi-2025.11.12.dist-info/licenses/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 +certifi-2025.11.12.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 +certifi/__init__.py,sha256=1BRSxNMnZW7CZ2oJtYWLoJgfHfcB9i273exwiPwfjJM,94 +certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243 +certifi/__pycache__/__init__.cpython-312.pyc,, +certifi/__pycache__/__main__.cpython-312.pyc,, +certifi/__pycache__/core.cpython-312.pyc,, +certifi/cacert.pem,sha256=oa1dZD4hxDtb7XTH4IkdzbWPavUcis4eTwINZUqlKhY,283932 +certifi/core.py,sha256=XFXycndG5pf37ayeF8N32HUuDafsyhkVMbO4BAPWHa0,3394 +certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/WHEEL new file mode 100644 index 00000000..e7fa31b6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE new file mode 100644 index 00000000..62b076cd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE @@ -0,0 +1,20 @@ +This package contains a modified version of ca-bundle.crt: + +ca-bundle.crt -- Bundle of CA Root Certificates + +This is a bundle of X.509 certificates of public Certificate Authorities +(CA). These were automatically extracted from Mozilla's root certificates +file (certdata.txt). This file can be found in the mozilla source tree: +https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt +It contains the certificates in PEM format and therefore +can be directly used with curl / libcurl / php_curl, or with +an Apache+mod_ssl webserver for SSL client authentication. +Just configure this file as the SSLCACertificateFile.# + +***** BEGIN LICENSE BLOCK ***** +This Source Code Form is subject to the terms of the Mozilla Public License, +v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain +one at http://mozilla.org/MPL/2.0/. + +***** END LICENSE BLOCK ***** +@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/top_level.txt b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/top_level.txt new file mode 100644 index 00000000..963eac53 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi-2025.11.12.dist-info/top_level.txt @@ -0,0 +1 @@ +certifi diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/__init__.py b/Backend/venv/lib/python3.12/site-packages/certifi/__init__.py new file mode 100644 index 00000000..f11f5ae4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi/__init__.py @@ -0,0 +1,4 @@ +from .core import contents, where + +__all__ = ["contents", "where"] +__version__ = "2025.11.12" diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/__main__.py b/Backend/venv/lib/python3.12/site-packages/certifi/__main__.py new file mode 100644 index 00000000..8945b5da --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi/__main__.py @@ -0,0 +1,12 @@ +import argparse + +from certifi import contents, where + +parser = argparse.ArgumentParser() +parser.add_argument("-c", "--contents", action="store_true") +args = parser.parse_args() + +if args.contents: + print(contents()) +else: + print(where()) diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..049ef3fd3909a0d3fde44a2d130e0932f57b2154 GIT binary patch literal 317 zcmYjMJx{|h5Vi9`OQNzNq%OeNp)mfS%~i;zqI{hJ^aD>CCfca9uY$f3sm70S5E3+ z#2n`4PUulmQ8VmAU#bZFDouQWThe7P9o YH?;pAZa>Ukg55>$b!&JZ>P@Tt0JfM_&j0`b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/certifi/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b19598113ad8dfef50d17c145e19407bf3425a86 GIT binary patch literal 632 zcmZuu&ubJh7)|E)3~pOogr%oN5nXW_)N3nPdhk>{%7P5zB+h1cCK)o>>J|@05S3oM z>7Ssi|A`luR<_1V#e;Yg3Lbhgv)$=l3?$#nd++=5CHdTF1VE4M?Hvyn`aCJ+P7S* zi+EngBVONH@HG-kx&vQNqjrwrnFhfK&NcIYTF3oe8Mixz@)FJ@VX{>A(;g9I*9eo{ zAPmpxpp;yYNQxopK;^`Vq?~mE<;5Z`Vo?(1CPYa3go^4uqH0tv-4p3B*JU464xyZx zQ>Y6u#*t2(X)2hp)xK2LY_$tPnfwT<&XrR*8nBIQ8x0^R45WZ@>~1Ikjg z87Bk6Fxnw(2W9jzDn_!$*`2jpw^2zY2@7qAQ&OUNiztfnn6fBZD@Lc@dd~4MBX`9` zeOmQ&PJ2w zKA)NX*xMULVCBC@jhSAAerF%P@m|n8gy0d6Y=k|Po*WO7qu8J#Zi=+)|r!~u@*rawYddAMT==8J}(%Pp*CiKPKZs*I!XZh+bEn4R7+?x}5+o1SX6%y19 zZ09|&@|s03Am+&KFSU-YXmp1#Ww2%sg4;uXOjPopi#?EjS zb7Lp0+RD07#!iTNTZ7TS0(^dgp-z1E)@XnbWm&H2+%eaRN?~uPqtkhR*6&r3vQ4-~ z138vJ*4=jO4Fr{l%6?9%&yU(Y?e}B9g6m*+1w9cKov?@JWwfoHY}ASSbbfSi^*&*H zAveG|QpqyRs!EH5o!1d;N}LF=4KgE&;`FGL(cwr0Zx}X=xoi-IgNr(eu&U65A|{xO zK>Q*!dmh{#y68jk#7Qi5F@%zt?_NHN)H4%}%v3Ei^>m@0`Jg`f;lugULp<8S;SCr_lL`%70CWGu1P{1_ZC=<$Q#VepZ;R_g&* zrGQ;nz%yO=Ui7O0%g`cu0cHrp+zF|+W*Aw{k+7**Iw(9VxBwC+N+&|Fsw)5$?S@A3 zZ!AecVh)=93OJClJh;DBms1USye5wy-K@)Z8uD~ap8nz06M4EWFP})up0FL!C1?!l zuAm^ofQ!Pn5M0smOk2n7i9Gh6P?e{Ff+?$Zt;9I&vTKwXXu1^dN`_C$#N?Wf;8kT3 zrsk|f2B34K4NR3lbA(BT3^6y%T!J}v-@Bl6<>k7!VA6gUT!+RIDEZRi+ehX4=+ysK zRq!q_q_3(<=UsI$w82&oNkW(92+Qo=CnMTrdl>?oX^63%I2buxczXA_JbNO|dc+d8 z-eR`T2`h?jX>i{Jd)IEkzz}fa+nCt!ub>#_y5$TQm8wN3yrwyVZEK5Y*lu5C_X4{B zw-9Bw(cK0~vna#dHQT+E-f8_My+_6&h21232i&>9aok^gh!dM}#KnF^y-kthUO$(R z7;XpyHDO@?!82j(PjTY6{-M43Uj~Nv7S6@t(9QkZO$6Qf1Q%N2_O%Pd`hTJ*G|hEp TCR&-$olkP1IWKdLbD{YceWIW^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/cacert.pem b/Backend/venv/lib/python3.12/site-packages/certifi/cacert.pem new file mode 100644 index 00000000..ebcb66fe --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi/cacert.pem @@ -0,0 +1,4678 @@ + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +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 +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global Certification Authority" +# Serial: 1846098327275375458322922162 +# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e +# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 +# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P256 Certification Authority" +# Serial: 4151900041497450638097112925 +# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 +# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf +# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P384 Certification Authority" +# Serial: 2704997926503831671788816187 +# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 +# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 +# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 1977337328857672817 +# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 +# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe +# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus ECC Root CA" +# Serial: 630369271402956006249506845124680065938238527194 +# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 +# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 +# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- + +# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. +# Label: "vTrus Root CA" +# Serial: 387574501246983434957692974888460947164905180485 +# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc +# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 +# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X2 O=Internet Security Research Group +# Subject: CN=ISRG Root X2 O=Internet Security Research Group +# Label: "ISRG Root X2" +# Serial: 87493402998870891108772069816698636114 +# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 +# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af +# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. +# Label: "HiPKI Root CA - G1" +# Serial: 60966262342023497858655262305426234976 +# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 +# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 +# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 159662223612894884239637590694 +# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc +# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 +# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 159662320309726417404178440727 +# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 +# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a +# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 159662449406622349769042896298 +# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc +# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 +# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt +nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY +6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu +MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k +RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg +f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV ++3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo +dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa +G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq +gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H +vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC +B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u +NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg +yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev +HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 +xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR +TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg +JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV +7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl +6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 159662495401136852707857743206 +# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 +# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 +# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 159662532700760215368942768210 +# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 +# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 +# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj +# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj +# Label: "Telia Root CA v2" +# Serial: 7288924052977061235122729490515358 +# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 +# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd +# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 1 2020" +# Serial: 165870826978392376648679885835942448534 +# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed +# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 +# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 1 2020" +# Serial: 126288379621884218666039612629459926992 +# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e +# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 +# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS ECC P384 Root G5" +# Serial: 13129116028163249804115411775095713523 +# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed +# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee +# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. +# Label: "DigiCert TLS RSA4096 Root G5" +# Serial: 11930366277458970227240571539258396554 +# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 +# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 +# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root R1 O=Certainly +# Subject: CN=Certainly Root R1 O=Certainly +# Label: "Certainly Root R1" +# Serial: 188833316161142517227353805653483829216 +# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 +# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af +# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +# Issuer: CN=Certainly Root E1 O=Certainly +# Subject: CN=Certainly Root E1 O=Certainly +# Label: "Certainly Root E1" +# Serial: 8168531406727139161245376702891150584 +# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 +# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b +# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. +# Label: "Security Communication ECC RootCA1" +# Serial: 15446673492073852651 +# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 +# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 +# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA1" +# Serial: 113562791157148395269083148143378328608 +# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 +# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a +# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- + +# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY +# Label: "BJCA Global Root CA2" +# Serial: 58605626836079930195615843123109055211 +# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c +# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 +# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root E46" +# Serial: 88989738453351742415770396670917916916 +# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 +# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a +# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- + +# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited +# Label: "Sectigo Public Server Authentication Root R46" +# Serial: 156256931880233212765902055439220583700 +# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 +# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 +# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS RSA Root CA 2022" +# Serial: 148535279242832292258835760425842727825 +# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da +# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca +# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation +# Label: "SSL.com TLS ECC Root CA 2022" +# Serial: 26605119622390491762507526719404364228 +# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 +# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 +# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA ECC TLS 2021" +# Serial: 81873346711060652204712539181482831616 +# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 +# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd +# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos +# Label: "Atos TrustedRoot Root CA RSA TLS 2021" +# Serial: 111436099570196163832749341232207667876 +# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 +# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 +# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G3" +# Serial: 576386314500428537169965010905813481816650257167 +# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 +# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 +# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM +BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe +Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw +IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU +cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS +T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK +AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 +nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep +qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA +yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs +hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX +zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv +kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT +f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA +uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih +MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E +BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 +wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 +XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 +JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j +ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV +VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx +xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on +AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d +7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj +gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV ++Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo +FGWsJwt0ivKH +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. +# Label: "TrustAsia Global Root CA G4" +# Serial: 451799571007117016466790293371524403291602933463 +# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb +# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a +# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c +-----BEGIN CERTIFICATE----- +MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw +WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y +MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD +VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz +dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx +s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw +LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD +pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR +UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj +/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS ECC Root 2020" +# Serial: 72082518505882327255703894282316633856 +# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd +# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec +# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw +CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH +bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw +MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx +JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE +AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O +tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP +f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA +MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di +z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn +27iQ7t0l +-----END CERTIFICATE----- + +# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH +# Label: "Telekom Security TLS RSA Root 2023" +# Serial: 44676229530606711399881795178081572759 +# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 +# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 +# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj +MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 +eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy +MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC +REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG +A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 +cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV +cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA +U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 +Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug +BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy +8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J +co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg +8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 +rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 +mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg ++y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX +gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ +pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm +9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw +M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd +GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ +CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t +xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ +w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK +L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj +X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q +ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm +dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- + +# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA +# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" +# Serial: 65916896770016886708751106294915943533 +# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 +# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 +# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a +-----BEGIN CERTIFICATE----- +MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf +e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C +cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O +BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO +PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw +hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG +XSaQpYXFuXqUPoeovQA= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA CYBER Root CA" +# Serial: 85076849864375384482682434040119489222 +# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 +# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 +# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ +MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 +IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 +WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO +LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P +40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF +avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ +34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i +JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu +j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf +Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP +2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA +S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA +oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC +kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW +5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd +BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB +AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t +tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn +68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn +TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t +RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx +f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI +Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz +8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 +NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX +xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 +t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA12" +# Serial: 587887345431707215246142177076162061960426065942 +# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 +# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 +# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw +NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF +KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt +p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd +J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur +FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J +hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K +h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF +AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld +mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ +mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA +8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV +55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ +yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA14" +# Serial: 575790784512929437950770173562378038616896959179 +# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 +# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f +# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw +NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ +FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg +vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy +6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo +/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J +kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ +0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib +y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac +18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs +0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB +SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL +ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk +86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E +rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib +ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT +zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS +DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 +2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo +FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy +K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 +dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl +Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB +365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c +JRNItX+S +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. +# Label: "SecureSign Root CA15" +# Serial: 126083514594751269499665114766174399806381178503 +# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 +# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d +# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a +-----BEGIN CERTIFICATE----- +MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw +UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM +dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy +NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl +cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 +IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 +wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR +ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT +9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp +4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 +bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST BR Root CA 2 2023" +# Serial: 153168538924886464690566649552453098598 +# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 +# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 +# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw +OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr +i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE +gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 +k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT +Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl +2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U +cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP +/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS +uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ +0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N +DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ +XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 +GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI +FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n +riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR +VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc +LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn +4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD +hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG +koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 +ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS +Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 +knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ +hJ65bvspmZDogNOfJA== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS ECC Root CA" +# Serial: 310892014698942880364840003424242768478804666567 +# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c +# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 +# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 +-----BEGIN CERTIFICATE----- +MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw +WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw +NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE +ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB +c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ +AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp +guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw +DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 +L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR +OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== +-----END CERTIFICATE----- + +# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. +# Label: "TrustAsia TLS RSA Root CA" +# Serial: 160405846464868906657516898462547310235378010780 +# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 +# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa +# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 +-----BEGIN CERTIFICATE----- +MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM +BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN +MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG +A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 +c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ +NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ +Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 +HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 +ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb +xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX +i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ +UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j +TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT +bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 +S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 +Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 +iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt +7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp +2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ +g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj +pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M +pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP +XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe +SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 +ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy +323imttUQ/hHWKNddBWcwauwxzQ= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH +# Label: "D-TRUST EV Root CA 2 2023" +# Serial: 139766439402180512324132425437959641711 +# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 +# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b +# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw +OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK +F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE +7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe +EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 +lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb +RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV +jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc +jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx +TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ +ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk +hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF +NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH +kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 +QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 +pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q +3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU +t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX +cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 +ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT +2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs +7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP +gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst +Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh +XBxvWHZks/wCuPWdCg== +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG +# Label: "SwissSign RSA TLS Root CA 2022 - 1" +# Serial: 388078645722908516278762308316089881486363258315 +# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 +# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce +# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 +-----BEGIN CERTIFICATE----- +MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE +AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx +MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT +d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg +MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX +vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 +LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX +5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE +EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt +/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x +0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 +KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM +0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd +OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta +clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK +wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 +DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL +BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 +10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz +Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ +iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc +gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM +ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF +LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp +zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td +Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 +rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO +gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root ECC G1 O=OISTE Foundation +# Label: "OISTE Server Root ECC G1" +# Serial: 47819833811561661340092227008453318557 +# MD5 Fingerprint: 42:a7:d2:35:ae:02:92:db:19:76:08:de:2f:05:b4:d4 +# SHA1 Fingerprint: 3b:f6:8b:09:ae:2a:92:7b:ba:e3:8d:3f:11:95:d9:e6:44:0c:45:e2 +# SHA256 Fingerprint: ee:c9:97:c0:c3:0f:21:6f:7e:3b:8b:30:7d:2b:ae:42:41:2d:75:3f:c8:21:9d:af:d1:52:0b:25:72:85:0f:49 +-----BEGIN CERTIFICATE----- +MIICNTCCAbqgAwIBAgIQI/nD1jWvjyhLH/BU6n6XnTAKBggqhkjOPQQDAzBLMQsw +CQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwY +T0lTVEUgU2VydmVyIFJvb3QgRUNDIEcxMB4XDTIzMDUzMTE0NDIyOFoXDTQ4MDUy +NDE0NDIyN1owSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5kYXRp +b24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IEVDQyBHMTB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABBcv+hK8rBjzCvRE1nZCnrPoH7d5qVi2+GXROiFPqOujvqQy +cvO2Ackr/XeFblPdreqqLiWStukhEaivtUwL85Zgmjvn6hp4LrQ95SjeHIC6XG4N +2xml4z+cKrhAS93mT6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQ3 +TYhlz/w9itWj8UnATgwQb0K0nDAdBgNVHQ4EFgQUN02IZc/8PYrVo/FJwE4MEG9C +tJwwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCpKjAd0MKfkFFR +QD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxgZzFDJe0CMQCSia7pXGKD +YmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Subject: CN=OISTE Server Root RSA G1 O=OISTE Foundation +# Label: " OISTE Server Root RSA G1" +# Serial: 113845518112613905024960613408179309848 +# MD5 Fingerprint: 23:a7:9e:d4:70:b8:b9:14:57:41:8a:7e:44:59:e2:68 +# SHA1 Fingerprint: f7:00:34:25:94:88:68:31:e4:34:87:3f:70:fe:86:b3:86:9f:f0:6e +# SHA256 Fingerprint: 9a:e3:62:32:a5:18:9f:fd:db:35:3d:fd:26:52:0c:01:53:95:d2:27:77:da:c5:9d:b5:7b:98:c0:89:a6:51:e6 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBL +MQswCQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UE +AwwYT0lTVEUgU2VydmVyIFJvb3QgUlNBIEcxMB4XDTIzMDUzMTE0MzcxNloXDTQ4 +MDUyNDE0MzcxNVowSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5k +YXRpb24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IFJTQSBHMTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKqu9KuCz/vlNwvn1ZatkOhLKdxVYOPM +vLO8LZK55KN68YG0nnJyQ98/qwsmtO57Gmn7KNByXEptaZnwYx4M0rH/1ow00O7b +rEi56rAUjtgHqSSY3ekJvqgiG1k50SeH3BzN+Puz6+mTeO0Pzjd8JnduodgsIUzk +ik/HEzxux9UTl7Ko2yRpg1bTacuCErudG/L4NPKYKyqOBGf244ehHa1uzjZ0Dl4z +O8vbUZeUapU8zhhabkvG/AePLhq5SvdkNCncpo1Q4Y2LS+VIG24ugBA/5J8bZT8R +tOpXaZ+0AOuFJJkk9SGdl6r7NH8CaxWQrbueWhl/pIzY+m0o/DjH40ytas7ZTpOS +jswMZ78LS5bOZmdTaMsXEY5Z96ycG7mOaES3GK/m5Q9l3JUJsJMStR8+lKXHiHUh +sd4JJCpM4rzsTGdHwimIuQq6+cF0zowYJmXa92/GjHtoXAvuY8BeS/FOzJ8vD+Ho +mnqT8eDI278n5mUpezbgMxVz8p1rhAhoKzYHKyfMeNhqhw5HdPSqoBNdZH702xSu ++zrkL8Fl47l6QGzwBrd7KJvX4V84c5Ss2XCTLdyEr0YconosP4EmQufU2MVshGYR +i3drVByjtdgQ8K4p92cIiBdcuJd5z+orKu5YM+Vt6SmqZQENghPsJQtdLEByFSnT +kCz3GkPVavBpAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU +8snBDw1jALvsRQ5KH7WxszbNDo0wHQYDVR0OBBYEFPLJwQ8NYwC77EUOSh+1sbM2 +zQ6NMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEANGd5sjrG5T33 +I3K5Ce+SrScfoE4KsvXaFwyihdJ+klH9FWXXXGtkFu6KRcoMQzZENdl//nk6HOjG +5D1rd9QhEOP28yBOqb6J8xycqd+8MDoX0TJD0KqKchxRKEzdNsjkLWd9kYccnbz8 +qyiWXmFcuCIzGEgWUOrKL+mlSdx/PKQZvDatkuK59EvV6wit53j+F8Bdh3foZ3dP +AGav9LEDOr4SfEE15fSmG0eLy3n31r8Xbk5l8PjaV8GUgeV6Vg27Rn9vkf195hfk +gSe7BYhW3SCl95gtkRlpMV+bMPKZrXJAlszYd2abtNUOshD+FKrDgHGdPY3ofRRs +YWSGRqbXVMW215AWRqWFyp464+YTFrYVI8ypKVL9AMb2kI5Wj4kI3Zaq5tNqqYY1 +9tVFeEJKRvwDyF7YZvZFZSS0vod7VSCd9521Kvy5YhnLbDuv0204bKt7ph6N/Ome +/msVuduCmsuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3 +J8tRd/iWkx7P8nd9H0aTolkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2 +wq1yVAb+axj5d9spLFKebXd7Yv0PTY6YMjAwcRLWJTXjn/hvnLXrahut6hDTlhZy +BiElxky8j3C7DOReIoMt0r7+hVu05L0= +-----END CERTIFICATE----- diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/core.py b/Backend/venv/lib/python3.12/site-packages/certifi/core.py new file mode 100644 index 00000000..1c9661cc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/certifi/core.py @@ -0,0 +1,83 @@ +""" +certifi.py +~~~~~~~~~~ + +This module returns the installation location of cacert.pem or its contents. +""" +import sys +import atexit + +def exit_cacert_ctx() -> None: + _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] + + +if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file + # in cases where we're inside of a zipimport situation until someone + # actually calls where(), but we don't want to re-extract the file + # on every call of where(), so we'll do it once then store it in a + # global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you to + # manage the cleanup of this file, so it doesn't actually return a + # path, it returns a context manager that will give you the path + # when you enter it and will do any cleanup when you leave it. In + # the common case of not needing a temporary file, it will just + # return the file system location and the __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") + +else: + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None + _CACERT_PATH = None + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the + # file in cases where we're inside of a zipimport situation until + # someone actually calls where(), but we don't want to re-extract + # the file on every call of where(), so we'll do it once then store + # it in a global variable. + global _CACERT_CTX + global _CACERT_PATH + if _CACERT_PATH is None: + # This is slightly janky, the importlib.resources API wants you + # to manage the cleanup of this file, so it doesn't actually + # return a path, it returns a context manager that will give + # you the path when you enter it and will do any cleanup when + # you leave it. In the common case of not needing a temporary + # file, it will just return the file system location and the + # __exit__() is a no-op. + # + # We also have to hold onto the actual context manager, because + # it will do the cleanup whenever it gets garbage collected, so + # we will also store that at the global level as well. + _CACERT_CTX = get_path("certifi", "cacert.pem") + _CACERT_PATH = str(_CACERT_CTX.__enter__()) + atexit.register(exit_cacert_ctx) + + return _CACERT_PATH + + def contents() -> str: + return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/Backend/venv/lib/python3.12/site-packages/certifi/py.typed b/Backend/venv/lib/python3.12/site-packages/certifi/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/METADATA new file mode 100644 index 00000000..8d32edcc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/METADATA @@ -0,0 +1,764 @@ +Metadata-Version: 2.4 +Name: charset-normalizer +Version: 3.4.4 +Summary: The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet. +Author-email: "Ahmed R. TAHRI" +Maintainer-email: "Ahmed R. TAHRI" +License: MIT +Project-URL: Changelog, https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md +Project-URL: Documentation, https://charset-normalizer.readthedocs.io/ +Project-URL: Code, https://github.com/jawah/charset_normalizer +Project-URL: Issue tracker, https://github.com/jawah/charset_normalizer/issues +Keywords: encoding,charset,charset-detector,detector,normalization,unicode,chardet,detect +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Text Processing :: Linguistic +Classifier: Topic :: Utilities +Classifier: Typing :: Typed +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Provides-Extra: unicode-backport +Dynamic: license-file + +

Charset Detection, for Everyone 👋

+ +

+ The Real First Universal Charset Detector
+ + + + + Download Count Total + + + + +

+

+ Featured Packages
+ + Static Badge + + + Static Badge + +

+

+ In other language (unofficial port - by the community)
+ + Static Badge + +

+ +> A library that helps you read text from an unknown charset encoding.
Motivated by `chardet`, +> I'm trying to resolve the issue by taking a new approach. +> All IANA character set names for which the Python core library provides codecs are supported. + +

+ >>>>> 👉 Try Me Online Now, Then Adopt Me 👈 <<<<< +

+ +This project offers you an alternative to **Universal Charset Encoding Detector**, also known as **Chardet**. + +| Feature | [Chardet](https://github.com/chardet/chardet) | Charset Normalizer | [cChardet](https://github.com/PyYoshi/cChardet) | +|--------------------------------------------------|:---------------------------------------------:|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------:| +| `Fast` | ❌ | ✅ | ✅ | +| `Universal**` | ❌ | ✅ | ❌ | +| `Reliable` **without** distinguishable standards | ❌ | ✅ | ✅ | +| `Reliable` **with** distinguishable standards | ✅ | ✅ | ✅ | +| `License` | LGPL-2.1
_restrictive_ | MIT | MPL-1.1
_restrictive_ | +| `Native Python` | ✅ | ✅ | ❌ | +| `Detect spoken language` | ❌ | ✅ | N/A | +| `UnicodeDecodeError Safety` | ❌ | ✅ | ❌ | +| `Whl Size (min)` | 193.6 kB | 42 kB | ~200 kB | +| `Supported Encoding` | 33 | 🎉 [99](https://charset-normalizer.readthedocs.io/en/latest/user/support.html#supported-encodings) | 40 | + +

+Reading Normalized TextCat Reading Text +

+ +*\*\* : They are clearly using specific code for a specific encoding even if covering most of used one*
+ +## ⚡ Performance + +This package offer better performance than its counterpart Chardet. Here are some numbers. + +| Package | Accuracy | Mean per file (ms) | File per sec (est) | +|-----------------------------------------------|:--------:|:------------------:|:------------------:| +| [chardet](https://github.com/chardet/chardet) | 86 % | 63 ms | 16 file/sec | +| charset-normalizer | **98 %** | **10 ms** | 100 file/sec | + +| Package | 99th percentile | 95th percentile | 50th percentile | +|-----------------------------------------------|:---------------:|:---------------:|:---------------:| +| [chardet](https://github.com/chardet/chardet) | 265 ms | 71 ms | 7 ms | +| charset-normalizer | 100 ms | 50 ms | 5 ms | + +_updated as of december 2024 using CPython 3.12_ + +Chardet's performance on larger file (1MB+) are very poor. Expect huge difference on large payload. + +> Stats are generated using 400+ files using default parameters. More details on used files, see GHA workflows. +> And yes, these results might change at any time. The dataset can be updated to include more files. +> The actual delays heavily depends on your CPU capabilities. The factors should remain the same. +> Keep in mind that the stats are generous and that Chardet accuracy vs our is measured using Chardet initial capability +> (e.g. Supported Encoding) Challenge-them if you want. + +## ✨ Installation + +Using pip: + +```sh +pip install charset-normalizer -U +``` + +## 🚀 Basic Usage + +### CLI +This package comes with a CLI. + +``` +usage: normalizer [-h] [-v] [-a] [-n] [-m] [-r] [-f] [-t THRESHOLD] + file [file ...] + +The Real First Universal Charset Detector. Discover originating encoding used +on text file. Normalize text to unicode. + +positional arguments: + files File(s) to be analysed + +optional arguments: + -h, --help show this help message and exit + -v, --verbose Display complementary information about file if any. + Stdout will contain logs about the detection process. + -a, --with-alternative + Output complementary possibilities if any. Top-level + JSON WILL be a list. + -n, --normalize Permit to normalize input file. If not set, program + does not write anything. + -m, --minimal Only output the charset detected to STDOUT. Disabling + JSON output. + -r, --replace Replace file when trying to normalize it instead of + creating a new one. + -f, --force Replace file without asking if you are sure, use this + flag with caution. + -t THRESHOLD, --threshold THRESHOLD + Define a custom maximum amount of chaos allowed in + decoded content. 0. <= chaos <= 1. + --version Show version information and exit. +``` + +```bash +normalizer ./data/sample.1.fr.srt +``` + +or + +```bash +python -m charset_normalizer ./data/sample.1.fr.srt +``` + +🎉 Since version 1.4.0 the CLI produce easily usable stdout result in JSON format. + +```json +{ + "path": "/home/default/projects/charset_normalizer/data/sample.1.fr.srt", + "encoding": "cp1252", + "encoding_aliases": [ + "1252", + "windows_1252" + ], + "alternative_encodings": [ + "cp1254", + "cp1256", + "cp1258", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + "mbcs" + ], + "language": "French", + "alphabets": [ + "Basic Latin", + "Latin-1 Supplement" + ], + "has_sig_or_bom": false, + "chaos": 0.149, + "coherence": 97.152, + "unicode_path": null, + "is_preferred": true +} +``` + +### Python +*Just print out normalized text* +```python +from charset_normalizer import from_path + +results = from_path('./my_subtitle.srt') + +print(str(results.best())) +``` + +*Upgrade your code without effort* +```python +from charset_normalizer import detect +``` + +The above code will behave the same as **chardet**. We ensure that we offer the best (reasonable) BC result possible. + +See the docs for advanced usage : [readthedocs.io](https://charset-normalizer.readthedocs.io/en/latest/) + +## 😇 Why + +When I started using Chardet, I noticed that it was not suited to my expectations, and I wanted to propose a +reliable alternative using a completely different method. Also! I never back down on a good challenge! + +I **don't care** about the **originating charset** encoding, because **two different tables** can +produce **two identical rendered string.** +What I want is to get readable text, the best I can. + +In a way, **I'm brute forcing text decoding.** How cool is that ? 😎 + +Don't confuse package **ftfy** with charset-normalizer or chardet. ftfy goal is to repair Unicode string whereas charset-normalizer to convert raw file in unknown encoding to unicode. + +## 🍰 How + + - Discard all charset encoding table that could not fit the binary content. + - Measure noise, or the mess once opened (by chunks) with a corresponding charset encoding. + - Extract matches with the lowest mess detected. + - Additionally, we measure coherence / probe for a language. + +**Wait a minute**, what is noise/mess and coherence according to **YOU ?** + +*Noise :* I opened hundred of text files, **written by humans**, with the wrong encoding table. **I observed**, then +**I established** some ground rules about **what is obvious** when **it seems like** a mess (aka. defining noise in rendered text). + I know that my interpretation of what is noise is probably incomplete, feel free to contribute in order to + improve or rewrite it. + +*Coherence :* For each language there is on earth, we have computed ranked letter appearance occurrences (the best we can). So I thought +that intel is worth something here. So I use those records against decoded text to check if I can detect intelligent design. + +## ⚡ Known limitations + + - Language detection is unreliable when text contains two or more languages sharing identical letters. (eg. HTML (english tags) + Turkish content (Sharing Latin characters)) + - Every charset detector heavily depends on sufficient content. In common cases, do not bother run detection on very tiny content. + +## ⚠️ About Python EOLs + +**If you are running:** + +- Python >=2.7,<3.5: Unsupported +- Python 3.5: charset-normalizer < 2.1 +- Python 3.6: charset-normalizer < 3.1 +- Python 3.7: charset-normalizer < 4.0 + +Upgrade your Python interpreter as soon as possible. + +## 👤 Contributing + +Contributions, issues and feature requests are very much welcome.
+Feel free to check [issues page](https://github.com/ousret/charset_normalizer/issues) if you want to contribute. + +## 📝 License + +Copyright © [Ahmed TAHRI @Ousret](https://github.com/Ousret).
+This project is [MIT](https://github.com/Ousret/charset_normalizer/blob/master/LICENSE) licensed. + +Characters frequencies used in this project © 2012 [Denny Vrandečić](http://simia.net/letters/) + +## 💼 For Enterprise + +Professional support for charset-normalizer is available as part of the [Tidelift +Subscription][1]. Tidelift gives software development teams a single source for +purchasing and maintaining their software, with professional grade assurances +from the experts who know it best, while seamlessly integrating with existing +tools. + +[1]: https://tidelift.com/subscription/pkg/pypi-charset-normalizer?utm_source=pypi-charset-normalizer&utm_medium=readme + +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7297/badge)](https://www.bestpractices.dev/projects/7297) + +# Changelog +All notable changes to charset-normalizer will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4) (2025-10-13) + +### Changed +- Bound `setuptools` to a specific constraint `setuptools>=68,<=81`. +- Raised upper bound of mypyc for the optional pre-built extension to v1.18.2 + +### Removed +- `setuptools-scm` as a build dependency. + +### Misc +- Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes. +- Additional pre-built wheels for riscv64, s390x, and armv7l architectures. +- Restore ` multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel. + +## [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09) + +### Changed +- mypy(c) is no longer a required dependency at build time if `CHARSET_NORMALIZER_USE_MYPYC` isn't set to `1`. (#595) (#583) +- automatically lower confidence on small bytes samples that are not Unicode in `detect` output legacy function. (#391) + +### Added +- Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase. +- Support for Python 3.14 + +### Fixed +- sdist archive contained useless directories. +- automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633) + +### Misc +- SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. + Each published wheel comes with its SBOM. We choose CycloneDX as the format. +- Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel. + +## [3.4.2](https://github.com/Ousret/charset_normalizer/compare/3.4.1...3.4.2) (2025-05-02) + +### Fixed +- Addressed the DeprecationWarning in our CLI regarding `argparse.FileType` by backporting the target class into the package. (#591) +- Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587) + +### Changed +- Optional mypyc compilation upgraded to version 1.15 for Python >= 3.8 + +## [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) + +### Changed +- Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. +- Enforce annotation delayed loading for a simpler and consistent types in the project. +- Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 + +### Added +- pre-commit configuration. +- noxfile. + +### Removed +- `build-requirements.txt` as per using `pyproject.toml` native build configuration. +- `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). +- `setup.cfg` in favor of `pyproject.toml` metadata configuration. +- Unused `utils.range_scan` function. + +### Fixed +- Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) +- Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ + +## [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) + +### Added +- Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. +- Support for Python 3.13 (#512) + +### Fixed +- Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. +- Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) +- Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381) + +## [3.3.2](https://github.com/Ousret/charset_normalizer/compare/3.3.1...3.3.2) (2023-10-31) + +### Fixed +- Unintentional memory usage regression when using large payload that match several encoding (#376) +- Regression on some detection case showcased in the documentation (#371) + +### Added +- Noise (md) probe that identify malformed arabic representation due to the presence of letters in isolated form (credit to my wife) + +## [3.3.1](https://github.com/Ousret/charset_normalizer/compare/3.3.0...3.3.1) (2023-10-22) + +### Changed +- Optional mypyc compilation upgraded to version 1.6.1 for Python >= 3.8 +- Improved the general detection reliability based on reports from the community + +## [3.3.0](https://github.com/Ousret/charset_normalizer/compare/3.2.0...3.3.0) (2023-09-30) + +### Added +- Allow to execute the CLI (e.g. normalizer) through `python -m charset_normalizer.cli` or `python -m charset_normalizer` +- Support for 9 forgotten encoding that are supported by Python but unlisted in `encoding.aliases` as they have no alias (#323) + +### Removed +- (internal) Redundant utils.is_ascii function and unused function is_private_use_only +- (internal) charset_normalizer.assets is moved inside charset_normalizer.constant + +### Changed +- (internal) Unicode code blocks in constants are updated using the latest v15.0.0 definition to improve detection +- Optional mypyc compilation upgraded to version 1.5.1 for Python >= 3.8 + +### Fixed +- Unable to properly sort CharsetMatch when both chaos/noise and coherence were close due to an unreachable condition in \_\_lt\_\_ (#350) + +## [3.2.0](https://github.com/Ousret/charset_normalizer/compare/3.1.0...3.2.0) (2023-06-07) + +### Changed +- Typehint for function `from_path` no longer enforce `PathLike` as its first argument +- Minor improvement over the global detection reliability + +### Added +- Introduce function `is_binary` that relies on main capabilities, and optimized to detect binaries +- Propagate `enable_fallback` argument throughout `from_bytes`, `from_path`, and `from_fp` that allow a deeper control over the detection (default True) +- Explicit support for Python 3.12 + +### Fixed +- Edge case detection failure where a file would contain 'very-long' camel cased word (Issue #289) + +## [3.1.0](https://github.com/Ousret/charset_normalizer/compare/3.0.1...3.1.0) (2023-03-06) + +### Added +- Argument `should_rename_legacy` for legacy function `detect` and disregard any new arguments without errors (PR #262) + +### Removed +- Support for Python 3.6 (PR #260) + +### Changed +- Optional speedup provided by mypy/c 1.0.1 + +## [3.0.1](https://github.com/Ousret/charset_normalizer/compare/3.0.0...3.0.1) (2022-11-18) + +### Fixed +- Multi-bytes cutter/chunk generator did not always cut correctly (PR #233) + +### Changed +- Speedup provided by mypy/c 0.990 on Python >= 3.7 + +## [3.0.0](https://github.com/Ousret/charset_normalizer/compare/2.1.1...3.0.0) (2022-10-20) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it +- Sphinx warnings when generating the documentation + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [3.0.0rc1](https://github.com/Ousret/charset_normalizer/compare/3.0.0b2...3.0.0rc1) (2022-10-18) + +### Added +- Extend the capability of explain=True when cp_isolation contains at most two entries (min one), will log in details of the Mess-detector results +- Support for alternative language frequency set in charset_normalizer.assets.FREQUENCIES +- Add parameter `language_threshold` in `from_bytes`, `from_path` and `from_fp` to adjust the minimum expected coherence ratio + +### Changed +- Build with static metadata using 'build' frontend +- Make the language detection stricter + +### Fixed +- CLI with opt --normalize fail when using full path for files +- TooManyAccentuatedPlugin induce false positive on the mess detection when too few alpha character have been fed to it + +### Removed +- Coherence detector no longer return 'Simple English' instead return 'English' +- Coherence detector no longer return 'Classical Chinese' instead return 'Chinese' + +## [3.0.0b2](https://github.com/Ousret/charset_normalizer/compare/3.0.0b1...3.0.0b2) (2022-08-21) + +### Added +- `normalizer --version` now specify if current version provide extra speedup (meaning mypyc compilation whl) + +### Removed +- Breaking: Method `first()` and `best()` from CharsetMatch +- UTF-7 will no longer appear as "detected" without a recognized SIG/mark (is unreliable/conflict with ASCII) + +### Fixed +- Sphinx warnings when generating the documentation + +## [3.0.0b1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...3.0.0b1) (2022-08-15) + +### Changed +- Optional: Module `md.py` can be compiled using Mypyc to provide an extra speedup up to 4x faster than v2.1 + +### Removed +- Breaking: Class aliases CharsetDetector, CharsetDoctor, CharsetNormalizerMatch and CharsetNormalizerMatches +- Breaking: Top-level function `normalize` +- Breaking: Properties `chaos_secondary_pass`, `coherence_non_latin` and `w_counter` from CharsetMatch +- Support for the backport `unicodedata2` + +## [2.1.1](https://github.com/Ousret/charset_normalizer/compare/2.1.0...2.1.1) (2022-08-19) + +### Deprecated +- Function `normalize` scheduled for removal in 3.0 + +### Changed +- Removed useless call to decode in fn is_unprintable (#206) + +### Fixed +- Third-party library (i18n xgettext) crashing not recognizing utf_8 (PEP 263) with underscore from [@aleksandernovikov](https://github.com/aleksandernovikov) (#204) + +## [2.1.0](https://github.com/Ousret/charset_normalizer/compare/2.0.12...2.1.0) (2022-06-19) + +### Added +- Output the Unicode table version when running the CLI with `--version` (PR #194) + +### Changed +- Re-use decoded buffer for single byte character sets from [@nijel](https://github.com/nijel) (PR #175) +- Fixing some performance bottlenecks from [@deedy5](https://github.com/deedy5) (PR #183) + +### Fixed +- Workaround potential bug in cpython with Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space (PR #175) +- CLI default threshold aligned with the API threshold from [@oleksandr-kuzmenko](https://github.com/oleksandr-kuzmenko) (PR #181) + +### Removed +- Support for Python 3.5 (PR #192) + +### Deprecated +- Use of backport unicodedata from `unicodedata2` as Python is quickly catching up, scheduled for removal in 3.0 (PR #194) + +## [2.0.12](https://github.com/Ousret/charset_normalizer/compare/2.0.11...2.0.12) (2022-02-12) + +### Fixed +- ASCII miss-detection on rare cases (PR #170) + +## [2.0.11](https://github.com/Ousret/charset_normalizer/compare/2.0.10...2.0.11) (2022-01-30) + +### Added +- Explicit support for Python 3.11 (PR #164) + +### Changed +- The logging behavior have been completely reviewed, now using only TRACE and DEBUG levels (PR #163 #165) + +## [2.0.10](https://github.com/Ousret/charset_normalizer/compare/2.0.9...2.0.10) (2022-01-04) + +### Fixed +- Fallback match entries might lead to UnicodeDecodeError for large bytes sequence (PR #154) + +### Changed +- Skipping the language-detection (CD) on ASCII (PR #155) + +## [2.0.9](https://github.com/Ousret/charset_normalizer/compare/2.0.8...2.0.9) (2021-12-03) + +### Changed +- Moderating the logging impact (since 2.0.8) for specific environments (PR #147) + +### Fixed +- Wrong logging level applied when setting kwarg `explain` to True (PR #146) + +## [2.0.8](https://github.com/Ousret/charset_normalizer/compare/2.0.7...2.0.8) (2021-11-24) +### Changed +- Improvement over Vietnamese detection (PR #126) +- MD improvement on trailing data and long foreign (non-pure latin) data (PR #124) +- Efficiency improvements in cd/alphabet_languages from [@adbar](https://github.com/adbar) (PR #122) +- call sum() without an intermediary list following PEP 289 recommendations from [@adbar](https://github.com/adbar) (PR #129) +- Code style as refactored by Sourcery-AI (PR #131) +- Minor adjustment on the MD around european words (PR #133) +- Remove and replace SRTs from assets / tests (PR #139) +- Initialize the library logger with a `NullHandler` by default from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Setting kwarg `explain` to True will add provisionally (bounded to function lifespan) a specific stream handler (PR #135) + +### Fixed +- Fix large (misleading) sequence giving UnicodeDecodeError (PR #137) +- Avoid using too insignificant chunk (PR #137) + +### Added +- Add and expose function `set_logging_handler` to configure a specific StreamHandler from [@nmaynes](https://github.com/nmaynes) (PR #135) +- Add `CHANGELOG.md` entries, format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (PR #141) + +## [2.0.7](https://github.com/Ousret/charset_normalizer/compare/2.0.6...2.0.7) (2021-10-11) +### Added +- Add support for Kazakh (Cyrillic) language detection (PR #109) + +### Changed +- Further, improve inferring the language from a given single-byte code page (PR #112) +- Vainly trying to leverage PEP263 when PEP3120 is not supported (PR #116) +- Refactoring for potential performance improvements in loops from [@adbar](https://github.com/adbar) (PR #113) +- Various detection improvement (MD+CD) (PR #117) + +### Removed +- Remove redundant logging entry about detected language(s) (PR #115) + +### Fixed +- Fix a minor inconsistency between Python 3.5 and other versions regarding language detection (PR #117 #102) + +## [2.0.6](https://github.com/Ousret/charset_normalizer/compare/2.0.5...2.0.6) (2021-09-18) +### Fixed +- Unforeseen regression with the loss of the backward-compatibility with some older minor of Python 3.5.x (PR #100) +- Fix CLI crash when using --minimal output in certain cases (PR #103) + +### Changed +- Minor improvement to the detection efficiency (less than 1%) (PR #106 #101) + +## [2.0.5](https://github.com/Ousret/charset_normalizer/compare/2.0.4...2.0.5) (2021-09-14) +### Changed +- The project now comply with: flake8, mypy, isort and black to ensure a better overall quality (PR #81) +- The BC-support with v1.x was improved, the old staticmethods are restored (PR #82) +- The Unicode detection is slightly improved (PR #93) +- Add syntax sugar \_\_bool\_\_ for results CharsetMatches list-container (PR #91) + +### Removed +- The project no longer raise warning on tiny content given for detection, will be simply logged as warning instead (PR #92) + +### Fixed +- In some rare case, the chunks extractor could cut in the middle of a multi-byte character and could mislead the mess detection (PR #95) +- Some rare 'space' characters could trip up the UnprintablePlugin/Mess detection (PR #96) +- The MANIFEST.in was not exhaustive (PR #78) + +## [2.0.4](https://github.com/Ousret/charset_normalizer/compare/2.0.3...2.0.4) (2021-07-30) +### Fixed +- The CLI no longer raise an unexpected exception when no encoding has been found (PR #70) +- Fix accessing the 'alphabets' property when the payload contains surrogate characters (PR #68) +- The logger could mislead (explain=True) on detected languages and the impact of one MBCS match (PR #72) +- Submatch factoring could be wrong in rare edge cases (PR #72) +- Multiple files given to the CLI were ignored when publishing results to STDOUT. (After the first path) (PR #72) +- Fix line endings from CRLF to LF for certain project files (PR #67) + +### Changed +- Adjust the MD to lower the sensitivity, thus improving the global detection reliability (PR #69 #76) +- Allow fallback on specified encoding if any (PR #71) + +## [2.0.3](https://github.com/Ousret/charset_normalizer/compare/2.0.2...2.0.3) (2021-07-16) +### Changed +- Part of the detection mechanism has been improved to be less sensitive, resulting in more accurate detection results. Especially ASCII. (PR #63) +- According to the community wishes, the detection will fall back on ASCII or UTF-8 in a last-resort case. (PR #64) + +## [2.0.2](https://github.com/Ousret/charset_normalizer/compare/2.0.1...2.0.2) (2021-07-15) +### Fixed +- Empty/Too small JSON payload miss-detection fixed. Report from [@tseaver](https://github.com/tseaver) (PR #59) + +### Changed +- Don't inject unicodedata2 into sys.modules from [@akx](https://github.com/akx) (PR #57) + +## [2.0.1](https://github.com/Ousret/charset_normalizer/compare/2.0.0...2.0.1) (2021-07-13) +### Fixed +- Make it work where there isn't a filesystem available, dropping assets frequencies.json. Report from [@sethmlarson](https://github.com/sethmlarson). (PR #55) +- Using explain=False permanently disable the verbose output in the current runtime (PR #47) +- One log entry (language target preemptive) was not show in logs when using explain=True (PR #47) +- Fix undesired exception (ValueError) on getitem of instance CharsetMatches (PR #52) + +### Changed +- Public function normalize default args values were not aligned with from_bytes (PR #53) + +### Added +- You may now use charset aliases in cp_isolation and cp_exclusion arguments (PR #47) + +## [2.0.0](https://github.com/Ousret/charset_normalizer/compare/1.4.1...2.0.0) (2021-07-02) +### Changed +- 4x to 5 times faster than the previous 1.4.0 release. At least 2x faster than Chardet. +- Accent has been made on UTF-8 detection, should perform rather instantaneous. +- The backward compatibility with Chardet has been greatly improved. The legacy detect function returns an identical charset name whenever possible. +- The detection mechanism has been slightly improved, now Turkish content is detected correctly (most of the time) +- The program has been rewritten to ease the readability and maintainability. (+Using static typing)+ +- utf_7 detection has been reinstated. + +### Removed +- This package no longer require anything when used with Python 3.5 (Dropped cached_property) +- Removed support for these languages: Catalan, Esperanto, Kazakh, Baque, Volapük, Azeri, Galician, Nynorsk, Macedonian, and Serbocroatian. +- The exception hook on UnicodeDecodeError has been removed. + +### Deprecated +- Methods coherence_non_latin, w_counter, chaos_secondary_pass of the class CharsetMatch are now deprecated and scheduled for removal in v3.0 + +### Fixed +- The CLI output used the relative path of the file(s). Should be absolute. + +## [1.4.1](https://github.com/Ousret/charset_normalizer/compare/1.4.0...1.4.1) (2021-05-28) +### Fixed +- Logger configuration/usage no longer conflict with others (PR #44) + +## [1.4.0](https://github.com/Ousret/charset_normalizer/compare/1.3.9...1.4.0) (2021-05-21) +### Removed +- Using standard logging instead of using the package loguru. +- Dropping nose test framework in favor of the maintained pytest. +- Choose to not use dragonmapper package to help with gibberish Chinese/CJK text. +- Require cached_property only for Python 3.5 due to constraint. Dropping for every other interpreter version. +- Stop support for UTF-7 that does not contain a SIG. +- Dropping PrettyTable, replaced with pure JSON output in CLI. + +### Fixed +- BOM marker in a CharsetNormalizerMatch instance could be False in rare cases even if obviously present. Due to the sub-match factoring process. +- Not searching properly for the BOM when trying utf32/16 parent codec. + +### Changed +- Improving the package final size by compressing frequencies.json. +- Huge improvement over the larges payload. + +### Added +- CLI now produces JSON consumable output. +- Return ASCII if given sequences fit. Given reasonable confidence. + +## [1.3.9](https://github.com/Ousret/charset_normalizer/compare/1.3.8...1.3.9) (2021-05-13) + +### Fixed +- In some very rare cases, you may end up getting encode/decode errors due to a bad bytes payload (PR #40) + +## [1.3.8](https://github.com/Ousret/charset_normalizer/compare/1.3.7...1.3.8) (2021-05-12) + +### Fixed +- Empty given payload for detection may cause an exception if trying to access the `alphabets` property. (PR #39) + +## [1.3.7](https://github.com/Ousret/charset_normalizer/compare/1.3.6...1.3.7) (2021-05-12) + +### Fixed +- The legacy detect function should return UTF-8-SIG if sig is present in the payload. (PR #38) + +## [1.3.6](https://github.com/Ousret/charset_normalizer/compare/1.3.5...1.3.6) (2021-02-09) + +### Changed +- Amend the previous release to allow prettytable 2.0 (PR #35) + +## [1.3.5](https://github.com/Ousret/charset_normalizer/compare/1.3.4...1.3.5) (2021-02-08) + +### Fixed +- Fix error while using the package with a python pre-release interpreter (PR #33) + +### Changed +- Dependencies refactoring, constraints revised. + +### Added +- Add python 3.9 and 3.10 to the supported interpreters + +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/RECORD new file mode 100644 index 00000000..8f77deda --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/RECORD @@ -0,0 +1,35 @@ +../../../bin/normalizer,sha256=Jbv4iS8Kds1vnENEtxQXFDyfqxed7gWl0INvAYs2yoI,246 +charset_normalizer-3.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +charset_normalizer-3.4.4.dist-info/METADATA,sha256=jVuUFBti8dav19YLvWissTihVdF2ozUY4KKMw7jdkBQ,37303 +charset_normalizer-3.4.4.dist-info/RECORD,, +charset_normalizer-3.4.4.dist-info/WHEEL,sha256=DxRnWQz-Kp9-4a4hdDHsSv0KUC3H7sN9Nbef3-8RjXU,190 +charset_normalizer-3.4.4.dist-info/entry_points.txt,sha256=ADSTKrkXZ3hhdOVFi6DcUEHQRS0xfxDIE_pEz4wLIXA,65 +charset_normalizer-3.4.4.dist-info/licenses/LICENSE,sha256=bQ1Bv-FwrGx9wkjJpj4lTQ-0WmDVCoJX0K-SxuJJuIc,1071 +charset_normalizer-3.4.4.dist-info/top_level.txt,sha256=7ASyzePr8_xuZWJsnqJjIBtyV8vhEo0wBCv1MPRRi3Q,19 +charset_normalizer/__init__.py,sha256=OKRxRv2Zhnqk00tqkN0c1BtJjm165fWXLydE52IKuHc,1590 +charset_normalizer/__main__.py,sha256=yzYxMR-IhKRHYwcSlavEv8oGdwxsR89mr2X09qXGdps,109 +charset_normalizer/__pycache__/__init__.cpython-312.pyc,, +charset_normalizer/__pycache__/__main__.cpython-312.pyc,, +charset_normalizer/__pycache__/api.cpython-312.pyc,, +charset_normalizer/__pycache__/cd.cpython-312.pyc,, +charset_normalizer/__pycache__/constant.cpython-312.pyc,, +charset_normalizer/__pycache__/legacy.cpython-312.pyc,, +charset_normalizer/__pycache__/md.cpython-312.pyc,, +charset_normalizer/__pycache__/models.cpython-312.pyc,, +charset_normalizer/__pycache__/utils.cpython-312.pyc,, +charset_normalizer/__pycache__/version.cpython-312.pyc,, +charset_normalizer/api.py,sha256=V07i8aVeCD8T2fSia3C-fn0i9t8qQguEBhsqszg32Ns,22668 +charset_normalizer/cd.py,sha256=WKTo1HDb-H9HfCDc3Bfwq5jzS25Ziy9SE2a74SgTq88,12522 +charset_normalizer/cli/__init__.py,sha256=D8I86lFk2-py45JvqxniTirSj_sFyE6sjaY_0-G1shc,136 +charset_normalizer/cli/__main__.py,sha256=dMaXG6IJXRvqq8z2tig7Qb83-BpWTln55ooiku5_uvg,12646 +charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc,, +charset_normalizer/cli/__pycache__/__main__.cpython-312.pyc,, +charset_normalizer/constant.py,sha256=7UVY4ldYhmQMHUdgQ_sgZmzcQ0xxYxpBunqSZ-XJZ8U,42713 +charset_normalizer/legacy.py,sha256=sYBzSpzsRrg_wF4LP536pG64BItw7Tqtc3SMQAHvFLM,2731 +charset_normalizer/md.cpython-312-x86_64-linux-gnu.so,sha256=sZ7umtJLjKfA83NFJ7npkiDyr06zDT8cWtl6uIx2MsM,15912 +charset_normalizer/md.py,sha256=-_oN3h3_X99nkFfqamD3yu45DC_wfk5odH0Tr_CQiXs,20145 +charset_normalizer/md__mypyc.cpython-312-x86_64-linux-gnu.so,sha256=J2WWgLBQiO8sqdFsENp9u5V9uEH0tTwvTLszPdqhsv0,290584 +charset_normalizer/models.py,sha256=lKXhOnIPtiakbK3i__J9wpOfzx3JDTKj7Dn3Rg0VaRI,12394 +charset_normalizer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +charset_normalizer/utils.py,sha256=sTejPgrdlNsKNucZfJCxJ95lMTLA0ShHLLE3n5wpT9Q,12170 +charset_normalizer/version.py,sha256=nKE4qBNk5WA4LIJ_yIH_aSDfvtsyizkWMg-PUG-UZVk,115 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL new file mode 100644 index 00000000..f3e8a970 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL @@ -0,0 +1,7 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: false +Tag: cp312-cp312-manylinux_2_17_x86_64 +Tag: cp312-cp312-manylinux2014_x86_64 +Tag: cp312-cp312-manylinux_2_28_x86_64 + diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt new file mode 100644 index 00000000..65619e73 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +normalizer = charset_normalizer.cli:cli_detect diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE new file mode 100644 index 00000000..9725772c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 TAHRI Ahmed R. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt new file mode 100644 index 00000000..66958f0a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt @@ -0,0 +1 @@ +charset_normalizer diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py new file mode 100644 index 00000000..0d3a3799 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py @@ -0,0 +1,48 @@ +""" +Charset-Normalizer +~~~~~~~~~~~~~~ +The Real First Universal Charset Detector. +A library that helps you read text from an unknown charset encoding. +Motivated by chardet, This package is trying to resolve the issue by taking a new approach. +All IANA character set names for which the Python core library provides codecs are supported. + +Basic usage: + >>> from charset_normalizer import from_bytes + >>> results = from_bytes('Bсеки човек има право на образование. Oбразованието!'.encode('utf_8')) + >>> best_guess = results.best() + >>> str(best_guess) + 'Bсеки човек има право на образование. Oбразованието!' + +Others methods and usages are available - see the full documentation +at . +:copyright: (c) 2021 by Ahmed TAHRI +:license: MIT, see LICENSE for more details. +""" + +from __future__ import annotations + +import logging + +from .api import from_bytes, from_fp, from_path, is_binary +from .legacy import detect +from .models import CharsetMatch, CharsetMatches +from .utils import set_logging_handler +from .version import VERSION, __version__ + +__all__ = ( + "from_fp", + "from_path", + "from_bytes", + "is_binary", + "detect", + "CharsetMatch", + "CharsetMatches", + "__version__", + "VERSION", + "set_logging_handler", +) + +# Attach a NullHandler to the top level logger by default +# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library + +logging.getLogger("charset_normalizer").addHandler(logging.NullHandler()) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py new file mode 100644 index 00000000..e0e76f7b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__main__.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from .cli import cli_detect + +if __name__ == "__main__": + cli_detect() diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dc81ec5c16ac656ffd27425feb8d8eb6f400bd4 GIT binary patch literal 1783 zcmcIkPix#p6d&!bcWtfh)b^neD4kM>y{)}UY-r1p8tlZzhS)BS(}ONzRvNDqk2GRt zw9fWW++6w*`WZ?tZXwi^*8KpzXfeeg2sz|Xa!U#AA*a5PcI}kpS{?=7x#@-31?5S|to(9>pXG(~c z@6Qc^T>icKBcqV+e|&j5+9wG+>9i2I`d?2uan#HWwjb!B>gx2dA8;-YD;U>39m5k0JYqOea{EOCz~SWx0& zMIR`r!y3FJwZso+1bOn&5~YViL!K6W0fTjN#3d?UmdvaTOI9g2xdFsl@wS z;6p!f{oK?SJ>_%2#|6EJ3e0o^51s;6>Pk%DP9|~81;A~Z<|>haixUYLTPDVMd3m`A zco3x%U1S*tp;pVUopw)AIaGjn5~d{n{I$Ee+136x>Erb0^aS_6O;6JwwSd!;^q2G) zr@!@&(qlL~#p$nFK23kfPkzc@9>d{D`nZXA-gex7n4W$x+syM%=VlYN?|e4fXbjP` zsZ>rUp;7}HKx^v5xr--KiMh*X`SJe^*EDya+(P1zLX|wIMC28DFN#9CBw(b?C|-a9 z7rn8cK=D29CLxU!Q2~!k=+T?LQn74VRwqz?(r&suw006HsIuNH+H%uuxjgQPpyR6+ zo^u;`@%rKo-Eb>@2pzk(va!2qwpifONYWPG+T5GZ0o>WVwYGhCE$^{Vw-hurK$K1M zxgO4jk=02Q@dB6Jey*pyQOQg_E=7A}wVdCNv$33siSo0tKsxOpf{6nQRj>(z*eGS= zgVEd~%Js9!*Ci_9FBfYSwh@gyt4pJ<1&hy$ z^OdpGys>D>K+%Q4x{`0{B+GGvC{T{mjC-#}Z$dl?qs!ubaI8x&?*VyHHVosh(u`60 z`y*t0_zX?{iCSl<^#omgimpFF*Pf!ri%Pv-I;y?E$e2E=oujEfno6gyouS!twAe?B Z>C*b~r{_!S{iXG@rHwz(rg#r5{|ob?U_$@^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..033174331a40a6f08dddec3f334a1522cc8c19a5 GIT binary patch literal 358 zcmXw!KT88K7{-&!os^ckTXAu+LmO0Z5{Kg8Abx-@Azog4;qvFmrN!$m_znCF;z#M` z=7AuHL$^Y~p_4gkpW)5(B)^yU&7#|FqagL$lRBK=P1q^g8oa&;<^>5PutFM-F-9U1 zL`9m62}Tf$I6pziwIT%M?Y|qNDyfqG-m=MkTz9xJ)^jhdDVKPA*G`pW0z9O?ZZW30 zG>qN#le*2=!_-e5Fy=^LYZ6G8G%j$4>+tZ3)*+)!Ml-8{PRt{{hBEiIpf}co8jP&X zrJ2wXPjfJW&cMv5lJ~Tzd}hu0@brw9(!-z#0G~if(~P?kJTum5uH+mX-EB22s!i)s sTQOB|<+@>T^M~>%loi1kf1=|bbofO&&+~V3@DcAn-L43Vd#)3RKlyTF6aWAK literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..385a2f99b012e23df8bd58a489009dcbc4fac888 GIT binary patch literal 18194 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 O$#CmFcOXR#!v6y``#UrM literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/constant.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35a764851e48d5b43658084fefb89a09ab6b9ef5 GIT binary patch literal 40813 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..960b3e27b942ca44b81aa7b6a0a99efaa6909d94 GIT binary patch literal 24350 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 b9T--x&m3ph4QtuQR=j7W@0oDN)Y|_Cml!JQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab0d76fd2498a9b312369001fe267e286adda1ba GIT binary patch literal 17130 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 CS%_Hx literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7e11a3459bb1ebbe0f3137c4950733eca816236 GIT binary patch literal 13759 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 T$}_A!!s_k*6Rcf3!qvhb!L4cf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/api.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/api.py new file mode 100644 index 00000000..ebd96390 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/api.py @@ -0,0 +1,669 @@ +from __future__ import annotations + +import logging +from os import PathLike +from typing import BinaryIO + +from .cd import ( + coherence_ratio, + encoding_languages, + mb_encoding_languages, + merge_coherence_ratios, +) +from .constant import IANA_SUPPORTED, TOO_BIG_SEQUENCE, TOO_SMALL_SEQUENCE, TRACE +from .md import mess_ratio +from .models import CharsetMatch, CharsetMatches +from .utils import ( + any_specified_encoding, + cut_sequence_chunks, + iana_name, + identify_sig_or_bom, + is_cp_similar, + is_multi_byte_encoding, + should_strip_sig_or_bom, +) + +logger = logging.getLogger("charset_normalizer") +explain_handler = logging.StreamHandler() +explain_handler.setFormatter( + logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") +) + + +def from_bytes( + sequences: bytes | bytearray, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.2, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Given a raw bytes sequence, return the best possibles charset usable to render str objects. + If there is no results, it is a strong indicator that the source is binary/not text. + By default, the process will extract 5 blocks of 512o each to assess the mess and coherence of a given sequence. + And will give up a particular code page after 20% of measured mess. Those criteria are customizable at will. + + The preemptive behavior DOES NOT replace the traditional detection workflow, it prioritize a particular code page + but never take it for granted. Can improve the performance. + + You may want to focus your attention to some code page or/and not others, use cp_isolation and cp_exclusion for that + purpose. + + This function will strip the SIG in the payload/sequence every time except on UTF-16, UTF-32. + By default the library does not setup any handler other than the NullHandler, if you choose to set the 'explain' + toggle to True it will alter the logger configuration to add a StreamHandler that is suitable for debugging. + Custom logging format and handler can be set manually. + """ + + if not isinstance(sequences, (bytearray, bytes)): + raise TypeError( + "Expected object of type bytes or bytearray, got: {}".format( + type(sequences) + ) + ) + + if explain: + previous_logger_level: int = logger.level + logger.addHandler(explain_handler) + logger.setLevel(TRACE) + + length: int = len(sequences) + + if length == 0: + logger.debug("Encoding detection on empty bytes, assuming utf_8 intention.") + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level or logging.WARNING) + return CharsetMatches([CharsetMatch(sequences, "utf_8", 0.0, False, [], "")]) + + if cp_isolation is not None: + logger.log( + TRACE, + "cp_isolation is set. use this flag for debugging purpose. " + "limited list of encoding allowed : %s.", + ", ".join(cp_isolation), + ) + cp_isolation = [iana_name(cp, False) for cp in cp_isolation] + else: + cp_isolation = [] + + if cp_exclusion is not None: + logger.log( + TRACE, + "cp_exclusion is set. use this flag for debugging purpose. " + "limited list of encoding excluded : %s.", + ", ".join(cp_exclusion), + ) + cp_exclusion = [iana_name(cp, False) for cp in cp_exclusion] + else: + cp_exclusion = [] + + if length <= (chunk_size * steps): + logger.log( + TRACE, + "override steps (%i) and chunk_size (%i) as content does not fit (%i byte(s) given) parameters.", + steps, + chunk_size, + length, + ) + steps = 1 + chunk_size = length + + if steps > 1 and length / steps < chunk_size: + chunk_size = int(length / steps) + + is_too_small_sequence: bool = len(sequences) < TOO_SMALL_SEQUENCE + is_too_large_sequence: bool = len(sequences) >= TOO_BIG_SEQUENCE + + if is_too_small_sequence: + logger.log( + TRACE, + "Trying to detect encoding from a tiny portion of ({}) byte(s).".format( + length + ), + ) + elif is_too_large_sequence: + logger.log( + TRACE, + "Using lazy str decoding because the payload is quite large, ({}) byte(s).".format( + length + ), + ) + + prioritized_encodings: list[str] = [] + + specified_encoding: str | None = ( + any_specified_encoding(sequences) if preemptive_behaviour else None + ) + + if specified_encoding is not None: + prioritized_encodings.append(specified_encoding) + logger.log( + TRACE, + "Detected declarative mark in sequence. Priority +1 given for %s.", + specified_encoding, + ) + + tested: set[str] = set() + tested_but_hard_failure: list[str] = [] + tested_but_soft_failure: list[str] = [] + + fallback_ascii: CharsetMatch | None = None + fallback_u8: CharsetMatch | None = None + fallback_specified: CharsetMatch | None = None + + results: CharsetMatches = CharsetMatches() + + early_stop_results: CharsetMatches = CharsetMatches() + + sig_encoding, sig_payload = identify_sig_or_bom(sequences) + + if sig_encoding is not None: + prioritized_encodings.append(sig_encoding) + logger.log( + TRACE, + "Detected a SIG or BOM mark on first %i byte(s). Priority +1 given for %s.", + len(sig_payload), + sig_encoding, + ) + + prioritized_encodings.append("ascii") + + if "utf_8" not in prioritized_encodings: + prioritized_encodings.append("utf_8") + + for encoding_iana in prioritized_encodings + IANA_SUPPORTED: + if cp_isolation and encoding_iana not in cp_isolation: + continue + + if cp_exclusion and encoding_iana in cp_exclusion: + continue + + if encoding_iana in tested: + continue + + tested.add(encoding_iana) + + decoded_payload: str | None = None + bom_or_sig_available: bool = sig_encoding == encoding_iana + strip_sig_or_bom: bool = bom_or_sig_available and should_strip_sig_or_bom( + encoding_iana + ) + + if encoding_iana in {"utf_16", "utf_32"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because it require a BOM. Will try some sub-encoder LE/BE.", + encoding_iana, + ) + continue + if encoding_iana in {"utf_7"} and not bom_or_sig_available: + logger.log( + TRACE, + "Encoding %s won't be tested as-is because detection is unreliable without BOM/SIG.", + encoding_iana, + ) + continue + + try: + is_multi_byte_decoder: bool = is_multi_byte_encoding(encoding_iana) + except (ModuleNotFoundError, ImportError): + logger.log( + TRACE, + "Encoding %s does not provide an IncrementalDecoder", + encoding_iana, + ) + continue + + try: + if is_too_large_sequence and is_multi_byte_decoder is False: + str( + ( + sequences[: int(50e4)] + if strip_sig_or_bom is False + else sequences[len(sig_payload) : int(50e4)] + ), + encoding=encoding_iana, + ) + else: + decoded_payload = str( + ( + sequences + if strip_sig_or_bom is False + else sequences[len(sig_payload) :] + ), + encoding=encoding_iana, + ) + except (UnicodeDecodeError, LookupError) as e: + if not isinstance(e, LookupError): + logger.log( + TRACE, + "Code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + similar_soft_failure_test: bool = False + + for encoding_soft_failed in tested_but_soft_failure: + if is_cp_similar(encoding_iana, encoding_soft_failed): + similar_soft_failure_test = True + break + + if similar_soft_failure_test: + logger.log( + TRACE, + "%s is deemed too similar to code page %s and was consider unsuited already. Continuing!", + encoding_iana, + encoding_soft_failed, + ) + continue + + r_ = range( + 0 if not bom_or_sig_available else len(sig_payload), + length, + int(length / steps), + ) + + multi_byte_bonus: bool = ( + is_multi_byte_decoder + and decoded_payload is not None + and len(decoded_payload) < length + ) + + if multi_byte_bonus: + logger.log( + TRACE, + "Code page %s is a multi byte encoding table and it appear that at least one character " + "was encoded using n-bytes.", + encoding_iana, + ) + + max_chunk_gave_up: int = int(len(r_) / 4) + + max_chunk_gave_up = max(max_chunk_gave_up, 2) + early_stop_count: int = 0 + lazy_str_hard_failure = False + + md_chunks: list[str] = [] + md_ratios = [] + + try: + for chunk in cut_sequence_chunks( + sequences, + encoding_iana, + r_, + chunk_size, + bom_or_sig_available, + strip_sig_or_bom, + sig_payload, + is_multi_byte_decoder, + decoded_payload, + ): + md_chunks.append(chunk) + + md_ratios.append( + mess_ratio( + chunk, + threshold, + explain is True and 1 <= len(cp_isolation) <= 2, + ) + ) + + if md_ratios[-1] >= threshold: + early_stop_count += 1 + + if (early_stop_count >= max_chunk_gave_up) or ( + bom_or_sig_available and strip_sig_or_bom is False + ): + break + except ( + UnicodeDecodeError + ) as e: # Lazy str loading may have missed something there + logger.log( + TRACE, + "LazyStr Loading: After MD chunk decode, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + early_stop_count = max_chunk_gave_up + lazy_str_hard_failure = True + + # We might want to check the sequence again with the whole content + # Only if initial MD tests passes + if ( + not lazy_str_hard_failure + and is_too_large_sequence + and not is_multi_byte_decoder + ): + try: + sequences[int(50e3) :].decode(encoding_iana, errors="strict") + except UnicodeDecodeError as e: + logger.log( + TRACE, + "LazyStr Loading: After final lookup, code page %s does not fit given bytes sequence at ALL. %s", + encoding_iana, + str(e), + ) + tested_but_hard_failure.append(encoding_iana) + continue + + mean_mess_ratio: float = sum(md_ratios) / len(md_ratios) if md_ratios else 0.0 + if mean_mess_ratio >= threshold or early_stop_count >= max_chunk_gave_up: + tested_but_soft_failure.append(encoding_iana) + logger.log( + TRACE, + "%s was excluded because of initial chaos probing. Gave up %i time(s). " + "Computed mean chaos is %f %%.", + encoding_iana, + early_stop_count, + round(mean_mess_ratio * 100, ndigits=3), + ) + # Preparing those fallbacks in case we got nothing. + if ( + enable_fallback + and encoding_iana + in ["ascii", "utf_8", specified_encoding, "utf_16", "utf_32"] + and not lazy_str_hard_failure + ): + fallback_entry = CharsetMatch( + sequences, + encoding_iana, + threshold, + bom_or_sig_available, + [], + decoded_payload, + preemptive_declaration=specified_encoding, + ) + if encoding_iana == specified_encoding: + fallback_specified = fallback_entry + elif encoding_iana == "ascii": + fallback_ascii = fallback_entry + else: + fallback_u8 = fallback_entry + continue + + logger.log( + TRACE, + "%s passed initial chaos probing. Mean measured chaos is %f %%", + encoding_iana, + round(mean_mess_ratio * 100, ndigits=3), + ) + + if not is_multi_byte_decoder: + target_languages: list[str] = encoding_languages(encoding_iana) + else: + target_languages = mb_encoding_languages(encoding_iana) + + if target_languages: + logger.log( + TRACE, + "{} should target any language(s) of {}".format( + encoding_iana, str(target_languages) + ), + ) + + cd_ratios = [] + + # We shall skip the CD when its about ASCII + # Most of the time its not relevant to run "language-detection" on it. + if encoding_iana != "ascii": + for chunk in md_chunks: + chunk_languages = coherence_ratio( + chunk, + language_threshold, + ",".join(target_languages) if target_languages else None, + ) + + cd_ratios.append(chunk_languages) + + cd_ratios_merged = merge_coherence_ratios(cd_ratios) + + if cd_ratios_merged: + logger.log( + TRACE, + "We detected language {} using {}".format( + cd_ratios_merged, encoding_iana + ), + ) + + current_match = CharsetMatch( + sequences, + encoding_iana, + mean_mess_ratio, + bom_or_sig_available, + cd_ratios_merged, + ( + decoded_payload + if ( + is_too_large_sequence is False + or encoding_iana in [specified_encoding, "ascii", "utf_8"] + ) + else None + ), + preemptive_declaration=specified_encoding, + ) + + results.append(current_match) + + if ( + encoding_iana in [specified_encoding, "ascii", "utf_8"] + and mean_mess_ratio < 0.1 + ): + # If md says nothing to worry about, then... stop immediately! + if mean_mess_ratio == 0.0: + logger.debug( + "Encoding detection: %s is most likely the one.", + current_match.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([current_match]) + + early_stop_results.append(current_match) + + if ( + len(early_stop_results) + and (specified_encoding is None or specified_encoding in tested) + and "ascii" in tested + and "utf_8" in tested + ): + probable_result: CharsetMatch = early_stop_results.best() # type: ignore[assignment] + logger.debug( + "Encoding detection: %s is most likely the one.", + probable_result.encoding, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return CharsetMatches([probable_result]) + + if encoding_iana == sig_encoding: + logger.debug( + "Encoding detection: %s is most likely the one as we detected a BOM or SIG within " + "the beginning of the sequence.", + encoding_iana, + ) + if explain: # Defensive: ensure exit path clean handler + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + return CharsetMatches([results[encoding_iana]]) + + if len(results) == 0: + if fallback_u8 or fallback_ascii or fallback_specified: + logger.log( + TRACE, + "Nothing got out of the detection process. Using ASCII/UTF-8/Specified fallback.", + ) + + if fallback_specified: + logger.debug( + "Encoding detection: %s will be used as a fallback match", + fallback_specified.encoding, + ) + results.append(fallback_specified) + elif ( + (fallback_u8 and fallback_ascii is None) + or ( + fallback_u8 + and fallback_ascii + and fallback_u8.fingerprint != fallback_ascii.fingerprint + ) + or (fallback_u8 is not None) + ): + logger.debug("Encoding detection: utf_8 will be used as a fallback match") + results.append(fallback_u8) + elif fallback_ascii: + logger.debug("Encoding detection: ascii will be used as a fallback match") + results.append(fallback_ascii) + + if results: + logger.debug( + "Encoding detection: Found %s as plausible (best-candidate) for content. With %i alternatives.", + results.best().encoding, # type: ignore + len(results) - 1, + ) + else: + logger.debug("Encoding detection: Unable to determine any suitable charset.") + + if explain: + logger.removeHandler(explain_handler) + logger.setLevel(previous_logger_level) + + return results + + +def from_fp( + fp: BinaryIO, + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but using a file pointer that is already ready. + Will not close the file pointer. + """ + return from_bytes( + fp.read(), + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def from_path( + path: str | bytes | PathLike, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = True, +) -> CharsetMatches: + """ + Same thing than the function from_bytes but with one extra step. Opening and reading given file path in binary mode. + Can raise IOError. + """ + with open(path, "rb") as fp: + return from_fp( + fp, + steps, + chunk_size, + threshold, + cp_isolation, + cp_exclusion, + preemptive_behaviour, + explain, + language_threshold, + enable_fallback, + ) + + +def is_binary( + fp_or_path_or_payload: PathLike | str | BinaryIO | bytes, # type: ignore[type-arg] + steps: int = 5, + chunk_size: int = 512, + threshold: float = 0.20, + cp_isolation: list[str] | None = None, + cp_exclusion: list[str] | None = None, + preemptive_behaviour: bool = True, + explain: bool = False, + language_threshold: float = 0.1, + enable_fallback: bool = False, +) -> bool: + """ + Detect if the given input (file, bytes, or path) points to a binary file. aka. not a string. + Based on the same main heuristic algorithms and default kwargs at the sole exception that fallbacks match + are disabled to be stricter around ASCII-compatible but unlikely to be a string. + """ + if isinstance(fp_or_path_or_payload, (str, PathLike)): + guesses = from_path( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + elif isinstance( + fp_or_path_or_payload, + ( + bytes, + bytearray, + ), + ): + guesses = from_bytes( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + else: + guesses = from_fp( + fp_or_path_or_payload, + steps=steps, + chunk_size=chunk_size, + threshold=threshold, + cp_isolation=cp_isolation, + cp_exclusion=cp_exclusion, + preemptive_behaviour=preemptive_behaviour, + explain=explain, + language_threshold=language_threshold, + enable_fallback=enable_fallback, + ) + + return not guesses diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cd.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cd.py new file mode 100644 index 00000000..71a3ed51 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cd.py @@ -0,0 +1,395 @@ +from __future__ import annotations + +import importlib +from codecs import IncrementalDecoder +from collections import Counter +from functools import lru_cache +from typing import Counter as TypeCounter + +from .constant import ( + FREQUENCIES, + KO_NAMES, + LANGUAGE_SUPPORTED_COUNT, + TOO_SMALL_SEQUENCE, + ZH_NAMES, +) +from .md import is_suspiciously_successive_range +from .models import CoherenceMatches +from .utils import ( + is_accentuated, + is_latin, + is_multi_byte_encoding, + is_unicode_range_secondary, + unicode_range, +) + + +def encoding_unicode_range(iana_name: str) -> list[str]: + """ + Return associated unicode ranges in a single byte code page. + """ + if is_multi_byte_encoding(iana_name): + raise OSError("Function not supported on multi-byte code page") + + decoder = importlib.import_module(f"encodings.{iana_name}").IncrementalDecoder + + p: IncrementalDecoder = decoder(errors="ignore") + seen_ranges: dict[str, int] = {} + character_count: int = 0 + + for i in range(0x40, 0xFF): + chunk: str = p.decode(bytes([i])) + + if chunk: + character_range: str | None = unicode_range(chunk) + + if character_range is None: + continue + + if is_unicode_range_secondary(character_range) is False: + if character_range not in seen_ranges: + seen_ranges[character_range] = 0 + seen_ranges[character_range] += 1 + character_count += 1 + + return sorted( + [ + character_range + for character_range in seen_ranges + if seen_ranges[character_range] / character_count >= 0.15 + ] + ) + + +def unicode_range_languages(primary_range: str) -> list[str]: + """ + Return inferred languages used with a unicode range. + """ + languages: list[str] = [] + + for language, characters in FREQUENCIES.items(): + for character in characters: + if unicode_range(character) == primary_range: + languages.append(language) + break + + return languages + + +@lru_cache() +def encoding_languages(iana_name: str) -> list[str]: + """ + Single-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + unicode_ranges: list[str] = encoding_unicode_range(iana_name) + primary_range: str | None = None + + for specified_range in unicode_ranges: + if "Latin" not in specified_range: + primary_range = specified_range + break + + if primary_range is None: + return ["Latin Based"] + + return unicode_range_languages(primary_range) + + +@lru_cache() +def mb_encoding_languages(iana_name: str) -> list[str]: + """ + Multi-byte encoding language association. Some code page are heavily linked to particular language(s). + This function does the correspondence. + """ + if ( + iana_name.startswith("shift_") + or iana_name.startswith("iso2022_jp") + or iana_name.startswith("euc_j") + or iana_name == "cp932" + ): + return ["Japanese"] + if iana_name.startswith("gb") or iana_name in ZH_NAMES: + return ["Chinese"] + if iana_name.startswith("iso2022_kr") or iana_name in KO_NAMES: + return ["Korean"] + + return [] + + +@lru_cache(maxsize=LANGUAGE_SUPPORTED_COUNT) +def get_target_features(language: str) -> tuple[bool, bool]: + """ + Determine main aspects from a supported language if it contains accents and if is pure Latin. + """ + target_have_accents: bool = False + target_pure_latin: bool = True + + for character in FREQUENCIES[language]: + if not target_have_accents and is_accentuated(character): + target_have_accents = True + if target_pure_latin and is_latin(character) is False: + target_pure_latin = False + + return target_have_accents, target_pure_latin + + +def alphabet_languages( + characters: list[str], ignore_non_latin: bool = False +) -> list[str]: + """ + Return associated languages associated to given characters. + """ + languages: list[tuple[str, float]] = [] + + source_have_accents = any(is_accentuated(character) for character in characters) + + for language, language_characters in FREQUENCIES.items(): + target_have_accents, target_pure_latin = get_target_features(language) + + if ignore_non_latin and target_pure_latin is False: + continue + + if target_have_accents is False and source_have_accents: + continue + + character_count: int = len(language_characters) + + character_match_count: int = len( + [c for c in language_characters if c in characters] + ) + + ratio: float = character_match_count / character_count + + if ratio >= 0.2: + languages.append((language, ratio)) + + languages = sorted(languages, key=lambda x: x[1], reverse=True) + + return [compatible_language[0] for compatible_language in languages] + + +def characters_popularity_compare( + language: str, ordered_characters: list[str] +) -> float: + """ + Determine if a ordered characters list (by occurrence from most appearance to rarest) match a particular language. + The result is a ratio between 0. (absolutely no correspondence) and 1. (near perfect fit). + Beware that is function is not strict on the match in order to ease the detection. (Meaning close match is 1.) + """ + if language not in FREQUENCIES: + raise ValueError(f"{language} not available") + + character_approved_count: int = 0 + FREQUENCIES_language_set = set(FREQUENCIES[language]) + + ordered_characters_count: int = len(ordered_characters) + target_language_characters_count: int = len(FREQUENCIES[language]) + + large_alphabet: bool = target_language_characters_count > 26 + + for character, character_rank in zip( + ordered_characters, range(0, ordered_characters_count) + ): + if character not in FREQUENCIES_language_set: + continue + + character_rank_in_language: int = FREQUENCIES[language].index(character) + expected_projection_ratio: float = ( + target_language_characters_count / ordered_characters_count + ) + character_rank_projection: int = int(character_rank * expected_projection_ratio) + + if ( + large_alphabet is False + and abs(character_rank_projection - character_rank_in_language) > 4 + ): + continue + + if ( + large_alphabet is True + and abs(character_rank_projection - character_rank_in_language) + < target_language_characters_count / 3 + ): + character_approved_count += 1 + continue + + characters_before_source: list[str] = FREQUENCIES[language][ + 0:character_rank_in_language + ] + characters_after_source: list[str] = FREQUENCIES[language][ + character_rank_in_language: + ] + characters_before: list[str] = ordered_characters[0:character_rank] + characters_after: list[str] = ordered_characters[character_rank:] + + before_match_count: int = len( + set(characters_before) & set(characters_before_source) + ) + + after_match_count: int = len( + set(characters_after) & set(characters_after_source) + ) + + if len(characters_before_source) == 0 and before_match_count <= 4: + character_approved_count += 1 + continue + + if len(characters_after_source) == 0 and after_match_count <= 4: + character_approved_count += 1 + continue + + if ( + before_match_count / len(characters_before_source) >= 0.4 + or after_match_count / len(characters_after_source) >= 0.4 + ): + character_approved_count += 1 + continue + + return character_approved_count / len(ordered_characters) + + +def alpha_unicode_split(decoded_sequence: str) -> list[str]: + """ + Given a decoded text sequence, return a list of str. Unicode range / alphabet separation. + Ex. a text containing English/Latin with a bit a Hebrew will return two items in the resulting list; + One containing the latin letters and the other hebrew. + """ + layers: dict[str, str] = {} + + for character in decoded_sequence: + if character.isalpha() is False: + continue + + character_range: str | None = unicode_range(character) + + if character_range is None: + continue + + layer_target_range: str | None = None + + for discovered_range in layers: + if ( + is_suspiciously_successive_range(discovered_range, character_range) + is False + ): + layer_target_range = discovered_range + break + + if layer_target_range is None: + layer_target_range = character_range + + if layer_target_range not in layers: + layers[layer_target_range] = character.lower() + continue + + layers[layer_target_range] += character.lower() + + return list(layers.values()) + + +def merge_coherence_ratios(results: list[CoherenceMatches]) -> CoherenceMatches: + """ + This function merge results previously given by the function coherence_ratio. + The return type is the same as coherence_ratio. + """ + per_language_ratios: dict[str, list[float]] = {} + for result in results: + for sub_result in result: + language, ratio = sub_result + if language not in per_language_ratios: + per_language_ratios[language] = [ratio] + continue + per_language_ratios[language].append(ratio) + + merge = [ + ( + language, + round( + sum(per_language_ratios[language]) / len(per_language_ratios[language]), + 4, + ), + ) + for language in per_language_ratios + ] + + return sorted(merge, key=lambda x: x[1], reverse=True) + + +def filter_alt_coherence_matches(results: CoherenceMatches) -> CoherenceMatches: + """ + We shall NOT return "English—" in CoherenceMatches because it is an alternative + of "English". This function only keeps the best match and remove the em-dash in it. + """ + index_results: dict[str, list[float]] = dict() + + for result in results: + language, ratio = result + no_em_name: str = language.replace("—", "") + + if no_em_name not in index_results: + index_results[no_em_name] = [] + + index_results[no_em_name].append(ratio) + + if any(len(index_results[e]) > 1 for e in index_results): + filtered_results: CoherenceMatches = [] + + for language in index_results: + filtered_results.append((language, max(index_results[language]))) + + return filtered_results + + return results + + +@lru_cache(maxsize=2048) +def coherence_ratio( + decoded_sequence: str, threshold: float = 0.1, lg_inclusion: str | None = None +) -> CoherenceMatches: + """ + Detect ANY language that can be identified in given sequence. The sequence will be analysed by layers. + A layer = Character extraction by alphabets/ranges. + """ + + results: list[tuple[str, float]] = [] + ignore_non_latin: bool = False + + sufficient_match_count: int = 0 + + lg_inclusion_list = lg_inclusion.split(",") if lg_inclusion is not None else [] + if "Latin Based" in lg_inclusion_list: + ignore_non_latin = True + lg_inclusion_list.remove("Latin Based") + + for layer in alpha_unicode_split(decoded_sequence): + sequence_frequencies: TypeCounter[str] = Counter(layer) + most_common = sequence_frequencies.most_common() + + character_count: int = sum(o for c, o in most_common) + + if character_count <= TOO_SMALL_SEQUENCE: + continue + + popular_character_ordered: list[str] = [c for c, o in most_common] + + for language in lg_inclusion_list or alphabet_languages( + popular_character_ordered, ignore_non_latin + ): + ratio: float = characters_popularity_compare( + language, popular_character_ordered + ) + + if ratio < threshold: + continue + elif ratio >= 0.8: + sufficient_match_count += 1 + + results.append((language, round(ratio, 4))) + + if sufficient_match_count >= 3: + break + + return sorted( + filter_alt_coherence_matches(results), key=lambda x: x[1], reverse=True + ) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py new file mode 100644 index 00000000..543a5a4d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__init__.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from .__main__ import cli_detect, query_yes_no + +__all__ = ( + "cli_detect", + "query_yes_no", +) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py new file mode 100644 index 00000000..cb64156a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__main__.py @@ -0,0 +1,381 @@ +from __future__ import annotations + +import argparse +import sys +import typing +from json import dumps +from os.path import abspath, basename, dirname, join, realpath +from platform import python_version +from unicodedata import unidata_version + +import charset_normalizer.md as md_module +from charset_normalizer import from_fp +from charset_normalizer.models import CliDetectionResult +from charset_normalizer.version import __version__ + + +def query_yes_no(question: str, default: str = "yes") -> bool: + """Ask a yes/no question via input() and return their answer. + + "question" is a string that is presented to the user. + "default" is the presumed answer if the user just hits . + It must be "yes" (the default), "no" or None (meaning + an answer is required of the user). + + The "answer" return value is True for "yes" or False for "no". + + Credit goes to (c) https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input + """ + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} + if default is None: + prompt = " [y/n] " + elif default == "yes": + prompt = " [Y/n] " + elif default == "no": + prompt = " [y/N] " + else: + raise ValueError("invalid default answer: '%s'" % default) + + while True: + sys.stdout.write(question + prompt) + choice = input().lower() + if default is not None and choice == "": + return valid[default] + elif choice in valid: + return valid[choice] + else: + sys.stdout.write("Please respond with 'yes' or 'no' (or 'y' or 'n').\n") + + +class FileType: + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + - encoding -- The file's encoding. Accepts the same values as the + builtin open() function. + - errors -- A string indicating how encoding and decoding errors are to + be handled. Accepts the same value as the builtin open() function. + + Backported from CPython 3.12 + """ + + def __init__( + self, + mode: str = "r", + bufsize: int = -1, + encoding: str | None = None, + errors: str | None = None, + ): + self._mode = mode + self._bufsize = bufsize + self._encoding = encoding + self._errors = errors + + def __call__(self, string: str) -> typing.IO: # type: ignore[type-arg] + # the special argument "-" means sys.std{in,out} + if string == "-": + if "r" in self._mode: + return sys.stdin.buffer if "b" in self._mode else sys.stdin + elif any(c in self._mode for c in "wax"): + return sys.stdout.buffer if "b" in self._mode else sys.stdout + else: + msg = f'argument "-" with mode {self._mode}' + raise ValueError(msg) + + # all other arguments are used as file names + try: + return open(string, self._mode, self._bufsize, self._encoding, self._errors) + except OSError as e: + message = f"can't open '{string}': {e}" + raise argparse.ArgumentTypeError(message) + + def __repr__(self) -> str: + args = self._mode, self._bufsize + kwargs = [("encoding", self._encoding), ("errors", self._errors)] + args_str = ", ".join( + [repr(arg) for arg in args if arg != -1] + + [f"{kw}={arg!r}" for kw, arg in kwargs if arg is not None] + ) + return f"{type(self).__name__}({args_str})" + + +def cli_detect(argv: list[str] | None = None) -> int: + """ + CLI assistant using ARGV and ArgumentParser + :param argv: + :return: 0 if everything is fine, anything else equal trouble + """ + parser = argparse.ArgumentParser( + description="The Real First Universal Charset Detector. " + "Discover originating encoding used on text file. " + "Normalize text to unicode." + ) + + parser.add_argument( + "files", type=FileType("rb"), nargs="+", help="File(s) to be analysed" + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + dest="verbose", + help="Display complementary information about file if any. " + "Stdout will contain logs about the detection process.", + ) + parser.add_argument( + "-a", + "--with-alternative", + action="store_true", + default=False, + dest="alternatives", + help="Output complementary possibilities if any. Top-level JSON WILL be a list.", + ) + parser.add_argument( + "-n", + "--normalize", + action="store_true", + default=False, + dest="normalize", + help="Permit to normalize input file. If not set, program does not write anything.", + ) + parser.add_argument( + "-m", + "--minimal", + action="store_true", + default=False, + dest="minimal", + help="Only output the charset detected to STDOUT. Disabling JSON output.", + ) + parser.add_argument( + "-r", + "--replace", + action="store_true", + default=False, + dest="replace", + help="Replace file when trying to normalize it instead of creating a new one.", + ) + parser.add_argument( + "-f", + "--force", + action="store_true", + default=False, + dest="force", + help="Replace file without asking if you are sure, use this flag with caution.", + ) + parser.add_argument( + "-i", + "--no-preemptive", + action="store_true", + default=False, + dest="no_preemptive", + help="Disable looking at a charset declaration to hint the detector.", + ) + parser.add_argument( + "-t", + "--threshold", + action="store", + default=0.2, + type=float, + dest="threshold", + help="Define a custom maximum amount of noise allowed in decoded content. 0. <= noise <= 1.", + ) + parser.add_argument( + "--version", + action="version", + version="Charset-Normalizer {} - Python {} - Unicode {} - SpeedUp {}".format( + __version__, + python_version(), + unidata_version, + "OFF" if md_module.__file__.lower().endswith(".py") else "ON", + ), + help="Show version information and exit.", + ) + + args = parser.parse_args(argv) + + if args.replace is True and args.normalize is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --replace in addition of --normalize only.", file=sys.stderr) + return 1 + + if args.force is True and args.replace is False: + if args.files: + for my_file in args.files: + my_file.close() + print("Use --force in addition of --replace only.", file=sys.stderr) + return 1 + + if args.threshold < 0.0 or args.threshold > 1.0: + if args.files: + for my_file in args.files: + my_file.close() + print("--threshold VALUE should be between 0. AND 1.", file=sys.stderr) + return 1 + + x_ = [] + + for my_file in args.files: + matches = from_fp( + my_file, + threshold=args.threshold, + explain=args.verbose, + preemptive_behaviour=args.no_preemptive is False, + ) + + best_guess = matches.best() + + if best_guess is None: + print( + 'Unable to identify originating encoding for "{}". {}'.format( + my_file.name, + ( + "Maybe try increasing maximum amount of chaos." + if args.threshold < 1.0 + else "" + ), + ), + file=sys.stderr, + ) + x_.append( + CliDetectionResult( + abspath(my_file.name), + None, + [], + [], + "Unknown", + [], + False, + 1.0, + 0.0, + None, + True, + ) + ) + else: + x_.append( + CliDetectionResult( + abspath(my_file.name), + best_guess.encoding, + best_guess.encoding_aliases, + [ + cp + for cp in best_guess.could_be_from_charset + if cp != best_guess.encoding + ], + best_guess.language, + best_guess.alphabets, + best_guess.bom, + best_guess.percent_chaos, + best_guess.percent_coherence, + None, + True, + ) + ) + + if len(matches) > 1 and args.alternatives: + for el in matches: + if el != best_guess: + x_.append( + CliDetectionResult( + abspath(my_file.name), + el.encoding, + el.encoding_aliases, + [ + cp + for cp in el.could_be_from_charset + if cp != el.encoding + ], + el.language, + el.alphabets, + el.bom, + el.percent_chaos, + el.percent_coherence, + None, + False, + ) + ) + + if args.normalize is True: + if best_guess.encoding.startswith("utf") is True: + print( + '"{}" file does not need to be normalized, as it already came from unicode.'.format( + my_file.name + ), + file=sys.stderr, + ) + if my_file.closed is False: + my_file.close() + continue + + dir_path = dirname(realpath(my_file.name)) + file_name = basename(realpath(my_file.name)) + + o_: list[str] = file_name.split(".") + + if args.replace is False: + o_.insert(-1, best_guess.encoding) + if my_file.closed is False: + my_file.close() + elif ( + args.force is False + and query_yes_no( + 'Are you sure to normalize "{}" by replacing it ?'.format( + my_file.name + ), + "no", + ) + is False + ): + if my_file.closed is False: + my_file.close() + continue + + try: + x_[0].unicode_path = join(dir_path, ".".join(o_)) + + with open(x_[0].unicode_path, "wb") as fp: + fp.write(best_guess.output()) + except OSError as e: + print(str(e), file=sys.stderr) + if my_file.closed is False: + my_file.close() + return 2 + + if my_file.closed is False: + my_file.close() + + if args.minimal is False: + print( + dumps( + [el.__dict__ for el in x_] if len(x_) > 1 else x_[0].__dict__, + ensure_ascii=True, + indent=4, + ) + ) + else: + for my_file in args.files: + print( + ", ".join( + [ + el.encoding or "undefined" + for el in x_ + if el.path == abspath(my_file.name) + ] + ) + ) + + return 0 + + +if __name__ == "__main__": + cli_detect() diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/cli/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc11ea950a79e6331791cb98bbe31d9670e6c442 GIT binary patch literal 346 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 bEWc`|^!D@VTTJaw^v*vy3U-&ijtu?(yMi)t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/constant.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/constant.py new file mode 100644 index 00000000..cc71a019 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/constant.py @@ -0,0 +1,2015 @@ +from __future__ import annotations + +from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE +from encodings.aliases import aliases +from re import IGNORECASE +from re import compile as re_compile + +# Contain for each eligible encoding a list of/item bytes SIG/BOM +ENCODING_MARKS: dict[str, bytes | list[bytes]] = { + "utf_8": BOM_UTF8, + "utf_7": [ + b"\x2b\x2f\x76\x38", + b"\x2b\x2f\x76\x39", + b"\x2b\x2f\x76\x2b", + b"\x2b\x2f\x76\x2f", + b"\x2b\x2f\x76\x38\x2d", + ], + "gb18030": b"\x84\x31\x95\x33", + "utf_32": [BOM_UTF32_BE, BOM_UTF32_LE], + "utf_16": [BOM_UTF16_BE, BOM_UTF16_LE], +} + +TOO_SMALL_SEQUENCE: int = 32 +TOO_BIG_SEQUENCE: int = int(10e6) + +UTF8_MAXIMAL_ALLOCATION: int = 1_112_064 + +# Up-to-date Unicode ucd/15.0.0 +UNICODE_RANGES_COMBINED: dict[str, range] = { + "Control character": range(32), + "Basic Latin": range(32, 128), + "Latin-1 Supplement": range(128, 256), + "Latin Extended-A": range(256, 384), + "Latin Extended-B": range(384, 592), + "IPA Extensions": range(592, 688), + "Spacing Modifier Letters": range(688, 768), + "Combining Diacritical Marks": range(768, 880), + "Greek and Coptic": range(880, 1024), + "Cyrillic": range(1024, 1280), + "Cyrillic Supplement": range(1280, 1328), + "Armenian": range(1328, 1424), + "Hebrew": range(1424, 1536), + "Arabic": range(1536, 1792), + "Syriac": range(1792, 1872), + "Arabic Supplement": range(1872, 1920), + "Thaana": range(1920, 1984), + "NKo": range(1984, 2048), + "Samaritan": range(2048, 2112), + "Mandaic": range(2112, 2144), + "Syriac Supplement": range(2144, 2160), + "Arabic Extended-B": range(2160, 2208), + "Arabic Extended-A": range(2208, 2304), + "Devanagari": range(2304, 2432), + "Bengali": range(2432, 2560), + "Gurmukhi": range(2560, 2688), + "Gujarati": range(2688, 2816), + "Oriya": range(2816, 2944), + "Tamil": range(2944, 3072), + "Telugu": range(3072, 3200), + "Kannada": range(3200, 3328), + "Malayalam": range(3328, 3456), + "Sinhala": range(3456, 3584), + "Thai": range(3584, 3712), + "Lao": range(3712, 3840), + "Tibetan": range(3840, 4096), + "Myanmar": range(4096, 4256), + "Georgian": range(4256, 4352), + "Hangul Jamo": range(4352, 4608), + "Ethiopic": range(4608, 4992), + "Ethiopic Supplement": range(4992, 5024), + "Cherokee": range(5024, 5120), + "Unified Canadian Aboriginal Syllabics": range(5120, 5760), + "Ogham": range(5760, 5792), + "Runic": range(5792, 5888), + "Tagalog": range(5888, 5920), + "Hanunoo": range(5920, 5952), + "Buhid": range(5952, 5984), + "Tagbanwa": range(5984, 6016), + "Khmer": range(6016, 6144), + "Mongolian": range(6144, 6320), + "Unified Canadian Aboriginal Syllabics Extended": range(6320, 6400), + "Limbu": range(6400, 6480), + "Tai Le": range(6480, 6528), + "New Tai Lue": range(6528, 6624), + "Khmer Symbols": range(6624, 6656), + "Buginese": range(6656, 6688), + "Tai Tham": range(6688, 6832), + "Combining Diacritical Marks Extended": range(6832, 6912), + "Balinese": range(6912, 7040), + "Sundanese": range(7040, 7104), + "Batak": range(7104, 7168), + "Lepcha": range(7168, 7248), + "Ol Chiki": range(7248, 7296), + "Cyrillic Extended-C": range(7296, 7312), + "Georgian Extended": range(7312, 7360), + "Sundanese Supplement": range(7360, 7376), + "Vedic Extensions": range(7376, 7424), + "Phonetic Extensions": range(7424, 7552), + "Phonetic Extensions Supplement": range(7552, 7616), + "Combining Diacritical Marks Supplement": range(7616, 7680), + "Latin Extended Additional": range(7680, 7936), + "Greek Extended": range(7936, 8192), + "General Punctuation": range(8192, 8304), + "Superscripts and Subscripts": range(8304, 8352), + "Currency Symbols": range(8352, 8400), + "Combining Diacritical Marks for Symbols": range(8400, 8448), + "Letterlike Symbols": range(8448, 8528), + "Number Forms": range(8528, 8592), + "Arrows": range(8592, 8704), + "Mathematical Operators": range(8704, 8960), + "Miscellaneous Technical": range(8960, 9216), + "Control Pictures": range(9216, 9280), + "Optical Character Recognition": range(9280, 9312), + "Enclosed Alphanumerics": range(9312, 9472), + "Box Drawing": range(9472, 9600), + "Block Elements": range(9600, 9632), + "Geometric Shapes": range(9632, 9728), + "Miscellaneous Symbols": range(9728, 9984), + "Dingbats": range(9984, 10176), + "Miscellaneous Mathematical Symbols-A": range(10176, 10224), + "Supplemental Arrows-A": range(10224, 10240), + "Braille Patterns": range(10240, 10496), + "Supplemental Arrows-B": range(10496, 10624), + "Miscellaneous Mathematical Symbols-B": range(10624, 10752), + "Supplemental Mathematical Operators": range(10752, 11008), + "Miscellaneous Symbols and Arrows": range(11008, 11264), + "Glagolitic": range(11264, 11360), + "Latin Extended-C": range(11360, 11392), + "Coptic": range(11392, 11520), + "Georgian Supplement": range(11520, 11568), + "Tifinagh": range(11568, 11648), + "Ethiopic Extended": range(11648, 11744), + "Cyrillic Extended-A": range(11744, 11776), + "Supplemental Punctuation": range(11776, 11904), + "CJK Radicals Supplement": range(11904, 12032), + "Kangxi Radicals": range(12032, 12256), + "Ideographic Description Characters": range(12272, 12288), + "CJK Symbols and Punctuation": range(12288, 12352), + "Hiragana": range(12352, 12448), + "Katakana": range(12448, 12544), + "Bopomofo": range(12544, 12592), + "Hangul Compatibility Jamo": range(12592, 12688), + "Kanbun": range(12688, 12704), + "Bopomofo Extended": range(12704, 12736), + "CJK Strokes": range(12736, 12784), + "Katakana Phonetic Extensions": range(12784, 12800), + "Enclosed CJK Letters and Months": range(12800, 13056), + "CJK Compatibility": range(13056, 13312), + "CJK Unified Ideographs Extension A": range(13312, 19904), + "Yijing Hexagram Symbols": range(19904, 19968), + "CJK Unified Ideographs": range(19968, 40960), + "Yi Syllables": range(40960, 42128), + "Yi Radicals": range(42128, 42192), + "Lisu": range(42192, 42240), + "Vai": range(42240, 42560), + "Cyrillic Extended-B": range(42560, 42656), + "Bamum": range(42656, 42752), + "Modifier Tone Letters": range(42752, 42784), + "Latin Extended-D": range(42784, 43008), + "Syloti Nagri": range(43008, 43056), + "Common Indic Number Forms": range(43056, 43072), + "Phags-pa": range(43072, 43136), + "Saurashtra": range(43136, 43232), + "Devanagari Extended": range(43232, 43264), + "Kayah Li": range(43264, 43312), + "Rejang": range(43312, 43360), + "Hangul Jamo Extended-A": range(43360, 43392), + "Javanese": range(43392, 43488), + "Myanmar Extended-B": range(43488, 43520), + "Cham": range(43520, 43616), + "Myanmar Extended-A": range(43616, 43648), + "Tai Viet": range(43648, 43744), + "Meetei Mayek Extensions": range(43744, 43776), + "Ethiopic Extended-A": range(43776, 43824), + "Latin Extended-E": range(43824, 43888), + "Cherokee Supplement": range(43888, 43968), + "Meetei Mayek": range(43968, 44032), + "Hangul Syllables": range(44032, 55216), + "Hangul Jamo Extended-B": range(55216, 55296), + "High Surrogates": range(55296, 56192), + "High Private Use Surrogates": range(56192, 56320), + "Low Surrogates": range(56320, 57344), + "Private Use Area": range(57344, 63744), + "CJK Compatibility Ideographs": range(63744, 64256), + "Alphabetic Presentation Forms": range(64256, 64336), + "Arabic Presentation Forms-A": range(64336, 65024), + "Variation Selectors": range(65024, 65040), + "Vertical Forms": range(65040, 65056), + "Combining Half Marks": range(65056, 65072), + "CJK Compatibility Forms": range(65072, 65104), + "Small Form Variants": range(65104, 65136), + "Arabic Presentation Forms-B": range(65136, 65280), + "Halfwidth and Fullwidth Forms": range(65280, 65520), + "Specials": range(65520, 65536), + "Linear B Syllabary": range(65536, 65664), + "Linear B Ideograms": range(65664, 65792), + "Aegean Numbers": range(65792, 65856), + "Ancient Greek Numbers": range(65856, 65936), + "Ancient Symbols": range(65936, 66000), + "Phaistos Disc": range(66000, 66048), + "Lycian": range(66176, 66208), + "Carian": range(66208, 66272), + "Coptic Epact Numbers": range(66272, 66304), + "Old Italic": range(66304, 66352), + "Gothic": range(66352, 66384), + "Old Permic": range(66384, 66432), + "Ugaritic": range(66432, 66464), + "Old Persian": range(66464, 66528), + "Deseret": range(66560, 66640), + "Shavian": range(66640, 66688), + "Osmanya": range(66688, 66736), + "Osage": range(66736, 66816), + "Elbasan": range(66816, 66864), + "Caucasian Albanian": range(66864, 66928), + "Vithkuqi": range(66928, 67008), + "Linear A": range(67072, 67456), + "Latin Extended-F": range(67456, 67520), + "Cypriot Syllabary": range(67584, 67648), + "Imperial Aramaic": range(67648, 67680), + "Palmyrene": range(67680, 67712), + "Nabataean": range(67712, 67760), + "Hatran": range(67808, 67840), + "Phoenician": range(67840, 67872), + "Lydian": range(67872, 67904), + "Meroitic Hieroglyphs": range(67968, 68000), + "Meroitic Cursive": range(68000, 68096), + "Kharoshthi": range(68096, 68192), + "Old South Arabian": range(68192, 68224), + "Old North Arabian": range(68224, 68256), + "Manichaean": range(68288, 68352), + "Avestan": range(68352, 68416), + "Inscriptional Parthian": range(68416, 68448), + "Inscriptional Pahlavi": range(68448, 68480), + "Psalter Pahlavi": range(68480, 68528), + "Old Turkic": range(68608, 68688), + "Old Hungarian": range(68736, 68864), + "Hanifi Rohingya": range(68864, 68928), + "Rumi Numeral Symbols": range(69216, 69248), + "Yezidi": range(69248, 69312), + "Arabic Extended-C": range(69312, 69376), + "Old Sogdian": range(69376, 69424), + "Sogdian": range(69424, 69488), + "Old Uyghur": range(69488, 69552), + "Chorasmian": range(69552, 69600), + "Elymaic": range(69600, 69632), + "Brahmi": range(69632, 69760), + "Kaithi": range(69760, 69840), + "Sora Sompeng": range(69840, 69888), + "Chakma": range(69888, 69968), + "Mahajani": range(69968, 70016), + "Sharada": range(70016, 70112), + "Sinhala Archaic Numbers": range(70112, 70144), + "Khojki": range(70144, 70224), + "Multani": range(70272, 70320), + "Khudawadi": range(70320, 70400), + "Grantha": range(70400, 70528), + "Newa": range(70656, 70784), + "Tirhuta": range(70784, 70880), + "Siddham": range(71040, 71168), + "Modi": range(71168, 71264), + "Mongolian Supplement": range(71264, 71296), + "Takri": range(71296, 71376), + "Ahom": range(71424, 71504), + "Dogra": range(71680, 71760), + "Warang Citi": range(71840, 71936), + "Dives Akuru": range(71936, 72032), + "Nandinagari": range(72096, 72192), + "Zanabazar Square": range(72192, 72272), + "Soyombo": range(72272, 72368), + "Unified Canadian Aboriginal Syllabics Extended-A": range(72368, 72384), + "Pau Cin Hau": range(72384, 72448), + "Devanagari Extended-A": range(72448, 72544), + "Bhaiksuki": range(72704, 72816), + "Marchen": range(72816, 72896), + "Masaram Gondi": range(72960, 73056), + "Gunjala Gondi": range(73056, 73136), + "Makasar": range(73440, 73472), + "Kawi": range(73472, 73568), + "Lisu Supplement": range(73648, 73664), + "Tamil Supplement": range(73664, 73728), + "Cuneiform": range(73728, 74752), + "Cuneiform Numbers and Punctuation": range(74752, 74880), + "Early Dynastic Cuneiform": range(74880, 75088), + "Cypro-Minoan": range(77712, 77824), + "Egyptian Hieroglyphs": range(77824, 78896), + "Egyptian Hieroglyph Format Controls": range(78896, 78944), + "Anatolian Hieroglyphs": range(82944, 83584), + "Bamum Supplement": range(92160, 92736), + "Mro": range(92736, 92784), + "Tangsa": range(92784, 92880), + "Bassa Vah": range(92880, 92928), + "Pahawh Hmong": range(92928, 93072), + "Medefaidrin": range(93760, 93856), + "Miao": range(93952, 94112), + "Ideographic Symbols and Punctuation": range(94176, 94208), + "Tangut": range(94208, 100352), + "Tangut Components": range(100352, 101120), + "Khitan Small Script": range(101120, 101632), + "Tangut Supplement": range(101632, 101760), + "Kana Extended-B": range(110576, 110592), + "Kana Supplement": range(110592, 110848), + "Kana Extended-A": range(110848, 110896), + "Small Kana Extension": range(110896, 110960), + "Nushu": range(110960, 111360), + "Duployan": range(113664, 113824), + "Shorthand Format Controls": range(113824, 113840), + "Znamenny Musical Notation": range(118528, 118736), + "Byzantine Musical Symbols": range(118784, 119040), + "Musical Symbols": range(119040, 119296), + "Ancient Greek Musical Notation": range(119296, 119376), + "Kaktovik Numerals": range(119488, 119520), + "Mayan Numerals": range(119520, 119552), + "Tai Xuan Jing Symbols": range(119552, 119648), + "Counting Rod Numerals": range(119648, 119680), + "Mathematical Alphanumeric Symbols": range(119808, 120832), + "Sutton SignWriting": range(120832, 121520), + "Latin Extended-G": range(122624, 122880), + "Glagolitic Supplement": range(122880, 122928), + "Cyrillic Extended-D": range(122928, 123024), + "Nyiakeng Puachue Hmong": range(123136, 123216), + "Toto": range(123536, 123584), + "Wancho": range(123584, 123648), + "Nag Mundari": range(124112, 124160), + "Ethiopic Extended-B": range(124896, 124928), + "Mende Kikakui": range(124928, 125152), + "Adlam": range(125184, 125280), + "Indic Siyaq Numbers": range(126064, 126144), + "Ottoman Siyaq Numbers": range(126208, 126288), + "Arabic Mathematical Alphabetic Symbols": range(126464, 126720), + "Mahjong Tiles": range(126976, 127024), + "Domino Tiles": range(127024, 127136), + "Playing Cards": range(127136, 127232), + "Enclosed Alphanumeric Supplement": range(127232, 127488), + "Enclosed Ideographic Supplement": range(127488, 127744), + "Miscellaneous Symbols and Pictographs": range(127744, 128512), + "Emoticons range(Emoji)": range(128512, 128592), + "Ornamental Dingbats": range(128592, 128640), + "Transport and Map Symbols": range(128640, 128768), + "Alchemical Symbols": range(128768, 128896), + "Geometric Shapes Extended": range(128896, 129024), + "Supplemental Arrows-C": range(129024, 129280), + "Supplemental Symbols and Pictographs": range(129280, 129536), + "Chess Symbols": range(129536, 129648), + "Symbols and Pictographs Extended-A": range(129648, 129792), + "Symbols for Legacy Computing": range(129792, 130048), + "CJK Unified Ideographs Extension B": range(131072, 173792), + "CJK Unified Ideographs Extension C": range(173824, 177984), + "CJK Unified Ideographs Extension D": range(177984, 178208), + "CJK Unified Ideographs Extension E": range(178208, 183984), + "CJK Unified Ideographs Extension F": range(183984, 191472), + "CJK Compatibility Ideographs Supplement": range(194560, 195104), + "CJK Unified Ideographs Extension G": range(196608, 201552), + "CJK Unified Ideographs Extension H": range(201552, 205744), + "Tags": range(917504, 917632), + "Variation Selectors Supplement": range(917760, 918000), + "Supplementary Private Use Area-A": range(983040, 1048576), + "Supplementary Private Use Area-B": range(1048576, 1114112), +} + + +UNICODE_SECONDARY_RANGE_KEYWORD: list[str] = [ + "Supplement", + "Extended", + "Extensions", + "Modifier", + "Marks", + "Punctuation", + "Symbols", + "Forms", + "Operators", + "Miscellaneous", + "Drawing", + "Block", + "Shapes", + "Supplemental", + "Tags", +] + +RE_POSSIBLE_ENCODING_INDICATION = re_compile( + r"(?:(?:encoding)|(?:charset)|(?:coding))(?:[\:= ]{1,10})(?:[\"\']?)([a-zA-Z0-9\-_]+)(?:[\"\']?)", + IGNORECASE, +) + +IANA_NO_ALIASES = [ + "cp720", + "cp737", + "cp856", + "cp874", + "cp875", + "cp1006", + "koi8_r", + "koi8_t", + "koi8_u", +] + +IANA_SUPPORTED: list[str] = sorted( + filter( + lambda x: x.endswith("_codec") is False + and x not in {"rot_13", "tactis", "mbcs"}, + list(set(aliases.values())) + IANA_NO_ALIASES, + ) +) + +IANA_SUPPORTED_COUNT: int = len(IANA_SUPPORTED) + +# pre-computed code page that are similar using the function cp_similarity. +IANA_SUPPORTED_SIMILAR: dict[str, list[str]] = { + "cp037": ["cp1026", "cp1140", "cp273", "cp500"], + "cp1026": ["cp037", "cp1140", "cp273", "cp500"], + "cp1125": ["cp866"], + "cp1140": ["cp037", "cp1026", "cp273", "cp500"], + "cp1250": ["iso8859_2"], + "cp1251": ["kz1048", "ptcp154"], + "cp1252": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1253": ["iso8859_7"], + "cp1254": ["iso8859_15", "iso8859_9", "latin_1"], + "cp1257": ["iso8859_13"], + "cp273": ["cp037", "cp1026", "cp1140", "cp500"], + "cp437": ["cp850", "cp858", "cp860", "cp861", "cp862", "cp863", "cp865"], + "cp500": ["cp037", "cp1026", "cp1140", "cp273"], + "cp850": ["cp437", "cp857", "cp858", "cp865"], + "cp857": ["cp850", "cp858", "cp865"], + "cp858": ["cp437", "cp850", "cp857", "cp865"], + "cp860": ["cp437", "cp861", "cp862", "cp863", "cp865"], + "cp861": ["cp437", "cp860", "cp862", "cp863", "cp865"], + "cp862": ["cp437", "cp860", "cp861", "cp863", "cp865"], + "cp863": ["cp437", "cp860", "cp861", "cp862", "cp865"], + "cp865": ["cp437", "cp850", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863"], + "cp866": ["cp1125"], + "iso8859_10": ["iso8859_14", "iso8859_15", "iso8859_4", "iso8859_9", "latin_1"], + "iso8859_11": ["tis_620"], + "iso8859_13": ["cp1257"], + "iso8859_14": [ + "iso8859_10", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_15": [ + "cp1252", + "cp1254", + "iso8859_10", + "iso8859_14", + "iso8859_16", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_16": [ + "iso8859_14", + "iso8859_15", + "iso8859_2", + "iso8859_3", + "iso8859_9", + "latin_1", + ], + "iso8859_2": ["cp1250", "iso8859_16", "iso8859_4"], + "iso8859_3": ["iso8859_14", "iso8859_15", "iso8859_16", "iso8859_9", "latin_1"], + "iso8859_4": ["iso8859_10", "iso8859_2", "iso8859_9", "latin_1"], + "iso8859_7": ["cp1253"], + "iso8859_9": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "latin_1", + ], + "kz1048": ["cp1251", "ptcp154"], + "latin_1": [ + "cp1252", + "cp1254", + "cp1258", + "iso8859_10", + "iso8859_14", + "iso8859_15", + "iso8859_16", + "iso8859_3", + "iso8859_4", + "iso8859_9", + ], + "mac_iceland": ["mac_roman", "mac_turkish"], + "mac_roman": ["mac_iceland", "mac_turkish"], + "mac_turkish": ["mac_iceland", "mac_roman"], + "ptcp154": ["cp1251", "kz1048"], + "tis_620": ["iso8859_11"], +} + + +CHARDET_CORRESPONDENCE: dict[str, str] = { + "iso2022_kr": "ISO-2022-KR", + "iso2022_jp": "ISO-2022-JP", + "euc_kr": "EUC-KR", + "tis_620": "TIS-620", + "utf_32": "UTF-32", + "euc_jp": "EUC-JP", + "koi8_r": "KOI8-R", + "iso8859_1": "ISO-8859-1", + "iso8859_2": "ISO-8859-2", + "iso8859_5": "ISO-8859-5", + "iso8859_6": "ISO-8859-6", + "iso8859_7": "ISO-8859-7", + "iso8859_8": "ISO-8859-8", + "utf_16": "UTF-16", + "cp855": "IBM855", + "mac_cyrillic": "MacCyrillic", + "gb2312": "GB2312", + "gb18030": "GB18030", + "cp932": "CP932", + "cp866": "IBM866", + "utf_8": "utf-8", + "utf_8_sig": "UTF-8-SIG", + "shift_jis": "SHIFT_JIS", + "big5": "Big5", + "cp1250": "windows-1250", + "cp1251": "windows-1251", + "cp1252": "Windows-1252", + "cp1253": "windows-1253", + "cp1255": "windows-1255", + "cp1256": "windows-1256", + "cp1254": "Windows-1254", + "cp949": "CP949", +} + + +COMMON_SAFE_ASCII_CHARACTERS: set[str] = { + "<", + ">", + "=", + ":", + "/", + "&", + ";", + "{", + "}", + "[", + "]", + ",", + "|", + '"', + "-", + "(", + ")", +} + +# Sample character sets — replace with full lists if needed +COMMON_CHINESE_CHARACTERS = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞" + +COMMON_JAPANESE_CHARACTERS = "日一国年大十二本中長出三時行見月分後前生五間上東四今金九入学高円子外八六下来気小七山話女北午百書先名川千水半男西電校語土木聞食車何南万毎白天母火右読友左休父雨" + +COMMON_KOREAN_CHARACTERS = "一二三四五六七八九十百千萬上下左右中人女子大小山川日月火水木金土父母天地國名年時文校學生" + +# Combine all into a set +COMMON_CJK_CHARACTERS = set( + "".join( + [ + COMMON_CHINESE_CHARACTERS, + COMMON_JAPANESE_CHARACTERS, + COMMON_KOREAN_CHARACTERS, + ] + ) +) + +KO_NAMES: set[str] = {"johab", "cp949", "euc_kr"} +ZH_NAMES: set[str] = {"big5", "cp950", "big5hkscs", "hz"} + +# Logging LEVEL below DEBUG +TRACE: int = 5 + + +# Language label that contain the em dash "—" +# character are to be considered alternative seq to origin +FREQUENCIES: dict[str, list[str]] = { + "English": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "u", + "m", + "f", + "p", + "g", + "w", + "y", + "b", + "v", + "k", + "x", + "j", + "z", + "q", + ], + "English—": [ + "e", + "a", + "t", + "i", + "o", + "n", + "s", + "r", + "h", + "l", + "d", + "c", + "m", + "u", + "f", + "p", + "g", + "w", + "b", + "y", + "v", + "k", + "j", + "x", + "z", + "q", + ], + "German": [ + "e", + "n", + "i", + "r", + "s", + "t", + "a", + "d", + "h", + "u", + "l", + "g", + "o", + "c", + "m", + "b", + "f", + "k", + "w", + "z", + "p", + "v", + "ü", + "ä", + "ö", + "j", + ], + "French": [ + "e", + "a", + "s", + "n", + "i", + "t", + "r", + "l", + "u", + "o", + "d", + "c", + "p", + "m", + "é", + "v", + "g", + "f", + "b", + "h", + "q", + "à", + "x", + "è", + "y", + "j", + ], + "Dutch": [ + "e", + "n", + "a", + "i", + "r", + "t", + "o", + "d", + "s", + "l", + "g", + "h", + "v", + "m", + "u", + "k", + "c", + "p", + "b", + "w", + "j", + "z", + "f", + "y", + "x", + "ë", + ], + "Italian": [ + "e", + "i", + "a", + "o", + "n", + "l", + "t", + "r", + "s", + "c", + "d", + "u", + "p", + "m", + "g", + "v", + "f", + "b", + "z", + "h", + "q", + "è", + "à", + "k", + "y", + "ò", + ], + "Polish": [ + "a", + "i", + "o", + "e", + "n", + "r", + "z", + "w", + "s", + "c", + "t", + "k", + "y", + "d", + "p", + "m", + "u", + "l", + "j", + "ł", + "g", + "b", + "h", + "ą", + "ę", + "ó", + ], + "Spanish": [ + "e", + "a", + "o", + "n", + "s", + "r", + "i", + "l", + "d", + "t", + "c", + "u", + "m", + "p", + "b", + "g", + "v", + "f", + "y", + "ó", + "h", + "q", + "í", + "j", + "z", + "á", + ], + "Russian": [ + "о", + "а", + "е", + "и", + "н", + "с", + "т", + "р", + "в", + "л", + "к", + "м", + "д", + "п", + "у", + "г", + "я", + "ы", + "з", + "б", + "й", + "ь", + "ч", + "х", + "ж", + "ц", + ], + # Jap-Kanji + "Japanese": [ + "人", + "一", + "大", + "亅", + "丁", + "丨", + "竹", + "笑", + "口", + "日", + "今", + "二", + "彳", + "行", + "十", + "土", + "丶", + "寸", + "寺", + "時", + "乙", + "丿", + "乂", + "气", + "気", + "冂", + "巾", + "亠", + "市", + "目", + "儿", + "見", + "八", + "小", + "凵", + "県", + "月", + "彐", + "門", + "間", + "木", + "東", + "山", + "出", + "本", + "中", + "刀", + "分", + "耳", + "又", + "取", + "最", + "言", + "田", + "心", + "思", + "刂", + "前", + "京", + "尹", + "事", + "生", + "厶", + "云", + "会", + "未", + "来", + "白", + "冫", + "楽", + "灬", + "馬", + "尸", + "尺", + "駅", + "明", + "耂", + "者", + "了", + "阝", + "都", + "高", + "卜", + "占", + "厂", + "广", + "店", + "子", + "申", + "奄", + "亻", + "俺", + "上", + "方", + "冖", + "学", + "衣", + "艮", + "食", + "自", + ], + # Jap-Katakana + "Japanese—": [ + "ー", + "ン", + "ス", + "・", + "ル", + "ト", + "リ", + "イ", + "ア", + "ラ", + "ッ", + "ク", + "ド", + "シ", + "レ", + "ジ", + "タ", + "フ", + "ロ", + "カ", + "テ", + "マ", + "ィ", + "グ", + "バ", + "ム", + "プ", + "オ", + "コ", + "デ", + "ニ", + "ウ", + "メ", + "サ", + "ビ", + "ナ", + "ブ", + "ャ", + "エ", + "ュ", + "チ", + "キ", + "ズ", + "ダ", + "パ", + "ミ", + "ェ", + "ョ", + "ハ", + "セ", + "ベ", + "ガ", + "モ", + "ツ", + "ネ", + "ボ", + "ソ", + "ノ", + "ァ", + "ヴ", + "ワ", + "ポ", + "ペ", + "ピ", + "ケ", + "ゴ", + "ギ", + "ザ", + "ホ", + "ゲ", + "ォ", + "ヤ", + "ヒ", + "ユ", + "ヨ", + "ヘ", + "ゼ", + "ヌ", + "ゥ", + "ゾ", + "ヶ", + "ヂ", + "ヲ", + "ヅ", + "ヵ", + "ヱ", + "ヰ", + "ヮ", + "ヽ", + "゠", + "ヾ", + "ヷ", + "ヿ", + "ヸ", + "ヹ", + "ヺ", + ], + # Jap-Hiragana + "Japanese——": [ + "の", + "に", + "る", + "た", + "と", + "は", + "し", + "い", + "を", + "で", + "て", + "が", + "な", + "れ", + "か", + "ら", + "さ", + "っ", + "り", + "す", + "あ", + "も", + "こ", + "ま", + "う", + "く", + "よ", + "き", + "ん", + "め", + "お", + "け", + "そ", + "つ", + "だ", + "や", + "え", + "ど", + "わ", + "ち", + "み", + "せ", + "じ", + "ば", + "へ", + "び", + "ず", + "ろ", + "ほ", + "げ", + "む", + "べ", + "ひ", + "ょ", + "ゆ", + "ぶ", + "ご", + "ゃ", + "ね", + "ふ", + "ぐ", + "ぎ", + "ぼ", + "ゅ", + "づ", + "ざ", + "ぞ", + "ぬ", + "ぜ", + "ぱ", + "ぽ", + "ぷ", + "ぴ", + "ぃ", + "ぁ", + "ぇ", + "ぺ", + "ゞ", + "ぢ", + "ぉ", + "ぅ", + "ゐ", + "ゝ", + "ゑ", + "゛", + "゜", + "ゎ", + "ゔ", + "゚", + "ゟ", + "゙", + "ゕ", + "ゖ", + ], + "Portuguese": [ + "a", + "e", + "o", + "s", + "i", + "r", + "d", + "n", + "t", + "m", + "u", + "c", + "l", + "p", + "g", + "v", + "b", + "f", + "h", + "ã", + "q", + "é", + "ç", + "á", + "z", + "í", + ], + "Swedish": [ + "e", + "a", + "n", + "r", + "t", + "s", + "i", + "l", + "d", + "o", + "m", + "k", + "g", + "v", + "h", + "f", + "u", + "p", + "ä", + "c", + "b", + "ö", + "å", + "y", + "j", + "x", + ], + "Chinese": [ + "的", + "一", + "是", + "不", + "了", + "在", + "人", + "有", + "我", + "他", + "这", + "个", + "们", + "中", + "来", + "上", + "大", + "为", + "和", + "国", + "地", + "到", + "以", + "说", + "时", + "要", + "就", + "出", + "会", + "可", + "也", + "你", + "对", + "生", + "能", + "而", + "子", + "那", + "得", + "于", + "着", + "下", + "自", + "之", + "年", + "过", + "发", + "后", + "作", + "里", + "用", + "道", + "行", + "所", + "然", + "家", + "种", + "事", + "成", + "方", + "多", + "经", + "么", + "去", + "法", + "学", + "如", + "都", + "同", + "现", + "当", + "没", + "动", + "面", + "起", + "看", + "定", + "天", + "分", + "还", + "进", + "好", + "小", + "部", + "其", + "些", + "主", + "样", + "理", + "心", + "她", + "本", + "前", + "开", + "但", + "因", + "只", + "从", + "想", + "实", + ], + "Ukrainian": [ + "о", + "а", + "н", + "і", + "и", + "р", + "в", + "т", + "е", + "с", + "к", + "л", + "у", + "д", + "м", + "п", + "з", + "я", + "ь", + "б", + "г", + "й", + "ч", + "х", + "ц", + "ї", + ], + "Norwegian": [ + "e", + "r", + "n", + "t", + "a", + "s", + "i", + "o", + "l", + "d", + "g", + "k", + "m", + "v", + "f", + "p", + "u", + "b", + "h", + "å", + "y", + "j", + "ø", + "c", + "æ", + "w", + ], + "Finnish": [ + "a", + "i", + "n", + "t", + "e", + "s", + "l", + "o", + "u", + "k", + "ä", + "m", + "r", + "v", + "j", + "h", + "p", + "y", + "d", + "ö", + "g", + "c", + "b", + "f", + "w", + "z", + ], + "Vietnamese": [ + "n", + "h", + "t", + "i", + "c", + "g", + "a", + "o", + "u", + "m", + "l", + "r", + "à", + "đ", + "s", + "e", + "v", + "p", + "b", + "y", + "ư", + "d", + "á", + "k", + "ộ", + "ế", + ], + "Czech": [ + "o", + "e", + "a", + "n", + "t", + "s", + "i", + "l", + "v", + "r", + "k", + "d", + "u", + "m", + "p", + "í", + "c", + "h", + "z", + "á", + "y", + "j", + "b", + "ě", + "é", + "ř", + ], + "Hungarian": [ + "e", + "a", + "t", + "l", + "s", + "n", + "k", + "r", + "i", + "o", + "z", + "á", + "é", + "g", + "m", + "b", + "y", + "v", + "d", + "h", + "u", + "p", + "j", + "ö", + "f", + "c", + ], + "Korean": [ + "이", + "다", + "에", + "의", + "는", + "로", + "하", + "을", + "가", + "고", + "지", + "서", + "한", + "은", + "기", + "으", + "년", + "대", + "사", + "시", + "를", + "리", + "도", + "인", + "스", + "일", + ], + "Indonesian": [ + "a", + "n", + "e", + "i", + "r", + "t", + "u", + "s", + "d", + "k", + "m", + "l", + "g", + "p", + "b", + "o", + "h", + "y", + "j", + "c", + "w", + "f", + "v", + "z", + "x", + "q", + ], + "Turkish": [ + "a", + "e", + "i", + "n", + "r", + "l", + "ı", + "k", + "d", + "t", + "s", + "m", + "y", + "u", + "o", + "b", + "ü", + "ş", + "v", + "g", + "z", + "h", + "c", + "p", + "ç", + "ğ", + ], + "Romanian": [ + "e", + "i", + "a", + "r", + "n", + "t", + "u", + "l", + "o", + "c", + "s", + "d", + "p", + "m", + "ă", + "f", + "v", + "î", + "g", + "b", + "ș", + "ț", + "z", + "h", + "â", + "j", + ], + "Farsi": [ + "ا", + "ی", + "ر", + "د", + "ن", + "ه", + "و", + "م", + "ت", + "ب", + "س", + "ل", + "ک", + "ش", + "ز", + "ف", + "گ", + "ع", + "خ", + "ق", + "ج", + "آ", + "پ", + "ح", + "ط", + "ص", + ], + "Arabic": [ + "ا", + "ل", + "ي", + "م", + "و", + "ن", + "ر", + "ت", + "ب", + "ة", + "ع", + "د", + "س", + "ف", + "ه", + "ك", + "ق", + "أ", + "ح", + "ج", + "ش", + "ط", + "ص", + "ى", + "خ", + "إ", + ], + "Danish": [ + "e", + "r", + "n", + "t", + "a", + "i", + "s", + "d", + "l", + "o", + "g", + "m", + "k", + "f", + "v", + "u", + "b", + "h", + "p", + "å", + "y", + "ø", + "æ", + "c", + "j", + "w", + ], + "Serbian": [ + "а", + "и", + "о", + "е", + "н", + "р", + "с", + "у", + "т", + "к", + "ј", + "в", + "д", + "м", + "п", + "л", + "г", + "з", + "б", + "a", + "i", + "e", + "o", + "n", + "ц", + "ш", + ], + "Lithuanian": [ + "i", + "a", + "s", + "o", + "r", + "e", + "t", + "n", + "u", + "k", + "m", + "l", + "p", + "v", + "d", + "j", + "g", + "ė", + "b", + "y", + "ų", + "š", + "ž", + "c", + "ą", + "į", + ], + "Slovene": [ + "e", + "a", + "i", + "o", + "n", + "r", + "s", + "l", + "t", + "j", + "v", + "k", + "d", + "p", + "m", + "u", + "z", + "b", + "g", + "h", + "č", + "c", + "š", + "ž", + "f", + "y", + ], + "Slovak": [ + "o", + "a", + "e", + "n", + "i", + "r", + "v", + "t", + "s", + "l", + "k", + "d", + "m", + "p", + "u", + "c", + "h", + "j", + "b", + "z", + "á", + "y", + "ý", + "í", + "č", + "é", + ], + "Hebrew": [ + "י", + "ו", + "ה", + "ל", + "ר", + "ב", + "ת", + "מ", + "א", + "ש", + "נ", + "ע", + "ם", + "ד", + "ק", + "ח", + "פ", + "ס", + "כ", + "ג", + "ט", + "צ", + "ן", + "ז", + "ך", + ], + "Bulgarian": [ + "а", + "и", + "о", + "е", + "н", + "т", + "р", + "с", + "в", + "л", + "к", + "д", + "п", + "м", + "з", + "г", + "я", + "ъ", + "у", + "б", + "ч", + "ц", + "й", + "ж", + "щ", + "х", + ], + "Croatian": [ + "a", + "i", + "o", + "e", + "n", + "r", + "j", + "s", + "t", + "u", + "k", + "l", + "v", + "d", + "m", + "p", + "g", + "z", + "b", + "c", + "č", + "h", + "š", + "ž", + "ć", + "f", + ], + "Hindi": [ + "क", + "र", + "स", + "न", + "त", + "म", + "ह", + "प", + "य", + "ल", + "व", + "ज", + "द", + "ग", + "ब", + "श", + "ट", + "अ", + "ए", + "थ", + "भ", + "ड", + "च", + "ध", + "ष", + "इ", + ], + "Estonian": [ + "a", + "i", + "e", + "s", + "t", + "l", + "u", + "n", + "o", + "k", + "r", + "d", + "m", + "v", + "g", + "p", + "j", + "h", + "ä", + "b", + "õ", + "ü", + "f", + "c", + "ö", + "y", + ], + "Thai": [ + "า", + "น", + "ร", + "อ", + "ก", + "เ", + "ง", + "ม", + "ย", + "ล", + "ว", + "ด", + "ท", + "ส", + "ต", + "ะ", + "ป", + "บ", + "ค", + "ห", + "แ", + "จ", + "พ", + "ช", + "ข", + "ใ", + ], + "Greek": [ + "α", + "τ", + "ο", + "ι", + "ε", + "ν", + "ρ", + "σ", + "κ", + "η", + "π", + "ς", + "υ", + "μ", + "λ", + "ί", + "ό", + "ά", + "γ", + "έ", + "δ", + "ή", + "ω", + "χ", + "θ", + "ύ", + ], + "Tamil": [ + "க", + "த", + "ப", + "ட", + "ர", + "ம", + "ல", + "ன", + "வ", + "ற", + "ய", + "ள", + "ச", + "ந", + "இ", + "ண", + "அ", + "ஆ", + "ழ", + "ங", + "எ", + "உ", + "ஒ", + "ஸ", + ], + "Kazakh": [ + "а", + "ы", + "е", + "н", + "т", + "р", + "л", + "і", + "д", + "с", + "м", + "қ", + "к", + "о", + "б", + "и", + "у", + "ғ", + "ж", + "ң", + "з", + "ш", + "й", + "п", + "г", + "ө", + ], +} + +LANGUAGE_SUPPORTED_COUNT: int = len(FREQUENCIES) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py new file mode 100644 index 00000000..360a3107 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any +from warnings import warn + +from .api import from_bytes +from .constant import CHARDET_CORRESPONDENCE, TOO_SMALL_SEQUENCE + +# TODO: remove this check when dropping Python 3.7 support +if TYPE_CHECKING: + from typing_extensions import TypedDict + + class ResultDict(TypedDict): + encoding: str | None + language: str + confidence: float | None + + +def detect( + byte_str: bytes, should_rename_legacy: bool = False, **kwargs: Any +) -> ResultDict: + """ + chardet legacy method + Detect the encoding of the given byte string. It should be mostly backward-compatible. + Encoding name will match Chardet own writing whenever possible. (Not on encoding name unsupported by it) + This function is deprecated and should be used to migrate your project easily, consult the documentation for + further information. Not planned for removal. + + :param byte_str: The byte sequence to examine. + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + """ + if len(kwargs): + warn( + f"charset-normalizer disregard arguments '{','.join(list(kwargs.keys()))}' in legacy function detect()" + ) + + if not isinstance(byte_str, (bytearray, bytes)): + raise TypeError( # pragma: nocover + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + + if isinstance(byte_str, bytearray): + byte_str = bytes(byte_str) + + r = from_bytes(byte_str).best() + + encoding = r.encoding if r is not None else None + language = r.language if r is not None and r.language != "Unknown" else "" + confidence = 1.0 - r.chaos if r is not None else None + + # automatically lower confidence + # on small bytes samples. + # https://github.com/jawah/charset_normalizer/issues/391 + if ( + confidence is not None + and confidence >= 0.9 + and encoding + not in { + "utf_8", + "ascii", + } + and r.bom is False # type: ignore[union-attr] + and len(byte_str) < TOO_SMALL_SEQUENCE + ): + confidence -= 0.2 + + # Note: CharsetNormalizer does not return 'UTF-8-SIG' as the sig get stripped in the detection/normalization process + # but chardet does return 'utf-8-sig' and it is a valid codec name. + if r is not None and encoding == "utf_8" and r.bom: + encoding += "_sig" + + if should_rename_legacy is False and encoding in CHARDET_CORRESPONDENCE: + encoding = CHARDET_CORRESPONDENCE[encoding] + + return { + "encoding": encoding, + "language": language, + "confidence": confidence, + } diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..857d7474b7a5a0c5b81989346cf9d845174eed68 GIT binary patch literal 15912 zcmeHOYit}>6~4QU>E?m$LY@oYG8fH%?PpH|zK{20L*b8?}nUc)T;Vx7vp_ zJDb`eKqMy>CXHA{LZ}r#0^~&LRv*U3__xR5SCETnl^2!0!op{a?ZWy ztjCjenjZ)um}~8vbH4MsbLP(Y&hEWm?iuKfMk0b+m3Ts|NJ7L((fkNoAht)WhvQb! zC~eoRsBYnk)e2%N>XeK*q>5z5nbt>@9aF~9Pv+BMFr zKkVn7HZJ=xClVVaZaY{txamg||OF#AUa zP1|vu$z;xR+>ybqR5s&`SmP;2=_+f?#EfN5Br{ejdDIa@v;CQ*XQplB($iUptjJ*2 z&O@M~*#qOxI0?_}bG%N^a}RoMGBXKqmo=RO1H^~2$qaNrm_xH>w_~MJ*#yTm%_N35 zMJhQy?M=CkW$U@D-hy%hx!s~~pnqSN*`~MY?RdJ8Rew<_sXCzMm%#Eh$!|%*@QI4w zE4ASJmhZDT)wM|XCF6qd>j9kQH}MAg@=SNPA+)S(xNeUDRxm-rqq4~;L`SAz_E5) z95|GxP`A8Pg0}rNlyM5ZyeQ?Lpo~-AfdJQZ6(CkxnyB5@z2cAOf4pNm_=^0eMvb|SD_|*%`K#V02>mN~-77u~ z-74B}xLo~DP(}_z?s9(gUw#&p)SprCI$tBiK`3fN@tvD+M$qpG<8=EE05#@cH|8%E ze~j?_&y7=6Cl_Yc8*{~oF<<5FGEQFe9tTVGH|F0hE~43~QE~FOGaHP#zkt!G@N|r~ z87@%6p~I!6f-(Qc;*894Eq@8o)`dfdFHY#S+fHDaFpe?b-4rVxl)->|>t_=y>ca9N zz`?FO4$4wGYDU0$LEso@OtO6~HQMy85`Z}8;4_mFGK(Uxsvf%~5o5{A4 z4Ufe-8k3c5I7dIN2d-pO&1|BT~yj)>SSTH*@faoZ*Fy9M93N-M-Oz+m3;^Mn*fq++snE+)5_0?L^eI0ay-X|T>}*@a5F>Fv|QJkHJyy-&WZ`wN;{^VPp4%{9@l0J=im1j&$xD=z)OvW#?_TYpk)$!oQ&+u=!)H-5UKXyE){> z3*LWGdBX|Ihi`9uRQO#Qr?5Vj6?{85`zB zmi>9Y69)`qvp>(%nBsHM-zZ!eGJwN568rPKi0NjsfAQ`|>|b1s&7-o;cS|6uvpc06xnTJZVT10VFC0Ss%x^V;&mpZ*E({F%bYzA}## z2cq9!BR{6oeq-QCU8Y|O`1AaMX+Chl*q_6m2>A2=U8ekg!1h>cfBPy3n4*nAjToXw z87Ip1<8GY+9C^Ne$24Wgv`LBOV=(_&(D?n&YRZ&pL5bxf=V#z0U~rDb_6w{`OWnY@#lEI1_s9-`|~`A_qFo=RjwQ7 z<#F&P`1Te z=8?VyAIwkY2+79&_I>1=QG3!MEJMsOGUtCXyU)Rnj6U u@x2+}Rr$R6`HSzLeD2Ca9f$A-PH3+O@&`mY{jcPI?{4M4A>a@Y#lHYyFIRj3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.py new file mode 100644 index 00000000..12ce024b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md.py @@ -0,0 +1,635 @@ +from __future__ import annotations + +from functools import lru_cache +from logging import getLogger + +from .constant import ( + COMMON_SAFE_ASCII_CHARACTERS, + TRACE, + UNICODE_SECONDARY_RANGE_KEYWORD, +) +from .utils import ( + is_accentuated, + is_arabic, + is_arabic_isolated_form, + is_case_variable, + is_cjk, + is_emoticon, + is_hangul, + is_hiragana, + is_katakana, + is_latin, + is_punctuation, + is_separator, + is_symbol, + is_thai, + is_unprintable, + remove_accent, + unicode_range, + is_cjk_uncommon, +) + + +class MessDetectorPlugin: + """ + Base abstract class used for mess detection plugins. + All detectors MUST extend and implement given methods. + """ + + def eligible(self, character: str) -> bool: + """ + Determine if given character should be fed in. + """ + raise NotImplementedError # pragma: nocover + + def feed(self, character: str) -> None: + """ + The main routine to be executed upon character. + Insert the logic in witch the text would be considered chaotic. + """ + raise NotImplementedError # pragma: nocover + + def reset(self) -> None: # pragma: no cover + """ + Permit to reset the plugin to the initial state. + """ + raise NotImplementedError + + @property + def ratio(self) -> float: + """ + Compute the chaos ratio based on what your feed() has seen. + Must NOT be lower than 0.; No restriction gt 0. + """ + raise NotImplementedError # pragma: nocover + + +class TooManySymbolOrPunctuationPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._punctuation_count: int = 0 + self._symbol_count: int = 0 + self._character_count: int = 0 + + self._last_printable_char: str | None = None + self._frenzy_symbol_in_word: bool = False + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character != self._last_printable_char + and character not in COMMON_SAFE_ASCII_CHARACTERS + ): + if is_punctuation(character): + self._punctuation_count += 1 + elif ( + character.isdigit() is False + and is_symbol(character) + and is_emoticon(character) is False + ): + self._symbol_count += 2 + + self._last_printable_char = character + + def reset(self) -> None: # Abstract + self._punctuation_count = 0 + self._character_count = 0 + self._symbol_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + ratio_of_punctuation: float = ( + self._punctuation_count + self._symbol_count + ) / self._character_count + + return ratio_of_punctuation if ratio_of_punctuation >= 0.3 else 0.0 + + +class TooManyAccentuatedPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._accentuated_count: int = 0 + + def eligible(self, character: str) -> bool: + return character.isalpha() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_accentuated(character): + self._accentuated_count += 1 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._accentuated_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + ratio_of_accentuation: float = self._accentuated_count / self._character_count + return ratio_of_accentuation if ratio_of_accentuation >= 0.35 else 0.0 + + +class UnprintablePlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._unprintable_count: int = 0 + self._character_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if is_unprintable(character): + self._unprintable_count += 1 + self._character_count += 1 + + def reset(self) -> None: # Abstract + self._unprintable_count = 0 + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._unprintable_count * 8) / self._character_count + + +class SuspiciousDuplicateAccentPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._successive_count: int = 0 + self._character_count: int = 0 + + self._last_latin_character: str | None = None + + def eligible(self, character: str) -> bool: + return character.isalpha() and is_latin(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + if ( + self._last_latin_character is not None + and is_accentuated(character) + and is_accentuated(self._last_latin_character) + ): + if character.isupper() and self._last_latin_character.isupper(): + self._successive_count += 1 + # Worse if its the same char duplicated with different accent. + if remove_accent(character) == remove_accent(self._last_latin_character): + self._successive_count += 1 + self._last_latin_character = character + + def reset(self) -> None: # Abstract + self._successive_count = 0 + self._character_count = 0 + self._last_latin_character = None + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return (self._successive_count * 2) / self._character_count + + +class SuspiciousRange(MessDetectorPlugin): + def __init__(self) -> None: + self._suspicious_successive_range_count: int = 0 + self._character_count: int = 0 + self._last_printable_seen: str | None = None + + def eligible(self, character: str) -> bool: + return character.isprintable() + + def feed(self, character: str) -> None: + self._character_count += 1 + + if ( + character.isspace() + or is_punctuation(character) + or character in COMMON_SAFE_ASCII_CHARACTERS + ): + self._last_printable_seen = None + return + + if self._last_printable_seen is None: + self._last_printable_seen = character + return + + unicode_range_a: str | None = unicode_range(self._last_printable_seen) + unicode_range_b: str | None = unicode_range(character) + + if is_suspiciously_successive_range(unicode_range_a, unicode_range_b): + self._suspicious_successive_range_count += 1 + + self._last_printable_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._suspicious_successive_range_count = 0 + self._last_printable_seen = None + + @property + def ratio(self) -> float: + if self._character_count <= 13: + return 0.0 + + ratio_of_suspicious_range_usage: float = ( + self._suspicious_successive_range_count * 2 + ) / self._character_count + + return ratio_of_suspicious_range_usage + + +class SuperWeirdWordPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._word_count: int = 0 + self._bad_word_count: int = 0 + self._foreign_long_count: int = 0 + + self._is_current_word_bad: bool = False + self._foreign_long_watch: bool = False + + self._character_count: int = 0 + self._bad_character_count: int = 0 + + self._buffer: str = "" + self._buffer_accent_count: int = 0 + self._buffer_glyph_count: int = 0 + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + if character.isalpha(): + self._buffer += character + if is_accentuated(character): + self._buffer_accent_count += 1 + if ( + self._foreign_long_watch is False + and (is_latin(character) is False or is_accentuated(character)) + and is_cjk(character) is False + and is_hangul(character) is False + and is_katakana(character) is False + and is_hiragana(character) is False + and is_thai(character) is False + ): + self._foreign_long_watch = True + if ( + is_cjk(character) + or is_hangul(character) + or is_katakana(character) + or is_hiragana(character) + or is_thai(character) + ): + self._buffer_glyph_count += 1 + return + if not self._buffer: + return + if ( + character.isspace() or is_punctuation(character) or is_separator(character) + ) and self._buffer: + self._word_count += 1 + buffer_length: int = len(self._buffer) + + self._character_count += buffer_length + + if buffer_length >= 4: + if self._buffer_accent_count / buffer_length >= 0.5: + self._is_current_word_bad = True + # Word/Buffer ending with an upper case accentuated letter are so rare, + # that we will consider them all as suspicious. Same weight as foreign_long suspicious. + elif ( + is_accentuated(self._buffer[-1]) + and self._buffer[-1].isupper() + and all(_.isupper() for _ in self._buffer) is False + ): + self._foreign_long_count += 1 + self._is_current_word_bad = True + elif self._buffer_glyph_count == 1: + self._is_current_word_bad = True + self._foreign_long_count += 1 + if buffer_length >= 24 and self._foreign_long_watch: + camel_case_dst = [ + i + for c, i in zip(self._buffer, range(0, buffer_length)) + if c.isupper() + ] + probable_camel_cased: bool = False + + if camel_case_dst and (len(camel_case_dst) / buffer_length <= 0.3): + probable_camel_cased = True + + if not probable_camel_cased: + self._foreign_long_count += 1 + self._is_current_word_bad = True + + if self._is_current_word_bad: + self._bad_word_count += 1 + self._bad_character_count += len(self._buffer) + self._is_current_word_bad = False + + self._foreign_long_watch = False + self._buffer = "" + self._buffer_accent_count = 0 + self._buffer_glyph_count = 0 + elif ( + character not in {"<", ">", "-", "=", "~", "|", "_"} + and character.isdigit() is False + and is_symbol(character) + ): + self._is_current_word_bad = True + self._buffer += character + + def reset(self) -> None: # Abstract + self._buffer = "" + self._is_current_word_bad = False + self._foreign_long_watch = False + self._bad_word_count = 0 + self._word_count = 0 + self._character_count = 0 + self._bad_character_count = 0 + self._foreign_long_count = 0 + + @property + def ratio(self) -> float: + if self._word_count <= 10 and self._foreign_long_count == 0: + return 0.0 + + return self._bad_character_count / self._character_count + + +class CjkUncommonPlugin(MessDetectorPlugin): + """ + Detect messy CJK text that probably means nothing. + """ + + def __init__(self) -> None: + self._character_count: int = 0 + self._uncommon_count: int = 0 + + def eligible(self, character: str) -> bool: + return is_cjk(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_cjk_uncommon(character): + self._uncommon_count += 1 + return + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._uncommon_count = 0 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + uncommon_form_usage: float = self._uncommon_count / self._character_count + + # we can be pretty sure it's garbage when uncommon characters are widely + # used. otherwise it could just be traditional chinese for example. + return uncommon_form_usage / 10 if uncommon_form_usage > 0.5 else 0.0 + + +class ArchaicUpperLowerPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._buf: bool = False + + self._character_count_since_last_sep: int = 0 + + self._successive_upper_lower_count: int = 0 + self._successive_upper_lower_count_final: int = 0 + + self._character_count: int = 0 + + self._last_alpha_seen: str | None = None + self._current_ascii_only: bool = True + + def eligible(self, character: str) -> bool: + return True + + def feed(self, character: str) -> None: + is_concerned = character.isalpha() and is_case_variable(character) + chunk_sep = is_concerned is False + + if chunk_sep and self._character_count_since_last_sep > 0: + if ( + self._character_count_since_last_sep <= 64 + and character.isdigit() is False + and self._current_ascii_only is False + ): + self._successive_upper_lower_count_final += ( + self._successive_upper_lower_count + ) + + self._successive_upper_lower_count = 0 + self._character_count_since_last_sep = 0 + self._last_alpha_seen = None + self._buf = False + self._character_count += 1 + self._current_ascii_only = True + + return + + if self._current_ascii_only is True and character.isascii() is False: + self._current_ascii_only = False + + if self._last_alpha_seen is not None: + if (character.isupper() and self._last_alpha_seen.islower()) or ( + character.islower() and self._last_alpha_seen.isupper() + ): + if self._buf is True: + self._successive_upper_lower_count += 2 + self._buf = False + else: + self._buf = True + else: + self._buf = False + + self._character_count += 1 + self._character_count_since_last_sep += 1 + self._last_alpha_seen = character + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._character_count_since_last_sep = 0 + self._successive_upper_lower_count = 0 + self._successive_upper_lower_count_final = 0 + self._last_alpha_seen = None + self._buf = False + self._current_ascii_only = True + + @property + def ratio(self) -> float: + if self._character_count == 0: + return 0.0 + + return self._successive_upper_lower_count_final / self._character_count + + +class ArabicIsolatedFormPlugin(MessDetectorPlugin): + def __init__(self) -> None: + self._character_count: int = 0 + self._isolated_form_count: int = 0 + + def reset(self) -> None: # Abstract + self._character_count = 0 + self._isolated_form_count = 0 + + def eligible(self, character: str) -> bool: + return is_arabic(character) + + def feed(self, character: str) -> None: + self._character_count += 1 + + if is_arabic_isolated_form(character): + self._isolated_form_count += 1 + + @property + def ratio(self) -> float: + if self._character_count < 8: + return 0.0 + + isolated_form_usage: float = self._isolated_form_count / self._character_count + + return isolated_form_usage + + +@lru_cache(maxsize=1024) +def is_suspiciously_successive_range( + unicode_range_a: str | None, unicode_range_b: str | None +) -> bool: + """ + Determine if two Unicode range seen next to each other can be considered as suspicious. + """ + if unicode_range_a is None or unicode_range_b is None: + return True + + if unicode_range_a == unicode_range_b: + return False + + if "Latin" in unicode_range_a and "Latin" in unicode_range_b: + return False + + if "Emoticons" in unicode_range_a or "Emoticons" in unicode_range_b: + return False + + # Latin characters can be accompanied with a combining diacritical mark + # eg. Vietnamese. + if ("Latin" in unicode_range_a or "Latin" in unicode_range_b) and ( + "Combining" in unicode_range_a or "Combining" in unicode_range_b + ): + return False + + keywords_range_a, keywords_range_b = ( + unicode_range_a.split(" "), + unicode_range_b.split(" "), + ) + + for el in keywords_range_a: + if el in UNICODE_SECONDARY_RANGE_KEYWORD: + continue + if el in keywords_range_b: + return False + + # Japanese Exception + range_a_jp_chars, range_b_jp_chars = ( + unicode_range_a + in ( + "Hiragana", + "Katakana", + ), + unicode_range_b in ("Hiragana", "Katakana"), + ) + if (range_a_jp_chars or range_b_jp_chars) and ( + "CJK" in unicode_range_a or "CJK" in unicode_range_b + ): + return False + if range_a_jp_chars and range_b_jp_chars: + return False + + if "Hangul" in unicode_range_a or "Hangul" in unicode_range_b: + if "CJK" in unicode_range_a or "CJK" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + # Chinese/Japanese use dedicated range for punctuation and/or separators. + if ("CJK" in unicode_range_a or "CJK" in unicode_range_b) or ( + unicode_range_a in ["Katakana", "Hiragana"] + and unicode_range_b in ["Katakana", "Hiragana"] + ): + if "Punctuation" in unicode_range_a or "Punctuation" in unicode_range_b: + return False + if "Forms" in unicode_range_a or "Forms" in unicode_range_b: + return False + if unicode_range_a == "Basic Latin" or unicode_range_b == "Basic Latin": + return False + + return True + + +@lru_cache(maxsize=2048) +def mess_ratio( + decoded_sequence: str, maximum_threshold: float = 0.2, debug: bool = False +) -> float: + """ + Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier. + """ + + detectors: list[MessDetectorPlugin] = [ + md_class() for md_class in MessDetectorPlugin.__subclasses__() + ] + + length: int = len(decoded_sequence) + 1 + + mean_mess_ratio: float = 0.0 + + if length < 512: + intermediary_mean_mess_ratio_calc: int = 32 + elif length <= 1024: + intermediary_mean_mess_ratio_calc = 64 + else: + intermediary_mean_mess_ratio_calc = 128 + + for character, index in zip(decoded_sequence + "\n", range(length)): + for detector in detectors: + if detector.eligible(character): + detector.feed(character) + + if ( + index > 0 and index % intermediary_mean_mess_ratio_calc == 0 + ) or index == length - 1: + mean_mess_ratio = sum(dt.ratio for dt in detectors) + + if mean_mess_ratio >= maximum_threshold: + break + + if debug: + logger = getLogger("charset_normalizer") + + logger.log( + TRACE, + "Mess-detector extended-analysis start. " + f"intermediary_mean_mess_ratio_calc={intermediary_mean_mess_ratio_calc} mean_mess_ratio={mean_mess_ratio} " + f"maximum_threshold={maximum_threshold}", + ) + + if len(decoded_sequence) > 16: + logger.log(TRACE, f"Starting with: {decoded_sequence[:16]}") + logger.log(TRACE, f"Ending with: {decoded_sequence[-16::]}") + + for dt in detectors: + logger.log(TRACE, f"{dt.__class__}: {dt.ratio}") + + return round(mean_mess_ratio, 3) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md__mypyc.cpython-312-x86_64-linux-gnu.so b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/md__mypyc.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..b21e77b522ce460c689d283cd4387a97e4d6ee7a GIT binary patch literal 290584 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 atVq$C}Kp=3Au6~ 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 bool: + if not isinstance(other, CharsetMatch): + if isinstance(other, str): + return iana_name(other) == self.encoding + return False + return self.encoding == other.encoding and self.fingerprint == other.fingerprint + + def __lt__(self, other: object) -> bool: + """ + Implemented to make sorted available upon CharsetMatches items. + """ + if not isinstance(other, CharsetMatch): + raise ValueError + + chaos_difference: float = abs(self.chaos - other.chaos) + coherence_difference: float = abs(self.coherence - other.coherence) + + # Below 1% difference --> Use Coherence + if chaos_difference < 0.01 and coherence_difference > 0.02: + return self.coherence > other.coherence + elif chaos_difference < 0.01 and coherence_difference <= 0.02: + # When having a difficult decision, use the result that decoded as many multi-byte as possible. + # preserve RAM usage! + if len(self._payload) >= TOO_BIG_SEQUENCE: + return self.chaos < other.chaos + return self.multi_byte_usage > other.multi_byte_usage + + return self.chaos < other.chaos + + @property + def multi_byte_usage(self) -> float: + return 1.0 - (len(str(self)) / len(self.raw)) + + def __str__(self) -> str: + # Lazy Str Loading + if self._string is None: + self._string = str(self._payload, self._encoding, "strict") + return self._string + + def __repr__(self) -> str: + return f"" + + def add_submatch(self, other: CharsetMatch) -> None: + if not isinstance(other, CharsetMatch) or other == self: + raise ValueError( + "Unable to add instance <{}> as a submatch of a CharsetMatch".format( + other.__class__ + ) + ) + + other._string = None # Unload RAM usage; dirty trick. + self._leaves.append(other) + + @property + def encoding(self) -> str: + return self._encoding + + @property + def encoding_aliases(self) -> list[str]: + """ + Encoding name are known by many name, using this could help when searching for IBM855 when it's listed as CP855. + """ + also_known_as: list[str] = [] + for u, p in aliases.items(): + if self.encoding == u: + also_known_as.append(p) + elif self.encoding == p: + also_known_as.append(u) + return also_known_as + + @property + def bom(self) -> bool: + return self._has_sig_or_bom + + @property + def byte_order_mark(self) -> bool: + return self._has_sig_or_bom + + @property + def languages(self) -> list[str]: + """ + Return the complete list of possible languages found in decoded sequence. + Usually not really useful. Returned list may be empty even if 'language' property return something != 'Unknown'. + """ + return [e[0] for e in self._languages] + + @property + def language(self) -> str: + """ + Most probable language found in decoded sequence. If none were detected or inferred, the property will return + "Unknown". + """ + if not self._languages: + # Trying to infer the language based on the given encoding + # Its either English or we should not pronounce ourselves in certain cases. + if "ascii" in self.could_be_from_charset: + return "English" + + # doing it there to avoid circular import + from charset_normalizer.cd import encoding_languages, mb_encoding_languages + + languages = ( + mb_encoding_languages(self.encoding) + if is_multi_byte_encoding(self.encoding) + else encoding_languages(self.encoding) + ) + + if len(languages) == 0 or "Latin Based" in languages: + return "Unknown" + + return languages[0] + + return self._languages[0][0] + + @property + def chaos(self) -> float: + return self._mean_mess_ratio + + @property + def coherence(self) -> float: + if not self._languages: + return 0.0 + return self._languages[0][1] + + @property + def percent_chaos(self) -> float: + return round(self.chaos * 100, ndigits=3) + + @property + def percent_coherence(self) -> float: + return round(self.coherence * 100, ndigits=3) + + @property + def raw(self) -> bytes: + """ + Original untouched bytes. + """ + return self._payload + + @property + def submatch(self) -> list[CharsetMatch]: + return self._leaves + + @property + def has_submatch(self) -> bool: + return len(self._leaves) > 0 + + @property + def alphabets(self) -> list[str]: + if self._unicode_ranges is not None: + return self._unicode_ranges + # list detected ranges + detected_ranges: list[str | None] = [unicode_range(char) for char in str(self)] + # filter and sort + self._unicode_ranges = sorted(list({r for r in detected_ranges if r})) + return self._unicode_ranges + + @property + def could_be_from_charset(self) -> list[str]: + """ + The complete list of encoding that output the exact SAME str result and therefore could be the originating + encoding. + This list does include the encoding available in property 'encoding'. + """ + return [self._encoding] + [m.encoding for m in self._leaves] + + def output(self, encoding: str = "utf_8") -> bytes: + """ + Method to get re-encoded bytes payload using given target encoding. Default to UTF-8. + Any errors will be simply ignored by the encoder NOT replaced. + """ + if self._output_encoding is None or self._output_encoding != encoding: + self._output_encoding = encoding + decoded_string = str(self) + if ( + self._preemptive_declaration is not None + and self._preemptive_declaration.lower() + not in ["utf-8", "utf8", "utf_8"] + ): + patched_header = sub( + RE_POSSIBLE_ENCODING_INDICATION, + lambda m: m.string[m.span()[0] : m.span()[1]].replace( + m.groups()[0], + iana_name(self._output_encoding).replace("_", "-"), # type: ignore[arg-type] + ), + decoded_string[:8192], + count=1, + ) + + decoded_string = patched_header + decoded_string[8192:] + + self._output_payload = decoded_string.encode(encoding, "replace") + + return self._output_payload # type: ignore + + @property + def fingerprint(self) -> str: + """ + Retrieve the unique SHA256 computed using the transformed (re-encoded) payload. Not the original one. + """ + return sha256(self.output()).hexdigest() + + +class CharsetMatches: + """ + Container with every CharsetMatch items ordered by default from most probable to the less one. + Act like a list(iterable) but does not implements all related methods. + """ + + def __init__(self, results: list[CharsetMatch] | None = None): + self._results: list[CharsetMatch] = sorted(results) if results else [] + + def __iter__(self) -> Iterator[CharsetMatch]: + yield from self._results + + def __getitem__(self, item: int | str) -> CharsetMatch: + """ + Retrieve a single item either by its position or encoding name (alias may be used here). + Raise KeyError upon invalid index or encoding not present in results. + """ + if isinstance(item, int): + return self._results[item] + if isinstance(item, str): + item = iana_name(item, False) + for result in self._results: + if item in result.could_be_from_charset: + return result + raise KeyError + + def __len__(self) -> int: + return len(self._results) + + def __bool__(self) -> bool: + return len(self._results) > 0 + + def append(self, item: CharsetMatch) -> None: + """ + Insert a single match. Will be inserted accordingly to preserve sort. + Can be inserted as a submatch. + """ + if not isinstance(item, CharsetMatch): + raise ValueError( + "Cannot append instance '{}' to CharsetMatches".format( + str(item.__class__) + ) + ) + # We should disable the submatch factoring when the input file is too heavy (conserve RAM usage) + if len(item.raw) < TOO_BIG_SEQUENCE: + for match in self._results: + if match.fingerprint == item.fingerprint and match.chaos == item.chaos: + match.add_submatch(item) + return + self._results.append(item) + self._results = sorted(self._results) + + def best(self) -> CharsetMatch | None: + """ + Simply return the first match. Strict equivalent to matches[0]. + """ + if not self._results: + return None + return self._results[0] + + def first(self) -> CharsetMatch | None: + """ + Redundant method, call the method best(). Kept for BC reasons. + """ + return self.best() + + +CoherenceMatch = Tuple[str, float] +CoherenceMatches = List[CoherenceMatch] + + +class CliDetectionResult: + def __init__( + self, + path: str, + encoding: str | None, + encoding_aliases: list[str], + alternative_encodings: list[str], + language: str, + alphabets: list[str], + has_sig_or_bom: bool, + chaos: float, + coherence: float, + unicode_path: str | None, + is_preferred: bool, + ): + self.path: str = path + self.unicode_path: str | None = unicode_path + self.encoding: str | None = encoding + self.encoding_aliases: list[str] = encoding_aliases + self.alternative_encodings: list[str] = alternative_encodings + self.language: str = language + self.alphabets: list[str] = alphabets + self.has_sig_or_bom: bool = has_sig_or_bom + self.chaos: float = chaos + self.coherence: float = coherence + self.is_preferred: bool = is_preferred + + @property + def __dict__(self) -> dict[str, Any]: # type: ignore + return { + "path": self.path, + "encoding": self.encoding, + "encoding_aliases": self.encoding_aliases, + "alternative_encodings": self.alternative_encodings, + "language": self.language, + "alphabets": self.alphabets, + "has_sig_or_bom": self.has_sig_or_bom, + "chaos": self.chaos, + "coherence": self.coherence, + "unicode_path": self.unicode_path, + "is_preferred": self.is_preferred, + } + + def to_json(self) -> str: + return dumps(self.__dict__, ensure_ascii=True, indent=4) diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/py.typed b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/utils.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/utils.py new file mode 100644 index 00000000..6bf0384c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/utils.py @@ -0,0 +1,414 @@ +from __future__ import annotations + +import importlib +import logging +import unicodedata +from codecs import IncrementalDecoder +from encodings.aliases import aliases +from functools import lru_cache +from re import findall +from typing import Generator + +from _multibytecodec import ( # type: ignore[import-not-found,import] + MultibyteIncrementalDecoder, +) + +from .constant import ( + ENCODING_MARKS, + IANA_SUPPORTED_SIMILAR, + RE_POSSIBLE_ENCODING_INDICATION, + UNICODE_RANGES_COMBINED, + UNICODE_SECONDARY_RANGE_KEYWORD, + UTF8_MAXIMAL_ALLOCATION, + COMMON_CJK_CHARACTERS, +) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_accentuated(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return ( + "WITH GRAVE" in description + or "WITH ACUTE" in description + or "WITH CEDILLA" in description + or "WITH DIAERESIS" in description + or "WITH CIRCUMFLEX" in description + or "WITH TILDE" in description + or "WITH MACRON" in description + or "WITH RING ABOVE" in description + ) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def remove_accent(character: str) -> str: + decomposed: str = unicodedata.decomposition(character) + if not decomposed: + return character + + codes: list[str] = decomposed.split(" ") + + return chr(int(codes[0], 16)) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def unicode_range(character: str) -> str | None: + """ + Retrieve the Unicode range official name from a single character. + """ + character_ord: int = ord(character) + + for range_name, ord_range in UNICODE_RANGES_COMBINED.items(): + if character_ord in ord_range: + return range_name + + return None + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_latin(character: str) -> bool: + try: + description: str = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + return "LATIN" in description + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_punctuation(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "P" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Punctuation" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_symbol(character: str) -> bool: + character_category: str = unicodedata.category(character) + + if "S" in character_category or "N" in character_category: + return True + + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Forms" in character_range and character_category != "Lo" + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_emoticon(character: str) -> bool: + character_range: str | None = unicode_range(character) + + if character_range is None: + return False + + return "Emoticons" in character_range or "Pictographs" in character_range + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_separator(character: str) -> bool: + if character.isspace() or character in {"|", "+", "<", ">"}: + return True + + character_category: str = unicodedata.category(character) + + return "Z" in character_category or character_category in {"Po", "Pd", "Pc"} + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_case_variable(character: str) -> bool: + return character.islower() != character.isupper() + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "CJK" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hiragana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HIRAGANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_katakana(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "KATAKANA" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_hangul(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "HANGUL" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_thai(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "THAI" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_arabic_isolated_form(character: str) -> bool: + try: + character_name = unicodedata.name(character) + except ValueError: # Defensive: unicode database outdated? + return False + + return "ARABIC" in character_name and "ISOLATED FORM" in character_name + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_cjk_uncommon(character: str) -> bool: + return character not in COMMON_CJK_CHARACTERS + + +@lru_cache(maxsize=len(UNICODE_RANGES_COMBINED)) +def is_unicode_range_secondary(range_name: str) -> bool: + return any(keyword in range_name for keyword in UNICODE_SECONDARY_RANGE_KEYWORD) + + +@lru_cache(maxsize=UTF8_MAXIMAL_ALLOCATION) +def is_unprintable(character: str) -> bool: + return ( + character.isspace() is False # includes \n \t \r \v + and character.isprintable() is False + and character != "\x1a" # Why? Its the ASCII substitute character. + and character != "\ufeff" # bug discovered in Python, + # Zero Width No-Break Space located in Arabic Presentation Forms-B, Unicode 1.1 not acknowledged as space. + ) + + +def any_specified_encoding(sequence: bytes, search_zone: int = 8192) -> str | None: + """ + Extract using ASCII-only decoder any specified encoding in the first n-bytes. + """ + if not isinstance(sequence, bytes): + raise TypeError + + seq_len: int = len(sequence) + + results: list[str] = findall( + RE_POSSIBLE_ENCODING_INDICATION, + sequence[: min(seq_len, search_zone)].decode("ascii", errors="ignore"), + ) + + if len(results) == 0: + return None + + for specified_encoding in results: + specified_encoding = specified_encoding.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if encoding_alias == specified_encoding: + return encoding_iana + if encoding_iana == specified_encoding: + return encoding_iana + + return None + + +@lru_cache(maxsize=128) +def is_multi_byte_encoding(name: str) -> bool: + """ + Verify is a specific encoding is a multi byte one based on it IANA name + """ + return name in { + "utf_8", + "utf_8_sig", + "utf_16", + "utf_16_be", + "utf_16_le", + "utf_32", + "utf_32_le", + "utf_32_be", + "utf_7", + } or issubclass( + importlib.import_module(f"encodings.{name}").IncrementalDecoder, + MultibyteIncrementalDecoder, + ) + + +def identify_sig_or_bom(sequence: bytes) -> tuple[str | None, bytes]: + """ + Identify and extract SIG/BOM in given sequence. + """ + + for iana_encoding in ENCODING_MARKS: + marks: bytes | list[bytes] = ENCODING_MARKS[iana_encoding] + + if isinstance(marks, bytes): + marks = [marks] + + for mark in marks: + if sequence.startswith(mark): + return iana_encoding, mark + + return None, b"" + + +def should_strip_sig_or_bom(iana_encoding: str) -> bool: + return iana_encoding not in {"utf_16", "utf_32"} + + +def iana_name(cp_name: str, strict: bool = True) -> str: + """Returns the Python normalized encoding name (Not the IANA official name).""" + cp_name = cp_name.lower().replace("-", "_") + + encoding_alias: str + encoding_iana: str + + for encoding_alias, encoding_iana in aliases.items(): + if cp_name in [encoding_alias, encoding_iana]: + return encoding_iana + + if strict: + raise ValueError(f"Unable to retrieve IANA for '{cp_name}'") + + return cp_name + + +def cp_similarity(iana_name_a: str, iana_name_b: str) -> float: + if is_multi_byte_encoding(iana_name_a) or is_multi_byte_encoding(iana_name_b): + return 0.0 + + decoder_a = importlib.import_module(f"encodings.{iana_name_a}").IncrementalDecoder + decoder_b = importlib.import_module(f"encodings.{iana_name_b}").IncrementalDecoder + + id_a: IncrementalDecoder = decoder_a(errors="ignore") + id_b: IncrementalDecoder = decoder_b(errors="ignore") + + character_match_count: int = 0 + + for i in range(255): + to_be_decoded: bytes = bytes([i]) + if id_a.decode(to_be_decoded) == id_b.decode(to_be_decoded): + character_match_count += 1 + + return character_match_count / 254 + + +def is_cp_similar(iana_name_a: str, iana_name_b: str) -> bool: + """ + Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using + the function cp_similarity. + """ + return ( + iana_name_a in IANA_SUPPORTED_SIMILAR + and iana_name_b in IANA_SUPPORTED_SIMILAR[iana_name_a] + ) + + +def set_logging_handler( + name: str = "charset_normalizer", + level: int = logging.INFO, + format_string: str = "%(asctime)s | %(levelname)s | %(message)s", +) -> None: + logger = logging.getLogger(name) + logger.setLevel(level) + + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(format_string)) + logger.addHandler(handler) + + +def cut_sequence_chunks( + sequences: bytes, + encoding_iana: str, + offsets: range, + chunk_size: int, + bom_or_sig_available: bool, + strip_sig_or_bom: bool, + sig_payload: bytes, + is_multi_byte_decoder: bool, + decoded_payload: str | None = None, +) -> Generator[str, None, None]: + if decoded_payload and is_multi_byte_decoder is False: + for i in offsets: + chunk = decoded_payload[i : i + chunk_size] + if not chunk: + break + yield chunk + else: + for i in offsets: + chunk_end = i + chunk_size + if chunk_end > len(sequences) + 8: + continue + + cut_sequence = sequences[i : i + chunk_size] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode( + encoding_iana, + errors="ignore" if is_multi_byte_decoder else "strict", + ) + + # multi-byte bad cutting detector and adjustment + # not the cleanest way to perform that fix but clever enough for now. + if is_multi_byte_decoder and i > 0: + chunk_partial_size_chk: int = min(chunk_size, 16) + + if ( + decoded_payload + and chunk[:chunk_partial_size_chk] not in decoded_payload + ): + for j in range(i, i - 4, -1): + cut_sequence = sequences[j:chunk_end] + + if bom_or_sig_available and strip_sig_or_bom is False: + cut_sequence = sig_payload + cut_sequence + + chunk = cut_sequence.decode(encoding_iana, errors="ignore") + + if chunk[:chunk_partial_size_chk] in decoded_payload: + break + + yield chunk diff --git a/Backend/venv/lib/python3.12/site-packages/charset_normalizer/version.py b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/version.py new file mode 100644 index 00000000..c843e533 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/charset_normalizer/version.py @@ -0,0 +1,8 @@ +""" +Expose version +""" + +from __future__ import annotations + +__version__ = "3.4.4" +VERSION = __version__.split(".") diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA new file mode 100644 index 00000000..b31773e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/METADATA @@ -0,0 +1,133 @@ +Metadata-Version: 2.4 +Name: requests +Version: 2.32.5 +Summary: Python HTTP for Humans. +Home-page: https://requests.readthedocs.io +Author: Kenneth Reitz +Author-email: me@kennethreitz.org +License: Apache-2.0 +Project-URL: Documentation, https://requests.readthedocs.io +Project-URL: Source, https://github.com/psf/requests +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Natural Language :: English +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Software Development :: Libraries +Requires-Python: >=3.9 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: charset_normalizer<4,>=2 +Requires-Dist: idna<4,>=2.5 +Requires-Dist: urllib3<3,>=1.21.1 +Requires-Dist: certifi>=2017.4.17 +Provides-Extra: security +Provides-Extra: socks +Requires-Dist: PySocks!=1.5.7,>=1.5.6; extra == "socks" +Provides-Extra: use-chardet-on-py3 +Requires-Dist: chardet<6,>=3.0.2; extra == "use-chardet-on-py3" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + +# Requests + +**Requests** is a simple, yet elegant, HTTP library. + +```python +>>> import requests +>>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass')) +>>> r.status_code +200 +>>> r.headers['content-type'] +'application/json; charset=utf8' +>>> r.encoding +'utf-8' +>>> r.text +'{"authenticated": true, ...' +>>> r.json() +{'authenticated': True, ...} +``` + +Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method! + +Requests is one of the most downloaded Python packages today, pulling in around `30M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `1,000,000+` repositories. You may certainly put your trust in this code. + +[![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests) +[![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests) +[![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/requests/graphs/contributors) + +## Installing Requests and Supported Versions + +Requests is available on PyPI: + +```console +$ python -m pip install requests +``` + +Requests officially supports Python 3.9+. + +## Supported Features & Best–Practices + +Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today. + +- Keep-Alive & Connection Pooling +- International Domains and URLs +- Sessions with Cookie Persistence +- Browser-style TLS/SSL Verification +- Basic & Digest Authentication +- Familiar `dict`–like Cookies +- Automatic Content Decompression and Decoding +- Multi-part File Uploads +- SOCKS Proxy Support +- Connection Timeouts +- Streaming Downloads +- Automatic honoring of `.netrc` +- Chunked HTTP Requests + +## API Reference and User Guide available on [Read the Docs](https://requests.readthedocs.io) + +[![Read the Docs](https://raw.githubusercontent.com/psf/requests/main/ext/ss.png)](https://requests.readthedocs.io) + +## Cloning the repository + +When cloning the Requests repository, you may need to add the `-c +fetch.fsck.badTimezone=ignore` flag to avoid an error about a bad commit timestamp (see +[this issue](https://github.com/psf/requests/issues/2690) for more background): + +```shell +git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git +``` + +You can also apply this setting to your global Git config: + +```shell +git config --global fetch.fsck.badTimezone ignore +``` + +--- + +[![Kenneth Reitz](https://raw.githubusercontent.com/psf/requests/main/ext/kr.png)](https://kennethreitz.org) [![Python Software Foundation](https://raw.githubusercontent.com/psf/requests/main/ext/psf.png)](https://www.python.org/psf) diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD new file mode 100644 index 00000000..59022919 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/RECORD @@ -0,0 +1,42 @@ +requests-2.32.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +requests-2.32.5.dist-info/METADATA,sha256=ZbWgjagfSRVRPnYJZf8Ut1GPZbe7Pv4NqzZLvMTUDLA,4945 +requests-2.32.5.dist-info/RECORD,, +requests-2.32.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91 +requests-2.32.5.dist-info/licenses/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142 +requests-2.32.5.dist-info/top_level.txt,sha256=fMSVmHfb5rbGOo6xv-O_tUX6j-WyixssE-SnwcDRxNQ,9 +requests/__init__.py,sha256=4xaAERmPDIBPsa2PsjpU9r06yooK-2mZKHTZAhWRWts,5072 +requests/__pycache__/__init__.cpython-312.pyc,, +requests/__pycache__/__version__.cpython-312.pyc,, +requests/__pycache__/_internal_utils.cpython-312.pyc,, +requests/__pycache__/adapters.cpython-312.pyc,, +requests/__pycache__/api.cpython-312.pyc,, +requests/__pycache__/auth.cpython-312.pyc,, +requests/__pycache__/certs.cpython-312.pyc,, +requests/__pycache__/compat.cpython-312.pyc,, +requests/__pycache__/cookies.cpython-312.pyc,, +requests/__pycache__/exceptions.cpython-312.pyc,, +requests/__pycache__/help.cpython-312.pyc,, +requests/__pycache__/hooks.cpython-312.pyc,, +requests/__pycache__/models.cpython-312.pyc,, +requests/__pycache__/packages.cpython-312.pyc,, +requests/__pycache__/sessions.cpython-312.pyc,, +requests/__pycache__/status_codes.cpython-312.pyc,, +requests/__pycache__/structures.cpython-312.pyc,, +requests/__pycache__/utils.cpython-312.pyc,, +requests/__version__.py,sha256=QKDceK8K_ujqwDDc3oYrR0odOBYgKVOQQ5vFap_G_cg,435 +requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495 +requests/adapters.py,sha256=8nX113gbb123aUtx2ETkAN_6IsYX-M2fRoLGluTEcRk,26285 +requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449 +requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186 +requests/certs.py,sha256=Z9Sb410Anv6jUFTyss0jFFhU6xst8ctELqfy8Ev23gw,429 +requests/compat.py,sha256=J7sIjR6XoDGp5JTVzOxkK5fSoUVUa_Pjc7iRZhAWGmI,2142 +requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590 +requests/exceptions.py,sha256=jJPS1UWATs86ShVUaLorTiJb1SaGuoNEWgICJep-VkY,4260 +requests/help.py,sha256=gPX5d_H7Xd88aDABejhqGgl9B1VFRTt5BmiYvL3PzIQ,3875 +requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 +requests/models.py,sha256=MjZdZ4k7tnw-1nz5PKShjmPmqyk0L6DciwnFngb_Vk4,35510 +requests/packages.py,sha256=_g0gZ681UyAlKHRjH6kanbaoxx2eAb6qzcXiODyTIoc,904 +requests/sessions.py,sha256=Cl1dpEnOfwrzzPbku-emepNeN4Rt_0_58Iy2x-JGTm8,30503 +requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322 +requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 +requests/utils.py,sha256=WqU86rZ3wvhC-tQjWcjtH_HEKZwWB3iWCZV6SW5DEdQ,33213 diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL new file mode 100644 index 00000000..e7fa31b6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (80.9.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE new file mode 100644 index 00000000..67db8588 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/licenses/LICENSE @@ -0,0 +1,175 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests-2.32.5.dist-info/top_level.txt @@ -0,0 +1 @@ +requests diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__init__.py b/Backend/venv/lib/python3.12/site-packages/requests/__init__.py new file mode 100644 index 00000000..051cda13 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/__init__.py @@ -0,0 +1,184 @@ +# __ +# /__) _ _ _ _ _/ _ +# / ( (- (/ (/ (- _) / _) +# / + +""" +Requests HTTP Library +~~~~~~~~~~~~~~~~~~~~~ + +Requests is an HTTP library, written in Python, for human beings. +Basic GET usage: + + >>> import requests + >>> r = requests.get('https://www.python.org') + >>> r.status_code + 200 + >>> b'Python is a programming language' in r.content + True + +... or POST: + + >>> payload = dict(key1='value1', key2='value2') + >>> r = requests.post('https://httpbin.org/post', data=payload) + >>> print(r.text) + { + ... + "form": { + "key1": "value1", + "key2": "value2" + }, + ... + } + +The other HTTP methods are supported - see `requests.api`. Full documentation +is at . + +:copyright: (c) 2017 by Kenneth Reitz. +:license: Apache 2.0, see LICENSE for more details. +""" + +import warnings + +import urllib3 + +from .exceptions import RequestsDependencyWarning + +try: + from charset_normalizer import __version__ as charset_normalizer_version +except ImportError: + charset_normalizer_version = None + +try: + from chardet import __version__ as chardet_version +except ImportError: + chardet_version = None + + +def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version): + urllib3_version = urllib3_version.split(".") + assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git. + + # Sometimes, urllib3 only reports its version as 16.1. + if len(urllib3_version) == 2: + urllib3_version.append("0") + + # Check urllib3 for compatibility. + major, minor, patch = urllib3_version # noqa: F811 + major, minor, patch = int(major), int(minor), int(patch) + # urllib3 >= 1.21.1 + assert major >= 1 + if major == 1: + assert minor >= 21 + + # Check charset_normalizer for compatibility. + if chardet_version: + major, minor, patch = chardet_version.split(".")[:3] + major, minor, patch = int(major), int(minor), int(patch) + # chardet_version >= 3.0.2, < 6.0.0 + assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0) + elif charset_normalizer_version: + major, minor, patch = charset_normalizer_version.split(".")[:3] + major, minor, patch = int(major), int(minor), int(patch) + # charset_normalizer >= 2.0.0 < 4.0.0 + assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0) + else: + warnings.warn( + "Unable to find acceptable character detection dependency " + "(chardet or charset_normalizer).", + RequestsDependencyWarning, + ) + + +def _check_cryptography(cryptography_version): + # cryptography < 1.3.4 + try: + cryptography_version = list(map(int, cryptography_version.split("."))) + except ValueError: + return + + if cryptography_version < [1, 3, 4]: + warning = "Old version of cryptography ({}) may cause slowdown.".format( + cryptography_version + ) + warnings.warn(warning, RequestsDependencyWarning) + + +# Check imported dependencies for compatibility. +try: + check_compatibility( + urllib3.__version__, chardet_version, charset_normalizer_version + ) +except (AssertionError, ValueError): + warnings.warn( + "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported " + "version!".format( + urllib3.__version__, chardet_version, charset_normalizer_version + ), + RequestsDependencyWarning, + ) + +# Attempt to enable urllib3's fallback for SNI support +# if the standard library doesn't support SNI or the +# 'ssl' library isn't available. +try: + try: + import ssl + except ImportError: + ssl = None + + if not getattr(ssl, "HAS_SNI", False): + from urllib3.contrib import pyopenssl + + pyopenssl.inject_into_urllib3() + + # Check cryptography version + from cryptography import __version__ as cryptography_version + + _check_cryptography(cryptography_version) +except ImportError: + pass + +# urllib3's DependencyWarnings should be silenced. +from urllib3.exceptions import DependencyWarning + +warnings.simplefilter("ignore", DependencyWarning) + +# Set default logging handler to avoid "No handler found" warnings. +import logging +from logging import NullHandler + +from . import packages, utils +from .__version__ import ( + __author__, + __author_email__, + __build__, + __cake__, + __copyright__, + __description__, + __license__, + __title__, + __url__, + __version__, +) +from .api import delete, get, head, options, patch, post, put, request +from .exceptions import ( + ConnectionError, + ConnectTimeout, + FileModeWarning, + HTTPError, + JSONDecodeError, + ReadTimeout, + RequestException, + Timeout, + TooManyRedirects, + URLRequired, +) +from .models import PreparedRequest, Request, Response +from .sessions import Session, session +from .status_codes import codes + +logging.getLogger(__name__).addHandler(NullHandler()) + +# FileModeWarnings go off per the default. +warnings.simplefilter("default", FileModeWarning, append=True) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5873e4fce07e6698b7147f8bf73fdee60d58ebd GIT binary patch literal 5420 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/_internal_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19bcb39b6f2923811ed67ba04d64a7458c738fb8 GIT binary patch literal 2024 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a07a0b45ee2ce7fc97aaa0cbfc051338d7f2b127 GIT binary patch literal 7204 zcmeHM&u<&Y72YLRzeqc7o!E(!)ScEqDB2X)mh3ns9NDrYS56ICh~y%6Q)rjFLvgL; zF1xc7O;>4rNP+g!=Fq}A6on2w*vQ3)9`Zl*LZJnm620|MH%`PcYat+6E z02j>)oSmJSoq6-#_ul(v^@rWNQwlEkUoShy4k*fB>7jik;>zX)RBkG^az(LKJK?I8 z#Fd1q*vSu+D@l8o-S>fdMYH?y)MpQ%?6-H@gJ>H--w^JDxTkO*veW2IHMHz=*MFM| z_>XE_gd%TNozzddu2gEF>nVV!o5(iu*})p@mp+S?tDI#Dp-EC5jacb zu)v0`EE_#~Y?Kun?0ekvcv!}8C%m3d6zii*ER;#%^u zQdhH@`R^e`nS_vGP_v*X)3dQX&qj?EEY}pGV8nW3r{c=E0qrqdg{m2t6;^?^e7g|e zrAA2I9f??!Pxj46Q{^IO>^e{6$F%{M3F3!gT<}S4>6AP0w z)C-*(#?4j+n!gR?}3)}*`^!A0vk)r2CxfKB<_|*_bGu7bx9FO49AmD13ZHUgHj!DsUylZefA1&o1yubtLLJ%r5Z|(%ST*i znRg_JG~5=fEl|<78&ZB4=8F@Xj) zht!6V@yrU(6j;YPBau~vVE|wR-XHf2k*IplFtSlNskxy8Jcf*WmTwb;fI8o_Bft{O z3`0&W-@}}i>9Hb*%Z`r7CiD+yXoQp_C*^LK!{~pJtq ztyy*|u8DCY+Gi}kG)PB$IX^j?1f!fKP8Fu>`t`+t+fIPhdY$O3@4MXe@@!h_O}8B( z^@l{E$2mf$q@W`o=yQ|`^e6@Blr$i4G%5Tr&!%|EgcnI|8OB0TO#vshL?vO zWQhtu8O4vP8J2seg$uCB30ACmHn5Cs)&zf~ej`qRwYXX7*{eg5@to-j*diz84Y;U+ zdTjZ1-EmzK#HmzZO-SxGnC;g+3Vu8ee=(A1d)ud>rN0GF5qD;Kt9|`HL=9tLQxHl5XJTgJpsY1 z05HY`wLL5%OqYbY#0!P!fwA%NapI^xB7OUXSoze0CiZ5hBOi|#&cGi?)^ZqDMM2l; zUUa;?A1vuhJj`T!r-+|A^0FU{9zFWQaoLB=ojMba4DUh&p(xB8%rx5mP8`DF1jz zRZ@HJ4jtGSI`GG#SMDil--NnW|76d>pVfc){?FfU?m4qwx^rk_&zX<+qxdXI{h!HE z_htD&3}T{R?>nCSeczh{vpr0m_A8k>L#3Ok+v=)P0>@re9W~4xSq$6<(2ffVz!yojc2B?0qR ze?-`Cs}d8yEg>`5Lj|2m1;H4DgI&}@kdehWb-jWD*x9e_dj7)`Ylk+{C)Z2O^vOH@ zs5P~do9I@o&bbT^9VEPphn+}paQ>o`7f_J6{%H&WkHtCbDdXT7vco{cQbh1IsO5Gd zvVc@R9X;E+e;)OK3i=Wt_M?FA_mb|vvu16ibL-zn(bRIm*U|NGwVy%HO(^+lw^7hW z7kyROI_idGc6rgUxRmHJjb<))IcQ87WR!kN9{OaKK^}@jG+6yMS|S;-=ZC~4RvctN z>{c`+t&$jKH zYiY!=k#$m#Jr*j8>o34&q8l|Yq9LH-9qP%TxS`zJuk@wwYWp^{ea-!uTl@Z`>3>P@ z{qXg*v5j!hktu|-LqLH($|D+T$Rlwgd70X&Si(|H3?Q{gj_(L29ccl`Bhn-;DK`QQcL-EpANc_Sdot_~i zCabkDkZ_X;G^Q}JVJC$-2)qPTtl-zCFcNu^!i=p?HPd6a&TXW}n%dYG$K9X1aYtwE zuVP^P+YxdueIftcUsj(XA_k7VAGNXfJ%BZxGsT#5b>C8v@{ zqz8kiqJNr=2d|+6-mi!PihD^_RsWtCRJDJ;pr|k2?;lYo)J;Q8t8d(Ybx0k#|I#k? X@aDl?>KT>F<5ax9d2mRL`22qWp!Hmw literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/auth.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc7525b7c4ee1afddd5d94202c04acf633d09130 GIT binary patch literal 13923 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/cookies.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42b4c0eb6781f988d830ffa89ed600066f6f9d2e GIT binary patch literal 25276 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 a^FI5u;`_G!j|ks;#Qmhr`hBa2^8WxGbDkFf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31a19b0839e15a94029a074e3786af04124036bd GIT binary patch literal 7585 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/help.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a7717c568db2e07864519897472a2ad9b05c1fb GIT binary patch literal 4327 zcmbUkZEO?Cb=JGK*Nzh>aUAF4;;a+EY(i{G_(&twsFmpHq^jykhg5z*brMt{m7o1tr2E%DcA&CZKt($GgZ}aXtq@hEzL{MIlY`#T zv3EY+yf^R7n>X*h`Aci77eUGVt4|sBBlHy+Gzw>Tp1pw1=SV^cBr%dB!z38mIuZ`r zvI&;9T!N#mGvTDIE8&t@iOaaNe8R&Zk45cGclY}|A-SRMlz6BEa+l;;-ii?B9Y_w`umxmL!BKDwBe`W0!cJJnk??+mKHYg1ont>j zXPMV#d@!?b!wg6VG;Q#;!{-N#{S6G!dp>$hlkyo^NNcK*QdC7<5a#m>0+w?cHiShv zlaujQU5q^;;>)Ro63VTWZ=kp=RNGw#7koY!G5v zmSDWGH1@lSil8g1hhP&$%EIx2v8btn zlFeo0tPBQgfCUOERT6A#jCs8Rl;c=iQ6yQI*K9&Hm6a(TS;fW`v@>sClrEFbV+>p} z1p(((ay4SYAq@-ixfBs#n*h9jY>PA=``-50xS$YWGa0x(M1H!+$5FyOx>tzWxY2Dw z)E0q2Ez0PsE&9ntMHkNG)imAOSq(4i!n~{-&CJM#j~9*?_6mwB?4fF%&qc5g%azmYI4HQp!!BOe5kjtbD7-jVsUBYzRS}-}XgY*2y zt1IL2G$Q5#hb!VoiXEf89O)Y5{8b!65G}cTXmNRlnhiXO6nB0=45MkOj zuYNX{-2#>MrE%xiqon8GeIY`_??s4d6$S5n%VIYp5KbsabAPzn5aTXWYLvLf==xg*OUUD`04L@Qs=P*fxL?0$cjr*Z8z1Ct$$i7T}UI#alTu;Z$9t)6OOkrI%lHky?sf==7 z#w2H(g`90}ZrXI`aR!{txalT%l5CirZy@lcaUo}D3pkZqESQ`ksVS3hxFNCAk|;vN zB1$yfvvX4zLxdp5hDA~l(eWs$MxX)=n?Fm0=$<`3H3OaG>8TTQM`mY|GpCLnm^xv) z7i5U@2FBY6;TR!gVXK%Vmu7o|e?vo}*KBRXgCzClfekL10)6(5EtJqVcWX`fY<*ZG zh$D^jpo?@gE5t(a5UtQI-c024zd9QV)ye6S48-A0LaJ4UJSnBM*keYok|3t3wAXLkIu-lXB!R zp!In#w$;7J)A`w+%lobm{K;`A@Pj(*=yjF3V4b(%JFg7f0{A$NE7tf~{XJRLxKm-HtV0v_T zoh6rLNMKxwDnXJuBXXvbt^mo2uBoO|%4c&rCT8^qga@Iqtt|`BJp4Y4OYrH$J(tj9 z&hzP}UyuB1)&{N@nuOB%y(qUeI(WlaiKBCNVKp>&ovWJrWt{ z<+N@(F>~v>?;<^N=gpQQS@Nc|oC0+Ke)|^2$m0_$^Yl(z_k24cqn?9ofQn1xAh{nf zKTKfjTYAaw%hE^eemnycM7jDOp{lbC!`wq-U!j)!$bTPs;ZOT*e@A0=j%C94xq&** zGJ*SCXPxJnz(Y=a=0naN7(aCh%wgu~A!dScJzZfO%mi3C=eu}*jqSb1@xMG&XA#%; zqMl_D4<^Pi;acy&8rMyjhW`z?7Bo<6>%4H700Rvm%kWkqT3zr$$s{BA4BS}dvYs#JIauHv}N-9?Cl8#>i+`gAS0^) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/hooks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f5a16806f8a62786011e417d8087a38c3abb0f8 GIT binary patch literal 1052 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/packages.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0df0291cb5e8517637c3abf5a9c88fb611eb961c GIT binary patch literal 1139 zcmb7BOH30{6uoa|+K&AI;b*1R7)ex8=_pO`!)HMeOi&WTLeoT=q4Q{mPCI4Z0M-?R zO(ji)6%ayTIff0c+`4x|CB!l=jSF@K5*Ms|W7~uX5xt8y_no=to^$W}?D05(hVrvT z&anXBtxGlRmE^dD0G2@l2`LZ(iIG?ZrI-kVK;ru0)fhm8WdL)S-J+FN(3@?moC0RM z%ZMGrL`?-e^{H}br!Lxw$2?|}w*g2K<|i6X6;@Kru7PA*XR17c^8WKXWBv-|oc~X< zV}1?R8OvL~hl9Mt0cPgrF*DJ4Rx{$F6J6|ItoV2R)xYci{72l_een!*SH82pu}gAn zF=d=?_8V;p2r7PavQ7H#;zdeJsyI${Y?ld#^#n2sq;QRK0Z$;nb$JVC)X^%|a> z!bB&*j2KIbaZG|5XYp!GmSl-(kEyAQsQ<=HN2SJeMx$~nqiT9IYT6YwCMv|_6q)Fz zBc)1H3MM8?6Vpj_QPatctS3x98cmBSY%wSp$GYh*_rOxrs&!~Mqlhv59*!;hC!<0_ zO<^IPel7H4lGN3V@I=+I(%z@4NjV)C`lw-?mV{}Xo)+j-LME#x)O09#uR|cRj@zpf z3Dp^eDiX|OPx$V#)n3g@<*Z$iW_p%bgwQu|{s3Re33aVUU`K;!c5vT&WApy5H!wFa z|0MUKz%?D(p{{W;ygaltv|D@q2pHQS%CSXP&El}kC7Uf=QM$R%vl8AIUL7{ZjhEZcjqbgx4~o8P8(phio21|ih($ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/sessions.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d14aba12876d5dda1c4e2f010ed2b08fea4f08eb GIT binary patch literal 27890 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/status_codes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64a9d48da64f632800db02788ae0c0d268b5ca69 GIT binary patch literal 6031 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/requests/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3842540a340cef5c98ac0d694c136bf7b569fe6 GIT binary patch literal 36178 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 "(typing.Dict[str, typing.Any], typing.Dict[str, typing.Any])": + host_params = {} + pool_kwargs = {} + parsed_request_url = urlparse(request.url) + scheme = parsed_request_url.scheme.lower() + port = parsed_request_url.port + + cert_reqs = "CERT_REQUIRED" + if verify is False: + cert_reqs = "CERT_NONE" + elif isinstance(verify, str): + if not os.path.isdir(verify): + pool_kwargs["ca_certs"] = verify + else: + pool_kwargs["ca_cert_dir"] = verify + pool_kwargs["cert_reqs"] = cert_reqs + if client_cert is not None: + if isinstance(client_cert, tuple) and len(client_cert) == 2: + pool_kwargs["cert_file"] = client_cert[0] + pool_kwargs["key_file"] = client_cert[1] + else: + # According to our docs, we allow users to specify just the client + # cert path + pool_kwargs["cert_file"] = client_cert + host_params = { + "scheme": scheme, + "host": parsed_request_url.hostname, + "port": port, + } + return host_params, pool_kwargs + + +class BaseAdapter: + """The Base Transport Adapter""" + + def __init__(self): + super().__init__() + + def send( + self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None + ): + """Sends PreparedRequest object. Returns Response object. + + :param request: The :class:`PreparedRequest ` being sent. + :param stream: (optional) Whether to stream the request content. + :param timeout: (optional) How long to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use + :param cert: (optional) Any user-provided SSL certificate to be trusted. + :param proxies: (optional) The proxies dictionary to apply to the request. + """ + raise NotImplementedError + + def close(self): + """Cleans up adapter specific items.""" + raise NotImplementedError + + +class HTTPAdapter(BaseAdapter): + """The built-in HTTP Adapter for urllib3. + + Provides a general-case interface for Requests sessions to contact HTTP and + HTTPS urls by implementing the Transport Adapter interface. This class will + usually be created by the :class:`Session ` class under the + covers. + + :param pool_connections: The number of urllib3 connection pools to cache. + :param pool_maxsize: The maximum number of connections to save in the pool. + :param max_retries: The maximum number of retries each connection + should attempt. Note, this applies only to failed DNS lookups, socket + connections and connection timeouts, never to requests where data has + made it to the server. By default, Requests does not retry failed + connections. If you need granular control over the conditions under + which we retry a request, import urllib3's ``Retry`` class and pass + that instead. + :param pool_block: Whether the connection pool should block for connections. + + Usage:: + + >>> import requests + >>> s = requests.Session() + >>> a = requests.adapters.HTTPAdapter(max_retries=3) + >>> s.mount('http://', a) + """ + + __attrs__ = [ + "max_retries", + "config", + "_pool_connections", + "_pool_maxsize", + "_pool_block", + ] + + def __init__( + self, + pool_connections=DEFAULT_POOLSIZE, + pool_maxsize=DEFAULT_POOLSIZE, + max_retries=DEFAULT_RETRIES, + pool_block=DEFAULT_POOLBLOCK, + ): + if max_retries == DEFAULT_RETRIES: + self.max_retries = Retry(0, read=False) + else: + self.max_retries = Retry.from_int(max_retries) + self.config = {} + self.proxy_manager = {} + + super().__init__() + + self._pool_connections = pool_connections + self._pool_maxsize = pool_maxsize + self._pool_block = pool_block + + self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) + + def __getstate__(self): + return {attr: getattr(self, attr, None) for attr in self.__attrs__} + + def __setstate__(self, state): + # Can't handle by adding 'proxy_manager' to self.__attrs__ because + # self.poolmanager uses a lambda function, which isn't pickleable. + self.proxy_manager = {} + self.config = {} + + for attr, value in state.items(): + setattr(self, attr, value) + + self.init_poolmanager( + self._pool_connections, self._pool_maxsize, block=self._pool_block + ) + + def init_poolmanager( + self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs + ): + """Initializes a urllib3 PoolManager. + + This method should not be called from user code, and is only + exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param connections: The number of urllib3 connection pools to cache. + :param maxsize: The maximum number of connections to save in the pool. + :param block: Block when no free connections are available. + :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. + """ + # save these values for pickling + self._pool_connections = connections + self._pool_maxsize = maxsize + self._pool_block = block + + self.poolmanager = PoolManager( + num_pools=connections, + maxsize=maxsize, + block=block, + **pool_kwargs, + ) + + def proxy_manager_for(self, proxy, **proxy_kwargs): + """Return urllib3 ProxyManager for the given proxy. + + This method should not be called from user code, and is only + exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param proxy: The proxy to return a urllib3 ProxyManager for. + :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. + :returns: ProxyManager + :rtype: urllib3.ProxyManager + """ + if proxy in self.proxy_manager: + manager = self.proxy_manager[proxy] + elif proxy.lower().startswith("socks"): + username, password = get_auth_from_url(proxy) + manager = self.proxy_manager[proxy] = SOCKSProxyManager( + proxy, + username=username, + password=password, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block, + **proxy_kwargs, + ) + else: + proxy_headers = self.proxy_headers(proxy) + manager = self.proxy_manager[proxy] = proxy_from_url( + proxy, + proxy_headers=proxy_headers, + num_pools=self._pool_connections, + maxsize=self._pool_maxsize, + block=self._pool_block, + **proxy_kwargs, + ) + + return manager + + def cert_verify(self, conn, url, verify, cert): + """Verify a SSL certificate. This method should not be called from user + code, and is only exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param conn: The urllib3 connection object associated with the cert. + :param url: The requested URL. + :param verify: Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use + :param cert: The SSL certificate to verify. + """ + if url.lower().startswith("https") and verify: + cert_loc = None + + # Allow self-specified cert location. + if verify is not True: + cert_loc = verify + + if not cert_loc: + cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH) + + if not cert_loc or not os.path.exists(cert_loc): + raise OSError( + f"Could not find a suitable TLS CA certificate bundle, " + f"invalid path: {cert_loc}" + ) + + conn.cert_reqs = "CERT_REQUIRED" + + if not os.path.isdir(cert_loc): + conn.ca_certs = cert_loc + else: + conn.ca_cert_dir = cert_loc + else: + conn.cert_reqs = "CERT_NONE" + conn.ca_certs = None + conn.ca_cert_dir = None + + if cert: + if not isinstance(cert, basestring): + conn.cert_file = cert[0] + conn.key_file = cert[1] + else: + conn.cert_file = cert + conn.key_file = None + if conn.cert_file and not os.path.exists(conn.cert_file): + raise OSError( + f"Could not find the TLS certificate file, " + f"invalid path: {conn.cert_file}" + ) + if conn.key_file and not os.path.exists(conn.key_file): + raise OSError( + f"Could not find the TLS key file, invalid path: {conn.key_file}" + ) + + def build_response(self, req, resp): + """Builds a :class:`Response ` object from a urllib3 + response. This should not be called from user code, and is only exposed + for use when subclassing the + :class:`HTTPAdapter ` + + :param req: The :class:`PreparedRequest ` used to generate the response. + :param resp: The urllib3 response object. + :rtype: requests.Response + """ + response = Response() + + # Fallback to None if there's no status_code, for whatever reason. + response.status_code = getattr(resp, "status", None) + + # Make headers case-insensitive. + response.headers = CaseInsensitiveDict(getattr(resp, "headers", {})) + + # Set encoding. + response.encoding = get_encoding_from_headers(response.headers) + response.raw = resp + response.reason = response.raw.reason + + if isinstance(req.url, bytes): + response.url = req.url.decode("utf-8") + else: + response.url = req.url + + # Add new cookies from the server. + extract_cookies_to_jar(response.cookies, req, resp) + + # Give the Response some context. + response.request = req + response.connection = self + + return response + + def build_connection_pool_key_attributes(self, request, verify, cert=None): + """Build the PoolKey attributes used by urllib3 to return a connection. + + This looks at the PreparedRequest, the user-specified verify value, + and the value of the cert parameter to determine what PoolKey values + to use to select a connection from a given urllib3 Connection Pool. + + The SSL related pool key arguments are not consistently set. As of + this writing, use the following to determine what keys may be in that + dictionary: + + * If ``verify`` is ``True``, ``"ssl_context"`` will be set and will be the + default Requests SSL Context + * If ``verify`` is ``False``, ``"ssl_context"`` will not be set but + ``"cert_reqs"`` will be set + * If ``verify`` is a string, (i.e., it is a user-specified trust bundle) + ``"ca_certs"`` will be set if the string is not a directory recognized + by :py:func:`os.path.isdir`, otherwise ``"ca_cert_dir"`` will be + set. + * If ``"cert"`` is specified, ``"cert_file"`` will always be set. If + ``"cert"`` is a tuple with a second item, ``"key_file"`` will also + be present + + To override these settings, one may subclass this class, call this + method and use the above logic to change parameters as desired. For + example, if one wishes to use a custom :py:class:`ssl.SSLContext` one + must both set ``"ssl_context"`` and based on what else they require, + alter the other keys to ensure the desired behaviour. + + :param request: + The PreparedReqest being sent over the connection. + :type request: + :class:`~requests.models.PreparedRequest` + :param verify: + Either a boolean, in which case it controls whether + we verify the server's TLS certificate, or a string, in which case it + must be a path to a CA bundle to use. + :param cert: + (optional) Any user-provided SSL certificate for client + authentication (a.k.a., mTLS). This may be a string (i.e., just + the path to a file which holds both certificate and key) or a + tuple of length 2 with the certificate file path and key file + path. + :returns: + A tuple of two dictionaries. The first is the "host parameters" + portion of the Pool Key including scheme, hostname, and port. The + second is a dictionary of SSLContext related parameters. + """ + return _urllib3_request_context(request, verify, cert, self.poolmanager) + + def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None): + """Returns a urllib3 connection for the given request and TLS settings. + This should not be called from user code, and is only exposed for use + when subclassing the :class:`HTTPAdapter `. + + :param request: + The :class:`PreparedRequest ` object to be sent + over the connection. + :param verify: + Either a boolean, in which case it controls whether we verify the + server's TLS certificate, or a string, in which case it must be a + path to a CA bundle to use. + :param proxies: + (optional) The proxies dictionary to apply to the request. + :param cert: + (optional) Any user-provided SSL certificate to be used for client + authentication (a.k.a., mTLS). + :rtype: + urllib3.ConnectionPool + """ + proxy = select_proxy(request.url, proxies) + try: + host_params, pool_kwargs = self.build_connection_pool_key_attributes( + request, + verify, + cert, + ) + except ValueError as e: + raise InvalidURL(e, request=request) + if proxy: + proxy = prepend_scheme_if_needed(proxy, "http") + proxy_url = parse_url(proxy) + if not proxy_url.host: + raise InvalidProxyURL( + "Please check proxy URL. It is malformed " + "and could be missing the host." + ) + proxy_manager = self.proxy_manager_for(proxy) + conn = proxy_manager.connection_from_host( + **host_params, pool_kwargs=pool_kwargs + ) + else: + # Only scheme should be lower case + conn = self.poolmanager.connection_from_host( + **host_params, pool_kwargs=pool_kwargs + ) + + return conn + + def get_connection(self, url, proxies=None): + """DEPRECATED: Users should move to `get_connection_with_tls_context` + for all subclasses of HTTPAdapter using Requests>=2.32.2. + + Returns a urllib3 connection for the given URL. This should not be + called from user code, and is only exposed for use when subclassing the + :class:`HTTPAdapter `. + + :param url: The URL to connect to. + :param proxies: (optional) A Requests-style dictionary of proxies used on this request. + :rtype: urllib3.ConnectionPool + """ + warnings.warn( + ( + "`get_connection` has been deprecated in favor of " + "`get_connection_with_tls_context`. Custom HTTPAdapter subclasses " + "will need to migrate for Requests>=2.32.2. Please see " + "https://github.com/psf/requests/pull/6710 for more details." + ), + DeprecationWarning, + ) + proxy = select_proxy(url, proxies) + + if proxy: + proxy = prepend_scheme_if_needed(proxy, "http") + proxy_url = parse_url(proxy) + if not proxy_url.host: + raise InvalidProxyURL( + "Please check proxy URL. It is malformed " + "and could be missing the host." + ) + proxy_manager = self.proxy_manager_for(proxy) + conn = proxy_manager.connection_from_url(url) + else: + # Only scheme should be lower case + parsed = urlparse(url) + url = parsed.geturl() + conn = self.poolmanager.connection_from_url(url) + + return conn + + def close(self): + """Disposes of any internal state. + + Currently, this closes the PoolManager and any active ProxyManager, + which closes any pooled connections. + """ + self.poolmanager.clear() + for proxy in self.proxy_manager.values(): + proxy.clear() + + def request_url(self, request, proxies): + """Obtain the url to use when making the final request. + + If the message is being sent through a HTTP proxy, the full URL has to + be used. Otherwise, we should only use the path portion of the URL. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param request: The :class:`PreparedRequest ` being sent. + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. + :rtype: str + """ + proxy = select_proxy(request.url, proxies) + scheme = urlparse(request.url).scheme + + is_proxied_http_request = proxy and scheme != "https" + using_socks_proxy = False + if proxy: + proxy_scheme = urlparse(proxy).scheme.lower() + using_socks_proxy = proxy_scheme.startswith("socks") + + url = request.path_url + if url.startswith("//"): # Don't confuse urllib3 + url = f"/{url.lstrip('/')}" + + if is_proxied_http_request and not using_socks_proxy: + url = urldefragauth(request.url) + + return url + + def add_headers(self, request, **kwargs): + """Add any headers needed by the connection. As of v2.0 this does + nothing by default, but is left for overriding by users that subclass + the :class:`HTTPAdapter `. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param request: The :class:`PreparedRequest ` to add headers to. + :param kwargs: The keyword arguments from the call to send(). + """ + pass + + def proxy_headers(self, proxy): + """Returns a dictionary of the headers to add to any request sent + through a proxy. This works with urllib3 magic to ensure that they are + correctly sent to the proxy, rather than in a tunnelled request if + CONNECT is being used. + + This should not be called from user code, and is only exposed for use + when subclassing the + :class:`HTTPAdapter `. + + :param proxy: The url of the proxy being used for this request. + :rtype: dict + """ + headers = {} + username, password = get_auth_from_url(proxy) + + if username: + headers["Proxy-Authorization"] = _basic_auth_str(username, password) + + return headers + + def send( + self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None + ): + """Sends PreparedRequest object. Returns Response object. + + :param request: The :class:`PreparedRequest ` being sent. + :param stream: (optional) Whether to stream the request content. + :param timeout: (optional) How long to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple or urllib3 Timeout object + :param verify: (optional) Either a boolean, in which case it controls whether + we verify the server's TLS certificate, or a string, in which case it + must be a path to a CA bundle to use + :param cert: (optional) Any user-provided SSL certificate to be trusted. + :param proxies: (optional) The proxies dictionary to apply to the request. + :rtype: requests.Response + """ + + try: + conn = self.get_connection_with_tls_context( + request, verify, proxies=proxies, cert=cert + ) + except LocationValueError as e: + raise InvalidURL(e, request=request) + + self.cert_verify(conn, request.url, verify, cert) + url = self.request_url(request, proxies) + self.add_headers( + request, + stream=stream, + timeout=timeout, + verify=verify, + cert=cert, + proxies=proxies, + ) + + chunked = not (request.body is None or "Content-Length" in request.headers) + + if isinstance(timeout, tuple): + try: + connect, read = timeout + timeout = TimeoutSauce(connect=connect, read=read) + except ValueError: + raise ValueError( + f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " + f"or a single float to set both timeouts to the same value." + ) + elif isinstance(timeout, TimeoutSauce): + pass + else: + timeout = TimeoutSauce(connect=timeout, read=timeout) + + try: + resp = conn.urlopen( + method=request.method, + url=url, + body=request.body, + headers=request.headers, + redirect=False, + assert_same_host=False, + preload_content=False, + decode_content=False, + retries=self.max_retries, + timeout=timeout, + chunked=chunked, + ) + + except (ProtocolError, OSError) as err: + raise ConnectionError(err, request=request) + + except MaxRetryError as e: + if isinstance(e.reason, ConnectTimeoutError): + # TODO: Remove this in 3.0.0: see #2811 + if not isinstance(e.reason, NewConnectionError): + raise ConnectTimeout(e, request=request) + + if isinstance(e.reason, ResponseError): + raise RetryError(e, request=request) + + if isinstance(e.reason, _ProxyError): + raise ProxyError(e, request=request) + + if isinstance(e.reason, _SSLError): + # This branch is for urllib3 v1.22 and later. + raise SSLError(e, request=request) + + raise ConnectionError(e, request=request) + + except ClosedPoolError as e: + raise ConnectionError(e, request=request) + + except _ProxyError as e: + raise ProxyError(e) + + except (_SSLError, _HTTPError) as e: + if isinstance(e, _SSLError): + # This branch is for urllib3 versions earlier than v1.22 + raise SSLError(e, request=request) + elif isinstance(e, ReadTimeoutError): + raise ReadTimeout(e, request=request) + elif isinstance(e, _InvalidHeader): + raise InvalidHeader(e, request=request) + else: + raise + + return self.build_response(request, resp) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/api.py b/Backend/venv/lib/python3.12/site-packages/requests/api.py new file mode 100644 index 00000000..59607445 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/api.py @@ -0,0 +1,157 @@ +""" +requests.api +~~~~~~~~~~~~ + +This module implements the Requests API. + +:copyright: (c) 2012 by Kenneth Reitz. +:license: Apache2, see LICENSE for more details. +""" + +from . import sessions + + +def request(method, url, **kwargs): + """Constructs and sends a :class:`Request `. + + :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``. + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the query string for the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. + :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. + :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. + ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` + or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string + defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers + to add for the file. + :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. + :param timeout: (optional) How many seconds to wait for the server to send data + before giving up, as a float, or a :ref:`(connect timeout, read + timeout) ` tuple. + :type timeout: float or tuple + :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. + :type allow_redirects: bool + :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use. Defaults to ``True``. + :param stream: (optional) if ``False``, the response content will be immediately downloaded. + :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. + :return: :class:`Response ` object + :rtype: requests.Response + + Usage:: + + >>> import requests + >>> req = requests.request('GET', 'https://httpbin.org/get') + >>> req + + """ + + # By using the 'with' statement we are sure the session is closed, thus we + # avoid leaving sockets open which can trigger a ResourceWarning in some + # cases, and look like a memory leak in others. + with sessions.Session() as session: + return session.request(method=method, url=url, **kwargs) + + +def get(url, params=None, **kwargs): + r"""Sends a GET request. + + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the query string for the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("get", url, params=params, **kwargs) + + +def options(url, **kwargs): + r"""Sends an OPTIONS request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("options", url, **kwargs) + + +def head(url, **kwargs): + r"""Sends a HEAD request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. If + `allow_redirects` is not provided, it will be set to `False` (as + opposed to the default :meth:`request` behavior). + :return: :class:`Response ` object + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", False) + return request("head", url, **kwargs) + + +def post(url, data=None, json=None, **kwargs): + r"""Sends a POST request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("post", url, data=data, json=json, **kwargs) + + +def put(url, data=None, **kwargs): + r"""Sends a PUT request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("put", url, data=data, **kwargs) + + +def patch(url, data=None, **kwargs): + r"""Sends a PATCH request. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("patch", url, data=data, **kwargs) + + +def delete(url, **kwargs): + r"""Sends a DELETE request. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :return: :class:`Response ` object + :rtype: requests.Response + """ + + return request("delete", url, **kwargs) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/auth.py b/Backend/venv/lib/python3.12/site-packages/requests/auth.py new file mode 100644 index 00000000..4a7ce6dc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/auth.py @@ -0,0 +1,314 @@ +""" +requests.auth +~~~~~~~~~~~~~ + +This module contains the authentication handlers for Requests. +""" + +import hashlib +import os +import re +import threading +import time +import warnings +from base64 import b64encode + +from ._internal_utils import to_native_string +from .compat import basestring, str, urlparse +from .cookies import extract_cookies_to_jar +from .utils import parse_dict_header + +CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded" +CONTENT_TYPE_MULTI_PART = "multipart/form-data" + + +def _basic_auth_str(username, password): + """Returns a Basic Auth string.""" + + # "I want us to put a big-ol' comment on top of it that + # says that this behaviour is dumb but we need to preserve + # it because people are relying on it." + # - Lukasa + # + # These are here solely to maintain backwards compatibility + # for things like ints. This will be removed in 3.0.0. + if not isinstance(username, basestring): + warnings.warn( + "Non-string usernames will no longer be supported in Requests " + "3.0.0. Please convert the object you've passed in ({!r}) to " + "a string or bytes object in the near future to avoid " + "problems.".format(username), + category=DeprecationWarning, + ) + username = str(username) + + if not isinstance(password, basestring): + warnings.warn( + "Non-string passwords will no longer be supported in Requests " + "3.0.0. Please convert the object you've passed in ({!r}) to " + "a string or bytes object in the near future to avoid " + "problems.".format(type(password)), + category=DeprecationWarning, + ) + password = str(password) + # -- End Removal -- + + if isinstance(username, str): + username = username.encode("latin1") + + if isinstance(password, str): + password = password.encode("latin1") + + authstr = "Basic " + to_native_string( + b64encode(b":".join((username, password))).strip() + ) + + return authstr + + +class AuthBase: + """Base class that all auth implementations derive from""" + + def __call__(self, r): + raise NotImplementedError("Auth hooks must be callable.") + + +class HTTPBasicAuth(AuthBase): + """Attaches HTTP Basic Authentication to the given Request object.""" + + def __init__(self, username, password): + self.username = username + self.password = password + + def __eq__(self, other): + return all( + [ + self.username == getattr(other, "username", None), + self.password == getattr(other, "password", None), + ] + ) + + def __ne__(self, other): + return not self == other + + def __call__(self, r): + r.headers["Authorization"] = _basic_auth_str(self.username, self.password) + return r + + +class HTTPProxyAuth(HTTPBasicAuth): + """Attaches HTTP Proxy Authentication to a given Request object.""" + + def __call__(self, r): + r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password) + return r + + +class HTTPDigestAuth(AuthBase): + """Attaches HTTP Digest Authentication to the given Request object.""" + + def __init__(self, username, password): + self.username = username + self.password = password + # Keep state in per-thread local storage + self._thread_local = threading.local() + + def init_per_thread_state(self): + # Ensure state is initialized just once per-thread + if not hasattr(self._thread_local, "init"): + self._thread_local.init = True + self._thread_local.last_nonce = "" + self._thread_local.nonce_count = 0 + self._thread_local.chal = {} + self._thread_local.pos = None + self._thread_local.num_401_calls = None + + def build_digest_header(self, method, url): + """ + :rtype: str + """ + + realm = self._thread_local.chal["realm"] + nonce = self._thread_local.chal["nonce"] + qop = self._thread_local.chal.get("qop") + algorithm = self._thread_local.chal.get("algorithm") + opaque = self._thread_local.chal.get("opaque") + hash_utf8 = None + + if algorithm is None: + _algorithm = "MD5" + else: + _algorithm = algorithm.upper() + # lambdas assume digest modules are imported at the top level + if _algorithm == "MD5" or _algorithm == "MD5-SESS": + + def md5_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.md5(x).hexdigest() + + hash_utf8 = md5_utf8 + elif _algorithm == "SHA": + + def sha_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha1(x).hexdigest() + + hash_utf8 = sha_utf8 + elif _algorithm == "SHA-256": + + def sha256_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha256(x).hexdigest() + + hash_utf8 = sha256_utf8 + elif _algorithm == "SHA-512": + + def sha512_utf8(x): + if isinstance(x, str): + x = x.encode("utf-8") + return hashlib.sha512(x).hexdigest() + + hash_utf8 = sha512_utf8 + + KD = lambda s, d: hash_utf8(f"{s}:{d}") # noqa:E731 + + if hash_utf8 is None: + return None + + # XXX not implemented yet + entdig = None + p_parsed = urlparse(url) + #: path is request-uri defined in RFC 2616 which should not be empty + path = p_parsed.path or "/" + if p_parsed.query: + path += f"?{p_parsed.query}" + + A1 = f"{self.username}:{realm}:{self.password}" + A2 = f"{method}:{path}" + + HA1 = hash_utf8(A1) + HA2 = hash_utf8(A2) + + if nonce == self._thread_local.last_nonce: + self._thread_local.nonce_count += 1 + else: + self._thread_local.nonce_count = 1 + ncvalue = f"{self._thread_local.nonce_count:08x}" + s = str(self._thread_local.nonce_count).encode("utf-8") + s += nonce.encode("utf-8") + s += time.ctime().encode("utf-8") + s += os.urandom(8) + + cnonce = hashlib.sha1(s).hexdigest()[:16] + if _algorithm == "MD5-SESS": + HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}") + + if not qop: + respdig = KD(HA1, f"{nonce}:{HA2}") + elif qop == "auth" or "auth" in qop.split(","): + noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}" + respdig = KD(HA1, noncebit) + else: + # XXX handle auth-int. + return None + + self._thread_local.last_nonce = nonce + + # XXX should the partial digests be encoded too? + base = ( + f'username="{self.username}", realm="{realm}", nonce="{nonce}", ' + f'uri="{path}", response="{respdig}"' + ) + if opaque: + base += f', opaque="{opaque}"' + if algorithm: + base += f', algorithm="{algorithm}"' + if entdig: + base += f', digest="{entdig}"' + if qop: + base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"' + + return f"Digest {base}" + + def handle_redirect(self, r, **kwargs): + """Reset num_401_calls counter on redirects.""" + if r.is_redirect: + self._thread_local.num_401_calls = 1 + + def handle_401(self, r, **kwargs): + """ + Takes the given response and tries digest-auth, if needed. + + :rtype: requests.Response + """ + + # If response is not 4xx, do not auth + # See https://github.com/psf/requests/issues/3772 + if not 400 <= r.status_code < 500: + self._thread_local.num_401_calls = 1 + return r + + if self._thread_local.pos is not None: + # Rewind the file position indicator of the body to where + # it was to resend the request. + r.request.body.seek(self._thread_local.pos) + s_auth = r.headers.get("www-authenticate", "") + + if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2: + self._thread_local.num_401_calls += 1 + pat = re.compile(r"digest ", flags=re.IGNORECASE) + self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1)) + + # Consume content and release the original connection + # to allow our new request to reuse the same one. + r.content + r.close() + prep = r.request.copy() + extract_cookies_to_jar(prep._cookies, r.request, r.raw) + prep.prepare_cookies(prep._cookies) + + prep.headers["Authorization"] = self.build_digest_header( + prep.method, prep.url + ) + _r = r.connection.send(prep, **kwargs) + _r.history.append(r) + _r.request = prep + + return _r + + self._thread_local.num_401_calls = 1 + return r + + def __call__(self, r): + # Initialize per-thread state, if needed + self.init_per_thread_state() + # If we have a saved nonce, skip the 401 + if self._thread_local.last_nonce: + r.headers["Authorization"] = self.build_digest_header(r.method, r.url) + try: + self._thread_local.pos = r.body.tell() + except AttributeError: + # In the case of HTTPDigestAuth being reused and the body of + # the previous request was a file-like object, pos has the + # file position of the previous body. Ensure it's set to + # None. + self._thread_local.pos = None + r.register_hook("response", self.handle_401) + r.register_hook("response", self.handle_redirect) + self._thread_local.num_401_calls = 1 + + return r + + def __eq__(self, other): + return all( + [ + self.username == getattr(other, "username", None), + self.password == getattr(other, "password", None), + ] + ) + + def __ne__(self, other): + return not self == other diff --git a/Backend/venv/lib/python3.12/site-packages/requests/certs.py b/Backend/venv/lib/python3.12/site-packages/requests/certs.py new file mode 100644 index 00000000..be422c3e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/certs.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +""" +requests.certs +~~~~~~~~~~~~~~ + +This module returns the preferred default CA certificate bundle. There is +only one — the one from the certifi package. + +If you are packaging Requests, e.g., for a Linux distribution or a managed +environment, you can change the definition of where() to return a separately +packaged CA bundle. +""" +from certifi import where + +if __name__ == "__main__": + print(where()) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/compat.py b/Backend/venv/lib/python3.12/site-packages/requests/compat.py new file mode 100644 index 00000000..7f9d7543 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/compat.py @@ -0,0 +1,106 @@ +""" +requests.compat +~~~~~~~~~~~~~~~ + +This module previously handled import compatibility issues +between Python 2 and Python 3. It remains for backwards +compatibility until the next major version. +""" + +import importlib +import sys + +# ------- +# urllib3 +# ------- +from urllib3 import __version__ as urllib3_version + +# Detect which major version of urllib3 is being used. +try: + is_urllib3_1 = int(urllib3_version.split(".")[0]) == 1 +except (TypeError, AttributeError): + # If we can't discern a version, prefer old functionality. + is_urllib3_1 = True + +# ------------------- +# Character Detection +# ------------------- + + +def _resolve_char_detection(): + """Find supported character detection libraries.""" + chardet = None + for lib in ("chardet", "charset_normalizer"): + if chardet is None: + try: + chardet = importlib.import_module(lib) + except ImportError: + pass + return chardet + + +chardet = _resolve_char_detection() + +# ------- +# Pythons +# ------- + +# Syntax sugar. +_ver = sys.version_info + +#: Python 2.x? +is_py2 = _ver[0] == 2 + +#: Python 3.x? +is_py3 = _ver[0] == 3 + +# json/simplejson module import resolution +has_simplejson = False +try: + import simplejson as json + + has_simplejson = True +except ImportError: + import json + +if has_simplejson: + from simplejson import JSONDecodeError +else: + from json import JSONDecodeError + +# Keep OrderedDict for backwards compatibility. +from collections import OrderedDict +from collections.abc import Callable, Mapping, MutableMapping +from http import cookiejar as cookielib +from http.cookies import Morsel +from io import StringIO + +# -------------- +# Legacy Imports +# -------------- +from urllib.parse import ( + quote, + quote_plus, + unquote, + unquote_plus, + urldefrag, + urlencode, + urljoin, + urlparse, + urlsplit, + urlunparse, +) +from urllib.request import ( + getproxies, + getproxies_environment, + parse_http_list, + proxy_bypass, + proxy_bypass_environment, +) + +builtin_str = str +str = str +bytes = bytes +basestring = (str, bytes) +numeric_types = (int, float) +integer_types = (int,) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/cookies.py b/Backend/venv/lib/python3.12/site-packages/requests/cookies.py new file mode 100644 index 00000000..f69d0cda --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/cookies.py @@ -0,0 +1,561 @@ +""" +requests.cookies +~~~~~~~~~~~~~~~~ + +Compatibility code to be able to use `http.cookiejar.CookieJar` with requests. + +requests.utils imports from here, so be careful with imports. +""" + +import calendar +import copy +import time + +from ._internal_utils import to_native_string +from .compat import Morsel, MutableMapping, cookielib, urlparse, urlunparse + +try: + import threading +except ImportError: + import dummy_threading as threading + + +class MockRequest: + """Wraps a `requests.Request` to mimic a `urllib2.Request`. + + The code in `http.cookiejar.CookieJar` expects this interface in order to correctly + manage cookie policies, i.e., determine whether a cookie can be set, given the + domains of the request and the cookie. + + The original request object is read-only. The client is responsible for collecting + the new headers via `get_new_headers()` and interpreting them appropriately. You + probably want `get_cookie_header`, defined below. + """ + + def __init__(self, request): + self._r = request + self._new_headers = {} + self.type = urlparse(self._r.url).scheme + + def get_type(self): + return self.type + + def get_host(self): + return urlparse(self._r.url).netloc + + def get_origin_req_host(self): + return self.get_host() + + def get_full_url(self): + # Only return the response's URL if the user hadn't set the Host + # header + if not self._r.headers.get("Host"): + return self._r.url + # If they did set it, retrieve it and reconstruct the expected domain + host = to_native_string(self._r.headers["Host"], encoding="utf-8") + parsed = urlparse(self._r.url) + # Reconstruct the URL as we expect it + return urlunparse( + [ + parsed.scheme, + host, + parsed.path, + parsed.params, + parsed.query, + parsed.fragment, + ] + ) + + def is_unverifiable(self): + return True + + def has_header(self, name): + return name in self._r.headers or name in self._new_headers + + def get_header(self, name, default=None): + return self._r.headers.get(name, self._new_headers.get(name, default)) + + def add_header(self, key, val): + """cookiejar has no legitimate use for this method; add it back if you find one.""" + raise NotImplementedError( + "Cookie headers should be added with add_unredirected_header()" + ) + + def add_unredirected_header(self, name, value): + self._new_headers[name] = value + + def get_new_headers(self): + return self._new_headers + + @property + def unverifiable(self): + return self.is_unverifiable() + + @property + def origin_req_host(self): + return self.get_origin_req_host() + + @property + def host(self): + return self.get_host() + + +class MockResponse: + """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. + + ...what? Basically, expose the parsed HTTP headers from the server response + the way `http.cookiejar` expects to see them. + """ + + def __init__(self, headers): + """Make a MockResponse for `cookiejar` to read. + + :param headers: a httplib.HTTPMessage or analogous carrying the headers + """ + self._headers = headers + + def info(self): + return self._headers + + def getheaders(self, name): + self._headers.getheaders(name) + + +def extract_cookies_to_jar(jar, request, response): + """Extract the cookies from the response into a CookieJar. + + :param jar: http.cookiejar.CookieJar (not necessarily a RequestsCookieJar) + :param request: our own requests.Request object + :param response: urllib3.HTTPResponse object + """ + if not (hasattr(response, "_original_response") and response._original_response): + return + # the _original_response field is the wrapped httplib.HTTPResponse object, + req = MockRequest(request) + # pull out the HTTPMessage with the headers and put it in the mock: + res = MockResponse(response._original_response.msg) + jar.extract_cookies(res, req) + + +def get_cookie_header(jar, request): + """ + Produce an appropriate Cookie header string to be sent with `request`, or None. + + :rtype: str + """ + r = MockRequest(request) + jar.add_cookie_header(r) + return r.get_new_headers().get("Cookie") + + +def remove_cookie_by_name(cookiejar, name, domain=None, path=None): + """Unsets a cookie by name, by default over all domains and paths. + + Wraps CookieJar.clear(), is O(n). + """ + clearables = [] + for cookie in cookiejar: + if cookie.name != name: + continue + if domain is not None and domain != cookie.domain: + continue + if path is not None and path != cookie.path: + continue + clearables.append((cookie.domain, cookie.path, cookie.name)) + + for domain, path, name in clearables: + cookiejar.clear(domain, path, name) + + +class CookieConflictError(RuntimeError): + """There are two cookies that meet the criteria specified in the cookie jar. + Use .get and .set and include domain and path args in order to be more specific. + """ + + +class RequestsCookieJar(cookielib.CookieJar, MutableMapping): + """Compatibility class; is a http.cookiejar.CookieJar, but exposes a dict + interface. + + This is the CookieJar we create by default for requests and sessions that + don't specify one, since some clients may expect response.cookies and + session.cookies to support dict operations. + + Requests does not use the dict interface internally; it's just for + compatibility with external client code. All requests code should work + out of the box with externally provided instances of ``CookieJar``, e.g. + ``LWPCookieJar`` and ``FileCookieJar``. + + Unlike a regular CookieJar, this class is pickleable. + + .. warning:: dictionary operations that are normally O(1) may be O(n). + """ + + def get(self, name, default=None, domain=None, path=None): + """Dict-like get() that also supports optional domain and path args in + order to resolve naming collisions from using one cookie jar over + multiple domains. + + .. warning:: operation is O(n), not O(1). + """ + try: + return self._find_no_duplicates(name, domain, path) + except KeyError: + return default + + def set(self, name, value, **kwargs): + """Dict-like set() that also supports optional domain and path args in + order to resolve naming collisions from using one cookie jar over + multiple domains. + """ + # support client code that unsets cookies by assignment of a None value: + if value is None: + remove_cookie_by_name( + self, name, domain=kwargs.get("domain"), path=kwargs.get("path") + ) + return + + if isinstance(value, Morsel): + c = morsel_to_cookie(value) + else: + c = create_cookie(name, value, **kwargs) + self.set_cookie(c) + return c + + def iterkeys(self): + """Dict-like iterkeys() that returns an iterator of names of cookies + from the jar. + + .. seealso:: itervalues() and iteritems(). + """ + for cookie in iter(self): + yield cookie.name + + def keys(self): + """Dict-like keys() that returns a list of names of cookies from the + jar. + + .. seealso:: values() and items(). + """ + return list(self.iterkeys()) + + def itervalues(self): + """Dict-like itervalues() that returns an iterator of values of cookies + from the jar. + + .. seealso:: iterkeys() and iteritems(). + """ + for cookie in iter(self): + yield cookie.value + + def values(self): + """Dict-like values() that returns a list of values of cookies from the + jar. + + .. seealso:: keys() and items(). + """ + return list(self.itervalues()) + + def iteritems(self): + """Dict-like iteritems() that returns an iterator of name-value tuples + from the jar. + + .. seealso:: iterkeys() and itervalues(). + """ + for cookie in iter(self): + yield cookie.name, cookie.value + + def items(self): + """Dict-like items() that returns a list of name-value tuples from the + jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a + vanilla python dict of key value pairs. + + .. seealso:: keys() and values(). + """ + return list(self.iteritems()) + + def list_domains(self): + """Utility method to list all the domains in the jar.""" + domains = [] + for cookie in iter(self): + if cookie.domain not in domains: + domains.append(cookie.domain) + return domains + + def list_paths(self): + """Utility method to list all the paths in the jar.""" + paths = [] + for cookie in iter(self): + if cookie.path not in paths: + paths.append(cookie.path) + return paths + + def multiple_domains(self): + """Returns True if there are multiple domains in the jar. + Returns False otherwise. + + :rtype: bool + """ + domains = [] + for cookie in iter(self): + if cookie.domain is not None and cookie.domain in domains: + return True + domains.append(cookie.domain) + return False # there is only one domain in jar + + def get_dict(self, domain=None, path=None): + """Takes as an argument an optional domain and path and returns a plain + old Python dict of name-value pairs of cookies that meet the + requirements. + + :rtype: dict + """ + dictionary = {} + for cookie in iter(self): + if (domain is None or cookie.domain == domain) and ( + path is None or cookie.path == path + ): + dictionary[cookie.name] = cookie.value + return dictionary + + def __contains__(self, name): + try: + return super().__contains__(name) + except CookieConflictError: + return True + + def __getitem__(self, name): + """Dict-like __getitem__() for compatibility with client code. Throws + exception if there are more than one cookie with name. In that case, + use the more explicit get() method instead. + + .. warning:: operation is O(n), not O(1). + """ + return self._find_no_duplicates(name) + + def __setitem__(self, name, value): + """Dict-like __setitem__ for compatibility with client code. Throws + exception if there is already a cookie of that name in the jar. In that + case, use the more explicit set() method instead. + """ + self.set(name, value) + + def __delitem__(self, name): + """Deletes a cookie given a name. Wraps ``http.cookiejar.CookieJar``'s + ``remove_cookie_by_name()``. + """ + remove_cookie_by_name(self, name) + + def set_cookie(self, cookie, *args, **kwargs): + if ( + hasattr(cookie.value, "startswith") + and cookie.value.startswith('"') + and cookie.value.endswith('"') + ): + cookie.value = cookie.value.replace('\\"', "") + return super().set_cookie(cookie, *args, **kwargs) + + def update(self, other): + """Updates this jar with cookies from another CookieJar or dict-like""" + if isinstance(other, cookielib.CookieJar): + for cookie in other: + self.set_cookie(copy.copy(cookie)) + else: + super().update(other) + + def _find(self, name, domain=None, path=None): + """Requests uses this method internally to get cookie values. + + If there are conflicting cookies, _find arbitrarily chooses one. + See _find_no_duplicates if you want an exception thrown if there are + conflicting cookies. + + :param name: a string containing name of cookie + :param domain: (optional) string containing domain of cookie + :param path: (optional) string containing path of cookie + :return: cookie.value + """ + for cookie in iter(self): + if cookie.name == name: + if domain is None or cookie.domain == domain: + if path is None or cookie.path == path: + return cookie.value + + raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") + + def _find_no_duplicates(self, name, domain=None, path=None): + """Both ``__get_item__`` and ``get`` call this function: it's never + used elsewhere in Requests. + + :param name: a string containing name of cookie + :param domain: (optional) string containing domain of cookie + :param path: (optional) string containing path of cookie + :raises KeyError: if cookie is not found + :raises CookieConflictError: if there are multiple cookies + that match name and optionally domain and path + :return: cookie.value + """ + toReturn = None + for cookie in iter(self): + if cookie.name == name: + if domain is None or cookie.domain == domain: + if path is None or cookie.path == path: + if toReturn is not None: + # if there are multiple cookies that meet passed in criteria + raise CookieConflictError( + f"There are multiple cookies with name, {name!r}" + ) + # we will eventually return this as long as no cookie conflict + toReturn = cookie.value + + if toReturn: + return toReturn + raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") + + def __getstate__(self): + """Unlike a normal CookieJar, this class is pickleable.""" + state = self.__dict__.copy() + # remove the unpickleable RLock object + state.pop("_cookies_lock") + return state + + def __setstate__(self, state): + """Unlike a normal CookieJar, this class is pickleable.""" + self.__dict__.update(state) + if "_cookies_lock" not in self.__dict__: + self._cookies_lock = threading.RLock() + + def copy(self): + """Return a copy of this RequestsCookieJar.""" + new_cj = RequestsCookieJar() + new_cj.set_policy(self.get_policy()) + new_cj.update(self) + return new_cj + + def get_policy(self): + """Return the CookiePolicy instance used.""" + return self._policy + + +def _copy_cookie_jar(jar): + if jar is None: + return None + + if hasattr(jar, "copy"): + # We're dealing with an instance of RequestsCookieJar + return jar.copy() + # We're dealing with a generic CookieJar instance + new_jar = copy.copy(jar) + new_jar.clear() + for cookie in jar: + new_jar.set_cookie(copy.copy(cookie)) + return new_jar + + +def create_cookie(name, value, **kwargs): + """Make a cookie from underspecified parameters. + + By default, the pair of `name` and `value` will be set for the domain '' + and sent on every request (this is sometimes called a "supercookie"). + """ + result = { + "version": 0, + "name": name, + "value": value, + "port": None, + "domain": "", + "path": "/", + "secure": False, + "expires": None, + "discard": True, + "comment": None, + "comment_url": None, + "rest": {"HttpOnly": None}, + "rfc2109": False, + } + + badargs = set(kwargs) - set(result) + if badargs: + raise TypeError( + f"create_cookie() got unexpected keyword arguments: {list(badargs)}" + ) + + result.update(kwargs) + result["port_specified"] = bool(result["port"]) + result["domain_specified"] = bool(result["domain"]) + result["domain_initial_dot"] = result["domain"].startswith(".") + result["path_specified"] = bool(result["path"]) + + return cookielib.Cookie(**result) + + +def morsel_to_cookie(morsel): + """Convert a Morsel object into a Cookie containing the one k/v pair.""" + + expires = None + if morsel["max-age"]: + try: + expires = int(time.time() + int(morsel["max-age"])) + except ValueError: + raise TypeError(f"max-age: {morsel['max-age']} must be integer") + elif morsel["expires"]: + time_template = "%a, %d-%b-%Y %H:%M:%S GMT" + expires = calendar.timegm(time.strptime(morsel["expires"], time_template)) + return create_cookie( + comment=morsel["comment"], + comment_url=bool(morsel["comment"]), + discard=False, + domain=morsel["domain"], + expires=expires, + name=morsel.key, + path=morsel["path"], + port=None, + rest={"HttpOnly": morsel["httponly"]}, + rfc2109=False, + secure=bool(morsel["secure"]), + value=morsel.value, + version=morsel["version"] or 0, + ) + + +def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): + """Returns a CookieJar from a key/value dictionary. + + :param cookie_dict: Dict of key/values to insert into CookieJar. + :param cookiejar: (optional) A cookiejar to add the cookies to. + :param overwrite: (optional) If False, will not replace cookies + already in the jar with new ones. + :rtype: CookieJar + """ + if cookiejar is None: + cookiejar = RequestsCookieJar() + + if cookie_dict is not None: + names_from_jar = [cookie.name for cookie in cookiejar] + for name in cookie_dict: + if overwrite or (name not in names_from_jar): + cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) + + return cookiejar + + +def merge_cookies(cookiejar, cookies): + """Add cookies to cookiejar and returns a merged CookieJar. + + :param cookiejar: CookieJar object to add the cookies to. + :param cookies: Dictionary or CookieJar object to be added. + :rtype: CookieJar + """ + if not isinstance(cookiejar, cookielib.CookieJar): + raise ValueError("You can only merge into CookieJar") + + if isinstance(cookies, dict): + cookiejar = cookiejar_from_dict(cookies, cookiejar=cookiejar, overwrite=False) + elif isinstance(cookies, cookielib.CookieJar): + try: + cookiejar.update(cookies) + except AttributeError: + for cookie_in_jar in cookies: + cookiejar.set_cookie(cookie_in_jar) + + return cookiejar diff --git a/Backend/venv/lib/python3.12/site-packages/requests/exceptions.py b/Backend/venv/lib/python3.12/site-packages/requests/exceptions.py new file mode 100644 index 00000000..83986b48 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/exceptions.py @@ -0,0 +1,151 @@ +""" +requests.exceptions +~~~~~~~~~~~~~~~~~~~ + +This module contains the set of Requests' exceptions. +""" +from urllib3.exceptions import HTTPError as BaseHTTPError + +from .compat import JSONDecodeError as CompatJSONDecodeError + + +class RequestException(IOError): + """There was an ambiguous exception that occurred while handling your + request. + """ + + def __init__(self, *args, **kwargs): + """Initialize RequestException with `request` and `response` objects.""" + response = kwargs.pop("response", None) + self.response = response + self.request = kwargs.pop("request", None) + if response is not None and not self.request and hasattr(response, "request"): + self.request = self.response.request + super().__init__(*args, **kwargs) + + +class InvalidJSONError(RequestException): + """A JSON error occurred.""" + + +class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError): + """Couldn't decode the text into json""" + + def __init__(self, *args, **kwargs): + """ + Construct the JSONDecodeError instance first with all + args. Then use it's args to construct the IOError so that + the json specific args aren't used as IOError specific args + and the error message from JSONDecodeError is preserved. + """ + CompatJSONDecodeError.__init__(self, *args) + InvalidJSONError.__init__(self, *self.args, **kwargs) + + def __reduce__(self): + """ + The __reduce__ method called when pickling the object must + be the one from the JSONDecodeError (be it json/simplejson) + as it expects all the arguments for instantiation, not just + one like the IOError, and the MRO would by default call the + __reduce__ method from the IOError due to the inheritance order. + """ + return CompatJSONDecodeError.__reduce__(self) + + +class HTTPError(RequestException): + """An HTTP error occurred.""" + + +class ConnectionError(RequestException): + """A Connection error occurred.""" + + +class ProxyError(ConnectionError): + """A proxy error occurred.""" + + +class SSLError(ConnectionError): + """An SSL error occurred.""" + + +class Timeout(RequestException): + """The request timed out. + + Catching this error will catch both + :exc:`~requests.exceptions.ConnectTimeout` and + :exc:`~requests.exceptions.ReadTimeout` errors. + """ + + +class ConnectTimeout(ConnectionError, Timeout): + """The request timed out while trying to connect to the remote server. + + Requests that produced this error are safe to retry. + """ + + +class ReadTimeout(Timeout): + """The server did not send any data in the allotted amount of time.""" + + +class URLRequired(RequestException): + """A valid URL is required to make a request.""" + + +class TooManyRedirects(RequestException): + """Too many redirects.""" + + +class MissingSchema(RequestException, ValueError): + """The URL scheme (e.g. http or https) is missing.""" + + +class InvalidSchema(RequestException, ValueError): + """The URL scheme provided is either invalid or unsupported.""" + + +class InvalidURL(RequestException, ValueError): + """The URL provided was somehow invalid.""" + + +class InvalidHeader(RequestException, ValueError): + """The header value provided was somehow invalid.""" + + +class InvalidProxyURL(InvalidURL): + """The proxy URL provided is invalid.""" + + +class ChunkedEncodingError(RequestException): + """The server declared chunked encoding but sent an invalid chunk.""" + + +class ContentDecodingError(RequestException, BaseHTTPError): + """Failed to decode response content.""" + + +class StreamConsumedError(RequestException, TypeError): + """The content for this response was already consumed.""" + + +class RetryError(RequestException): + """Custom retries logic failed""" + + +class UnrewindableBodyError(RequestException): + """Requests encountered an error when trying to rewind a body.""" + + +# Warnings + + +class RequestsWarning(Warning): + """Base warning for Requests.""" + + +class FileModeWarning(RequestsWarning, DeprecationWarning): + """A file was opened in text mode, but Requests determined its binary length.""" + + +class RequestsDependencyWarning(RequestsWarning): + """An imported dependency doesn't match the expected version range.""" diff --git a/Backend/venv/lib/python3.12/site-packages/requests/help.py b/Backend/venv/lib/python3.12/site-packages/requests/help.py new file mode 100644 index 00000000..8fbcd656 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/help.py @@ -0,0 +1,134 @@ +"""Module containing bug report helper(s).""" + +import json +import platform +import ssl +import sys + +import idna +import urllib3 + +from . import __version__ as requests_version + +try: + import charset_normalizer +except ImportError: + charset_normalizer = None + +try: + import chardet +except ImportError: + chardet = None + +try: + from urllib3.contrib import pyopenssl +except ImportError: + pyopenssl = None + OpenSSL = None + cryptography = None +else: + import cryptography + import OpenSSL + + +def _implementation(): + """Return a dict with the Python implementation and version. + + Provide both the name and the version of the Python implementation + currently running. For example, on CPython 3.10.3 it will return + {'name': 'CPython', 'version': '3.10.3'}. + + This function works best on CPython and PyPy: in particular, it probably + doesn't work for Jython or IronPython. Future investigation should be done + to work out the correct shape of the code for those platforms. + """ + implementation = platform.python_implementation() + + if implementation == "CPython": + implementation_version = platform.python_version() + elif implementation == "PyPy": + implementation_version = "{}.{}.{}".format( + sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro, + ) + if sys.pypy_version_info.releaselevel != "final": + implementation_version = "".join( + [implementation_version, sys.pypy_version_info.releaselevel] + ) + elif implementation == "Jython": + implementation_version = platform.python_version() # Complete Guess + elif implementation == "IronPython": + implementation_version = platform.python_version() # Complete Guess + else: + implementation_version = "Unknown" + + return {"name": implementation, "version": implementation_version} + + +def info(): + """Generate information for a bug report.""" + try: + platform_info = { + "system": platform.system(), + "release": platform.release(), + } + except OSError: + platform_info = { + "system": "Unknown", + "release": "Unknown", + } + + implementation_info = _implementation() + urllib3_info = {"version": urllib3.__version__} + charset_normalizer_info = {"version": None} + chardet_info = {"version": None} + if charset_normalizer: + charset_normalizer_info = {"version": charset_normalizer.__version__} + if chardet: + chardet_info = {"version": chardet.__version__} + + pyopenssl_info = { + "version": None, + "openssl_version": "", + } + if OpenSSL: + pyopenssl_info = { + "version": OpenSSL.__version__, + "openssl_version": f"{OpenSSL.SSL.OPENSSL_VERSION_NUMBER:x}", + } + cryptography_info = { + "version": getattr(cryptography, "__version__", ""), + } + idna_info = { + "version": getattr(idna, "__version__", ""), + } + + system_ssl = ssl.OPENSSL_VERSION_NUMBER + system_ssl_info = {"version": f"{system_ssl:x}" if system_ssl is not None else ""} + + return { + "platform": platform_info, + "implementation": implementation_info, + "system_ssl": system_ssl_info, + "using_pyopenssl": pyopenssl is not None, + "using_charset_normalizer": chardet is None, + "pyOpenSSL": pyopenssl_info, + "urllib3": urllib3_info, + "chardet": chardet_info, + "charset_normalizer": charset_normalizer_info, + "cryptography": cryptography_info, + "idna": idna_info, + "requests": { + "version": requests_version, + }, + } + + +def main(): + """Pretty-print the bug information as JSON.""" + print(json.dumps(info(), sort_keys=True, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/lib/python3.12/site-packages/requests/hooks.py b/Backend/venv/lib/python3.12/site-packages/requests/hooks.py new file mode 100644 index 00000000..d181ba2e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/hooks.py @@ -0,0 +1,33 @@ +""" +requests.hooks +~~~~~~~~~~~~~~ + +This module provides the capabilities for the Requests hooks system. + +Available hooks: + +``response``: + The response generated from a Request. +""" +HOOKS = ["response"] + + +def default_hooks(): + return {event: [] for event in HOOKS} + + +# TODO: response is the only one + + +def dispatch_hook(key, hooks, hook_data, **kwargs): + """Dispatches a hook dictionary on a given piece of data.""" + hooks = hooks or {} + hooks = hooks.get(key) + if hooks: + if hasattr(hooks, "__call__"): + hooks = [hooks] + for hook in hooks: + _hook_data = hook(hook_data, **kwargs) + if _hook_data is not None: + hook_data = _hook_data + return hook_data diff --git a/Backend/venv/lib/python3.12/site-packages/requests/models.py b/Backend/venv/lib/python3.12/site-packages/requests/models.py new file mode 100644 index 00000000..c4b25fa0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/models.py @@ -0,0 +1,1039 @@ +""" +requests.models +~~~~~~~~~~~~~~~ + +This module contains the primary objects that power Requests. +""" + +import datetime + +# Import encoding now, to avoid implicit import later. +# Implicit import within threads may cause LookupError when standard library is in a ZIP, +# such as in Embedded Python. See https://github.com/psf/requests/issues/3578. +import encodings.idna # noqa: F401 +from io import UnsupportedOperation + +from urllib3.exceptions import ( + DecodeError, + LocationParseError, + ProtocolError, + ReadTimeoutError, + SSLError, +) +from urllib3.fields import RequestField +from urllib3.filepost import encode_multipart_formdata +from urllib3.util import parse_url + +from ._internal_utils import to_native_string, unicode_is_ascii +from .auth import HTTPBasicAuth +from .compat import ( + Callable, + JSONDecodeError, + Mapping, + basestring, + builtin_str, + chardet, + cookielib, +) +from .compat import json as complexjson +from .compat import urlencode, urlsplit, urlunparse +from .cookies import _copy_cookie_jar, cookiejar_from_dict, get_cookie_header +from .exceptions import ( + ChunkedEncodingError, + ConnectionError, + ContentDecodingError, + HTTPError, + InvalidJSONError, + InvalidURL, +) +from .exceptions import JSONDecodeError as RequestsJSONDecodeError +from .exceptions import MissingSchema +from .exceptions import SSLError as RequestsSSLError +from .exceptions import StreamConsumedError +from .hooks import default_hooks +from .status_codes import codes +from .structures import CaseInsensitiveDict +from .utils import ( + check_header_validity, + get_auth_from_url, + guess_filename, + guess_json_utf, + iter_slices, + parse_header_links, + requote_uri, + stream_decode_response_unicode, + super_len, + to_key_val_list, +) + +#: The set of HTTP status codes that indicate an automatically +#: processable redirect. +REDIRECT_STATI = ( + codes.moved, # 301 + codes.found, # 302 + codes.other, # 303 + codes.temporary_redirect, # 307 + codes.permanent_redirect, # 308 +) + +DEFAULT_REDIRECT_LIMIT = 30 +CONTENT_CHUNK_SIZE = 10 * 1024 +ITER_CHUNK_SIZE = 512 + + +class RequestEncodingMixin: + @property + def path_url(self): + """Build the path URL to use.""" + + url = [] + + p = urlsplit(self.url) + + path = p.path + if not path: + path = "/" + + url.append(path) + + query = p.query + if query: + url.append("?") + url.append(query) + + return "".join(url) + + @staticmethod + def _encode_params(data): + """Encode parameters in a piece of data. + + Will successfully encode parameters when passed as a dict or a list of + 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary + if parameters are supplied as a dict. + """ + + if isinstance(data, (str, bytes)): + return data + elif hasattr(data, "read"): + return data + elif hasattr(data, "__iter__"): + result = [] + for k, vs in to_key_val_list(data): + if isinstance(vs, basestring) or not hasattr(vs, "__iter__"): + vs = [vs] + for v in vs: + if v is not None: + result.append( + ( + k.encode("utf-8") if isinstance(k, str) else k, + v.encode("utf-8") if isinstance(v, str) else v, + ) + ) + return urlencode(result, doseq=True) + else: + return data + + @staticmethod + def _encode_files(files, data): + """Build the body for a multipart/form-data request. + + Will successfully encode files when passed as a dict or a list of + tuples. Order is retained if data is a list of tuples but arbitrary + if parameters are supplied as a dict. + The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) + or 4-tuples (filename, fileobj, contentype, custom_headers). + """ + if not files: + raise ValueError("Files must be provided.") + elif isinstance(data, basestring): + raise ValueError("Data must not be a string.") + + new_fields = [] + fields = to_key_val_list(data or {}) + files = to_key_val_list(files or {}) + + for field, val in fields: + if isinstance(val, basestring) or not hasattr(val, "__iter__"): + val = [val] + for v in val: + if v is not None: + # Don't call str() on bytestrings: in Py3 it all goes wrong. + if not isinstance(v, bytes): + v = str(v) + + new_fields.append( + ( + field.decode("utf-8") + if isinstance(field, bytes) + else field, + v.encode("utf-8") if isinstance(v, str) else v, + ) + ) + + for k, v in files: + # support for explicit filename + ft = None + fh = None + if isinstance(v, (tuple, list)): + if len(v) == 2: + fn, fp = v + elif len(v) == 3: + fn, fp, ft = v + else: + fn, fp, ft, fh = v + else: + fn = guess_filename(v) or k + fp = v + + if isinstance(fp, (str, bytes, bytearray)): + fdata = fp + elif hasattr(fp, "read"): + fdata = fp.read() + elif fp is None: + continue + else: + fdata = fp + + rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) + rf.make_multipart(content_type=ft) + new_fields.append(rf) + + body, content_type = encode_multipart_formdata(new_fields) + + return body, content_type + + +class RequestHooksMixin: + def register_hook(self, event, hook): + """Properly register a hook.""" + + if event not in self.hooks: + raise ValueError(f'Unsupported event specified, with event name "{event}"') + + if isinstance(hook, Callable): + self.hooks[event].append(hook) + elif hasattr(hook, "__iter__"): + self.hooks[event].extend(h for h in hook if isinstance(h, Callable)) + + def deregister_hook(self, event, hook): + """Deregister a previously registered hook. + Returns True if the hook existed, False if not. + """ + + try: + self.hooks[event].remove(hook) + return True + except ValueError: + return False + + +class Request(RequestHooksMixin): + """A user-created :class:`Request ` object. + + Used to prepare a :class:`PreparedRequest `, which is sent to the server. + + :param method: HTTP method to use. + :param url: URL to send. + :param headers: dictionary of headers to send. + :param files: dictionary of {filename: fileobject} files to multipart upload. + :param data: the body to attach to the request. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. + :param json: json for the body to attach to the request (if files or data is not specified). + :param params: URL parameters to append to the URL. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. + :param auth: Auth handler or (user, pass) tuple. + :param cookies: dictionary or CookieJar of cookies to attach to this request. + :param hooks: dictionary of callback hooks, for internal usage. + + Usage:: + + >>> import requests + >>> req = requests.Request('GET', 'https://httpbin.org/get') + >>> req.prepare() + + """ + + def __init__( + self, + method=None, + url=None, + headers=None, + files=None, + data=None, + params=None, + auth=None, + cookies=None, + hooks=None, + json=None, + ): + # Default empty dicts for dict params. + data = [] if data is None else data + files = [] if files is None else files + headers = {} if headers is None else headers + params = {} if params is None else params + hooks = {} if hooks is None else hooks + + self.hooks = default_hooks() + for k, v in list(hooks.items()): + self.register_hook(event=k, hook=v) + + self.method = method + self.url = url + self.headers = headers + self.files = files + self.data = data + self.json = json + self.params = params + self.auth = auth + self.cookies = cookies + + def __repr__(self): + return f"" + + def prepare(self): + """Constructs a :class:`PreparedRequest ` for transmission and returns it.""" + p = PreparedRequest() + p.prepare( + method=self.method, + url=self.url, + headers=self.headers, + files=self.files, + data=self.data, + json=self.json, + params=self.params, + auth=self.auth, + cookies=self.cookies, + hooks=self.hooks, + ) + return p + + +class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): + """The fully mutable :class:`PreparedRequest ` object, + containing the exact bytes that will be sent to the server. + + Instances are generated from a :class:`Request ` object, and + should not be instantiated manually; doing so may produce undesirable + effects. + + Usage:: + + >>> import requests + >>> req = requests.Request('GET', 'https://httpbin.org/get') + >>> r = req.prepare() + >>> r + + + >>> s = requests.Session() + >>> s.send(r) + + """ + + def __init__(self): + #: HTTP verb to send to the server. + self.method = None + #: HTTP URL to send the request to. + self.url = None + #: dictionary of HTTP headers. + self.headers = None + # The `CookieJar` used to create the Cookie header will be stored here + # after prepare_cookies is called + self._cookies = None + #: request body to send to the server. + self.body = None + #: dictionary of callback hooks, for internal usage. + self.hooks = default_hooks() + #: integer denoting starting position of a readable file-like body. + self._body_position = None + + def prepare( + self, + method=None, + url=None, + headers=None, + files=None, + data=None, + params=None, + auth=None, + cookies=None, + hooks=None, + json=None, + ): + """Prepares the entire request with the given parameters.""" + + self.prepare_method(method) + self.prepare_url(url, params) + self.prepare_headers(headers) + self.prepare_cookies(cookies) + self.prepare_body(data, files, json) + self.prepare_auth(auth, url) + + # Note that prepare_auth must be last to enable authentication schemes + # such as OAuth to work on a fully prepared request. + + # This MUST go after prepare_auth. Authenticators could add a hook + self.prepare_hooks(hooks) + + def __repr__(self): + return f"" + + def copy(self): + p = PreparedRequest() + p.method = self.method + p.url = self.url + p.headers = self.headers.copy() if self.headers is not None else None + p._cookies = _copy_cookie_jar(self._cookies) + p.body = self.body + p.hooks = self.hooks + p._body_position = self._body_position + return p + + def prepare_method(self, method): + """Prepares the given HTTP method.""" + self.method = method + if self.method is not None: + self.method = to_native_string(self.method.upper()) + + @staticmethod + def _get_idna_encoded_host(host): + import idna + + try: + host = idna.encode(host, uts46=True).decode("utf-8") + except idna.IDNAError: + raise UnicodeError + return host + + def prepare_url(self, url, params): + """Prepares the given HTTP URL.""" + #: Accept objects that have string representations. + #: We're unable to blindly call unicode/str functions + #: as this will include the bytestring indicator (b'') + #: on python 3.x. + #: https://github.com/psf/requests/pull/2238 + if isinstance(url, bytes): + url = url.decode("utf8") + else: + url = str(url) + + # Remove leading whitespaces from url + url = url.lstrip() + + # Don't do any URL preparation for non-HTTP schemes like `mailto`, + # `data` etc to work around exceptions from `url_parse`, which + # handles RFC 3986 only. + if ":" in url and not url.lower().startswith("http"): + self.url = url + return + + # Support for unicode domain names and paths. + try: + scheme, auth, host, port, path, query, fragment = parse_url(url) + except LocationParseError as e: + raise InvalidURL(*e.args) + + if not scheme: + raise MissingSchema( + f"Invalid URL {url!r}: No scheme supplied. " + f"Perhaps you meant https://{url}?" + ) + + if not host: + raise InvalidURL(f"Invalid URL {url!r}: No host supplied") + + # In general, we want to try IDNA encoding the hostname if the string contains + # non-ASCII characters. This allows users to automatically get the correct IDNA + # behaviour. For strings containing only ASCII characters, we need to also verify + # it doesn't start with a wildcard (*), before allowing the unencoded hostname. + if not unicode_is_ascii(host): + try: + host = self._get_idna_encoded_host(host) + except UnicodeError: + raise InvalidURL("URL has an invalid label.") + elif host.startswith(("*", ".")): + raise InvalidURL("URL has an invalid label.") + + # Carefully reconstruct the network location + netloc = auth or "" + if netloc: + netloc += "@" + netloc += host + if port: + netloc += f":{port}" + + # Bare domains aren't valid URLs. + if not path: + path = "/" + + if isinstance(params, (str, bytes)): + params = to_native_string(params) + + enc_params = self._encode_params(params) + if enc_params: + if query: + query = f"{query}&{enc_params}" + else: + query = enc_params + + url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) + self.url = url + + def prepare_headers(self, headers): + """Prepares the given HTTP headers.""" + + self.headers = CaseInsensitiveDict() + if headers: + for header in headers.items(): + # Raise exception on invalid header value. + check_header_validity(header) + name, value = header + self.headers[to_native_string(name)] = value + + def prepare_body(self, data, files, json=None): + """Prepares the given HTTP body data.""" + + # Check if file, fo, generator, iterator. + # If not, run through normal process. + + # Nottin' on you. + body = None + content_type = None + + if not data and json is not None: + # urllib3 requires a bytes-like body. Python 2's json.dumps + # provides this natively, but Python 3 gives a Unicode string. + content_type = "application/json" + + try: + body = complexjson.dumps(json, allow_nan=False) + except ValueError as ve: + raise InvalidJSONError(ve, request=self) + + if not isinstance(body, bytes): + body = body.encode("utf-8") + + is_stream = all( + [ + hasattr(data, "__iter__"), + not isinstance(data, (basestring, list, tuple, Mapping)), + ] + ) + + if is_stream: + try: + length = super_len(data) + except (TypeError, AttributeError, UnsupportedOperation): + length = None + + body = data + + if getattr(body, "tell", None) is not None: + # Record the current file position before reading. + # This will allow us to rewind a file in the event + # of a redirect. + try: + self._body_position = body.tell() + except OSError: + # This differentiates from None, allowing us to catch + # a failed `tell()` later when trying to rewind the body + self._body_position = object() + + if files: + raise NotImplementedError( + "Streamed bodies and files are mutually exclusive." + ) + + if length: + self.headers["Content-Length"] = builtin_str(length) + else: + self.headers["Transfer-Encoding"] = "chunked" + else: + # Multi-part file uploads. + if files: + (body, content_type) = self._encode_files(files, data) + else: + if data: + body = self._encode_params(data) + if isinstance(data, basestring) or hasattr(data, "read"): + content_type = None + else: + content_type = "application/x-www-form-urlencoded" + + self.prepare_content_length(body) + + # Add content-type if it wasn't explicitly provided. + if content_type and ("content-type" not in self.headers): + self.headers["Content-Type"] = content_type + + self.body = body + + def prepare_content_length(self, body): + """Prepare Content-Length header based on request method and body""" + if body is not None: + length = super_len(body) + if length: + # If length exists, set it. Otherwise, we fallback + # to Transfer-Encoding: chunked. + self.headers["Content-Length"] = builtin_str(length) + elif ( + self.method not in ("GET", "HEAD") + and self.headers.get("Content-Length") is None + ): + # Set Content-Length to 0 for methods that can have a body + # but don't provide one. (i.e. not GET or HEAD) + self.headers["Content-Length"] = "0" + + def prepare_auth(self, auth, url=""): + """Prepares the given HTTP auth data.""" + + # If no Auth is explicitly provided, extract it from the URL first. + if auth is None: + url_auth = get_auth_from_url(self.url) + auth = url_auth if any(url_auth) else None + + if auth: + if isinstance(auth, tuple) and len(auth) == 2: + # special-case basic HTTP auth + auth = HTTPBasicAuth(*auth) + + # Allow auth to make its changes. + r = auth(self) + + # Update self to reflect the auth changes. + self.__dict__.update(r.__dict__) + + # Recompute Content-Length + self.prepare_content_length(self.body) + + def prepare_cookies(self, cookies): + """Prepares the given HTTP cookie data. + + This function eventually generates a ``Cookie`` header from the + given cookies using cookielib. Due to cookielib's design, the header + will not be regenerated if it already exists, meaning this function + can only be called once for the life of the + :class:`PreparedRequest ` object. Any subsequent calls + to ``prepare_cookies`` will have no actual effect, unless the "Cookie" + header is removed beforehand. + """ + if isinstance(cookies, cookielib.CookieJar): + self._cookies = cookies + else: + self._cookies = cookiejar_from_dict(cookies) + + cookie_header = get_cookie_header(self._cookies, self) + if cookie_header is not None: + self.headers["Cookie"] = cookie_header + + def prepare_hooks(self, hooks): + """Prepares the given hooks.""" + # hooks can be passed as None to the prepare method and to this + # method. To prevent iterating over None, simply use an empty list + # if hooks is False-y + hooks = hooks or [] + for event in hooks: + self.register_hook(event, hooks[event]) + + +class Response: + """The :class:`Response ` object, which contains a + server's response to an HTTP request. + """ + + __attrs__ = [ + "_content", + "status_code", + "headers", + "url", + "history", + "encoding", + "reason", + "cookies", + "elapsed", + "request", + ] + + def __init__(self): + self._content = False + self._content_consumed = False + self._next = None + + #: Integer Code of responded HTTP Status, e.g. 404 or 200. + self.status_code = None + + #: Case-insensitive Dictionary of Response Headers. + #: For example, ``headers['content-encoding']`` will return the + #: value of a ``'Content-Encoding'`` response header. + self.headers = CaseInsensitiveDict() + + #: File-like object representation of response (for advanced usage). + #: Use of ``raw`` requires that ``stream=True`` be set on the request. + #: This requirement does not apply for use internally to Requests. + self.raw = None + + #: Final URL location of Response. + self.url = None + + #: Encoding to decode with when accessing r.text. + self.encoding = None + + #: A list of :class:`Response ` objects from + #: the history of the Request. Any redirect responses will end + #: up here. The list is sorted from the oldest to the most recent request. + self.history = [] + + #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". + self.reason = None + + #: A CookieJar of Cookies the server sent back. + self.cookies = cookiejar_from_dict({}) + + #: The amount of time elapsed between sending the request + #: and the arrival of the response (as a timedelta). + #: This property specifically measures the time taken between sending + #: the first byte of the request and finishing parsing the headers. It + #: is therefore unaffected by consuming the response content or the + #: value of the ``stream`` keyword argument. + self.elapsed = datetime.timedelta(0) + + #: The :class:`PreparedRequest ` object to which this + #: is a response. + self.request = None + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def __getstate__(self): + # Consume everything; accessing the content attribute makes + # sure the content has been fully read. + if not self._content_consumed: + self.content + + return {attr: getattr(self, attr, None) for attr in self.__attrs__} + + def __setstate__(self, state): + for name, value in state.items(): + setattr(self, name, value) + + # pickled objects do not have .raw + setattr(self, "_content_consumed", True) + setattr(self, "raw", None) + + def __repr__(self): + return f"" + + def __bool__(self): + """Returns True if :attr:`status_code` is less than 400. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code, is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + return self.ok + + def __nonzero__(self): + """Returns True if :attr:`status_code` is less than 400. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code, is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + return self.ok + + def __iter__(self): + """Allows you to use a response as an iterator.""" + return self.iter_content(128) + + @property + def ok(self): + """Returns True if :attr:`status_code` is less than 400, False if not. + + This attribute checks if the status code of the response is between + 400 and 600 to see if there was a client error or a server error. If + the status code is between 200 and 400, this will return True. This + is **not** a check to see if the response code is ``200 OK``. + """ + try: + self.raise_for_status() + except HTTPError: + return False + return True + + @property + def is_redirect(self): + """True if this Response is a well-formed HTTP redirect that could have + been processed automatically (by :meth:`Session.resolve_redirects`). + """ + return "location" in self.headers and self.status_code in REDIRECT_STATI + + @property + def is_permanent_redirect(self): + """True if this Response one of the permanent versions of redirect.""" + return "location" in self.headers and self.status_code in ( + codes.moved_permanently, + codes.permanent_redirect, + ) + + @property + def next(self): + """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" + return self._next + + @property + def apparent_encoding(self): + """The apparent encoding, provided by the charset_normalizer or chardet libraries.""" + if chardet is not None: + return chardet.detect(self.content)["encoding"] + else: + # If no character detection library is available, we'll fall back + # to a standard Python utf-8 str. + return "utf-8" + + def iter_content(self, chunk_size=1, decode_unicode=False): + """Iterates over the response data. When stream=True is set on the + request, this avoids reading the content at once into memory for + large responses. The chunk size is the number of bytes it should + read into memory. This is not necessarily the length of each item + returned as decoding can take place. + + chunk_size must be of type int or None. A value of None will + function differently depending on the value of `stream`. + stream=True will read data as it arrives in whatever size the + chunks are received. If stream=False, data is returned as + a single chunk. + + If decode_unicode is True, content will be decoded using the best + available encoding based on the response. + """ + + def generate(): + # Special case for urllib3. + if hasattr(self.raw, "stream"): + try: + yield from self.raw.stream(chunk_size, decode_content=True) + except ProtocolError as e: + raise ChunkedEncodingError(e) + except DecodeError as e: + raise ContentDecodingError(e) + except ReadTimeoutError as e: + raise ConnectionError(e) + except SSLError as e: + raise RequestsSSLError(e) + else: + # Standard file-like object. + while True: + chunk = self.raw.read(chunk_size) + if not chunk: + break + yield chunk + + self._content_consumed = True + + if self._content_consumed and isinstance(self._content, bool): + raise StreamConsumedError() + elif chunk_size is not None and not isinstance(chunk_size, int): + raise TypeError( + f"chunk_size must be an int, it is instead a {type(chunk_size)}." + ) + # simulate reading small chunks of the content + reused_chunks = iter_slices(self._content, chunk_size) + + stream_chunks = generate() + + chunks = reused_chunks if self._content_consumed else stream_chunks + + if decode_unicode: + chunks = stream_decode_response_unicode(chunks, self) + + return chunks + + def iter_lines( + self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=False, delimiter=None + ): + """Iterates over the response data, one line at a time. When + stream=True is set on the request, this avoids reading the + content at once into memory for large responses. + + .. note:: This method is not reentrant safe. + """ + + pending = None + + for chunk in self.iter_content( + chunk_size=chunk_size, decode_unicode=decode_unicode + ): + if pending is not None: + chunk = pending + chunk + + if delimiter: + lines = chunk.split(delimiter) + else: + lines = chunk.splitlines() + + if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: + pending = lines.pop() + else: + pending = None + + yield from lines + + if pending is not None: + yield pending + + @property + def content(self): + """Content of the response, in bytes.""" + + if self._content is False: + # Read the contents. + if self._content_consumed: + raise RuntimeError("The content for this response was already consumed") + + if self.status_code == 0 or self.raw is None: + self._content = None + else: + self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b"" + + self._content_consumed = True + # don't need to release the connection; that's been handled by urllib3 + # since we exhausted the data. + return self._content + + @property + def text(self): + """Content of the response, in unicode. + + If Response.encoding is None, encoding will be guessed using + ``charset_normalizer`` or ``chardet``. + + The encoding of the response content is determined based solely on HTTP + headers, following RFC 2616 to the letter. If you can take advantage of + non-HTTP knowledge to make a better guess at the encoding, you should + set ``r.encoding`` appropriately before accessing this property. + """ + + # Try charset from content-type + content = None + encoding = self.encoding + + if not self.content: + return "" + + # Fallback to auto-detected encoding. + if self.encoding is None: + encoding = self.apparent_encoding + + # Decode unicode from given encoding. + try: + content = str(self.content, encoding, errors="replace") + except (LookupError, TypeError): + # A LookupError is raised if the encoding was not found which could + # indicate a misspelling or similar mistake. + # + # A TypeError can be raised if encoding is None + # + # So we try blindly encoding. + content = str(self.content, errors="replace") + + return content + + def json(self, **kwargs): + r"""Decodes the JSON response body (if any) as a Python object. + + This may return a dictionary, list, etc. depending on what is in the response. + + :param \*\*kwargs: Optional arguments that ``json.loads`` takes. + :raises requests.exceptions.JSONDecodeError: If the response body does not + contain valid json. + """ + + if not self.encoding and self.content and len(self.content) > 3: + # No encoding set. JSON RFC 4627 section 3 states we should expect + # UTF-8, -16 or -32. Detect which one to use; If the detection or + # decoding fails, fall back to `self.text` (using charset_normalizer to make + # a best guess). + encoding = guess_json_utf(self.content) + if encoding is not None: + try: + return complexjson.loads(self.content.decode(encoding), **kwargs) + except UnicodeDecodeError: + # Wrong UTF codec detected; usually because it's not UTF-8 + # but some other 8-bit codec. This is an RFC violation, + # and the server didn't bother to tell us what codec *was* + # used. + pass + except JSONDecodeError as e: + raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) + + try: + return complexjson.loads(self.text, **kwargs) + except JSONDecodeError as e: + # Catch JSON-related errors and raise as requests.JSONDecodeError + # This aliases json.JSONDecodeError and simplejson.JSONDecodeError + raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) + + @property + def links(self): + """Returns the parsed header links of the response, if any.""" + + header = self.headers.get("link") + + resolved_links = {} + + if header: + links = parse_header_links(header) + + for link in links: + key = link.get("rel") or link.get("url") + resolved_links[key] = link + + return resolved_links + + def raise_for_status(self): + """Raises :class:`HTTPError`, if one occurred.""" + + http_error_msg = "" + if isinstance(self.reason, bytes): + # We attempt to decode utf-8 first because some servers + # choose to localize their reason strings. If the string + # isn't utf-8, we fall back to iso-8859-1 for all other + # encodings. (See PR #3538) + try: + reason = self.reason.decode("utf-8") + except UnicodeDecodeError: + reason = self.reason.decode("iso-8859-1") + else: + reason = self.reason + + if 400 <= self.status_code < 500: + http_error_msg = ( + f"{self.status_code} Client Error: {reason} for url: {self.url}" + ) + + elif 500 <= self.status_code < 600: + http_error_msg = ( + f"{self.status_code} Server Error: {reason} for url: {self.url}" + ) + + if http_error_msg: + raise HTTPError(http_error_msg, response=self) + + def close(self): + """Releases the connection back to the pool. Once this method has been + called the underlying ``raw`` object must not be accessed again. + + *Note: Should not normally need to be called explicitly.* + """ + if not self._content_consumed: + self.raw.close() + + release_conn = getattr(self.raw, "release_conn", None) + if release_conn is not None: + release_conn() diff --git a/Backend/venv/lib/python3.12/site-packages/requests/packages.py b/Backend/venv/lib/python3.12/site-packages/requests/packages.py new file mode 100644 index 00000000..5ab3d8e2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/packages.py @@ -0,0 +1,23 @@ +import sys + +from .compat import chardet + +# This code exists for backwards compatibility reasons. +# I don't like it either. Just look the other way. :) + +for package in ("urllib3", "idna"): + locals()[package] = __import__(package) + # This traversal is apparently necessary such that the identities are + # preserved (requests.packages.urllib3.* is urllib3.*) + for mod in list(sys.modules): + if mod == package or mod.startswith(f"{package}."): + sys.modules[f"requests.packages.{mod}"] = sys.modules[mod] + +if chardet is not None: + target = chardet.__name__ + for mod in list(sys.modules): + if mod == target or mod.startswith(f"{target}."): + imported_mod = sys.modules[mod] + sys.modules[f"requests.packages.{mod}"] = imported_mod + mod = mod.replace(target, "chardet") + sys.modules[f"requests.packages.{mod}"] = imported_mod diff --git a/Backend/venv/lib/python3.12/site-packages/requests/sessions.py b/Backend/venv/lib/python3.12/site-packages/requests/sessions.py new file mode 100644 index 00000000..731550de --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/sessions.py @@ -0,0 +1,831 @@ +""" +requests.sessions +~~~~~~~~~~~~~~~~~ + +This module provides a Session object to manage and persist settings across +requests (cookies, auth, proxies). +""" +import os +import sys +import time +from collections import OrderedDict +from datetime import timedelta + +from ._internal_utils import to_native_string +from .adapters import HTTPAdapter +from .auth import _basic_auth_str +from .compat import Mapping, cookielib, urljoin, urlparse +from .cookies import ( + RequestsCookieJar, + cookiejar_from_dict, + extract_cookies_to_jar, + merge_cookies, +) +from .exceptions import ( + ChunkedEncodingError, + ContentDecodingError, + InvalidSchema, + TooManyRedirects, +) +from .hooks import default_hooks, dispatch_hook + +# formerly defined here, reexposed here for backward compatibility +from .models import ( # noqa: F401 + DEFAULT_REDIRECT_LIMIT, + REDIRECT_STATI, + PreparedRequest, + Request, +) +from .status_codes import codes +from .structures import CaseInsensitiveDict +from .utils import ( # noqa: F401 + DEFAULT_PORTS, + default_headers, + get_auth_from_url, + get_environ_proxies, + get_netrc_auth, + requote_uri, + resolve_proxies, + rewind_body, + should_bypass_proxies, + to_key_val_list, +) + +# Preferred clock, based on which one is more accurate on a given system. +if sys.platform == "win32": + preferred_clock = time.perf_counter +else: + preferred_clock = time.time + + +def merge_setting(request_setting, session_setting, dict_class=OrderedDict): + """Determines appropriate setting for a given request, taking into account + the explicit setting on that request, and the setting in the session. If a + setting is a dictionary, they will be merged together using `dict_class` + """ + + if session_setting is None: + return request_setting + + if request_setting is None: + return session_setting + + # Bypass if not a dictionary (e.g. verify) + if not ( + isinstance(session_setting, Mapping) and isinstance(request_setting, Mapping) + ): + return request_setting + + merged_setting = dict_class(to_key_val_list(session_setting)) + merged_setting.update(to_key_val_list(request_setting)) + + # Remove keys that are set to None. Extract keys first to avoid altering + # the dictionary during iteration. + none_keys = [k for (k, v) in merged_setting.items() if v is None] + for key in none_keys: + del merged_setting[key] + + return merged_setting + + +def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): + """Properly merges both requests and session hooks. + + This is necessary because when request_hooks == {'response': []}, the + merge breaks Session hooks entirely. + """ + if session_hooks is None or session_hooks.get("response") == []: + return request_hooks + + if request_hooks is None or request_hooks.get("response") == []: + return session_hooks + + return merge_setting(request_hooks, session_hooks, dict_class) + + +class SessionRedirectMixin: + def get_redirect_target(self, resp): + """Receives a Response. Returns a redirect URI or ``None``""" + # Due to the nature of how requests processes redirects this method will + # be called at least once upon the original response and at least twice + # on each subsequent redirect response (if any). + # If a custom mixin is used to handle this logic, it may be advantageous + # to cache the redirect location onto the response object as a private + # attribute. + if resp.is_redirect: + location = resp.headers["location"] + # Currently the underlying http module on py3 decode headers + # in latin1, but empirical evidence suggests that latin1 is very + # rarely used with non-ASCII characters in HTTP headers. + # It is more likely to get UTF8 header rather than latin1. + # This causes incorrect handling of UTF8 encoded location headers. + # To solve this, we re-encode the location in latin1. + location = location.encode("latin1") + return to_native_string(location, "utf8") + return None + + def should_strip_auth(self, old_url, new_url): + """Decide whether Authorization header should be removed when redirecting""" + old_parsed = urlparse(old_url) + new_parsed = urlparse(new_url) + if old_parsed.hostname != new_parsed.hostname: + return True + # Special case: allow http -> https redirect when using the standard + # ports. This isn't specified by RFC 7235, but is kept to avoid + # breaking backwards compatibility with older versions of requests + # that allowed any redirects on the same host. + if ( + old_parsed.scheme == "http" + and old_parsed.port in (80, None) + and new_parsed.scheme == "https" + and new_parsed.port in (443, None) + ): + return False + + # Handle default port usage corresponding to scheme. + changed_port = old_parsed.port != new_parsed.port + changed_scheme = old_parsed.scheme != new_parsed.scheme + default_port = (DEFAULT_PORTS.get(old_parsed.scheme, None), None) + if ( + not changed_scheme + and old_parsed.port in default_port + and new_parsed.port in default_port + ): + return False + + # Standard case: root URI must match + return changed_port or changed_scheme + + def resolve_redirects( + self, + resp, + req, + stream=False, + timeout=None, + verify=True, + cert=None, + proxies=None, + yield_requests=False, + **adapter_kwargs, + ): + """Receives a Response. Returns a generator of Responses or Requests.""" + + hist = [] # keep track of history + + url = self.get_redirect_target(resp) + previous_fragment = urlparse(req.url).fragment + while url: + prepared_request = req.copy() + + # Update history and keep track of redirects. + # resp.history must ignore the original request in this loop + hist.append(resp) + resp.history = hist[1:] + + try: + resp.content # Consume socket so it can be released + except (ChunkedEncodingError, ContentDecodingError, RuntimeError): + resp.raw.read(decode_content=False) + + if len(resp.history) >= self.max_redirects: + raise TooManyRedirects( + f"Exceeded {self.max_redirects} redirects.", response=resp + ) + + # Release the connection back into the pool. + resp.close() + + # Handle redirection without scheme (see: RFC 1808 Section 4) + if url.startswith("//"): + parsed_rurl = urlparse(resp.url) + url = ":".join([to_native_string(parsed_rurl.scheme), url]) + + # Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2) + parsed = urlparse(url) + if parsed.fragment == "" and previous_fragment: + parsed = parsed._replace(fragment=previous_fragment) + elif parsed.fragment: + previous_fragment = parsed.fragment + url = parsed.geturl() + + # Facilitate relative 'location' headers, as allowed by RFC 7231. + # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') + # Compliant with RFC3986, we percent encode the url. + if not parsed.netloc: + url = urljoin(resp.url, requote_uri(url)) + else: + url = requote_uri(url) + + prepared_request.url = to_native_string(url) + + self.rebuild_method(prepared_request, resp) + + # https://github.com/psf/requests/issues/1084 + if resp.status_code not in ( + codes.temporary_redirect, + codes.permanent_redirect, + ): + # https://github.com/psf/requests/issues/3490 + purged_headers = ("Content-Length", "Content-Type", "Transfer-Encoding") + for header in purged_headers: + prepared_request.headers.pop(header, None) + prepared_request.body = None + + headers = prepared_request.headers + headers.pop("Cookie", None) + + # Extract any cookies sent on the response to the cookiejar + # in the new request. Because we've mutated our copied prepared + # request, use the old one that we haven't yet touched. + extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) + merge_cookies(prepared_request._cookies, self.cookies) + prepared_request.prepare_cookies(prepared_request._cookies) + + # Rebuild auth and proxy information. + proxies = self.rebuild_proxies(prepared_request, proxies) + self.rebuild_auth(prepared_request, resp) + + # A failed tell() sets `_body_position` to `object()`. This non-None + # value ensures `rewindable` will be True, allowing us to raise an + # UnrewindableBodyError, instead of hanging the connection. + rewindable = prepared_request._body_position is not None and ( + "Content-Length" in headers or "Transfer-Encoding" in headers + ) + + # Attempt to rewind consumed file-like object. + if rewindable: + rewind_body(prepared_request) + + # Override the original request. + req = prepared_request + + if yield_requests: + yield req + else: + resp = self.send( + req, + stream=stream, + timeout=timeout, + verify=verify, + cert=cert, + proxies=proxies, + allow_redirects=False, + **adapter_kwargs, + ) + + extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) + + # extract redirect url, if any, for the next loop + url = self.get_redirect_target(resp) + yield resp + + def rebuild_auth(self, prepared_request, response): + """When being redirected we may want to strip authentication from the + request to avoid leaking credentials. This method intelligently removes + and reapplies authentication where possible to avoid credential loss. + """ + headers = prepared_request.headers + url = prepared_request.url + + if "Authorization" in headers and self.should_strip_auth( + response.request.url, url + ): + # If we get redirected to a new host, we should strip out any + # authentication headers. + del headers["Authorization"] + + # .netrc might have more auth for us on our new host. + new_auth = get_netrc_auth(url) if self.trust_env else None + if new_auth is not None: + prepared_request.prepare_auth(new_auth) + + def rebuild_proxies(self, prepared_request, proxies): + """This method re-evaluates the proxy configuration by considering the + environment variables. If we are redirected to a URL covered by + NO_PROXY, we strip the proxy configuration. Otherwise, we set missing + proxy keys for this URL (in case they were stripped by a previous + redirect). + + This method also replaces the Proxy-Authorization header where + necessary. + + :rtype: dict + """ + headers = prepared_request.headers + scheme = urlparse(prepared_request.url).scheme + new_proxies = resolve_proxies(prepared_request, proxies, self.trust_env) + + if "Proxy-Authorization" in headers: + del headers["Proxy-Authorization"] + + try: + username, password = get_auth_from_url(new_proxies[scheme]) + except KeyError: + username, password = None, None + + # urllib3 handles proxy authorization for us in the standard adapter. + # Avoid appending this to TLS tunneled requests where it may be leaked. + if not scheme.startswith("https") and username and password: + headers["Proxy-Authorization"] = _basic_auth_str(username, password) + + return new_proxies + + def rebuild_method(self, prepared_request, response): + """When being redirected we may want to change the method of the request + based on certain specs or browser behavior. + """ + method = prepared_request.method + + # https://tools.ietf.org/html/rfc7231#section-6.4.4 + if response.status_code == codes.see_other and method != "HEAD": + method = "GET" + + # Do what the browsers do, despite standards... + # First, turn 302s into GETs. + if response.status_code == codes.found and method != "HEAD": + method = "GET" + + # Second, if a POST is responded to with a 301, turn it into a GET. + # This bizarre behaviour is explained in Issue 1704. + if response.status_code == codes.moved and method == "POST": + method = "GET" + + prepared_request.method = method + + +class Session(SessionRedirectMixin): + """A Requests session. + + Provides cookie persistence, connection-pooling, and configuration. + + Basic Usage:: + + >>> import requests + >>> s = requests.Session() + >>> s.get('https://httpbin.org/get') + + + Or as a context manager:: + + >>> with requests.Session() as s: + ... s.get('https://httpbin.org/get') + + """ + + __attrs__ = [ + "headers", + "cookies", + "auth", + "proxies", + "hooks", + "params", + "verify", + "cert", + "adapters", + "stream", + "trust_env", + "max_redirects", + ] + + def __init__(self): + #: A case-insensitive dictionary of headers to be sent on each + #: :class:`Request ` sent from this + #: :class:`Session `. + self.headers = default_headers() + + #: Default Authentication tuple or object to attach to + #: :class:`Request `. + self.auth = None + + #: Dictionary mapping protocol or protocol and host to the URL of the proxy + #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to + #: be used on each :class:`Request `. + self.proxies = {} + + #: Event-handling hooks. + self.hooks = default_hooks() + + #: Dictionary of querystring data to attach to each + #: :class:`Request `. The dictionary values may be lists for + #: representing multivalued query parameters. + self.params = {} + + #: Stream response content default. + self.stream = False + + #: SSL Verification default. + #: Defaults to `True`, requiring requests to verify the TLS certificate at the + #: remote end. + #: If verify is set to `False`, requests will accept any TLS certificate + #: presented by the server, and will ignore hostname mismatches and/or + #: expired certificates, which will make your application vulnerable to + #: man-in-the-middle (MitM) attacks. + #: Only set this to `False` for testing. + self.verify = True + + #: SSL client certificate default, if String, path to ssl client + #: cert file (.pem). If Tuple, ('cert', 'key') pair. + self.cert = None + + #: Maximum number of redirects allowed. If the request exceeds this + #: limit, a :class:`TooManyRedirects` exception is raised. + #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is + #: 30. + self.max_redirects = DEFAULT_REDIRECT_LIMIT + + #: Trust environment settings for proxy configuration, default + #: authentication and similar. + self.trust_env = True + + #: A CookieJar containing all currently outstanding cookies set on this + #: session. By default it is a + #: :class:`RequestsCookieJar `, but + #: may be any other ``cookielib.CookieJar`` compatible object. + self.cookies = cookiejar_from_dict({}) + + # Default connection adapters. + self.adapters = OrderedDict() + self.mount("https://", HTTPAdapter()) + self.mount("http://", HTTPAdapter()) + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def prepare_request(self, request): + """Constructs a :class:`PreparedRequest ` for + transmission and returns it. The :class:`PreparedRequest` has settings + merged from the :class:`Request ` instance and those of the + :class:`Session`. + + :param request: :class:`Request` instance to prepare with this + session's settings. + :rtype: requests.PreparedRequest + """ + cookies = request.cookies or {} + + # Bootstrap CookieJar. + if not isinstance(cookies, cookielib.CookieJar): + cookies = cookiejar_from_dict(cookies) + + # Merge with session cookies + merged_cookies = merge_cookies( + merge_cookies(RequestsCookieJar(), self.cookies), cookies + ) + + # Set environment's basic authentication if not explicitly set. + auth = request.auth + if self.trust_env and not auth and not self.auth: + auth = get_netrc_auth(request.url) + + p = PreparedRequest() + p.prepare( + method=request.method.upper(), + url=request.url, + files=request.files, + data=request.data, + json=request.json, + headers=merge_setting( + request.headers, self.headers, dict_class=CaseInsensitiveDict + ), + params=merge_setting(request.params, self.params), + auth=merge_setting(auth, self.auth), + cookies=merged_cookies, + hooks=merge_hooks(request.hooks, self.hooks), + ) + return p + + def request( + self, + method, + url, + params=None, + data=None, + headers=None, + cookies=None, + files=None, + auth=None, + timeout=None, + allow_redirects=True, + proxies=None, + hooks=None, + stream=None, + verify=None, + cert=None, + json=None, + ): + """Constructs a :class:`Request `, prepares it and sends it. + Returns :class:`Response ` object. + + :param method: method for the new :class:`Request` object. + :param url: URL for the new :class:`Request` object. + :param params: (optional) Dictionary or bytes to be sent in the query + string for the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) json to send in the body of the + :class:`Request`. + :param headers: (optional) Dictionary of HTTP Headers to send with the + :class:`Request`. + :param cookies: (optional) Dict or CookieJar object to send with the + :class:`Request`. + :param files: (optional) Dictionary of ``'filename': file-like-objects`` + for multipart encoding upload. + :param auth: (optional) Auth tuple or callable to enable + Basic/Digest/Custom HTTP Auth. + :param timeout: (optional) How many seconds to wait for the server to send + data before giving up, as a float, or a :ref:`(connect timeout, + read timeout) ` tuple. + :type timeout: float or tuple + :param allow_redirects: (optional) Set to True by default. + :type allow_redirects: bool + :param proxies: (optional) Dictionary mapping protocol or protocol and + hostname to the URL of the proxy. + :param hooks: (optional) Dictionary mapping hook name to one event or + list of events, event must be callable. + :param stream: (optional) whether to immediately download the response + content. Defaults to ``False``. + :param verify: (optional) Either a boolean, in which case it controls whether we verify + the server's TLS certificate, or a string, in which case it must be a path + to a CA bundle to use. Defaults to ``True``. When set to + ``False``, requests will accept any TLS certificate presented by + the server, and will ignore hostname mismatches and/or expired + certificates, which will make your application vulnerable to + man-in-the-middle (MitM) attacks. Setting verify to ``False`` + may be useful during local development or testing. + :param cert: (optional) if String, path to ssl client cert file (.pem). + If Tuple, ('cert', 'key') pair. + :rtype: requests.Response + """ + # Create the Request. + req = Request( + method=method.upper(), + url=url, + headers=headers, + files=files, + data=data or {}, + json=json, + params=params or {}, + auth=auth, + cookies=cookies, + hooks=hooks, + ) + prep = self.prepare_request(req) + + proxies = proxies or {} + + settings = self.merge_environment_settings( + prep.url, proxies, stream, verify, cert + ) + + # Send the request. + send_kwargs = { + "timeout": timeout, + "allow_redirects": allow_redirects, + } + send_kwargs.update(settings) + resp = self.send(prep, **send_kwargs) + + return resp + + def get(self, url, **kwargs): + r"""Sends a GET request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", True) + return self.request("GET", url, **kwargs) + + def options(self, url, **kwargs): + r"""Sends a OPTIONS request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", True) + return self.request("OPTIONS", url, **kwargs) + + def head(self, url, **kwargs): + r"""Sends a HEAD request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + kwargs.setdefault("allow_redirects", False) + return self.request("HEAD", url, **kwargs) + + def post(self, url, data=None, json=None, **kwargs): + r"""Sends a POST request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param json: (optional) json to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("POST", url, data=data, json=json, **kwargs) + + def put(self, url, data=None, **kwargs): + r"""Sends a PUT request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("PUT", url, data=data, **kwargs) + + def patch(self, url, data=None, **kwargs): + r"""Sends a PATCH request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("PATCH", url, data=data, **kwargs) + + def delete(self, url, **kwargs): + r"""Sends a DELETE request. Returns :class:`Response` object. + + :param url: URL for the new :class:`Request` object. + :param \*\*kwargs: Optional arguments that ``request`` takes. + :rtype: requests.Response + """ + + return self.request("DELETE", url, **kwargs) + + def send(self, request, **kwargs): + """Send a given PreparedRequest. + + :rtype: requests.Response + """ + # Set defaults that the hooks can utilize to ensure they always have + # the correct parameters to reproduce the previous request. + kwargs.setdefault("stream", self.stream) + kwargs.setdefault("verify", self.verify) + kwargs.setdefault("cert", self.cert) + if "proxies" not in kwargs: + kwargs["proxies"] = resolve_proxies(request, self.proxies, self.trust_env) + + # It's possible that users might accidentally send a Request object. + # Guard against that specific failure case. + if isinstance(request, Request): + raise ValueError("You can only send PreparedRequests.") + + # Set up variables needed for resolve_redirects and dispatching of hooks + allow_redirects = kwargs.pop("allow_redirects", True) + stream = kwargs.get("stream") + hooks = request.hooks + + # Get the appropriate adapter to use + adapter = self.get_adapter(url=request.url) + + # Start time (approximately) of the request + start = preferred_clock() + + # Send the request + r = adapter.send(request, **kwargs) + + # Total elapsed time of the request (approximately) + elapsed = preferred_clock() - start + r.elapsed = timedelta(seconds=elapsed) + + # Response manipulation hooks + r = dispatch_hook("response", hooks, r, **kwargs) + + # Persist cookies + if r.history: + # If the hooks create history then we want those cookies too + for resp in r.history: + extract_cookies_to_jar(self.cookies, resp.request, resp.raw) + + extract_cookies_to_jar(self.cookies, request, r.raw) + + # Resolve redirects if allowed. + if allow_redirects: + # Redirect resolving generator. + gen = self.resolve_redirects(r, request, **kwargs) + history = [resp for resp in gen] + else: + history = [] + + # Shuffle things around if there's history. + if history: + # Insert the first (original) request at the start + history.insert(0, r) + # Get the last request made + r = history.pop() + r.history = history + + # If redirects aren't being followed, store the response on the Request for Response.next(). + if not allow_redirects: + try: + r._next = next( + self.resolve_redirects(r, request, yield_requests=True, **kwargs) + ) + except StopIteration: + pass + + if not stream: + r.content + + return r + + def merge_environment_settings(self, url, proxies, stream, verify, cert): + """ + Check the environment and merge it with some settings. + + :rtype: dict + """ + # Gather clues from the surrounding environment. + if self.trust_env: + # Set environment's proxies. + no_proxy = proxies.get("no_proxy") if proxies is not None else None + env_proxies = get_environ_proxies(url, no_proxy=no_proxy) + for k, v in env_proxies.items(): + proxies.setdefault(k, v) + + # Look for requests environment configuration + # and be compatible with cURL. + if verify is True or verify is None: + verify = ( + os.environ.get("REQUESTS_CA_BUNDLE") + or os.environ.get("CURL_CA_BUNDLE") + or verify + ) + + # Merge all the kwargs. + proxies = merge_setting(proxies, self.proxies) + stream = merge_setting(stream, self.stream) + verify = merge_setting(verify, self.verify) + cert = merge_setting(cert, self.cert) + + return {"proxies": proxies, "stream": stream, "verify": verify, "cert": cert} + + def get_adapter(self, url): + """ + Returns the appropriate connection adapter for the given URL. + + :rtype: requests.adapters.BaseAdapter + """ + for prefix, adapter in self.adapters.items(): + if url.lower().startswith(prefix.lower()): + return adapter + + # Nothing matches :-/ + raise InvalidSchema(f"No connection adapters were found for {url!r}") + + def close(self): + """Closes all adapters and as such the session""" + for v in self.adapters.values(): + v.close() + + def mount(self, prefix, adapter): + """Registers a connection adapter to a prefix. + + Adapters are sorted in descending order by prefix length. + """ + self.adapters[prefix] = adapter + keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] + + for key in keys_to_move: + self.adapters[key] = self.adapters.pop(key) + + def __getstate__(self): + state = {attr: getattr(self, attr, None) for attr in self.__attrs__} + return state + + def __setstate__(self, state): + for attr, value in state.items(): + setattr(self, attr, value) + + +def session(): + """ + Returns a :class:`Session` for context-management. + + .. deprecated:: 1.0.0 + + This method has been deprecated since version 1.0.0 and is only kept for + backwards compatibility. New code should use :class:`~requests.sessions.Session` + to create a session. This may be removed at a future date. + + :rtype: Session + """ + return Session() diff --git a/Backend/venv/lib/python3.12/site-packages/requests/status_codes.py b/Backend/venv/lib/python3.12/site-packages/requests/status_codes.py new file mode 100644 index 00000000..c7945a2f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/status_codes.py @@ -0,0 +1,128 @@ +r""" +The ``codes`` object defines a mapping from common names for HTTP statuses +to their numerical codes, accessible either as attributes or as dictionary +items. + +Example:: + + >>> import requests + >>> requests.codes['temporary_redirect'] + 307 + >>> requests.codes.teapot + 418 + >>> requests.codes['\o/'] + 200 + +Some codes have multiple names, and both upper- and lower-case versions of +the names are allowed. For example, ``codes.ok``, ``codes.OK``, and +``codes.okay`` all correspond to the HTTP status code 200. +""" + +from .structures import LookupDict + +_codes = { + # Informational. + 100: ("continue",), + 101: ("switching_protocols",), + 102: ("processing", "early-hints"), + 103: ("checkpoint",), + 122: ("uri_too_long", "request_uri_too_long"), + 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"), + 201: ("created",), + 202: ("accepted",), + 203: ("non_authoritative_info", "non_authoritative_information"), + 204: ("no_content",), + 205: ("reset_content", "reset"), + 206: ("partial_content", "partial"), + 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"), + 208: ("already_reported",), + 226: ("im_used",), + # Redirection. + 300: ("multiple_choices",), + 301: ("moved_permanently", "moved", "\\o-"), + 302: ("found",), + 303: ("see_other", "other"), + 304: ("not_modified",), + 305: ("use_proxy",), + 306: ("switch_proxy",), + 307: ("temporary_redirect", "temporary_moved", "temporary"), + 308: ( + "permanent_redirect", + "resume_incomplete", + "resume", + ), # "resume" and "resume_incomplete" to be removed in 3.0 + # Client Error. + 400: ("bad_request", "bad"), + 401: ("unauthorized",), + 402: ("payment_required", "payment"), + 403: ("forbidden",), + 404: ("not_found", "-o-"), + 405: ("method_not_allowed", "not_allowed"), + 406: ("not_acceptable",), + 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"), + 408: ("request_timeout", "timeout"), + 409: ("conflict",), + 410: ("gone",), + 411: ("length_required",), + 412: ("precondition_failed", "precondition"), + 413: ("request_entity_too_large", "content_too_large"), + 414: ("request_uri_too_large", "uri_too_long"), + 415: ("unsupported_media_type", "unsupported_media", "media_type"), + 416: ( + "requested_range_not_satisfiable", + "requested_range", + "range_not_satisfiable", + ), + 417: ("expectation_failed",), + 418: ("im_a_teapot", "teapot", "i_am_a_teapot"), + 421: ("misdirected_request",), + 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"), + 423: ("locked",), + 424: ("failed_dependency", "dependency"), + 425: ("unordered_collection", "unordered", "too_early"), + 426: ("upgrade_required", "upgrade"), + 428: ("precondition_required", "precondition"), + 429: ("too_many_requests", "too_many"), + 431: ("header_fields_too_large", "fields_too_large"), + 444: ("no_response", "none"), + 449: ("retry_with", "retry"), + 450: ("blocked_by_windows_parental_controls", "parental_controls"), + 451: ("unavailable_for_legal_reasons", "legal_reasons"), + 499: ("client_closed_request",), + # Server Error. + 500: ("internal_server_error", "server_error", "/o\\", "✗"), + 501: ("not_implemented",), + 502: ("bad_gateway",), + 503: ("service_unavailable", "unavailable"), + 504: ("gateway_timeout",), + 505: ("http_version_not_supported", "http_version"), + 506: ("variant_also_negotiates",), + 507: ("insufficient_storage",), + 509: ("bandwidth_limit_exceeded", "bandwidth"), + 510: ("not_extended",), + 511: ("network_authentication_required", "network_auth", "network_authentication"), +} + +codes = LookupDict(name="status_codes") + + +def _init(): + for code, titles in _codes.items(): + for title in titles: + setattr(codes, title, code) + if not title.startswith(("\\", "/")): + setattr(codes, title.upper(), code) + + def doc(code): + names = ", ".join(f"``{n}``" for n in _codes[code]) + return "* %d: %s" % (code, names) + + global __doc__ + __doc__ = ( + __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes)) + if __doc__ is not None + else None + ) + + +_init() diff --git a/Backend/venv/lib/python3.12/site-packages/requests/structures.py b/Backend/venv/lib/python3.12/site-packages/requests/structures.py new file mode 100644 index 00000000..188e13e4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/structures.py @@ -0,0 +1,99 @@ +""" +requests.structures +~~~~~~~~~~~~~~~~~~~ + +Data structures that power Requests. +""" + +from collections import OrderedDict + +from .compat import Mapping, MutableMapping + + +class CaseInsensitiveDict(MutableMapping): + """A case-insensitive ``dict``-like object. + + Implements all methods and operations of + ``MutableMapping`` as well as dict's ``copy``. Also + provides ``lower_items``. + + All keys are expected to be strings. The structure remembers the + case of the last key to be set, and ``iter(instance)``, + ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` + will contain case-sensitive keys. However, querying and contains + testing is case insensitive:: + + cid = CaseInsensitiveDict() + cid['Accept'] = 'application/json' + cid['aCCEPT'] == 'application/json' # True + list(cid) == ['Accept'] # True + + For example, ``headers['content-encoding']`` will return the + value of a ``'Content-Encoding'`` response header, regardless + of how the header name was originally stored. + + If the constructor, ``.update``, or equality comparison + operations are given keys that have equal ``.lower()``s, the + behavior is undefined. + """ + + def __init__(self, data=None, **kwargs): + self._store = OrderedDict() + if data is None: + data = {} + self.update(data, **kwargs) + + def __setitem__(self, key, value): + # Use the lowercased key for lookups, but store the actual + # key alongside the value. + self._store[key.lower()] = (key, value) + + def __getitem__(self, key): + return self._store[key.lower()][1] + + def __delitem__(self, key): + del self._store[key.lower()] + + def __iter__(self): + return (casedkey for casedkey, mappedvalue in self._store.values()) + + def __len__(self): + return len(self._store) + + def lower_items(self): + """Like iteritems(), but with all lowercase keys.""" + return ((lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items()) + + def __eq__(self, other): + if isinstance(other, Mapping): + other = CaseInsensitiveDict(other) + else: + return NotImplemented + # Compare insensitively + return dict(self.lower_items()) == dict(other.lower_items()) + + # Copy is required + def copy(self): + return CaseInsensitiveDict(self._store.values()) + + def __repr__(self): + return str(dict(self.items())) + + +class LookupDict(dict): + """Dictionary lookup object.""" + + def __init__(self, name=None): + self.name = name + super().__init__() + + def __repr__(self): + return f"" + + def __getitem__(self, key): + # We allow fall-through here, so values default to None + + return self.__dict__.get(key, None) + + def get(self, key, default=None): + return self.__dict__.get(key, default) diff --git a/Backend/venv/lib/python3.12/site-packages/requests/utils.py b/Backend/venv/lib/python3.12/site-packages/requests/utils.py new file mode 100644 index 00000000..8ab55852 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/requests/utils.py @@ -0,0 +1,1086 @@ +""" +requests.utils +~~~~~~~~~~~~~~ + +This module provides utility functions that are used within Requests +that are also useful for external consumption. +""" + +import codecs +import contextlib +import io +import os +import re +import socket +import struct +import sys +import tempfile +import warnings +import zipfile +from collections import OrderedDict + +from urllib3.util import make_headers, parse_url + +from . import certs +from .__version__ import __version__ + +# to_native_string is unused here, but imported here for backwards compatibility +from ._internal_utils import ( # noqa: F401 + _HEADER_VALIDATORS_BYTE, + _HEADER_VALIDATORS_STR, + HEADER_VALIDATORS, + to_native_string, +) +from .compat import ( + Mapping, + basestring, + bytes, + getproxies, + getproxies_environment, + integer_types, + is_urllib3_1, +) +from .compat import parse_http_list as _parse_list_header +from .compat import ( + proxy_bypass, + proxy_bypass_environment, + quote, + str, + unquote, + urlparse, + urlunparse, +) +from .cookies import cookiejar_from_dict +from .exceptions import ( + FileModeWarning, + InvalidHeader, + InvalidURL, + UnrewindableBodyError, +) +from .structures import CaseInsensitiveDict + +NETRC_FILES = (".netrc", "_netrc") + +DEFAULT_CA_BUNDLE_PATH = certs.where() + +DEFAULT_PORTS = {"http": 80, "https": 443} + +# Ensure that ', ' is used to preserve previous delimiter behavior. +DEFAULT_ACCEPT_ENCODING = ", ".join( + re.split(r",\s*", make_headers(accept_encoding=True)["accept-encoding"]) +) + + +if sys.platform == "win32": + # provide a proxy_bypass version on Windows without DNS lookups + + def proxy_bypass_registry(host): + try: + import winreg + except ImportError: + return False + + try: + internetSettings = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", + ) + # ProxyEnable could be REG_SZ or REG_DWORD, normalizing it + proxyEnable = int(winreg.QueryValueEx(internetSettings, "ProxyEnable")[0]) + # ProxyOverride is almost always a string + proxyOverride = winreg.QueryValueEx(internetSettings, "ProxyOverride")[0] + except (OSError, ValueError): + return False + if not proxyEnable or not proxyOverride: + return False + + # make a check value list from the registry entry: replace the + # '' string by the localhost entry and the corresponding + # canonical entry. + proxyOverride = proxyOverride.split(";") + # filter out empty strings to avoid re.match return true in the following code. + proxyOverride = filter(None, proxyOverride) + # now check if we match one of the registry values. + for test in proxyOverride: + if test == "": + if "." not in host: + return True + test = test.replace(".", r"\.") # mask dots + test = test.replace("*", r".*") # change glob sequence + test = test.replace("?", r".") # change glob char + if re.match(test, host, re.I): + return True + return False + + def proxy_bypass(host): # noqa + """Return True, if the host should be bypassed. + + Checks proxy settings gathered from the environment, if specified, + or the registry. + """ + if getproxies_environment(): + return proxy_bypass_environment(host) + else: + return proxy_bypass_registry(host) + + +def dict_to_sequence(d): + """Returns an internal sequence dictionary update.""" + + if hasattr(d, "items"): + d = d.items() + + return d + + +def super_len(o): + total_length = None + current_position = 0 + + if not is_urllib3_1 and isinstance(o, str): + # urllib3 2.x+ treats all strings as utf-8 instead + # of latin-1 (iso-8859-1) like http.client. + o = o.encode("utf-8") + + if hasattr(o, "__len__"): + total_length = len(o) + + elif hasattr(o, "len"): + total_length = o.len + + elif hasattr(o, "fileno"): + try: + fileno = o.fileno() + except (io.UnsupportedOperation, AttributeError): + # AttributeError is a surprising exception, seeing as how we've just checked + # that `hasattr(o, 'fileno')`. It happens for objects obtained via + # `Tarfile.extractfile()`, per issue 5229. + pass + else: + total_length = os.fstat(fileno).st_size + + # Having used fstat to determine the file length, we need to + # confirm that this file was opened up in binary mode. + if "b" not in o.mode: + warnings.warn( + ( + "Requests has determined the content-length for this " + "request using the binary size of the file: however, the " + "file has been opened in text mode (i.e. without the 'b' " + "flag in the mode). This may lead to an incorrect " + "content-length. In Requests 3.0, support will be removed " + "for files in text mode." + ), + FileModeWarning, + ) + + if hasattr(o, "tell"): + try: + current_position = o.tell() + except OSError: + # This can happen in some weird situations, such as when the file + # is actually a special file descriptor like stdin. In this + # instance, we don't know what the length is, so set it to zero and + # let requests chunk it instead. + if total_length is not None: + current_position = total_length + else: + if hasattr(o, "seek") and total_length is None: + # StringIO and BytesIO have seek but no usable fileno + try: + # seek to end of file + o.seek(0, 2) + total_length = o.tell() + + # seek back to current position to support + # partially read file-like objects + o.seek(current_position or 0) + except OSError: + total_length = 0 + + if total_length is None: + total_length = 0 + + return max(0, total_length - current_position) + + +def get_netrc_auth(url, raise_errors=False): + """Returns the Requests tuple auth for a given url from netrc.""" + + netrc_file = os.environ.get("NETRC") + if netrc_file is not None: + netrc_locations = (netrc_file,) + else: + netrc_locations = (f"~/{f}" for f in NETRC_FILES) + + try: + from netrc import NetrcParseError, netrc + + netrc_path = None + + for f in netrc_locations: + loc = os.path.expanduser(f) + if os.path.exists(loc): + netrc_path = loc + break + + # Abort early if there isn't one. + if netrc_path is None: + return + + ri = urlparse(url) + host = ri.hostname + + try: + _netrc = netrc(netrc_path).authenticators(host) + if _netrc: + # Return with login / password + login_i = 0 if _netrc[0] else 1 + return (_netrc[login_i], _netrc[2]) + except (NetrcParseError, OSError): + # If there was a parsing error or a permissions issue reading the file, + # we'll just skip netrc auth unless explicitly asked to raise errors. + if raise_errors: + raise + + # App Engine hackiness. + except (ImportError, AttributeError): + pass + + +def guess_filename(obj): + """Tries to guess the filename of the given object.""" + name = getattr(obj, "name", None) + if name and isinstance(name, basestring) and name[0] != "<" and name[-1] != ">": + return os.path.basename(name) + + +def extract_zipped_paths(path): + """Replace nonexistent paths that look like they refer to a member of a zip + archive with the location of an extracted copy of the target, or else + just return the provided path unchanged. + """ + if os.path.exists(path): + # this is already a valid path, no need to do anything further + return path + + # find the first valid part of the provided path and treat that as a zip archive + # assume the rest of the path is the name of a member in the archive + archive, member = os.path.split(path) + while archive and not os.path.exists(archive): + archive, prefix = os.path.split(archive) + if not prefix: + # If we don't check for an empty prefix after the split (in other words, archive remains unchanged after the split), + # we _can_ end up in an infinite loop on a rare corner case affecting a small number of users + break + member = "/".join([prefix, member]) + + if not zipfile.is_zipfile(archive): + return path + + zip_file = zipfile.ZipFile(archive) + if member not in zip_file.namelist(): + return path + + # we have a valid zip archive and a valid member of that archive + tmp = tempfile.gettempdir() + extracted_path = os.path.join(tmp, member.split("/")[-1]) + if not os.path.exists(extracted_path): + # use read + write to avoid the creating nested folders, we only want the file, avoids mkdir racing condition + with atomic_open(extracted_path) as file_handler: + file_handler.write(zip_file.read(member)) + return extracted_path + + +@contextlib.contextmanager +def atomic_open(filename): + """Write a file to the disk in an atomic fashion""" + tmp_descriptor, tmp_name = tempfile.mkstemp(dir=os.path.dirname(filename)) + try: + with os.fdopen(tmp_descriptor, "wb") as tmp_handler: + yield tmp_handler + os.replace(tmp_name, filename) + except BaseException: + os.remove(tmp_name) + raise + + +def from_key_val_list(value): + """Take an object and test to see if it can be represented as a + dictionary. Unless it can not be represented as such, return an + OrderedDict, e.g., + + :: + + >>> from_key_val_list([('key', 'val')]) + OrderedDict([('key', 'val')]) + >>> from_key_val_list('string') + Traceback (most recent call last): + ... + ValueError: cannot encode objects that are not 2-tuples + >>> from_key_val_list({'key': 'val'}) + OrderedDict([('key', 'val')]) + + :rtype: OrderedDict + """ + if value is None: + return None + + if isinstance(value, (str, bytes, bool, int)): + raise ValueError("cannot encode objects that are not 2-tuples") + + return OrderedDict(value) + + +def to_key_val_list(value): + """Take an object and test to see if it can be represented as a + dictionary. If it can be, return a list of tuples, e.g., + + :: + + >>> to_key_val_list([('key', 'val')]) + [('key', 'val')] + >>> to_key_val_list({'key': 'val'}) + [('key', 'val')] + >>> to_key_val_list('string') + Traceback (most recent call last): + ... + ValueError: cannot encode objects that are not 2-tuples + + :rtype: list + """ + if value is None: + return None + + if isinstance(value, (str, bytes, bool, int)): + raise ValueError("cannot encode objects that are not 2-tuples") + + if isinstance(value, Mapping): + value = value.items() + + return list(value) + + +# From mitsuhiko/werkzeug (used with permission). +def parse_list_header(value): + """Parse lists as described by RFC 2068 Section 2. + + In particular, parse comma-separated lists where the elements of + the list may include quoted-strings. A quoted-string could + contain a comma. A non-quoted string could have quotes in the + middle. Quotes are removed automatically after parsing. + + It basically works like :func:`parse_set_header` just that items + may appear multiple times and case sensitivity is preserved. + + The return value is a standard :class:`list`: + + >>> parse_list_header('token, "quoted value"') + ['token', 'quoted value'] + + To create a header from the :class:`list` again, use the + :func:`dump_header` function. + + :param value: a string with a list header. + :return: :class:`list` + :rtype: list + """ + result = [] + for item in _parse_list_header(value): + if item[:1] == item[-1:] == '"': + item = unquote_header_value(item[1:-1]) + result.append(item) + return result + + +# From mitsuhiko/werkzeug (used with permission). +def parse_dict_header(value): + """Parse lists of key, value pairs as described by RFC 2068 Section 2 and + convert them into a python dict: + + >>> d = parse_dict_header('foo="is a fish", bar="as well"') + >>> type(d) is dict + True + >>> sorted(d.items()) + [('bar', 'as well'), ('foo', 'is a fish')] + + If there is no value for a key it will be `None`: + + >>> parse_dict_header('key_without_value') + {'key_without_value': None} + + To create a header from the :class:`dict` again, use the + :func:`dump_header` function. + + :param value: a string with a dict header. + :return: :class:`dict` + :rtype: dict + """ + result = {} + for item in _parse_list_header(value): + if "=" not in item: + result[item] = None + continue + name, value = item.split("=", 1) + if value[:1] == value[-1:] == '"': + value = unquote_header_value(value[1:-1]) + result[name] = value + return result + + +# From mitsuhiko/werkzeug (used with permission). +def unquote_header_value(value, is_filename=False): + r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). + This does not use the real unquoting but what browsers are actually + using for quoting. + + :param value: the header value to unquote. + :rtype: str + """ + if value and value[0] == value[-1] == '"': + # this is not the real unquoting, but fixing this so that the + # RFC is met will result in bugs with internet explorer and + # probably some other browsers as well. IE for example is + # uploading files with "C:\foo\bar.txt" as filename + value = value[1:-1] + + # if this is a filename and the starting characters look like + # a UNC path, then just return the value without quotes. Using the + # replace sequence below on a UNC path has the effect of turning + # the leading double slash into a single slash and then + # _fix_ie_filename() doesn't work correctly. See #458. + if not is_filename or value[:2] != "\\\\": + return value.replace("\\\\", "\\").replace('\\"', '"') + return value + + +def dict_from_cookiejar(cj): + """Returns a key/value dictionary from a CookieJar. + + :param cj: CookieJar object to extract cookies from. + :rtype: dict + """ + + cookie_dict = {cookie.name: cookie.value for cookie in cj} + return cookie_dict + + +def add_dict_to_cookiejar(cj, cookie_dict): + """Returns a CookieJar from a key/value dictionary. + + :param cj: CookieJar to insert cookies into. + :param cookie_dict: Dict of key/values to insert into CookieJar. + :rtype: CookieJar + """ + + return cookiejar_from_dict(cookie_dict, cj) + + +def get_encodings_from_content(content): + """Returns encodings from given content string. + + :param content: bytestring to extract encodings from. + """ + warnings.warn( + ( + "In requests 3.0, get_encodings_from_content will be removed. For " + "more information, please see the discussion on issue #2266. (This" + " warning should only appear once.)" + ), + DeprecationWarning, + ) + + charset_re = re.compile(r']', flags=re.I) + pragma_re = re.compile(r']', flags=re.I) + xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') + + return ( + charset_re.findall(content) + + pragma_re.findall(content) + + xml_re.findall(content) + ) + + +def _parse_content_type_header(header): + """Returns content type and parameters from given header + + :param header: string + :return: tuple containing content type and dictionary of + parameters + """ + + tokens = header.split(";") + content_type, params = tokens[0].strip(), tokens[1:] + params_dict = {} + items_to_strip = "\"' " + + for param in params: + param = param.strip() + if param: + key, value = param, True + index_of_equals = param.find("=") + if index_of_equals != -1: + key = param[:index_of_equals].strip(items_to_strip) + value = param[index_of_equals + 1 :].strip(items_to_strip) + params_dict[key.lower()] = value + return content_type, params_dict + + +def get_encoding_from_headers(headers): + """Returns encodings from given HTTP Header Dict. + + :param headers: dictionary to extract encoding from. + :rtype: str + """ + + content_type = headers.get("content-type") + + if not content_type: + return None + + content_type, params = _parse_content_type_header(content_type) + + if "charset" in params: + return params["charset"].strip("'\"") + + if "text" in content_type: + return "ISO-8859-1" + + if "application/json" in content_type: + # Assume UTF-8 based on RFC 4627: https://www.ietf.org/rfc/rfc4627.txt since the charset was unset + return "utf-8" + + +def stream_decode_response_unicode(iterator, r): + """Stream decodes an iterator.""" + + if r.encoding is None: + yield from iterator + return + + decoder = codecs.getincrementaldecoder(r.encoding)(errors="replace") + for chunk in iterator: + rv = decoder.decode(chunk) + if rv: + yield rv + rv = decoder.decode(b"", final=True) + if rv: + yield rv + + +def iter_slices(string, slice_length): + """Iterate over slices of a string.""" + pos = 0 + if slice_length is None or slice_length <= 0: + slice_length = len(string) + while pos < len(string): + yield string[pos : pos + slice_length] + pos += slice_length + + +def get_unicode_from_response(r): + """Returns the requested content back in unicode. + + :param r: Response object to get unicode content from. + + Tried: + + 1. charset from content-type + 2. fall back and replace all unicode characters + + :rtype: str + """ + warnings.warn( + ( + "In requests 3.0, get_unicode_from_response will be removed. For " + "more information, please see the discussion on issue #2266. (This" + " warning should only appear once.)" + ), + DeprecationWarning, + ) + + tried_encodings = [] + + # Try charset from content-type + encoding = get_encoding_from_headers(r.headers) + + if encoding: + try: + return str(r.content, encoding) + except UnicodeError: + tried_encodings.append(encoding) + + # Fall back: + try: + return str(r.content, encoding, errors="replace") + except TypeError: + return r.content + + +# The unreserved URI characters (RFC 3986) +UNRESERVED_SET = frozenset( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~" +) + + +def unquote_unreserved(uri): + """Un-escape any percent-escape sequences in a URI that are unreserved + characters. This leaves all reserved, illegal and non-ASCII bytes encoded. + + :rtype: str + """ + parts = uri.split("%") + for i in range(1, len(parts)): + h = parts[i][0:2] + if len(h) == 2 and h.isalnum(): + try: + c = chr(int(h, 16)) + except ValueError: + raise InvalidURL(f"Invalid percent-escape sequence: '{h}'") + + if c in UNRESERVED_SET: + parts[i] = c + parts[i][2:] + else: + parts[i] = f"%{parts[i]}" + else: + parts[i] = f"%{parts[i]}" + return "".join(parts) + + +def requote_uri(uri): + """Re-quote the given URI. + + This function passes the given URI through an unquote/quote cycle to + ensure that it is fully and consistently quoted. + + :rtype: str + """ + safe_with_percent = "!#$%&'()*+,/:;=?@[]~" + safe_without_percent = "!#$&'()*+,/:;=?@[]~" + try: + # Unquote only the unreserved characters + # Then quote only illegal characters (do not quote reserved, + # unreserved, or '%') + return quote(unquote_unreserved(uri), safe=safe_with_percent) + except InvalidURL: + # We couldn't unquote the given URI, so let's try quoting it, but + # there may be unquoted '%'s in the URI. We need to make sure they're + # properly quoted so they do not cause issues elsewhere. + return quote(uri, safe=safe_without_percent) + + +def address_in_network(ip, net): + """This function allows you to check if an IP belongs to a network subnet + + Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 + returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 + + :rtype: bool + """ + ipaddr = struct.unpack("=L", socket.inet_aton(ip))[0] + netaddr, bits = net.split("/") + netmask = struct.unpack("=L", socket.inet_aton(dotted_netmask(int(bits))))[0] + network = struct.unpack("=L", socket.inet_aton(netaddr))[0] & netmask + return (ipaddr & netmask) == (network & netmask) + + +def dotted_netmask(mask): + """Converts mask from /xx format to xxx.xxx.xxx.xxx + + Example: if mask is 24 function returns 255.255.255.0 + + :rtype: str + """ + bits = 0xFFFFFFFF ^ (1 << 32 - mask) - 1 + return socket.inet_ntoa(struct.pack(">I", bits)) + + +def is_ipv4_address(string_ip): + """ + :rtype: bool + """ + try: + socket.inet_aton(string_ip) + except OSError: + return False + return True + + +def is_valid_cidr(string_network): + """ + Very simple check of the cidr format in no_proxy variable. + + :rtype: bool + """ + if string_network.count("/") == 1: + try: + mask = int(string_network.split("/")[1]) + except ValueError: + return False + + if mask < 1 or mask > 32: + return False + + try: + socket.inet_aton(string_network.split("/")[0]) + except OSError: + return False + else: + return False + return True + + +@contextlib.contextmanager +def set_environ(env_name, value): + """Set the environment variable 'env_name' to 'value' + + Save previous value, yield, and then restore the previous value stored in + the environment variable 'env_name'. + + If 'value' is None, do nothing""" + value_changed = value is not None + if value_changed: + old_value = os.environ.get(env_name) + os.environ[env_name] = value + try: + yield + finally: + if value_changed: + if old_value is None: + del os.environ[env_name] + else: + os.environ[env_name] = old_value + + +def should_bypass_proxies(url, no_proxy): + """ + Returns whether we should bypass proxies or not. + + :rtype: bool + """ + + # Prioritize lowercase environment variables over uppercase + # to keep a consistent behaviour with other http projects (curl, wget). + def get_proxy(key): + return os.environ.get(key) or os.environ.get(key.upper()) + + # First check whether no_proxy is defined. If it is, check that the URL + # we're getting isn't in the no_proxy list. + no_proxy_arg = no_proxy + if no_proxy is None: + no_proxy = get_proxy("no_proxy") + parsed = urlparse(url) + + if parsed.hostname is None: + # URLs don't always have hostnames, e.g. file:/// urls. + return True + + if no_proxy: + # We need to check whether we match here. We need to see if we match + # the end of the hostname, both with and without the port. + no_proxy = (host for host in no_proxy.replace(" ", "").split(",") if host) + + if is_ipv4_address(parsed.hostname): + for proxy_ip in no_proxy: + if is_valid_cidr(proxy_ip): + if address_in_network(parsed.hostname, proxy_ip): + return True + elif parsed.hostname == proxy_ip: + # If no_proxy ip was defined in plain IP notation instead of cidr notation & + # matches the IP of the index + return True + else: + host_with_port = parsed.hostname + if parsed.port: + host_with_port += f":{parsed.port}" + + for host in no_proxy: + if parsed.hostname.endswith(host) or host_with_port.endswith(host): + # The URL does match something in no_proxy, so we don't want + # to apply the proxies on this URL. + return True + + with set_environ("no_proxy", no_proxy_arg): + # parsed.hostname can be `None` in cases such as a file URI. + try: + bypass = proxy_bypass(parsed.hostname) + except (TypeError, socket.gaierror): + bypass = False + + if bypass: + return True + + return False + + +def get_environ_proxies(url, no_proxy=None): + """ + Return a dict of environment proxies. + + :rtype: dict + """ + if should_bypass_proxies(url, no_proxy=no_proxy): + return {} + else: + return getproxies() + + +def select_proxy(url, proxies): + """Select a proxy for the url, if applicable. + + :param url: The url being for the request + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs + """ + proxies = proxies or {} + urlparts = urlparse(url) + if urlparts.hostname is None: + return proxies.get(urlparts.scheme, proxies.get("all")) + + proxy_keys = [ + urlparts.scheme + "://" + urlparts.hostname, + urlparts.scheme, + "all://" + urlparts.hostname, + "all", + ] + proxy = None + for proxy_key in proxy_keys: + if proxy_key in proxies: + proxy = proxies[proxy_key] + break + + return proxy + + +def resolve_proxies(request, proxies, trust_env=True): + """This method takes proxy information from a request and configuration + input to resolve a mapping of target proxies. This will consider settings + such as NO_PROXY to strip proxy configurations. + + :param request: Request or PreparedRequest + :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs + :param trust_env: Boolean declaring whether to trust environment configs + + :rtype: dict + """ + proxies = proxies if proxies is not None else {} + url = request.url + scheme = urlparse(url).scheme + no_proxy = proxies.get("no_proxy") + new_proxies = proxies.copy() + + if trust_env and not should_bypass_proxies(url, no_proxy=no_proxy): + environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) + + proxy = environ_proxies.get(scheme, environ_proxies.get("all")) + + if proxy: + new_proxies.setdefault(scheme, proxy) + return new_proxies + + +def default_user_agent(name="python-requests"): + """ + Return a string representing the default user agent. + + :rtype: str + """ + return f"{name}/{__version__}" + + +def default_headers(): + """ + :rtype: requests.structures.CaseInsensitiveDict + """ + return CaseInsensitiveDict( + { + "User-Agent": default_user_agent(), + "Accept-Encoding": DEFAULT_ACCEPT_ENCODING, + "Accept": "*/*", + "Connection": "keep-alive", + } + ) + + +def parse_header_links(value): + """Return a list of parsed link headers proxies. + + i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg" + + :rtype: list + """ + + links = [] + + replace_chars = " '\"" + + value = value.strip(replace_chars) + if not value: + return links + + for val in re.split(", *<", value): + try: + url, params = val.split(";", 1) + except ValueError: + url, params = val, "" + + link = {"url": url.strip("<> '\"")} + + for param in params.split(";"): + try: + key, value = param.split("=") + except ValueError: + break + + link[key.strip(replace_chars)] = value.strip(replace_chars) + + links.append(link) + + return links + + +# Null bytes; no need to recreate these on each call to guess_json_utf +_null = "\x00".encode("ascii") # encoding to ASCII for Python 3 +_null2 = _null * 2 +_null3 = _null * 3 + + +def guess_json_utf(data): + """ + :rtype: str + """ + # JSON always starts with two ASCII characters, so detection is as + # easy as counting the nulls and from their location and count + # determine the encoding. Also detect a BOM, if present. + sample = data[:4] + if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): + return "utf-32" # BOM included + if sample[:3] == codecs.BOM_UTF8: + return "utf-8-sig" # BOM included, MS style (discouraged) + if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): + return "utf-16" # BOM included + nullcount = sample.count(_null) + if nullcount == 0: + return "utf-8" + if nullcount == 2: + if sample[::2] == _null2: # 1st and 3rd are null + return "utf-16-be" + if sample[1::2] == _null2: # 2nd and 4th are null + return "utf-16-le" + # Did not detect 2 valid UTF-16 ascii-range characters + if nullcount == 3: + if sample[:3] == _null3: + return "utf-32-be" + if sample[1:] == _null3: + return "utf-32-le" + # Did not detect a valid UTF-32 ascii-range character + return None + + +def prepend_scheme_if_needed(url, new_scheme): + """Given a URL that may or may not have a scheme, prepend the given scheme. + Does not replace a present scheme with the one provided as an argument. + + :rtype: str + """ + parsed = parse_url(url) + scheme, auth, host, port, path, query, fragment = parsed + + # A defect in urlparse determines that there isn't a netloc present in some + # urls. We previously assumed parsing was overly cautious, and swapped the + # netloc and path. Due to a lack of tests on the original defect, this is + # maintained with parse_url for backwards compatibility. + netloc = parsed.netloc + if not netloc: + netloc, path = path, netloc + + if auth: + # parse_url doesn't provide the netloc with auth + # so we'll add it ourselves. + netloc = "@".join([auth, netloc]) + if scheme is None: + scheme = new_scheme + if path is None: + path = "" + + return urlunparse((scheme, netloc, path, "", query, fragment)) + + +def get_auth_from_url(url): + """Given a url with authentication components, extract them into a tuple of + username,password. + + :rtype: (str,str) + """ + parsed = urlparse(url) + + try: + auth = (unquote(parsed.username), unquote(parsed.password)) + except (AttributeError, TypeError): + auth = ("", "") + + return auth + + +def check_header_validity(header): + """Verifies that header parts don't contain leading whitespace + reserved characters, or return characters. + + :param header: tuple, in the format (name, value). + """ + name, value = header + _validate_header_part(header, name, 0) + _validate_header_part(header, value, 1) + + +def _validate_header_part(header, header_part, header_validator_index): + if isinstance(header_part, str): + validator = _HEADER_VALIDATORS_STR[header_validator_index] + elif isinstance(header_part, bytes): + validator = _HEADER_VALIDATORS_BYTE[header_validator_index] + else: + raise InvalidHeader( + f"Header part ({header_part!r}) from {header} " + f"must be of type str or bytes, not {type(header_part)}" + ) + + if not validator.match(header_part): + header_kind = "name" if header_validator_index == 0 else "value" + raise InvalidHeader( + f"Invalid leading whitespace, reserved character(s), or return " + f"character(s) in header {header_kind}: {header_part!r}" + ) + + +def urldefragauth(url): + """ + Given a url remove the fragment and the authentication part. + + :rtype: str + """ + scheme, netloc, path, params, query, fragment = urlparse(url) + + # see func:`prepend_scheme_if_needed` + if not netloc: + netloc, path = path, netloc + + netloc = netloc.rsplit("@", 1)[-1] + + return urlunparse((scheme, netloc, path, params, query, "")) + + +def rewind_body(prepared_request): + """Move file pointer back to its recorded starting position + so it can be read again on redirect. + """ + body_seek = getattr(prepared_request.body, "seek", None) + if body_seek is not None and isinstance( + prepared_request._body_position, integer_types + ): + try: + body_seek(prepared_request._body_position) + except OSError: + raise UnrewindableBodyError( + "An error occurred when rewinding request body for redirect." + ) + else: + raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/METADATA new file mode 100644 index 00000000..beaaa4e7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/METADATA @@ -0,0 +1,456 @@ +Metadata-Version: 2.4 +Name: stripe +Version: 13.2.0 +Summary: Python bindings for the Stripe API +Keywords: stripe,api,payments +Author-email: Stripe +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE +Requires-Dist: typing_extensions <= 4.2.0, > 3.7.2; python_version < '3.7' +Requires-Dist: typing_extensions >= 4.5.0; python_version >= '3.7' +Requires-Dist: requests >= 2.20; python_version >= '3.0' +Requires-Dist: httpx ; extra == "async" +Project-URL: changelog, https://github.com/stripe/stripe-python/blob/master/CHANGELOG.md +Project-URL: documentation, https://stripe.com/docs/api/?lang=python +Project-URL: homepage, https://stripe.com/ +Project-URL: issues, https://github.com/stripe/stripe-python/issues +Project-URL: source, https://github.com/stripe/stripe-python +Provides-Extra: async + +# Stripe Python Library + +[![pypi](https://img.shields.io/pypi/v/stripe.svg)](https://pypi.python.org/pypi/stripe) +[![Build Status](https://github.com/stripe/stripe-python/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/stripe/stripe-python/actions?query=branch%3Amaster) + +The Stripe Python library provides convenient access to the Stripe API from +applications written in the Python language. It includes a pre-defined set of +classes for API resources that initialize themselves dynamically from API +responses which makes it compatible with a wide range of versions of the Stripe +API. + +## API Documentation + +See the [Python API docs](https://stripe.com/docs/api?lang=python). + +## Installation + +This package is available on PyPI: + +```sh +pip install --upgrade stripe +``` + +Alternatively, install from source with: + +```sh +python -m pip install . +``` + +### Requirements + +Per our [Language Version Support Policy](https://docs.stripe.com/sdks/versioning?lang=python#stripe-sdk-language-version-support-policy), we currently support **Python 3.7+**. + +Support for Python 3.7 and 3.8 is deprecated and will be removed in an upcoming major version. Read more and see the full schedule in the docs: https://docs.stripe.com/sdks/versioning?lang=python#stripe-sdk-language-version-support-policy + +#### Extended Support + +#### Python 2.7 deprecation + +[The Python Software Foundation (PSF)](https://www.python.org/psf-landing/) community [announced the end of support of Python 2](https://www.python.org/doc/sunset-python-2/) on 01 January 2020. +Starting with version 6.0.0 Stripe SDK Python packages will no longer support Python 2.7. To continue to get new features and security updates, please make sure to update your Python runtime to Python 3.6+. + +The last version of the Stripe SDK that supported Python 2.7 was **5.5.0**. + +## Usage + +The library needs to be configured with your account's secret key which is +available in your [Stripe Dashboard][api-keys]. Set `stripe.api_key` to its +value: + +```python +from stripe import StripeClient + +client = StripeClient("sk_test_...") + +# list customers +customers = client.v1.customers.list() + +# print the first customer's email +print(customers.data[0].email) + +# retrieve specific Customer +customer = client.v1.customers.retrieve("cus_123456789") + +# print that customer's email +print(customer.email) +``` + +### StripeClient vs legacy pattern + +We introduced the `StripeClient` class in v8 of the Python SDK. The legacy pattern used prior to that version is still available to use but will be marked as deprecated soon. Review the [migration guide to use StripeClient]() to move from the legacy pattern. + +Once the legacy pattern is deprecated, new API endpoints will only be accessible in the StripeClient. While there are no current plans to remove the legacy pattern for existing API endpoints, this may change in the future. + +### Handling exceptions + +Unsuccessful requests raise exceptions. The class of the exception will reflect +the sort of error that occurred. Please see the [Api +Reference](https://stripe.com/docs/api/errors/handling) for a description of +the error classes you should handle, and for information on how to inspect +these errors. + +### Per-request Configuration + +Configure individual requests with the `options` argument. For example, you can make +requests with a specific [Stripe Version](https://stripe.com/docs/api#versioning) +or as a [connected account](https://stripe.com/docs/connect/authentication#authentication-via-the-stripe-account-header): + +```python +from stripe import StripeClient + +client = StripeClient("sk_test_...") + +# list customers +client.v1.customers.list( + options={ + "api_key": "sk_test_...", + "stripe_account": "acct_...", + "stripe_version": "2019-02-19", + } +) + +# retrieve single customer +client.v1.customers.retrieve( + "cus_123456789", + options={ + "api_key": "sk_test_...", + "stripe_account": "acct_...", + "stripe_version": "2019-02-19", + } +) +``` + +### Configuring an HTTP Client + +You can configure your `StripeClient` to use `urlfetch`, `requests`, `pycurl`, or +`urllib` with the `http_client` option: + +```python +client = StripeClient("sk_test_...", http_client=stripe.UrlFetchClient()) +client = StripeClient("sk_test_...", http_client=stripe.RequestsClient()) +client = StripeClient("sk_test_...", http_client=stripe.PycurlClient()) +client = StripeClient("sk_test_...", http_client=stripe.UrllibClient()) +``` + +Without a configured client, by default the library will attempt to load +libraries in the order above (i.e. `urlfetch` is preferred with `urllib2` used +as a last resort). We usually recommend that people use `requests`. + +### Configuring a Proxy + +A proxy can be configured with the `proxy` client option: + +```python +client = StripeClient("sk_test_...", proxy="https://user:pass@example.com:1234") +``` + +### Configuring Automatic Retries + +You can enable automatic retries on requests that fail due to a transient +problem by configuring the maximum number of retries: + +```python +client = StripeClient("sk_test_...", max_network_retries=2) +``` + +Various errors can trigger a retry, like a connection error or a timeout, and +also certain API responses like HTTP status `409 Conflict`. + +[Idempotency keys][idempotency-keys] are automatically generated and added to +requests, when not given, to guarantee that retries are safe. + +### Logging + +The library can be configured to emit logging that will give you better insight +into what it's doing. The `info` logging level is usually most appropriate for +production use, but `debug` is also available for more verbosity. + +There are a few options for enabling it: + +1. Set the environment variable `STRIPE_LOG` to the value `debug` or `info` + + ```sh + $ export STRIPE_LOG=debug + ``` + +2. Set `stripe.log`: + + ```python + import stripe + stripe.log = 'debug' + ``` + +3. Enable it through Python's logging module: + + ```python + import logging + logging.basicConfig() + logging.getLogger('stripe').setLevel(logging.DEBUG) + ``` + +### Accessing response code and headers + +You can access the HTTP response code and headers using the `last_response` property of the returned resource. + +```python +customer = client.v1.customers.retrieve( + "cus_123456789" +) + +print(customer.last_response.code) +print(customer.last_response.headers) +``` + +### Writing a Plugin + +If you're writing a plugin that uses the library, we'd appreciate it if you +identified using `stripe.set_app_info()`: + +```py +stripe.set_app_info("MyAwesomePlugin", version="1.2.34", url="https://myawesomeplugin.info") +``` + +This information is passed along when the library makes calls to the Stripe +API. + +### Telemetry + +By default, the library sends telemetry to Stripe regarding request latency and feature usage. These +numbers help Stripe improve the overall latency of its API for all users, and +improve popular features. + +You can disable this behavior if you prefer: + +```python +stripe.enable_telemetry = False +``` + +## Types + +In [v7.1.0](https://github.com/stripe/stripe-python/releases/tag/v7.1.0) and +newer, the +library includes type annotations. See [the wiki](https://github.com/stripe/stripe-python/wiki/Inline-type-annotations) +for a detailed guide. + +Please note that some annotations use features that were only fairly recently accepted, +such as [`Unpack[TypedDict]`](https://peps.python.org/pep-0692/#specification) that was +[accepted](https://discuss.python.org/t/pep-692-using-typeddict-for-more-precise-kwargs-typing/17314/81) +in January 2023. We have tested that these types are recognized properly by [Pyright](https://github.com/microsoft/pyright). +Support for `Unpack` in MyPy is still experimental, but appears to degrade gracefully. +Please [report an issue](https://github.com/stripe/stripe-python/issues/new/choose) if there +is anything we can do to improve the types for your type checker of choice. + +### Types and the Versioning Policy + +We release type changes in minor releases. While stripe-python follows semantic +versioning, our semantic versions describe the _runtime behavior_ of the +library alone. Our _type annotations are not reflected in the semantic +version_. That is, upgrading to a new minor version of stripe-python might +result in your type checker producing a type error that it didn't before. You +can use a `~=x.x` or `x.x.*` [version specifier](https://peps.python.org/pep-0440/#examples) +in your `requirements.txt` to constrain `pip` to a certain minor range of `stripe-python`. + +### Types and API Versions + +The types describe the [Stripe API version](https://stripe.com/docs/api/versioning) +that was the latest at the time of release. This is the version that your library +sends by default. If you are overriding `stripe.api_version` / `stripe_version` on the `StripeClient`, or using a +[webhook endpoint](https://stripe.com/docs/webhooks#api-versions) tied to an older version, +be aware that the data you see at runtime may not match the types. + +### Public Preview SDKs + +Stripe has features in the [public preview phase](https://docs.stripe.com/release-phases) that can be accessed via versions of this package that have the `bX` suffix like `12.2.0b2`. +We would love for you to try these as we incrementally release new features and improve them based on your feedback. + +To install, pick the latest version with the `bX` suffix by reviewing the [releases page](https://github.com/stripe/stripe-python/releases/) and then use it in the `pip install` command: + +``` +pip install stripe== +``` + +> **Note** +> There can be breaking changes between two versions of the public preview SDKs without a bump in the major version. Therefore we recommend pinning the package version to a specific version in your [pyproject.toml](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#dependencies-and-requirements) or [requirements file](https://pip.pypa.io/en/stable/user_guide/#requirements-files). This way you can install the same version each time without breaking changes unless you are intentionally looking for the latest public preview SDK. + +Some preview features require a name and version to be set in the `Stripe-Version` header like `feature_beta=v3`. If your preview feature has this requirement, use the `stripe.add_beta_version` function (available only in the public preview SDKs): + +```python +stripe.add_beta_version("feature_beta", "v3") +``` + +### Private Preview SDKs + +Stripe has features in the [private preview phase](https://docs.stripe.com/release-phases) that can be accessed via versions of this package that have the `aX` suffix like `12.2.0a2`. These are invite-only features. Once invited, you can install the private preview SDKs by following the same instructions as for the [public preview SDKs](https://github.com/stripe/stripe-python?tab=readme-ov-file#public-preview-sdks) above and replacing the suffix `b` with `a` in package versions. + +### Custom requests + +If you would like to send a request to an undocumented API (for example you are in a private beta), or if you prefer to bypass the method definitions in the library and specify your request details directly, you can use the `raw_request` method on `StripeClient`. + +```python +client = StripeClient("sk_test_...") +response = client.raw_request( + "post", "/v1/beta_endpoint", param=123, stripe_version="2022-11-15; feature_beta=v3" +) + +# (Optional) response is a StripeResponse. You can use `client.deserialize` to get a StripeObject. +deserialized_resp = client.deserialize(response, api_mode='V1') +``` + +### Async + +Asynchronous versions of request-making methods are available by suffixing the method name +with `_async`. + +```python +# With StripeClient +client = StripeClient("sk_test_...") +customer = await client.v1.customers.retrieve_async("cus_xyz") + +# With global client +stripe.api_key = "sk_test_..." +customer = await stripe.Customer.retrieve_async("cus_xyz") + +# .auto_paging_iter() implements both AsyncIterable and Iterable +async for c in await stripe.Customer.list_async().auto_paging_iter(): + ... +``` + +There is no `.save_async` as `.save` is [deprecated since stripe-python v5](https://github.com/stripe/stripe-python/wiki/Migration-guide-for-v5#deprecated). Please migrate to `.modify_async`. + +The default HTTP client uses `requests` for making synchronous requests but +`httpx` for making async requests. If you're migrating to async, we recommend +you to explicitly initialize your own http client and pass it to StripeClient +or set it as the global default. + +If you don't already have a dependency on an async-compatible HTTP library, `pip install stripe[async]` will install one for you (new in `v13.0.1`). + +```python +# By default, an explicitly initialized HTTPXClient will raise an exception if you +# attempt to call a sync method. If you intend to only use async, this is useful to +# make sure you don't unintentionally make a synchronous request. +my_http_client = stripe.HTTPXClient() + +# If you want to use httpx to make sync requests, you can disable this +# behavior. +my_http_client = stripe.HTTPXClient(allow_sync_methods=True) + +# aiohttp is also available (does not support sync requests) +my_http_client = stripe.AIOHTTPClient() + +# With StripeClient +client = StripeClient("sk_test_...", http_client=my_http_client) + +# With the global client +stripe.default_http_client = my_http_client +``` + +You can also subclass `stripe.HTTPClient` and provide your own instance. + +## Support + +New features and bug fixes are released on the latest major version of the Stripe Python library. If you are on an older major version, we recommend that you upgrade to the latest in order to use the new features and bug fixes including those for security vulnerabilities. Older major versions of the package will continue to be available for use, but will not be receiving any updates. + +## Development + +[Contribution guidelines for this project](CONTRIBUTING.md) + +The test suite depends on [stripe-mock], so make sure to fetch and run it from a +background terminal ([stripe-mock's README][stripe-mock] also contains +instructions for installing via Homebrew and other methods): + +```sh +go install github.com/stripe/stripe-mock@latest +stripe-mock +``` + +We use [just](https://github.com/casey/just) for conveniently running development tasks. You can use them directly, or copy the commands out of the `justfile`. To our help docs, run `just`. By default, all commands will use an virtualenv created by your default python version (whatever comes out of `python --version`). We recommend using [mise](https://mise.jdx.dev/lang/python.html) or [pyenv](https://github.com/pyenv/pyenv) to control that version. + +Run the following command to set up the development virtualenv: + +```sh +just venv +# or: python -m venv venv && venv/bin/python -I -m pip install -e . +``` + +Run all tests: + +```sh +just test +# or: venv/bin/pytest +``` + +Run all tests in a single file: + +```sh +just test tests/api_resources/abstract/test_updateable_api_resource.py +# or: venv/bin/pytest tests/api_resources/abstract/test_updateable_api_resource.py +``` + +Run a single test suite: + +```sh +just test tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource +# or: venv/bin/pytest tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource +``` + +Run a single test: + +```sh +just test tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save +# or: venv/bin/pytest tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save +``` + +Run the linter with: + +```sh +just lint +# or: venv/bin/python -m flake8 --show-source stripe tests +``` + +The library uses [Ruff][ruff] for code formatting. Code must be formatted +with Black before PRs are submitted, otherwise CI will fail. Run the formatter +with: + +```sh +just format +# or: venv/bin/ruff format . --quiet +``` + +[api-keys]: https://dashboard.stripe.com/account/apikeys +[ruff]: https://github.com/astral-sh/ruff +[connect]: https://stripe.com/connect +[poetry]: https://github.com/sdispater/poetry +[stripe-mock]: https://github.com/stripe/stripe-mock +[idempotency-keys]: https://stripe.com/docs/api/idempotent_requests?lang=python + + + diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/RECORD new file mode 100644 index 00000000..e17d3cd5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/RECORD @@ -0,0 +1,2258 @@ +stripe-13.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +stripe-13.2.0.dist-info/METADATA,sha256=MPeUMlPWVKiHrcfd5_530308Etc7Ka14UAbTBkgygTY,18025 +stripe-13.2.0.dist-info/RECORD,, +stripe-13.2.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +stripe-13.2.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 +stripe-13.2.0.dist-info/licenses/LICENSE,sha256=iyi8_6voinKMxI032Qe9df69Ducl_XdJRpEtyjG8YCc,1092 +stripe/__init__.py,sha256=2Z0uIdS09EJvcHsRpnsE-e80xfjMHRTxbcgmD_3OQII,38114 +stripe/__pycache__/__init__.cpython-312.pyc,, +stripe/__pycache__/_account.cpython-312.pyc,, +stripe/__pycache__/_account_capability_service.cpython-312.pyc,, +stripe/__pycache__/_account_external_account_service.cpython-312.pyc,, +stripe/__pycache__/_account_link.cpython-312.pyc,, +stripe/__pycache__/_account_link_service.cpython-312.pyc,, +stripe/__pycache__/_account_login_link_service.cpython-312.pyc,, +stripe/__pycache__/_account_person_service.cpython-312.pyc,, +stripe/__pycache__/_account_service.cpython-312.pyc,, +stripe/__pycache__/_account_session.cpython-312.pyc,, +stripe/__pycache__/_account_session_service.cpython-312.pyc,, +stripe/__pycache__/_any_iterator.cpython-312.pyc,, +stripe/__pycache__/_api_mode.cpython-312.pyc,, +stripe/__pycache__/_api_requestor.cpython-312.pyc,, +stripe/__pycache__/_api_resource.cpython-312.pyc,, +stripe/__pycache__/_api_version.cpython-312.pyc,, +stripe/__pycache__/_app_info.cpython-312.pyc,, +stripe/__pycache__/_apple_pay_domain.cpython-312.pyc,, +stripe/__pycache__/_apple_pay_domain_service.cpython-312.pyc,, +stripe/__pycache__/_application.cpython-312.pyc,, +stripe/__pycache__/_application_fee.cpython-312.pyc,, +stripe/__pycache__/_application_fee_refund.cpython-312.pyc,, +stripe/__pycache__/_application_fee_refund_service.cpython-312.pyc,, +stripe/__pycache__/_application_fee_service.cpython-312.pyc,, +stripe/__pycache__/_apps_service.cpython-312.pyc,, +stripe/__pycache__/_balance.cpython-312.pyc,, +stripe/__pycache__/_balance_service.cpython-312.pyc,, +stripe/__pycache__/_balance_settings.cpython-312.pyc,, +stripe/__pycache__/_balance_settings_service.cpython-312.pyc,, +stripe/__pycache__/_balance_transaction.cpython-312.pyc,, +stripe/__pycache__/_balance_transaction_service.cpython-312.pyc,, +stripe/__pycache__/_bank_account.cpython-312.pyc,, +stripe/__pycache__/_base_address.cpython-312.pyc,, +stripe/__pycache__/_billing_portal_service.cpython-312.pyc,, +stripe/__pycache__/_billing_service.cpython-312.pyc,, +stripe/__pycache__/_capability.cpython-312.pyc,, +stripe/__pycache__/_card.cpython-312.pyc,, +stripe/__pycache__/_cash_balance.cpython-312.pyc,, +stripe/__pycache__/_charge.cpython-312.pyc,, +stripe/__pycache__/_charge_service.cpython-312.pyc,, +stripe/__pycache__/_checkout_service.cpython-312.pyc,, +stripe/__pycache__/_client_options.cpython-312.pyc,, +stripe/__pycache__/_climate_service.cpython-312.pyc,, +stripe/__pycache__/_confirmation_token.cpython-312.pyc,, +stripe/__pycache__/_confirmation_token_service.cpython-312.pyc,, +stripe/__pycache__/_connect_collection_transfer.cpython-312.pyc,, +stripe/__pycache__/_country_spec.cpython-312.pyc,, +stripe/__pycache__/_country_spec_service.cpython-312.pyc,, +stripe/__pycache__/_coupon.cpython-312.pyc,, +stripe/__pycache__/_coupon_service.cpython-312.pyc,, +stripe/__pycache__/_createable_api_resource.cpython-312.pyc,, +stripe/__pycache__/_credit_note.cpython-312.pyc,, +stripe/__pycache__/_credit_note_line_item.cpython-312.pyc,, +stripe/__pycache__/_credit_note_line_item_service.cpython-312.pyc,, +stripe/__pycache__/_credit_note_preview_lines_service.cpython-312.pyc,, +stripe/__pycache__/_credit_note_service.cpython-312.pyc,, +stripe/__pycache__/_custom_method.cpython-312.pyc,, +stripe/__pycache__/_customer.cpython-312.pyc,, +stripe/__pycache__/_customer_balance_transaction.cpython-312.pyc,, +stripe/__pycache__/_customer_balance_transaction_service.cpython-312.pyc,, +stripe/__pycache__/_customer_cash_balance_service.cpython-312.pyc,, +stripe/__pycache__/_customer_cash_balance_transaction.cpython-312.pyc,, +stripe/__pycache__/_customer_cash_balance_transaction_service.cpython-312.pyc,, +stripe/__pycache__/_customer_funding_instructions_service.cpython-312.pyc,, +stripe/__pycache__/_customer_payment_method_service.cpython-312.pyc,, +stripe/__pycache__/_customer_payment_source_service.cpython-312.pyc,, +stripe/__pycache__/_customer_service.cpython-312.pyc,, +stripe/__pycache__/_customer_session.cpython-312.pyc,, +stripe/__pycache__/_customer_session_service.cpython-312.pyc,, +stripe/__pycache__/_customer_tax_id_service.cpython-312.pyc,, +stripe/__pycache__/_deletable_api_resource.cpython-312.pyc,, +stripe/__pycache__/_discount.cpython-312.pyc,, +stripe/__pycache__/_dispute.cpython-312.pyc,, +stripe/__pycache__/_dispute_service.cpython-312.pyc,, +stripe/__pycache__/_encode.cpython-312.pyc,, +stripe/__pycache__/_entitlements_service.cpython-312.pyc,, +stripe/__pycache__/_ephemeral_key.cpython-312.pyc,, +stripe/__pycache__/_ephemeral_key_service.cpython-312.pyc,, +stripe/__pycache__/_error.cpython-312.pyc,, +stripe/__pycache__/_error_object.cpython-312.pyc,, +stripe/__pycache__/_event.cpython-312.pyc,, +stripe/__pycache__/_event_service.cpython-312.pyc,, +stripe/__pycache__/_exchange_rate.cpython-312.pyc,, +stripe/__pycache__/_exchange_rate_service.cpython-312.pyc,, +stripe/__pycache__/_expandable_field.cpython-312.pyc,, +stripe/__pycache__/_file.cpython-312.pyc,, +stripe/__pycache__/_file_link.cpython-312.pyc,, +stripe/__pycache__/_file_link_service.cpython-312.pyc,, +stripe/__pycache__/_file_service.cpython-312.pyc,, +stripe/__pycache__/_financial_connections_service.cpython-312.pyc,, +stripe/__pycache__/_forwarding_service.cpython-312.pyc,, +stripe/__pycache__/_funding_instructions.cpython-312.pyc,, +stripe/__pycache__/_http_client.cpython-312.pyc,, +stripe/__pycache__/_identity_service.cpython-312.pyc,, +stripe/__pycache__/_invoice.cpython-312.pyc,, +stripe/__pycache__/_invoice_item.cpython-312.pyc,, +stripe/__pycache__/_invoice_item_service.cpython-312.pyc,, +stripe/__pycache__/_invoice_line_item.cpython-312.pyc,, +stripe/__pycache__/_invoice_line_item_service.cpython-312.pyc,, +stripe/__pycache__/_invoice_payment.cpython-312.pyc,, +stripe/__pycache__/_invoice_payment_service.cpython-312.pyc,, +stripe/__pycache__/_invoice_rendering_template.cpython-312.pyc,, +stripe/__pycache__/_invoice_rendering_template_service.cpython-312.pyc,, +stripe/__pycache__/_invoice_service.cpython-312.pyc,, +stripe/__pycache__/_issuing_service.cpython-312.pyc,, +stripe/__pycache__/_line_item.cpython-312.pyc,, +stripe/__pycache__/_list_object.cpython-312.pyc,, +stripe/__pycache__/_listable_api_resource.cpython-312.pyc,, +stripe/__pycache__/_login_link.cpython-312.pyc,, +stripe/__pycache__/_mandate.cpython-312.pyc,, +stripe/__pycache__/_mandate_service.cpython-312.pyc,, +stripe/__pycache__/_multipart_data_generator.cpython-312.pyc,, +stripe/__pycache__/_nested_resource_class_methods.cpython-312.pyc,, +stripe/__pycache__/_oauth.cpython-312.pyc,, +stripe/__pycache__/_oauth_service.cpython-312.pyc,, +stripe/__pycache__/_object_classes.cpython-312.pyc,, +stripe/__pycache__/_payment_attempt_record.cpython-312.pyc,, +stripe/__pycache__/_payment_attempt_record_service.cpython-312.pyc,, +stripe/__pycache__/_payment_intent.cpython-312.pyc,, +stripe/__pycache__/_payment_intent_amount_details_line_item.cpython-312.pyc,, +stripe/__pycache__/_payment_intent_amount_details_line_item_service.cpython-312.pyc,, +stripe/__pycache__/_payment_intent_service.cpython-312.pyc,, +stripe/__pycache__/_payment_link.cpython-312.pyc,, +stripe/__pycache__/_payment_link_line_item_service.cpython-312.pyc,, +stripe/__pycache__/_payment_link_service.cpython-312.pyc,, +stripe/__pycache__/_payment_method.cpython-312.pyc,, +stripe/__pycache__/_payment_method_configuration.cpython-312.pyc,, +stripe/__pycache__/_payment_method_configuration_service.cpython-312.pyc,, +stripe/__pycache__/_payment_method_domain.cpython-312.pyc,, +stripe/__pycache__/_payment_method_domain_service.cpython-312.pyc,, +stripe/__pycache__/_payment_method_service.cpython-312.pyc,, +stripe/__pycache__/_payment_record.cpython-312.pyc,, +stripe/__pycache__/_payment_record_service.cpython-312.pyc,, +stripe/__pycache__/_payout.cpython-312.pyc,, +stripe/__pycache__/_payout_service.cpython-312.pyc,, +stripe/__pycache__/_person.cpython-312.pyc,, +stripe/__pycache__/_plan.cpython-312.pyc,, +stripe/__pycache__/_plan_service.cpython-312.pyc,, +stripe/__pycache__/_price.cpython-312.pyc,, +stripe/__pycache__/_price_service.cpython-312.pyc,, +stripe/__pycache__/_product.cpython-312.pyc,, +stripe/__pycache__/_product_feature.cpython-312.pyc,, +stripe/__pycache__/_product_feature_service.cpython-312.pyc,, +stripe/__pycache__/_product_service.cpython-312.pyc,, +stripe/__pycache__/_promotion_code.cpython-312.pyc,, +stripe/__pycache__/_promotion_code_service.cpython-312.pyc,, +stripe/__pycache__/_quote.cpython-312.pyc,, +stripe/__pycache__/_quote_computed_upfront_line_items_service.cpython-312.pyc,, +stripe/__pycache__/_quote_line_item_service.cpython-312.pyc,, +stripe/__pycache__/_quote_service.cpython-312.pyc,, +stripe/__pycache__/_radar_service.cpython-312.pyc,, +stripe/__pycache__/_refund.cpython-312.pyc,, +stripe/__pycache__/_refund_service.cpython-312.pyc,, +stripe/__pycache__/_reporting_service.cpython-312.pyc,, +stripe/__pycache__/_request_metrics.cpython-312.pyc,, +stripe/__pycache__/_request_options.cpython-312.pyc,, +stripe/__pycache__/_requestor_options.cpython-312.pyc,, +stripe/__pycache__/_reserve_transaction.cpython-312.pyc,, +stripe/__pycache__/_reversal.cpython-312.pyc,, +stripe/__pycache__/_review.cpython-312.pyc,, +stripe/__pycache__/_review_service.cpython-312.pyc,, +stripe/__pycache__/_search_result_object.cpython-312.pyc,, +stripe/__pycache__/_searchable_api_resource.cpython-312.pyc,, +stripe/__pycache__/_setup_attempt.cpython-312.pyc,, +stripe/__pycache__/_setup_attempt_service.cpython-312.pyc,, +stripe/__pycache__/_setup_intent.cpython-312.pyc,, +stripe/__pycache__/_setup_intent_service.cpython-312.pyc,, +stripe/__pycache__/_shipping_rate.cpython-312.pyc,, +stripe/__pycache__/_shipping_rate_service.cpython-312.pyc,, +stripe/__pycache__/_sigma_service.cpython-312.pyc,, +stripe/__pycache__/_singleton_api_resource.cpython-312.pyc,, +stripe/__pycache__/_source.cpython-312.pyc,, +stripe/__pycache__/_source_mandate_notification.cpython-312.pyc,, +stripe/__pycache__/_source_service.cpython-312.pyc,, +stripe/__pycache__/_source_transaction.cpython-312.pyc,, +stripe/__pycache__/_source_transaction_service.cpython-312.pyc,, +stripe/__pycache__/_stripe_client.cpython-312.pyc,, +stripe/__pycache__/_stripe_context.cpython-312.pyc,, +stripe/__pycache__/_stripe_object.cpython-312.pyc,, +stripe/__pycache__/_stripe_response.cpython-312.pyc,, +stripe/__pycache__/_stripe_service.cpython-312.pyc,, +stripe/__pycache__/_subscription.cpython-312.pyc,, +stripe/__pycache__/_subscription_item.cpython-312.pyc,, +stripe/__pycache__/_subscription_item_service.cpython-312.pyc,, +stripe/__pycache__/_subscription_schedule.cpython-312.pyc,, +stripe/__pycache__/_subscription_schedule_service.cpython-312.pyc,, +stripe/__pycache__/_subscription_service.cpython-312.pyc,, +stripe/__pycache__/_tax_code.cpython-312.pyc,, +stripe/__pycache__/_tax_code_service.cpython-312.pyc,, +stripe/__pycache__/_tax_deducted_at_source.cpython-312.pyc,, +stripe/__pycache__/_tax_id.cpython-312.pyc,, +stripe/__pycache__/_tax_id_service.cpython-312.pyc,, +stripe/__pycache__/_tax_rate.cpython-312.pyc,, +stripe/__pycache__/_tax_rate_service.cpython-312.pyc,, +stripe/__pycache__/_tax_service.cpython-312.pyc,, +stripe/__pycache__/_terminal_service.cpython-312.pyc,, +stripe/__pycache__/_test_helpers.cpython-312.pyc,, +stripe/__pycache__/_test_helpers_service.cpython-312.pyc,, +stripe/__pycache__/_token.cpython-312.pyc,, +stripe/__pycache__/_token_service.cpython-312.pyc,, +stripe/__pycache__/_topup.cpython-312.pyc,, +stripe/__pycache__/_topup_service.cpython-312.pyc,, +stripe/__pycache__/_transfer.cpython-312.pyc,, +stripe/__pycache__/_transfer_reversal_service.cpython-312.pyc,, +stripe/__pycache__/_transfer_service.cpython-312.pyc,, +stripe/__pycache__/_treasury_service.cpython-312.pyc,, +stripe/__pycache__/_updateable_api_resource.cpython-312.pyc,, +stripe/__pycache__/_util.cpython-312.pyc,, +stripe/__pycache__/_v1_services.cpython-312.pyc,, +stripe/__pycache__/_v2_services.cpython-312.pyc,, +stripe/__pycache__/_verify_mixin.cpython-312.pyc,, +stripe/__pycache__/_version.cpython-312.pyc,, +stripe/__pycache__/_webhook.cpython-312.pyc,, +stripe/__pycache__/_webhook_endpoint.cpython-312.pyc,, +stripe/__pycache__/_webhook_endpoint_service.cpython-312.pyc,, +stripe/__pycache__/oauth_error.cpython-312.pyc,, +stripe/_account.py,sha256=nla4VHlFg1XY4rrJupxVHU1YN9kiKyNntNUEQDZ4muw,113607 +stripe/_account_capability_service.py,sha256=qnaGHyU8Mlow55-aScbz9zVABh4_4cMzBAjhbiRMKHw,5415 +stripe/_account_external_account_service.py,sha256=nFX6B74G3TLmyce5VncKMf_W_K02y9O2hsrGQCt8kzg,9499 +stripe/_account_link.py,sha256=Gd5uXo8L3SViPPrhr2JxIUcijmyU87BrP5k3Ts72OWw,2219 +stripe/_account_link_service.py,sha256=hspdpVVNZPApG0JblqBXrxFhAUHnVXVMBI_s6PBClYs,1708 +stripe/_account_login_link_service.py,sha256=GD8Q6nmgJInQ83pSb-x-4s6ezHCbEnRMbwOP_uvz4NI,2183 +stripe/_account_person_service.py,sha256=7UBTIH78hSR1X0h2nntjiu94ROwPsoI0CozNgOlrM_0,8305 +stripe/_account_service.py,sha256=kb49nHjDt_rIN9V9AVD25Y5oFzZtXFCkEcwhO3R1jUQ,15447 +stripe/_account_session.py,sha256=S8F0UieX66NRrYAGQzmAiYCkDmpZ7OtfWiBxWykC6no,23533 +stripe/_account_session_service.py,sha256=Qx0xqV_gycDFkAZPyvJDt31KGU3WCFqk6ORz_KqX4GM,1689 +stripe/_any_iterator.py,sha256=9rjcsNzvh1lX0-8ydg1NWiLwOwVr9PLmk6d16vsrg_c,1053 +stripe/_api_mode.py,sha256=vXkxG7h6tulh96szEjG_v6o2RuJkANZRkWmMI3CIWvI,70 +stripe/_api_requestor.py,sha256=B8mS8QIeWD4ewelgoDrkCBz1cP0F4E7gtkOiYppwA4c,30718 +stripe/_api_resource.py,sha256=fszRXLbc0wN0qcHT_9WvLbQQkstft06RErBy_2YO8rQ,6560 +stripe/_api_version.py,sha256=PAwqvzIL7vyI-l8I5Mao33D_UwGAsf4bQbptyKutARs,145 +stripe/_app_info.py,sha256=VG82bkGhz3A1m90U4yrnynSYngfl0B7cNflre98O1TE,190 +stripe/_apple_pay_domain.py,sha256=48BqPGzDfqmv24Bd4g8wYmikxTb7iaYIG9PNl9j4UTk,6795 +stripe/_apple_pay_domain_service.py,sha256=oinuhr87KaZQBMVjsHBP8mtJsB7ADwmxaKYMU-XUsfY,5403 +stripe/_application.py,sha256=4Sx0RcHKO6FV1S_5F_k6sf-WctoZ4j-9GtYA5QSCsOo,657 +stripe/_application_fee.py,sha256=r973UgxGOY0J4_qck9jiAW6ooz22_tmbGyrYko3M3WE,20375 +stripe/_application_fee_refund.py,sha256=aFFyV-FM0aBm7mH8AS9XNFIIsOIsI01e8gq7oqSD12w,2939 +stripe/_application_fee_refund_service.py,sha256=ilUjbhZB8mm2zEDbK3YyzWWChpcXlI-yh0s2iN6IBOQ,8443 +stripe/_application_fee_service.py,sha256=qyoVa3UWniTEeFADKrhPEWEfmzmS9XPqjvwWpYGzQWg,4176 +stripe/_apps_service.py,sha256=YPr4e0ScJ8DhNlXOxM_D6wFFKrEGCeDQvsVBsikFtKA,931 +stripe/_balance.py,sha256=CLkpuyN5Mtgz9OIChI8NDT96KOkFhC6mMuhZ6qURZHk,12968 +stripe/_balance_service.py,sha256=72AuQ-KnwQDeEn3ZgmYC0funNDKlTcwVdYuGe3R4LZ0,1855 +stripe/_balance_settings.py,sha256=8_-BOj7m_D9hNkGNE0cIkr16ZEiyAUIt6qQ1N6JDiUI,6801 +stripe/_balance_settings_service.py,sha256=7eecKZUURWWfUvilTkvtyRSqQulm5MczT8BHuHhDRPM,3223 +stripe/_balance_transaction.py,sha256=MWQn299slv6NUgxZq1eGdOIElqcepr-PgC62imcUZaA,11227 +stripe/_balance_transaction_service.py,sha256=-yh6Dv_uv2-Ytve4ZZdXB3mPnw0cBZ6BWPYFIAw5AdU,3778 +stripe/_bank_account.py,sha256=icnuaYkvbPvDIC5hAsKXf-VEXR-xGQ11kh1oGnsI5js,25084 +stripe/_base_address.py,sha256=KOisRNdWeEiguGw-WB1L85QqMg6cEmCjQr8VcLRTWSQ,350 +stripe/_billing_portal_service.py,sha256=sRCpVq-xqtIE2eVKWPmEvL2yqfI7IXfNsapeXD1aGFc,1235 +stripe/_billing_service.py,sha256=7NwEFDpzo-MoFE5qdd2ZdUT51f0sw4DC2iPmnp9T7e8,2462 +stripe/_capability.py,sha256=7JKsHwBDQts7eNyfsaPaYXRaTwjw2aJp4jp6Rv-N1jc,20293 +stripe/_card.py,sha256=ixKg6gB3ebF00z_CQxDWgsNGCxvZn45fOVPla0OzxRQ,12771 +stripe/_cash_balance.py,sha256=6TQchw6gkq8PtLAiqDcNI7ynRh5gGU9RGnJAn1eQPzs,2209 +stripe/_charge.py,sha256=3jJkDroPoTK7Xpqw0QkcsWasjnilci0_sww5tjbtIwo,116520 +stripe/_charge_service.py,sha256=LTtAsFpfvDmK6R7JHCFqGDUVm_FPtY4fdnNJS1Xvt14,10473 +stripe/_checkout_service.py,sha256=pStfjLMuxHj3-yAtEfR7F-k0bhbzBMhaf3BDHOSTxSU,957 +stripe/_client_options.py,sha256=DWy2zY7kLr9I-ymDCWbGZi3KJzY2tbEQJ7VsDbbDQH0,429 +stripe/_climate_service.py,sha256=9OsFgAZbpjP4SY_HoDbOJyRWCI4WbxUQdCLQj_pT8IY,1277 +stripe/_confirmation_token.py,sha256=r9ZQlseB-6MARSQFOaR1FUH6Gg1qBmF-7dwNlrSbLIQ,72511 +stripe/_confirmation_token_service.py,sha256=Es6ykkClpVCZadxntzvQG_p2_YVjpo9yp9ehFU-cgUw,1921 +stripe/_connect_collection_transfer.py,sha256=_-0dfUKmQX7AjanRYMh4jByz_qjgCaoG8qbxlFX0ZJo,1249 +stripe/_country_spec.py,sha256=uopLwolK2TT7ard9afhacmRyO_DdVewRiZDTkeMy2FI,4863 +stripe/_country_spec_service.py,sha256=fCm1EV-xMFJy0RJmvAsApNFCuG43RwRYLgT6hfBdLMM,2972 +stripe/_coupon.py,sha256=CDNJjGrbKN_Z1ucFV36EO-AoVx8-sPG_MS79okZiUVo,14174 +stripe/_coupon_service.py,sha256=MS5d1EiaPj8BMHVUtbYwiA7p9K0txJXOR1XVcsxDZ2M,7982 +stripe/_createable_api_resource.py,sha256=xc_pgMSZb61BigIgnFRMsYXoeSVu3m5yZavYirMxjlo,382 +stripe/_credit_note.py,sha256=xA___k-svZv2aCBXWsC5mPqcKvV6iGfuvp1irHUCwlo,26293 +stripe/_credit_note_line_item.py,sha256=ZxmBBgkwLmxPkQsGyVbVCfvEQMIR6AATzL63hU086z8,5425 +stripe/_credit_note_line_item_service.py,sha256=CViO927qWHToB6qHu2_DVt2yYnkgZE6HeZOnfxfc_6I,2231 +stripe/_credit_note_preview_lines_service.py,sha256=aSxlh7Z6cAPz0qT0wBOUuhAlAAIUmmprhxo2TIlul24,1930 +stripe/_credit_note_service.py,sha256=hqfl1U8O_4FwQBdYMHiRMNslGhLaXrIGtFDt5qU9Pho,10932 +stripe/_custom_method.py,sha256=uCDld6gRHyEs7mheY4wSEDNW1MPuEqnEQ2cuTF8dl1U,2537 +stripe/_customer.py,sha256=F9Y9MpOpCvdniLLIuSKCY058qiX9u4pf6C6vZ1nN5H0,71041 +stripe/_customer_balance_transaction.py,sha256=4JKRqvGUcTT2OGOBUVixmfygD2lobJdfXXgf1wwCqBs,4799 +stripe/_customer_balance_transaction_service.py,sha256=CqvjAI3BC5l85Ed8T15PmyN40EtAy3qwM39ZBH9XDvI,7591 +stripe/_customer_cash_balance_service.py,sha256=FuNZE6vo2ro7C32SDVlKgN6sN2BB8hXGFqQ_Ts2GbRg,3222 +stripe/_customer_cash_balance_transaction.py,sha256=34v4ria7ZbLT_lr7ilEGTMbF871Hpk-3MIgKvTKSKR8,8338 +stripe/_customer_cash_balance_transaction_service.py,sha256=4Ke_2grZh5cP5BgwbNDgopQFV91ZsuSkSBDZyVSh6p0,4289 +stripe/_customer_funding_instructions_service.py,sha256=h5AbcavW_QX7O-J7dp9IEFiIqy8rFsVVlbd0571Y3eI,2526 +stripe/_customer_payment_method_service.py,sha256=ZsjJKhPsmy3Jv9rkJftiOK_oawD5sDHrLydVdOtc8bc,3615 +stripe/_customer_payment_source_service.py,sha256=5UCmtWddC30EIAUSU6kCq9WlEfri6dWby8zNBzAvdWs,10916 +stripe/_customer_service.py,sha256=uTVD6VxwZ-NAATORO3EmSXYyo1pZtelF23O_rp3yCTE,14565 +stripe/_customer_session.py,sha256=vAQs4Te-BnsXHglczdQXW6uvd8ftAt9eG2cSdzVapFo,13073 +stripe/_customer_session_service.py,sha256=GD1BzbxB-PYAziDGa8Ech98bq5sSwupOGwhtd_jR-3M,1764 +stripe/_customer_tax_id_service.py,sha256=Zyj6kuwdZwQf1TfV_uOQY2XikbJDkMSIRrVzy7wct7I,6083 +stripe/_deletable_api_resource.py,sha256=u_IfqH5XOtnpYazHcrniM4tvQKIOZHDlVcZMrIP1JYw,712 +stripe/_discount.py,sha256=TRfwEAVG4qtL88a8_HvYacv-m5qvVS2CzhN162rel08,3114 +stripe/_dispute.py,sha256=jZy3SyCpjGBFhrLWtzJkHq0t0rfKflJ2CN2WiaQSy2Q,31191 +stripe/_dispute_service.py,sha256=bmEjwlqeC8q0VkwcM3dT6zayGEHWnMlwQYf0ARpemPc,6740 +stripe/_encode.py,sha256=1b8ucxSKbjiMJt2otFdHQfO9p7oBbhn__t3HX-Blx7Q,1880 +stripe/_entitlements_service.py,sha256=6vCdJbE8B5_E5BJFjF495N5FYyWxoMgzxrjxrirTHxE,1258 +stripe/_ephemeral_key.py,sha256=h6yx9vD-j8U2ziYNEgeFxmLKnx3Z6fW6qV0ecRIe23Y,4512 +stripe/_ephemeral_key_service.py,sha256=X5DWfLGUrHL4lLf4_IMq4YBvLFSSOQ9uFsk2wJsx3Bg,2827 +stripe/_error.py,sha256=4eKtrUu2mYVvda38Fc31RRr8EFv9OQ7rIREPTSxI3ec,5561 +stripe/_error_object.py,sha256=OId4O0WV_IartL4jpcmEwdchVgj2g_q633w4CXRrtrk,3973 +stripe/_event.py,sha256=H9Lzwgeq7Eob_U1r_1352Tx-qpGHYmf5ZVmn2jIqV_8,16493 +stripe/_event_service.py,sha256=iWuWkDDGef264ct7wdPk5ntmo_JXGXNBaK60u_iM5AY,3390 +stripe/_exchange_rate.py,sha256=hnumqLfE9AdIQNsQyYoQ7HRVBha5KPgAG7FJ17PRS48,6008 +stripe/_exchange_rate_service.py,sha256=xQSG9jN6WrJsLSLA8nfY5-EjnjTUfuT7V0KOAdk4saM,3975 +stripe/_expandable_field.py,sha256=Ci6cUuB4PeMFOc2I9NTdK3Xfm_L4vh_1HCfBX-1bC2g,84 +stripe/_file.py,sha256=WAlKH5t3srIleAgIv1S0gtFbQngFCGZQNdM2NkzPFpA,7125 +stripe/_file_link.py,sha256=yJ0UG78-ZN67pQK0e1EjYDYNmxExqyJOPmCgGo3CvUE,5673 +stripe/_file_link_service.py,sha256=tSEBEcEPQqAXFFvohya_v-rp3qpJr57i2KCrNdKEDTw,5018 +stripe/_file_service.py,sha256=UbXy2764SbxlMV2R7e_nPvDtI-e3pIz26vyBYbcmtdc,4986 +stripe/_financial_connections_service.py,sha256=ZOaLICnlkBTTjMxoNwCIdjOYbwRrxGeoxrloe8W8anc,1495 +stripe/_forwarding_service.py,sha256=JpcI4saR5CemspZccL9hfyKcHUqizrFvlH8AYYkic2Y,963 +stripe/_funding_instructions.py,sha256=MjNz35PLFjFPi3hTd1Oz9WDNfg8d5AbVYBnyLMS3Iv0,21685 +stripe/_http_client.py,sha256=5sONUpG9WV23GBCxBqr0fFtM4Dj8EpYzPvq8Eu2rYlQ,50233 +stripe/_identity_service.py,sha256=EstRVD5SiF3pB7ZRZa0rp7EHsyr0_S1Nps7U7kMSZx0,1373 +stripe/_invoice.py,sha256=yhtCZIBuYAPqv8x1p1mA1TbEKOXIombpAfJv-rzusdc,128077 +stripe/_invoice_item.py,sha256=P9bCR64VqxdCS9KBMFhNLMQuvD5r1Hq1_OdLf7CGIE8,15952 +stripe/_invoice_item_service.py,sha256=fBcBKlR4CCql33slQHCskcFtRUPCRoH047uscdBTvPw,7817 +stripe/_invoice_line_item.py,sha256=70zZ4U_c3y1ivk7bbbv9E5ebtbxt-OusO_CyTdLjADY,12585 +stripe/_invoice_line_item_service.py,sha256=Kcc5lp0Z_hC2CHV8nVhioJ6ypaHIx7LeqrQgJIwhDvE,4552 +stripe/_invoice_payment.py,sha256=oS0JSaM29Tx_kVV5zpotU3f_UyOarV6LS3XMxmkTjQY,6580 +stripe/_invoice_payment_service.py,sha256=CDJWJhbw1pObyHtn1cxsw-NjQPvSbNMhTGnfHAp-AFk,3408 +stripe/_invoice_rendering_template.py,sha256=DsGYiB1ZoDRt-WafyEf4_u2RQTdRl-Ww5yE9yMBUi0A,14024 +stripe/_invoice_rendering_template_service.py,sha256=JgOMjEpbPFcooH12XgRIN8rT6v85zHGk2u1Bcv3BCVE,7291 +stripe/_invoice_service.py,sha256=sdXys5Rkym8h4xO9oo2FIkbq4qb83e7tNJOpTSwk6sw,31869 +stripe/_issuing_service.py,sha256=q9L4XSEfv4cj31XYf_33OCo-41GqZ0ny2wJYsTEK8E4,2429 +stripe/_line_item.py,sha256=pWkhmeHg6XrSrdHtvlL4r5-6ahVboIhf-vhx_Pyqaw0,3925 +stripe/_list_object.py,sha256=pN41ViNNbG8qAVwqRZ9tYeSQn6pf3GMaoQfXi44Eb-w,8052 +stripe/_listable_api_resource.py,sha256=sPGGUcszeAuA5JcS601AgW5HXR4ARH970wf4GOX_DqU,957 +stripe/_login_link.py,sha256=Pb2d7VynazOexx8drGN_huH4TPWByeyYxYOcQvvRUlA,980 +stripe/_mandate.py,sha256=hPxK8SFiT-XrKTaFOoovsgo9saR_iXfDwZv6P3nv2so,8626 +stripe/_mandate_service.py,sha256=JG4k5moXwdAY_aNyXnZ_TB66QB5PtU0DU6-wsWSHorI,1566 +stripe/_multipart_data_generator.py,sha256=hNUqK0yj-c7ReQZOjQAtowmUzwlkQd2w4-46cD_bzsM,2710 +stripe/_nested_resource_class_methods.py,sha256=lpuf5o2q5RPLaRuT-Kp5hhPnHxs1PHOHe76JEbpfKmw,4092 +stripe/_oauth.py,sha256=8vmv63YExeMDBHUTTJ2SALIZ1iU0CvjU-quUI1uXu3M,15290 +stripe/_oauth_service.py,sha256=s6Lh_EtpUvlK0ffzXA5eAm9MsWEitRmyPCDCOCnFqf8,3682 +stripe/_object_classes.py,sha256=2qUcYpZKakPgluLdZaXHWJu9NbFOwldIEd8Ol3Whc7M,13298 +stripe/_payment_attempt_record.py,sha256=KjQdYr6xiijjAQdwOkvg9FNknAY1LtssZen_9qP2_4Q,80661 +stripe/_payment_attempt_record_service.py,sha256=adfRmWxcGBscaq279XxBy4uFYWQ1-AYb5CUuG_d_NI4,3111 +stripe/_payment_intent.py,sha256=_xI65HwN8qcQrDOyqOn9d2iYP2Qpw2haBo9cZxWLYYM,222661 +stripe/_payment_intent_amount_details_line_item.py,sha256=uzc0CoTKZsBmhjDIr_fJJT--ikOrlpUoWbhxnJdmCGU,3957 +stripe/_payment_intent_amount_details_line_item_service.py,sha256=tuqnBDtIPo3u7Uekk-sX6j18BzSgSoJIC9yEIDtCAGM,2194 +stripe/_payment_intent_service.py,sha256=NeNP7P664GhgbDMNqjUxfXN0jOWirvgXfKCttqMMpMw,28338 +stripe/_payment_link.py,sha256=GVyxYH32lS3J5TpRUGTcSOzPhBnHDcqxIaKUs0d3bUY,40022 +stripe/_payment_link_line_item_service.py,sha256=MfZbox2Adnf_sdBps5piFTuxqc9VAp3gg9r4U-J27os,2226 +stripe/_payment_link_service.py,sha256=T2itBF0tCnTYJkuqTroZv4twXiC79UELJulyK7I1pK0,6173 +stripe/_payment_method.py,sha256=4E0oGVMcBm8CJSUj_l0BRy3Tv3-v-tegpHKh59Nvv34,82986 +stripe/_payment_method_configuration.py,sha256=f3P7Vx5mcMvDk6AYg4suucDKXZVd5pwasKBI8UhLtZ8,56758 +stripe/_payment_method_configuration_service.py,sha256=VtCeIgGIbSWN7DQCn3kU26ORe4Mkis25tYaI13sLOmc,6137 +stripe/_payment_method_domain.py,sha256=ZZm1f0yqJsvE3yWiSvy-UXvl1J3dA8HN_d3Cqv83bIQ,18960 +stripe/_payment_method_domain_service.py,sha256=QKQtLK518dYxCHwoF8CPYSqsSFqhFx8rNWCF0d9cAME,8776 +stripe/_payment_method_service.py,sha256=KYljpSojBfH7e5PnrNR4ptWCg31nw3AdoZsusEsIR8Q,12839 +stripe/_payment_record.py,sha256=n4XerHS3YmUSF9NfqPgEL8QwAA7wqdRM4B82qkA-Vmk,105745 +stripe/_payment_record_service.py,sha256=VAdeh7ND47-X7718_OTTJu5jr0YJuu-Dh1K18POW5Go,12878 +stripe/_payout.py,sha256=Sne0xvnNM5SVTKN9T-BmRdxrwWO7OIONfvjXRZ9DkYk,23275 +stripe/_payout_service.py,sha256=MfR-0-xWsKEuir6iUgf4RIefolZkRtzkHSdhA_7Hklw,10665 +stripe/_person.py,sha256=LegHYriEJETevMlEcWWmYn0NuZQVE-mcVxQBntQO9Rk,36048 +stripe/_plan.py,sha256=l0n894sGA1BB_7VwNxjtv2cfA-VXSU34cwOV-V7JDmc,13832 +stripe/_plan_service.py,sha256=WH1C7bXLHwe1zTM5sC3VkxkLsf8qgGEtsinsI4967GY,6634 +stripe/_price.py,sha256=_hzochPl8CnSx_9QP1N5YgXCNNe09Hh5CJ-a8IAlIjk,18215 +stripe/_price_service.py,sha256=Pzare6dDaP6lKpv0MqVqgoGdWc59UAwjV3mZ8MA7XGA,7627 +stripe/_product.py,sha256=gschUY4lh-Ph8OCuVIR4oDhiai7t5eSeHzyStReUoZE,20922 +stripe/_product_feature.py,sha256=FdUDATTxLA0PWlT9979vHopKXcHvNW6MJKG2OqbH6qI,1362 +stripe/_product_feature_service.py,sha256=adhYjUTLAlV7xB6kLdMfszagMybuo8kIbbwPn9M0kuI,6362 +stripe/_product_service.py,sha256=lG-HgwnU92Aq8dE0SVbOZ5WkPZIM9qipOXkVzwia_t8,9868 +stripe/_promotion_code.py,sha256=vsJGdpWvICK2mtMvhjgyvD82TWRcMnO2WWMioIpWYvc,9174 +stripe/_promotion_code_service.py,sha256=H5tjCJ10ExsQLEcqZFmFycsAxlAqIu1uiPH6KHj2jcA,6295 +stripe/_quote.py,sha256=G9tSNBf5vu7hh3Vw2mKoJynf8cQoWR-m64TTro6KCYc,51147 +stripe/_quote_computed_upfront_line_items_service.py,sha256=OhHGUyryTqb2iio0RqjDcEpuGraPKq6W3st-2TH4yQ4,2449 +stripe/_quote_line_item_service.py,sha256=IfuiEhdylKLUrgxA-Y46uzOZXVjdwNRb5__CcEKmGmo,2111 +stripe/_quote_service.py,sha256=TLtT3BalPySwooxMCMPFAqj1JO9dAjCX1eyEH1a9Rvo,11253 +stripe/_radar_service.py,sha256=vNZKU-0MXTBJerlctK7SbG7jWbTUbhcKhR40-ZvP08w,1479 +stripe/_refund.py,sha256=syexqMpVsqW97vzW4ss-wxRB8SEHMeegkAN79KAHnZc,28866 +stripe/_refund_service.py,sha256=qlyLUWYcbP8llB_TzxaQ0HniobpfcVgcs2HoTy6WjT8,8442 +stripe/_reporting_service.py,sha256=c1y4pn3kKTraKywCELieMHSshL19XXsn0ZsFeFZ0y_0,1218 +stripe/_request_metrics.py,sha256=1y4C-YwU3gZbTQUBACHVgbSA6mWJjUr4oW9F2WkmrjE,551 +stripe/_request_options.py,sha256=HUS3sUePCj5-cTeefsidpBHvFEVAuPIclXOu4DKbQEI,2889 +stripe/_requestor_options.py,sha256=jccX9q_zCfVsH38TcFJAmMTgz8RDKex7Vn8HfzNP6ZE,3016 +stripe/_reserve_transaction.py,sha256=9Z_NQ9xpRnaIMIx9JxQ-YIWTdwEN1ENNdQ6noqFq6l8,894 +stripe/_reversal.py,sha256=mGX4xr0mXZMHtUDTUzVrPwbRyErmQrsI-z8SGHzRz3k,3851 +stripe/_review.py,sha256=0cvHkLhC-66hgwFAbQzG5GkqN1_SilEhd4TJM1BhDos,9777 +stripe/_review_service.py,sha256=svDvFMP61ZzaR0TzN-kRtdTNQ6VeGYMr_5bYboJTOeY,4312 +stripe/_search_result_object.py,sha256=lGppUgzbaWIUm58d9nYtGwYQU-YA9Bq1XVx7jPJ3apU,5602 +stripe/_searchable_api_resource.py,sha256=IlIfO7eCxgTcsDf0i1XEsGa5gfpETI3w6CFgrwS9wVo,1333 +stripe/_setup_attempt.py,sha256=GQZ-P-fX4-xdswFKMBB0yZQe2OffGTAE1XVZ092z49k,35933 +stripe/_setup_attempt_service.py,sha256=SzkWA98JpQ_gLkUzY90q_yE_77yZr6kF1zlinRhDSP8,1593 +stripe/_setup_intent.py,sha256=CGRjFJuEGI9KZn9PYITok-qnoWzllLwNNQATnCeRK-E,62617 +stripe/_setup_intent_service.py,sha256=jOkzrp4IEjxHC8E_KyU9Than1ONj5h-kwVby0VpYke4,12732 +stripe/_shipping_rate.py,sha256=5sRpFLXSNJihYvQrO4fv_XtTp9-ClkcCnl5a37s6IaI,8912 +stripe/_shipping_rate_service.py,sha256=vt44VCbzine03BoY7UbO_G8iI4myaWtqfsjfcJDk20g,5609 +stripe/_sigma_service.py,sha256=att1t3sHLsiEGLDWX1SECWoG3CAaU-Ch38R1DDV9W9o,1066 +stripe/_singleton_api_resource.py,sha256=FO1wyWT0rTMQZddpkhsvK1y_VVoeoOPGH5aHMgEf3JQ,991 +stripe/_source.py,sha256=zRgt6JQWGWO0GTsjtVLI-Po27Icr3FsO23yNoXdyuS0,34482 +stripe/_source_mandate_notification.py,sha256=LJVWG0O3HcKFo8bGg9dutVpmp5JZMC265UVpHYZHBSg,3608 +stripe/_source_service.py,sha256=hF3vERTzN-e6vYIViso9hn7boKwXNgrJ6W73yg-N5V8,8483 +stripe/_source_transaction.py,sha256=J_E05echUlVn7-fm37ZJLm6jfUGFhNjr7YvIo6Tnscc,5425 +stripe/_source_transaction_service.py,sha256=1bZ9wnppnUR3vi4vjVXuN8Qmddfcj1Tylm3hXWJfzxc,1908 +stripe/_stripe_client.py,sha256=Ov5h4hmZC0pI_F418llehI9i_UR8bb5TXNQVq9b3HzM,49239 +stripe/_stripe_context.py,sha256=t4iOuJY5sEvnNxLTHxj2XqyqotyNZKJWxrZCTCzO5dQ,1368 +stripe/_stripe_object.py,sha256=pTMC3KoR1FvpKSarBKr6cF3u888FMlwo2-aR_tvCblw,20102 +stripe/_stripe_response.py,sha256=KvmZgTlmr_Gc5m_fe_RY85LuBfWfa92BRsCtYf3Tj5s,1693 +stripe/_stripe_service.py,sha256=2hQYjj4k99BTxbjcw4lkvLFGAkYN5H1xN8F9iOIfF2I,2358 +stripe/_subscription.py,sha256=4L9cGgxp_CtMfqHE-FTnQ6wNzvRlW37HqBQ0jhvHNgk,70969 +stripe/_subscription_item.py,sha256=X4w2Mv0K7huvKjCqM0TDqoQyAmOuKjnexAit9xmOQGM,12805 +stripe/_subscription_item_service.py,sha256=LZ2KEmaQGPdldt_ewkl8ZaMywqwSUgL3GaL9JPQI1-k,7041 +stripe/_subscription_schedule.py,sha256=1XuwYPtuVC6tQlRg61CyYT85BX3x1edESWfQ5FWugc0,42317 +stripe/_subscription_schedule_service.py,sha256=YfWAA7x6xCwxAh-gNb3u_BMRIM18C8C-Wa9kz542K_Y,10262 +stripe/_subscription_service.py,sha256=Ig-iGEk9UDu-4ili2eCDUkxw79tQ84I-XY6Rq6xVr0Y,23779 +stripe/_tax_code.py,sha256=vg-GL0RFri0426Deza1koYyeTxJaFtVSb4q1oBexan4,3099 +stripe/_tax_code_service.py,sha256=Q6oDoMLrwOxu5zx6c-WzUn40uKaoHkKSY2nrBJd5t7I,3109 +stripe/_tax_deducted_at_source.py,sha256=PPpyhaj7ifnPMgMfMJuA0BQaTZKmYBaLpzQxLCooY9k,951 +stripe/_tax_id.py,sha256=B53gDb94QCk2iH9hPT8Fpa4f2de4Y6M95omcCJAtpvo,11854 +stripe/_tax_id_service.py,sha256=b70LsP9s2iGoUkRUXLXsY4LQbWVDtWfqX20qDBrK7ZM,4853 +stripe/_tax_rate.py,sha256=-AfuSdSQpupYejB_6dqjXXjcvMZ8nO4jEjkBraJVZjc,9100 +stripe/_tax_rate_service.py,sha256=CmY-xF5YNbnWhDHpxTp0slcs_1LmsOzks4WUpz7a74A,5295 +stripe/_tax_service.py,sha256=Pr2mCnEokB_P0aEvtv0B_6DZTGAa1i57d5ZCLZO3vew,1532 +stripe/_terminal_service.py,sha256=Fs0b95mZL_6IXHPlbt1qdvmrNa7HSH6h4QxMXruZ9Mg,1623 +stripe/_test_helpers.py,sha256=UPtP_snexB_iUnH1JaJRgXnr0zzs5ZgH2jLP5VG9TdM,2205 +stripe/_test_helpers_service.py,sha256=PFqqMMFnSanfwm07dBueNeky7vvVFOLgENE4FH7udaM,2181 +stripe/_token.py,sha256=q8hr_xues0v7-ZYW-zB_6qB11mtGaGIifLFmKR0GxZA,5753 +stripe/_token_service.py,sha256=eEy8gFmqey67eyj9vzcpNzBx2e9vQ7_a-YTmXCz5l80,3435 +stripe/_topup.py,sha256=LdlqK9rd-aecR0fSEY26tMqeUCBoYHyDzPlrGWRD14Y,10439 +stripe/_topup_service.py,sha256=pIodj0oOXyG3zOi65TiGYhzp92XqSrZZwnECNsmNk64,6429 +stripe/_transfer.py,sha256=_WN5kZ4ouDiq3E25j7f17nePlvBJNXqubPB1cxpYm7Y,15787 +stripe/_transfer_reversal_service.py,sha256=r0dS9B1890DRuk6wOX9RU1w1Ur2x4dfpPqmljmOZ9oA,7919 +stripe/_transfer_service.py,sha256=CnYPSx9DU0X1JwalebRUklWtxd7oSwhFqoPVddalvcc,7280 +stripe/_treasury_service.py,sha256=MHGqcsuB3U3y1SaMc4pV47k4OYmxSZps96PYeCY5RJs,3324 +stripe/_updateable_api_resource.py,sha256=8beWYGODTUZAE88s30j6dgGcPky7HvhhhVqpzWHgagw,1126 +stripe/_util.py,sha256=up3j7vrqMklyFUWx_LqGO1c00argtkw_jsIiChFEqAw,13792 +stripe/_v1_services.py,sha256=9YpgDvNmUVhSBXgX82lh6tuSHJiKszd3uXfBpQCRCMU,13855 +stripe/_v2_services.py,sha256=V4eyIITjW6PS5Iw5ZTHuk5JH1Yab30AN-NEWtGAzbms,1070 +stripe/_verify_mixin.py,sha256=3nYNIb7QeFnzpcdc-QfDbbLxpCd0jBS70Oldq-hNdjE,494 +stripe/_version.py,sha256=Wwd4Pr0lz1KDrH8VzoxO5-GewMb509kchWw3HdODSi4,19 +stripe/_webhook.py,sha256=J9wc4Rj7vmqzYuUtCrPXdIueK3AUU4uQrl2-7lBm-SM,2958 +stripe/_webhook_endpoint.py,sha256=NlmsCsmVme1siDylmrIvtrRJA_HV87F98XOow7MYjXQ,11640 +stripe/_webhook_endpoint_service.py,sha256=jsLUHRIMe6WO9AACPpwZACOWLpHivAX50gKKtkSaEdg,8484 +stripe/apps/__init__.py,sha256=VYWscDLP3di4F1I922q598RKQbGcTJhFqhGlp7lkVe0,823 +stripe/apps/__pycache__/__init__.cpython-312.pyc,, +stripe/apps/__pycache__/_secret.cpython-312.pyc,, +stripe/apps/__pycache__/_secret_service.cpython-312.pyc,, +stripe/apps/_secret.py,sha256=x7lywDp3qZP_0nPJK26Z2pNTe-cARWJ8CUYO9HQH4z4,6326 +stripe/apps/_secret_service.py,sha256=h5UHgiUF_xWkiEnVa-JB_x0EBj1aNZFy3DskUF3lbgQ,4709 +stripe/billing/__init__.py,sha256=gvPziCn2f4_8rrQX1j2hQUZ4Cin3XXgOkzQUxe4cgms,3693 +stripe/billing/__pycache__/__init__.cpython-312.pyc,, +stripe/billing/__pycache__/_alert.cpython-312.pyc,, +stripe/billing/__pycache__/_alert_service.cpython-312.pyc,, +stripe/billing/__pycache__/_alert_triggered.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_balance_summary.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_balance_summary_service.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_balance_transaction.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_balance_transaction_service.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_grant.cpython-312.pyc,, +stripe/billing/__pycache__/_credit_grant_service.cpython-312.pyc,, +stripe/billing/__pycache__/_meter.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event_adjustment.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event_service.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event_summary.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_event_summary_service.cpython-312.pyc,, +stripe/billing/__pycache__/_meter_service.cpython-312.pyc,, +stripe/billing/_alert.py,sha256=BpzYsVdMkpznjBR9Z8kp3demfz2BFzo5qViXE41jxbw,14606 +stripe/billing/_alert_service.py,sha256=viwoEyO2cfQEYc7lIPWjvC-Gq4y38FDqhOmP8Jwe_dY,7573 +stripe/billing/_alert_triggered.py,sha256=xzxaHDgliVBNdvQWGg8soF-vvpVefp0gSjkiTPj829c,1211 +stripe/billing/_credit_balance_summary.py,sha256=l31pVBL87A50CxYZreBsS4otE8VIrdNxZLeblViY0Oc,4067 +stripe/billing/_credit_balance_summary_service.py,sha256=V3tH3ltOOrPFaV5fiau9-b-fziQ_8X2RvOhq6iHSRUE,1631 +stripe/billing/_credit_balance_transaction.py,sha256=wN41pISDnVk8-EEy3JOfjsgITNS_QGbrMTWt3DJAwrI,7776 +stripe/billing/_credit_balance_transaction_service.py,sha256=fzjIF9kCap0PzXTbn6ZW0ra-wK0qDl4s7hTC86FPbj8,3266 +stripe/billing/_credit_grant.py,sha256=gG2SMK_vH5K7pN54BuSdWmR9rnzX56daGRxI5Nn0XfM,14651 +stripe/billing/_credit_grant_service.py,sha256=uGldXJqTkAKWkwcyF5hsfbIWyT60zMbroKdXLpGSdfI,7760 +stripe/billing/_meter.py,sha256=EjJhicN0COowBAJPmVkH1wfeCKxXfK6qHGOUc0zGYag,15456 +stripe/billing/_meter_event.py,sha256=6Rw71P6spQtHfDg-cQXLoWoZTIXtdwVjzerjGQEdsTc,2691 +stripe/billing/_meter_event_adjustment.py,sha256=xqbzVUkzVLMEtebf3b6Ci5Y-SF5r8UiuBvW-SgKLwDk,2693 +stripe/billing/_meter_event_adjustment_service.py,sha256=B_fyE0riP0ASX9YBzsZmtn-7kKqq2PTunBMlv96xFSs,1601 +stripe/billing/_meter_event_service.py,sha256=ktU39_ovZ0hyWnPkfUWEpEiPzLtEUjobcBfS-JKX8eg,1445 +stripe/billing/_meter_event_summary.py,sha256=lL3fnslJfuXYid9kBz04bdjqBHjnvlgAelrG0VpgqKY,1628 +stripe/billing/_meter_event_summary_service.py,sha256=fMkarK6BJI20VgMo8BegvLpxkDrlwDz51JXz_DEbrOU,1876 +stripe/billing/_meter_service.py,sha256=pDfKcr18ZVDCeYKb9WuHoyb4Sr3TMsWnZiijr9AtGRM,8624 +stripe/billing_portal/__init__.py,sha256=2SHtYItaLnTnj1pK-FEgiDPBDlBwvJFkZ6w9f_mZryE,1292 +stripe/billing_portal/__pycache__/__init__.cpython-312.pyc,, +stripe/billing_portal/__pycache__/_configuration.cpython-312.pyc,, +stripe/billing_portal/__pycache__/_configuration_service.cpython-312.pyc,, +stripe/billing_portal/__pycache__/_session.cpython-312.pyc,, +stripe/billing_portal/__pycache__/_session_service.cpython-312.pyc,, +stripe/billing_portal/_configuration.py,sha256=Vo-HzHcCWrgcW1Lf90SBwfb2CTiTIUcE8wxuW-cVCgg,14216 +stripe/billing_portal/_configuration_service.py,sha256=nVkJLYnAzLDRmzNtFud6GnU1D0gixGRRxQFPWb51v9g,6101 +stripe/billing_portal/_session.py,sha256=mDmY-i1C8SaOgrSEni1oxYV_mxo94IXkXZFK4-ftLTY,10331 +stripe/billing_portal/_session_service.py,sha256=Ipxb918gnB-9uUUSDs7tpqMOqvOiZo-PE05RX-NCwHA,1452 +stripe/checkout/__init__.py,sha256=8FnAQs-PjyJeq0wIJvVv6Pa2tXeIiDSIJKy0N6YxP4g,1099 +stripe/checkout/__pycache__/__init__.cpython-312.pyc,, +stripe/checkout/__pycache__/_session.cpython-312.pyc,, +stripe/checkout/__pycache__/_session_line_item_service.cpython-312.pyc,, +stripe/checkout/__pycache__/_session_service.cpython-312.pyc,, +stripe/checkout/_session.py,sha256=WBgklGLuwe_Byg8N59BuWyE6aN1w1YQBBqSkmDx2dPA,131172 +stripe/checkout/_session_line_item_service.py,sha256=NuNKzDabKFTQTMdoxMfXLT365CLu_kwWyvOmzgnWKqs,2190 +stripe/checkout/_session_service.py,sha256=T74ZSFCpox69UUuihdFe5u6LiIL92dITRTgi9hz7Nuo,8094 +stripe/climate/__init__.py,sha256=aoA3-H5CdcZFklC9ueJOf6ZiH6JXuwqWsGlobjJPXYQ,1383 +stripe/climate/__pycache__/__init__.cpython-312.pyc,, +stripe/climate/__pycache__/_order.cpython-312.pyc,, +stripe/climate/__pycache__/_order_service.cpython-312.pyc,, +stripe/climate/__pycache__/_product.cpython-312.pyc,, +stripe/climate/__pycache__/_product_service.cpython-312.pyc,, +stripe/climate/__pycache__/_supplier.cpython-312.pyc,, +stripe/climate/__pycache__/_supplier_service.cpython-312.pyc,, +stripe/climate/_order.py,sha256=Hucm-A_uIz_xiLNPr6yNcN--b6fjBm_DJ2lXu98u_IU,15425 +stripe/climate/_order_service.py,sha256=1INf6t6r9GzbR1ahoqJyUuDZqxVIkbqDEXLMbm5aPBc,7528 +stripe/climate/_product.py,sha256=ETmGeN_6-wvBYaKFO-hEUWWw3CKcezzYTlTMbwQjjxk,4480 +stripe/climate/_product_service.py,sha256=5x4mWnR-N3ogMLSXXLa-qGkF6_q6q2Qb6Y2fcq33aQk,2939 +stripe/climate/_supplier.py,sha256=0n37C90FqWx1x5DhekT1APdkocOeTtyPsV0r6nUuQ3E,3881 +stripe/climate/_supplier_service.py,sha256=r8iyjnlM1JtwEJ9Qfy2sGPN4xCCjve7OqzetBBIafFk,2922 +stripe/data/ca-certificates.crt,sha256=CN9A6PUo7Sg7DkgLpLzb_dL9z2laetoWaCQwctgPi28,215352 +stripe/entitlements/__init__.py,sha256=k_dBw9p0Ha-E1xMFLFdHvqELgDKo1DSrV8q4c1s-2xs,1569 +stripe/entitlements/__pycache__/__init__.cpython-312.pyc,, +stripe/entitlements/__pycache__/_active_entitlement.cpython-312.pyc,, +stripe/entitlements/__pycache__/_active_entitlement_service.cpython-312.pyc,, +stripe/entitlements/__pycache__/_active_entitlement_summary.cpython-312.pyc,, +stripe/entitlements/__pycache__/_feature.cpython-312.pyc,, +stripe/entitlements/__pycache__/_feature_service.cpython-312.pyc,, +stripe/entitlements/_active_entitlement.py,sha256=dLZh9Jxcw7-4Y0C1rseAbWez9eFr2oYm8uPfRRp5NZ0,3314 +stripe/entitlements/_active_entitlement_service.py,sha256=13CNe2BtpLdxtwofSDUMba9RYoBrsGWjj7a1TFE9lYo,3110 +stripe/entitlements/_active_entitlement_summary.py,sha256=9kKulgGwUi0g4YIU1Y67mgMITPR2OYhp-RIL1Eg-4zk,1097 +stripe/entitlements/_feature.py,sha256=gD3zqDA-EVN7Rz374-cpQW2Roz-Nub8_NbXv3iNBMnM,5522 +stripe/entitlements/_feature_service.py,sha256=o5tD0TvkGU_7VyXrfFpD47-GrH8mkQDxCPveso8HFtg,5049 +stripe/events/__init__.py,sha256=Yos6FUpe3HamopdiGc6vYRFSDLeJDKXWWf0rpJdwOig,2580 +stripe/events/__pycache__/__init__.cpython-312.pyc,, +stripe/events/__pycache__/_event_classes.cpython-312.pyc,, +stripe/events/__pycache__/_v1_billing_meter_error_report_triggered_event.cpython-312.pyc,, +stripe/events/__pycache__/_v1_billing_meter_no_meter_found_event.cpython-312.pyc,, +stripe/events/__pycache__/_v2_core_event_destination_ping_event.cpython-312.pyc,, +stripe/events/_event_classes.py,sha256=nQh1yN-83f35MF4AVRQInatTM-uo77LtOYrQ1ueILY8,2538 +stripe/events/_v1_billing_meter_error_report_triggered_event.py,sha256=V-PFiB03e9zsY4r4SFQxvP4V1MQ3HwNSqY_-FaIUiXw,6836 +stripe/events/_v1_billing_meter_no_meter_found_event.py,sha256=diM_lkfw8O3VtoMvhty5xHa8zhO9N_JGePPtRKCyp8w,4492 +stripe/events/_v2_core_event_destination_ping_event.py,sha256=DD4BG87DNQnRD8P-t2OGodiQar_tY69J-LV3dj3rs_I,3310 +stripe/financial_connections/__init__.py,sha256=w5aNNzepPwzMcYWSOHbWnMKTpuCBuf2Z8jJaUjP3epo,2307 +stripe/financial_connections/__pycache__/__init__.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_account.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_account_owner.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_account_owner_service.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_account_ownership.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_account_service.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_session.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_session_service.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_transaction.cpython-312.pyc,, +stripe/financial_connections/__pycache__/_transaction_service.cpython-312.pyc,, +stripe/financial_connections/_account.py,sha256=QIV9W2wdGx0luk_E7IjDffv13gph7GC1dTbECR6eGh8,29539 +stripe/financial_connections/_account_owner.py,sha256=sMmmNskomFbCDWF8jCARREK_IDVcBd1dZvWfx0upsOc,1141 +stripe/financial_connections/_account_owner_service.py,sha256=NBWc3Bgk5FDYQdsjKTyGfX5imhRtc2byXDddGkEQ8fc,1875 +stripe/financial_connections/_account_ownership.py,sha256=0OqmZ6KnZ3BkYrVszXm4_SHy_4e2aYuvoxcaKKcxK_8,1059 +stripe/financial_connections/_account_service.py,sha256=H-Vk6DikzsqHc9gbF2xwxeo813DM1HhfQQrPXfv2N7c,10060 +stripe/financial_connections/_session.py,sha256=ZLMl1rT_AXO1hOeXMUiFARoPsKokspJgmVIHnDKCd1o,5427 +stripe/financial_connections/_session_service.py,sha256=DAcHRgqVr0l4OciOmuAED7NcD3F8JvXR012c_yySdJ8,3139 +stripe/financial_connections/_transaction.py,sha256=nQGpMQNKZFTRNlpqQ1UROTdiOEdBvmxkr1j032ZT3hY,4447 +stripe/financial_connections/_transaction_service.py,sha256=q-fuJH4CjMmOWfgzM8bA7NJD6WS08pXwhszK7iC8azc,3174 +stripe/forwarding/__init__.py,sha256=cRyBzy4yf6KsnOxninCfcxDxMIXtBu5OtNrPivOdXm8,874 +stripe/forwarding/__pycache__/__init__.cpython-312.pyc,, +stripe/forwarding/__pycache__/_request.cpython-312.pyc,, +stripe/forwarding/__pycache__/_request_service.cpython-312.pyc,, +stripe/forwarding/_request.py,sha256=FIHi3ZDqWxko1394d0tS3_567m_O1wvHLsAekCYMu_M,7915 +stripe/forwarding/_request_service.py,sha256=iugHHOPxHKVbB9YddDNuvJZkZ5ymxO8qjlxL5XiFPpU,3849 +stripe/identity/__init__.py,sha256=eJiV1XmlVtF0YfKH1SGDKTTpJKZEU1RDpoDkInqFEDQ,1462 +stripe/identity/__pycache__/__init__.cpython-312.pyc,, +stripe/identity/__pycache__/_verification_report.cpython-312.pyc,, +stripe/identity/__pycache__/_verification_report_service.cpython-312.pyc,, +stripe/identity/__pycache__/_verification_session.cpython-312.pyc,, +stripe/identity/__pycache__/_verification_session_service.cpython-312.pyc,, +stripe/identity/_verification_report.py,sha256=unsJ1vMsZuvEXataRb_-G_AiR1YofMZtP-02v16XPNc,15740 +stripe/identity/_verification_report_service.py,sha256=A3W8Zm8FENXCkGyiAdhVEWLAsUqMO78NlkGuV_yB9T8,3145 +stripe/identity/_verification_session.py,sha256=vMpBNQjWGHm4Xo6m9gyEQPkBpK9eHWwfCz_hx64Rnrg,36293 +stripe/identity/_verification_session_service.py,sha256=fs4EOox6hEK4mo_JSBLALb6OR-L8JD4aGVkxJEShpMg,13188 +stripe/issuing/__init__.py,sha256=XsdJWCA07oBu_SJkF5s6V6FaMJRxFrdB6msHoSSnE2I,3124 +stripe/issuing/__pycache__/__init__.cpython-312.pyc,, +stripe/issuing/__pycache__/_authorization.cpython-312.pyc,, +stripe/issuing/__pycache__/_authorization_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_card.cpython-312.pyc,, +stripe/issuing/__pycache__/_card_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_cardholder.cpython-312.pyc,, +stripe/issuing/__pycache__/_cardholder_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_dispute.cpython-312.pyc,, +stripe/issuing/__pycache__/_dispute_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_personalization_design.cpython-312.pyc,, +stripe/issuing/__pycache__/_personalization_design_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_physical_bundle.cpython-312.pyc,, +stripe/issuing/__pycache__/_physical_bundle_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_token.cpython-312.pyc,, +stripe/issuing/__pycache__/_token_service.cpython-312.pyc,, +stripe/issuing/__pycache__/_transaction.cpython-312.pyc,, +stripe/issuing/__pycache__/_transaction_service.cpython-312.pyc,, +stripe/issuing/_authorization.py,sha256=3D5IjLIIShlHqdz61zZq56iJhXap8GCVNGBfEDiLLSk,66603 +stripe/issuing/_authorization_service.py,sha256=nkuanfvwEzFeF-Kzwg4_fqXTJk6IYrwZQSrMuydrPuU,9482 +stripe/issuing/_card.py,sha256=TRPheD2zkIncOhp_yo-snOrGFtY25sZomymUOwyLYBY,83699 +stripe/issuing/_card_service.py,sha256=Mqk-sP9YEzwqP9QVVw0cuDaKsO9uaPdFMFX6ZU4MOA8,5299 +stripe/issuing/_cardholder.py,sha256=mr15ZpwdpLQR6lKBB_bfkYzGbTm7zYGTN2TnoTldkFo,61393 +stripe/issuing/_cardholder_service.py,sha256=YEj_vdr0OKxQOic5PC3zzb6oUVPGiPg6N1N9B06CIn4,5981 +stripe/issuing/_dispute.py,sha256=BajqfsxV21cz7nmCmtMrU7bi0HuzUv5f78JLo5vxf60,22939 +stripe/issuing/_dispute_service.py,sha256=ZF2rshZP10sKLV5JMdQeUhF4reDJeD5CVE3wOiq2M-c,8369 +stripe/issuing/_personalization_design.py,sha256=kSrJk-iT5HcFZvgX3yNP25n_uDFIbDwaEEENo8Va9iI,24156 +stripe/issuing/_personalization_design_service.py,sha256=jdFFyPNi0qukB-3gJ9AAXAl28DUc0bUxUrXL7_dTFSU,6405 +stripe/issuing/_physical_bundle.py,sha256=5DQjW6katqCVpux2C1dDoINGbH1cAALXX2DQLatryHI,4203 +stripe/issuing/_physical_bundle_service.py,sha256=PaGSUriWFvqGTGhrdykexAKJ2YFZh5Bf0K6wizgMCe4,3364 +stripe/issuing/_token.py,sha256=6QvF36k1O-pW9pPgNA9LP0QLxamtdfZGJyYAazBUm94,11797 +stripe/issuing/_token_service.py,sha256=htaeUgqzVmYZO2aQfIaDfF01B7LLSOX8Mu_OzMlgXMw,3954 +stripe/issuing/_transaction.py,sha256=3xphljtafzx0bVXacFhEDgSSZuQf9au1wOr3V36W174,26004 +stripe/issuing/_transaction_service.py,sha256=Z0loILaxeOedZedlh9wWYauCj_zZu7zGAb4zFpQRC9M,4884 +stripe/oauth_error.py,sha256=hcZ9kqP5BN8kfwJmpnETZm9WBw7P8j0Kn4awwu8oq6o,1077 +stripe/params/__init__.py,sha256=lOu5Hn2tQ83R805JWVQv2zmL3ANBLZpLexdZhTMvLcg,737655 +stripe/params/__pycache__/__init__.cpython-312.pyc,, +stripe/params/__pycache__/_account_capability_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_capability_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_capability_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_create_external_account_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_create_login_link_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_create_person_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_delete_external_account_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_delete_person_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_external_account_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_external_account_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_external_account_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_external_account_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_external_account_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_link_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_list_capabilities_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_list_external_accounts_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_list_persons_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_login_link_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_modify_capability_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_modify_external_account_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_modify_person_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_person_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_person_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_person_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_person_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_person_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_persons_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_reject_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_retrieve_capability_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_retrieve_current_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_retrieve_external_account_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_retrieve_person_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_session_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_account_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_apple_pay_domain_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_apple_pay_domain_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_apple_pay_domain_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_apple_pay_domain_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_create_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_list_refunds_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_modify_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_refund_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_refund_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_refund_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_refund_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_application_fee_retrieve_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_settings_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_settings_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_settings_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_transaction_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_balance_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_bank_account_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_card_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_capture_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_list_refunds_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_retrieve_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_charge_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_confirmation_token_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_confirmation_token_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_country_spec_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_country_spec_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_coupon_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_line_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_list_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_preview_lines_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_preview_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_preview_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_credit_note_void_credit_note_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_balance_transaction_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_balance_transaction_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_balance_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_balance_transaction_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_cash_balance_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_cash_balance_transaction_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_cash_balance_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_cash_balance_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_create_balance_transaction_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_create_funding_instructions_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_create_source_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_create_tax_id_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_delete_discount_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_delete_source_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_delete_tax_id_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_funding_instructions_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_balance_transactions_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_cash_balance_transactions_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_payment_methods_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_sources_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_list_tax_ids_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_modify_balance_transaction_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_modify_cash_balance_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_modify_source_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_method_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_method_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_payment_source_verify_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_balance_transaction_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_cash_balance_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_cash_balance_transaction_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_payment_method_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_source_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_retrieve_tax_id_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_session_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_tax_id_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_tax_id_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_tax_id_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_tax_id_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_customer_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_dispute_close_params.cpython-312.pyc,, +stripe/params/__pycache__/_dispute_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_dispute_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_dispute_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_dispute_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_ephemeral_key_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_ephemeral_key_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_event_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_event_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_exchange_rate_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_exchange_rate_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_link_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_link_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_link_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_link_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_link_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_file_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_add_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_attach_payment_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_create_preview_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_finalize_invoice_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_item_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_line_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_line_item_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_list_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_mark_uncollectible_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_pay_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_payment_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_payment_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_remove_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_rendering_template_archive_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_rendering_template_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_rendering_template_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_rendering_template_unarchive_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_send_invoice_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_update_lines_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_invoice_void_invoice_params.cpython-312.pyc,, +stripe/params/__pycache__/_mandate_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_attempt_record_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_attempt_record_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_amount_details_line_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_apply_customer_balance_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_capture_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_confirm_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_increment_authorization_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_list_amount_details_line_items_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_intent_verify_microdeposits_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_line_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_list_line_items_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_link_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_attach_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_configuration_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_configuration_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_configuration_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_configuration_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_configuration_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_detach_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_domain_validate_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_method_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_attempt_canceled_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_attempt_failed_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_attempt_guaranteed_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_attempt_informational_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_attempt_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_payment_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_report_refund_params.cpython-312.pyc,, +stripe/params/__pycache__/_payment_record_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_reverse_params.cpython-312.pyc,, +stripe/params/__pycache__/_payout_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_plan_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_price_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_create_feature_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_delete_feature_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_feature_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_feature_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_feature_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_feature_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_list_features_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_retrieve_feature_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_product_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_promotion_code_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_promotion_code_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_promotion_code_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_promotion_code_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_promotion_code_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_accept_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_computed_upfront_line_items_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_finalize_quote_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_line_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_list_computed_upfront_line_items_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_list_line_items_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_pdf_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_quote_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_expire_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_refund_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_review_approve_params.cpython-312.pyc,, +stripe/params/__pycache__/_review_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_review_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_attempt_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_confirm_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_setup_intent_verify_microdeposits_params.cpython-312.pyc,, +stripe/params/__pycache__/_shipping_rate_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_shipping_rate_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_shipping_rate_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_shipping_rate_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_shipping_rate_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_detach_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_list_source_transactions_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_transaction_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_source_verify_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_delete_discount_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_item_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_migrate_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_resume_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_release_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_schedule_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_search_params.cpython-312.pyc,, +stripe/params/__pycache__/_subscription_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_code_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_code_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_id_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_id_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_id_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_id_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_rate_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_rate_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_rate_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_rate_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_tax_rate_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_token_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_token_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_cancel_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_topup_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_create_reversal_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_list_reversals_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_modify_reversal_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_retrieve_reversal_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_reversal_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_reversal_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_reversal_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_reversal_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_transfer_update_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_create_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_delete_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_list_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_modify_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_retrieve_params.cpython-312.pyc,, +stripe/params/__pycache__/_webhook_endpoint_update_params.cpython-312.pyc,, +stripe/params/_account_capability_list_params.py,sha256=26MO1fdIZOFXAo6QPhTWE3erJYU7ZtrttQKJ_1U6nsQ,302 +stripe/params/_account_capability_retrieve_params.py,sha256=KbuscA2sAWKUPInuEviZV9lU0slR_SfzJrocCpo9sak,306 +stripe/params/_account_capability_update_params.py,sha256=_WRKhDUeGbp5qEOcCJgGzsX-8A2iusuNMwl3G4ONDhQ,804 +stripe/params/_account_create_external_account_params.py,sha256=rNQvdgX3pOuD49UzHXin2Axq9pLEgLx0SLbaIkk9mWc,3585 +stripe/params/_account_create_login_link_params.py,sha256=CKeLn8RDVyV-EsIcNt_17FrYmK2nP2EfOkFoyEG9oVM,348 +stripe/params/_account_create_params.py,sha256=b8dYR9IGcPaZfZ2ApWL1YYoLigUMmh5Qn9UhxohiVZE,81200 +stripe/params/_account_create_person_params.py,sha256=83tJnZfERSUI40_-gy1vB1yM59HgM6UXvLXIn3xgL3w,15431 +stripe/params/_account_delete_external_account_params.py,sha256=nEnP7kIqO7EQBGPgVDV6PQPjiTHc9JRSdRV5icryXUY,183 +stripe/params/_account_delete_params.py,sha256=Z2XVIZRuFF94O3EsTvv1eUj_bQqFvIcUJrkg_sihR-Q,168 +stripe/params/_account_delete_person_params.py,sha256=k7gM7nyFDd1_mPuVy2nlzFp7E9d_xy5XykWp7_4EdKc,174 +stripe/params/_account_external_account_create_params.py,sha256=uWh7Kd2Bd3KbDHQR5Bob-7W3GO_Wq-2SsJrK7qGtXSQ,3529 +stripe/params/_account_external_account_delete_params.py,sha256=fiNHKybrg9hdxK5PwuWPksqUkuMKV-f1miGVqg_NfIs,167 +stripe/params/_account_external_account_list_params.py,sha256=mQWs8alFaBaaaKjvRTNq1zhD4nFFkqt64p-sgkMpVuU,1317 +stripe/params/_account_external_account_retrieve_params.py,sha256=l53wFaiHhB7GWZizyH-R8Y0g-qoPInhIJ9hVKqwy5dY,311 +stripe/params/_account_external_account_update_params.py,sha256=HN1szJUc_5rc1noC0JQa3cjM3dR4gNo_Solj2V_MddQ,3286 +stripe/params/_account_link_create_params.py,sha256=6SNaNfySCBclgdwQDO245opukQJtSdQi3Bq3KnMQ5eE,2838 +stripe/params/_account_list_capabilities_params.py,sha256=0FnybXdyWlyAhMs-xYZAo38QhIEeYrQFpmFyBOHCVXY,349 +stripe/params/_account_list_external_accounts_params.py,sha256=Ql8pGtzE1GLRMDqKUaWTiBRhc1u90_nQR5u8Z_csz48,1363 +stripe/params/_account_list_params.py,sha256=7OSdrGCB2z_mekTc6d2iZ71OziKHF-66ATeNyuu9tIY,1749 +stripe/params/_account_list_persons_params.py,sha256=2IzLbcSoQOdsJ_b3Xtd4anxHGHGJC3IPfmIJWwxKIP0,2475 +stripe/params/_account_login_link_create_params.py,sha256=D4-ndHptYo7K-8Phb_mD0xB6fmj7hne6Qr4rxteNPp0,303 +stripe/params/_account_modify_capability_params.py,sha256=MWchqjoeqyhaf5LQaik93xW8IH-2DKqUmf8qS3SaPwM,849 +stripe/params/_account_modify_external_account_params.py,sha256=ZSgX8isHthMDCZEPl2PID_O1mShsAXdqvOhyDuzSAAM,3342 +stripe/params/_account_modify_person_params.py,sha256=J3GBB7BjKWC-HazbDmLa-4bvY5sYl8Sl8tRMM7UVGHI,15431 +stripe/params/_account_person_create_params.py,sha256=4Nln1Gi7cHUCEbJ1tRnm1TAfRyuhefsn1d33XCDuyNw,15375 +stripe/params/_account_person_delete_params.py,sha256=oXvQRGufzrZWe09aYK_DvCMHYHWl3fvViG8kOqltplo,158 +stripe/params/_account_person_list_params.py,sha256=Uiu4Nn6UA4X1-EKlpbpoCkGR-uNu-z9xoNU3jDIl_Tg,2416 +stripe/params/_account_person_retrieve_params.py,sha256=LZ2njeSU6EpT_wany6g4vtbs9AN-eXZz3vGAgGpgDyU,302 +stripe/params/_account_person_update_params.py,sha256=GQkFrigL5CYDbOQBGtnE1gEqv9cNiKo2FCuHWkljLU8,15375 +stripe/params/_account_persons_params.py,sha256=C-mbmCZxpYC5jhvw1QLPVBCpGiacX9GSgt3GiGhP34c,2463 +stripe/params/_account_reject_params.py,sha256=Y1TKSPPNvNhYpmIXWycdN6TqY5mMNOlzSt-KkORZyIg,461 +stripe/params/_account_retrieve_capability_params.py,sha256=eKm010OseB0S4UD_2QzboP_yCBprZCqQ4Rfp2VPKhLo,351 +stripe/params/_account_retrieve_current_params.py,sha256=ak3HpvCxDrIj7JL1TI_1TTW93mNrzME3dmaob4IPb-o,303 +stripe/params/_account_retrieve_external_account_params.py,sha256=06Vq7z06aA2j3PmA19H_P3Ldk0R3xMeL6qJMgRrO5Ms,356 +stripe/params/_account_retrieve_params.py,sha256=rJD1Mcoum3DQOzWlUaoM_QvZNAjheahJZkXyJwfJUNo,296 +stripe/params/_account_retrieve_person_params.py,sha256=7WHpFXhqRg7_sf5vlxqp9cucrnaRjygziHlrsEbXO10,347 +stripe/params/_account_session_create_params.py,sha256=mGf7nLBV7kKWPI-DRjhaJhqLrupK2Bn7KskQvJI4s0M,24879 +stripe/params/_account_update_params.py,sha256=NcDH4HBQRn8QRHty8xe_fePinaawq56A3uDZlDqpHyA,78603 +stripe/params/_apple_pay_domain_create_params.py,sha256=9lxZnsV-V9Qy7w4A3wvq1i9Zc3XZc1v6PjV9-P3lukk,367 +stripe/params/_apple_pay_domain_delete_params.py,sha256=OHjUYWUjr8Z1NwhxklZW7BEFg63UfWd8lhNsOm687YA,175 +stripe/params/_apple_pay_domain_list_params.py,sha256=RNsAherStqHCB7tRkfNIsDzwDXHss2SPNdZNx0HgtZE,1238 +stripe/params/_apple_pay_domain_retrieve_params.py,sha256=T5dKQ8iWjaudN1cZmJ3DkeFMSVrhzio0j8phudrnOew,348 +stripe/params/_application_fee_create_refund_params.py,sha256=tluXd55ZY3HSXaL1tNfnqF8COz30ruQmc0KXtG1eIH0,953 +stripe/params/_application_fee_list_params.py,sha256=v1liC9P6YPoAkmuH0MUCcORldCHTcDrMR_ujs7z8-1U,1891 +stripe/params/_application_fee_list_refunds_params.py,sha256=onSqnZBYjI4A6lP0cLURI5HgcULpRzttstEBXdCyyf0,1211 +stripe/params/_application_fee_modify_refund_params.py,sha256=Tacx4JsVYXkEQFmlZZncT8FemfJI3Gfto4n89NOYZwo,762 +stripe/params/_application_fee_refund_create_params.py,sha256=U_xi8-o07x15swKJBVd6eDTs70ZAX00UwG2lcx-7XpU,908 +stripe/params/_application_fee_refund_list_params.py,sha256=_iTWRMK_hVya_wbqOuMXhofDpxdURBEx3KWDKhc341U,1165 +stripe/params/_application_fee_refund_params.py,sha256=yB1Xpf1Gs_FRYX4TsAhcZCp31Uxic_ZU6OKGRBdDMck,947 +stripe/params/_application_fee_refund_retrieve_params.py,sha256=qBRMifwO24CIQEpGMQO8UN6pUGfwxlnZ113UX-tAgfg,309 +stripe/params/_application_fee_refund_update_params.py,sha256=W4hfYVWLCS5Yj1S1Em_G7Er4KNVXkOY07g73FHHImvo,717 +stripe/params/_application_fee_retrieve_params.py,sha256=gtSsR50-36PmlEAdbeCXHQs82jr7P9ThcFj_4GE6ckw,348 +stripe/params/_application_fee_retrieve_refund_params.py,sha256=esDUad0t8PduPiZIzBK2RDH3GDkC5A1s6jdIGxLF1LQ,354 +stripe/params/_balance_retrieve_params.py,sha256=HyawTGUHT30w6zgCpQLrTnn66-KXCIXaUyifcQSY5Eo,341 +stripe/params/_balance_settings_modify_params.py,sha256=CAWJgbNeLgq4KVamYpon37SYil_Y2k0Hm0CE-d1weyo,3691 +stripe/params/_balance_settings_retrieve_params.py,sha256=GBQkq7nTv56USKC_zLal30Ye2SGLMPWssxz9icKs_q8,349 +stripe/params/_balance_settings_update_params.py,sha256=ekVgP2wF_l2w6TgjtZY0smzwOSUTLMhUd2FdXxgecb4,3635 +stripe/params/_balance_transaction_list_params.py,sha256=O2_iHnzmgkH7z2QAyxCSnrCe_qaX6X5zpi3zr5q4XPI,3327 +stripe/params/_balance_transaction_retrieve_params.py,sha256=F8jYtzPxhe0uJdzoRry90KiwIdc4yFAmUnCIAX5IEAs,352 +stripe/params/_bank_account_delete_params.py,sha256=EC8FJU-Nl8wXmHAyE4KNz3fo78NQ_9pK8_ZUcGtZM2s,172 +stripe/params/_card_delete_params.py,sha256=-EZkCCfS_fq5glqeGGqv0qqTWuNqai9xb89-15PROWc,165 +stripe/params/_charge_capture_params.py,sha256=hTazBMVpMlsv4bis5Yn4GvcJ2yJMrquIdvqeIEbMzL4,2823 +stripe/params/_charge_create_params.py,sha256=UpKlrgIJvkUaTZJaDcl5gWUYIQAE9mffN6cNgsXxFww,8801 +stripe/params/_charge_list_params.py,sha256=mjTpUgN-ShIwPlct5by39ePq2swGsWhInUy0JZiFv7w,2124 +stripe/params/_charge_list_refunds_params.py,sha256=30hjoxDN5M-lEDo84wBj3kF35tFoR0Y0ApHsrtfHG8c,1203 +stripe/params/_charge_modify_params.py,sha256=Lsw72l8AUmtt18-de-GVQHYLiXksElYs2_DotIe01UU,3952 +stripe/params/_charge_retrieve_params.py,sha256=hNVrQ6fnF3kJdvK2JSy6Oi66lKLUsqSKKxVcJHXI8Lc,340 +stripe/params/_charge_retrieve_refund_params.py,sha256=ek065fLGQFPb2dXKo4zAQbXmSuzUnu8TmNWKsvv1MIg,346 +stripe/params/_charge_search_params.py,sha256=EABxO_V1YaCwRm02MhI_eE5ir-IfuZld6rO30j0q_as,986 +stripe/params/_charge_update_params.py,sha256=ETFtK0p1pS7BbEWypxGXKf_ocQfh5JwsfHbbxBLNGjU,3896 +stripe/params/_confirmation_token_create_params.py,sha256=-V3tS8g4IscYi6D40WCmzG7K3H8qUXJtc6aW4xGWvrk,28561 +stripe/params/_confirmation_token_retrieve_params.py,sha256=UvAmb6mp8Dn-ZPhOVBCSKGCvG73_HH2koOeXxi8bD7g,351 +stripe/params/_country_spec_list_params.py,sha256=XunDIo4a8O4aT_ch192ZzJrIQX07XM5LeuldGpZkxWM,1201 +stripe/params/_country_spec_retrieve_params.py,sha256=h3LDqPWlJ0Hm0CAIM3wpcC2eXegWHS4w-r1TU7-T3Cg,345 +stripe/params/_coupon_create_params.py,sha256=vohk0oex2fN6JnUYVNJHtUGKqnZh_PNhtrag3QjAjLs,3513 +stripe/params/_coupon_delete_params.py,sha256=mQFtp2POFfRujXiDPKgUS_2HBc_TH6m5DDvVLtm_5Q4,167 +stripe/params/_coupon_list_params.py,sha256=JOwxXUiMLRnu8io1gis_2Fpk2MAsFoiuEj613dS2tJI,1850 +stripe/params/_coupon_modify_params.py,sha256=fz7_DTGW1ktuhVxrGLR4YFAQMtmcNecNcdOwZ9PVIfc,1491 +stripe/params/_coupon_retrieve_params.py,sha256=D5Cf5Tx9eZ--2DSrIFHuTc8ynzyhuTpU4kvVmMpq4Zo,340 +stripe/params/_coupon_update_params.py,sha256=EklGeRpsm1Ak2Cn8bfr64fB-iWeIhrd5x01N2deENn4,1435 +stripe/params/_credit_note_create_params.py,sha256=_ee2GPFVwkBGR0lIvXzSMqhVbMYQkvAkxSeQfMFS-BA,6566 +stripe/params/_credit_note_line_item_list_params.py,sha256=VxS_pkEZOCMvboknOFkO3u-y-xNPMov2hkWC9vr5Qug,1163 +stripe/params/_credit_note_list_lines_params.py,sha256=gIR-UpZKIj7yvzJmswAKqNXr0vN6oNByhMO7FlMZFqI,1205 +stripe/params/_credit_note_list_params.py,sha256=EGIcTYjgrV3p-XrVoR4n-8f4EIVCtgRegkORJIq2rIY,1997 +stripe/params/_credit_note_modify_params.py,sha256=Wxa0m3NXP5hhw7pBQ2VCPAlCT8EWVFW7a50L7tK1o-8,794 +stripe/params/_credit_note_preview_lines_list_params.py,sha256=N4wwhjt1Dx9W7ABlrHfmd5S47FVJr0WsCp-yBiHXdaU,7480 +stripe/params/_credit_note_preview_lines_params.py,sha256=nzivDzvhNoOWznMhRLyw7ktZz9CMRjxJb-hN_YTRBPE,7492 +stripe/params/_credit_note_preview_params.py,sha256=Hpw5wut9o7xYZLdBRzb6KI-qwp46VbWX-VPjoRq5Y2o,6577 +stripe/params/_credit_note_retrieve_params.py,sha256=9vPAb-9Rg6aepMcR8KwNcdTDGk4Ohd7EYY0pRJtIaX0,344 +stripe/params/_credit_note_update_params.py,sha256=OI6EQwTAyCsl2ruz-RaWDU_f3h5KgIXWS5j9c8H0Tms,749 +stripe/params/_credit_note_void_credit_note_params.py,sha256=Gmcy2k8TOU4WT_szHF4rUqzpD0iBSE5_1A3o8dyixH0,350 +stripe/params/_customer_balance_transaction_create_params.py,sha256=-sRvZTkK5Ko5oDBgLw7w1LYBAaRfVQ42TlvMlWWwY7Q,1434 +stripe/params/_customer_balance_transaction_list_params.py,sha256=ELolxU1pqKdg5UJ1DdLhegwH-BiAsc1JBOHYJIM2quU,1171 +stripe/params/_customer_balance_transaction_retrieve_params.py,sha256=R1AqHvP4FPJcO3qoCdNF1gdSuvtD3-kyqb-Xcb3anhg,315 +stripe/params/_customer_balance_transaction_update_params.py,sha256=BqHDS3V2JCOpWn1cA1QKydBYjY9XEEy7KQe2XR9CQIo,859 +stripe/params/_customer_cash_balance_retrieve_params.py,sha256=6VbfCXywzweb8HpjJkIXnaAWXOWieADZvLzPhIDPkWc,308 +stripe/params/_customer_cash_balance_transaction_list_params.py,sha256=CDDJzbNX_0SBypKFFVtFz535tvjyWw-o4NNMAhlcgAQ,1175 +stripe/params/_customer_cash_balance_transaction_retrieve_params.py,sha256=lV_uZKSKwQ-1kRcixJ_gOeY8Z4GtkTsSJgielbKeR5g,319 +stripe/params/_customer_cash_balance_update_params.py,sha256=9IHPNQ56_IIuqa0AZGr0--pNAcL1CY5oDbzneqNgBbA,928 +stripe/params/_customer_create_balance_transaction_params.py,sha256=ns6fGAebSYjkndCn0OUxmJorsWOBu_Oc4ctJ-fDlNZU,1479 +stripe/params/_customer_create_funding_instructions_params.py,sha256=Ovm80HeuO6Q6eHR5q3zf6WKUBI6rI4WPUAL5_LMD6R0,1908 +stripe/params/_customer_create_params.py,sha256=WV1OioaiZDTlcViDYvOggBUxp9qzeA3DJMNzgTwutqE,11801 +stripe/params/_customer_create_source_params.py,sha256=_5xVu45OSVqEA1zKxwT4dmUd64akocT6OLUviA0yShI,876 +stripe/params/_customer_create_tax_id_params.py,sha256=VJdPwsJ50p3BTMr74FUG4x2gVZ7iDhOIm_xC1G2-m40,3602 +stripe/params/_customer_delete_discount_params.py,sha256=Gt8DpErjlsP3JE2EJ8nDwcD7p1QUC7M-GMzJIDPW90U,177 +stripe/params/_customer_delete_params.py,sha256=6C8c3AwxTpy8-_V2cbgBJDoBlmgUWnhPIkf3a3DtsXY,169 +stripe/params/_customer_delete_source_params.py,sha256=HFRp6MOxKCGPceavLDAaUem_vjH6Zv9WWXrDzi_oOL4,346 +stripe/params/_customer_delete_tax_id_params.py,sha256=FIXYdJtx5a-UAKUueie8-VwECqY61ZpngY519UCVhtY,174 +stripe/params/_customer_fund_cash_balance_params.py,sha256=roGa3DDnT2It_LlvfblvHhAKdoP89VVUnP_ncS6dous,1216 +stripe/params/_customer_funding_instructions_create_params.py,sha256=AlVf7AO4lhXRcv3IvRN-nBD6-iUEDBTXfnZn6tLWgRs,1852 +stripe/params/_customer_list_balance_transactions_params.py,sha256=94O880sUcXNZxL4xhRZ5IOTtAHanKpenDS0pmUdUzsU,1217 +stripe/params/_customer_list_cash_balance_transactions_params.py,sha256=DRG20aDrioaGqVflFqzocrbY7XVxT_zUOxekLTgxWHE,1221 +stripe/params/_customer_list_params.py,sha256=4j5LXCOvSIOgTK4lmJgbkrAgm4Cp-seKmqoEHBK-T48,2114 +stripe/params/_customer_list_payment_methods_params.py,sha256=KFrnP90SmPiixOQTZfi7oBLfpBMdRTm9s70ZZAF6qYk,3112 +stripe/params/_customer_list_sources_params.py,sha256=9RCB8paHzEiH3pb9sIqdDmTvMuuu9ERTDlVjR6OK8oI,1308 +stripe/params/_customer_list_tax_ids_params.py,sha256=tWpXkIX6tICqMFf8U5s4qHe58Ac2vq_ANTmNwMiGOVg,1204 +stripe/params/_customer_modify_balance_transaction_params.py,sha256=WE40AAx6u8Dz_ms0VwpKqlQbjSL-I4qs5NgY0i98cAg,904 +stripe/params/_customer_modify_cash_balance_params.py,sha256=NPIIvY8fvGd96M17p7sz2i2q7cWN_RpYgr8XfWa0kDM,984 +stripe/params/_customer_modify_params.py,sha256=eIPzGDZGrkLHiJQZwbY5qpOGl7TEYQ6j0DNWQSiyZqg,8835 +stripe/params/_customer_modify_source_params.py,sha256=1aqjpNQJUl44N5JRp8SmKQ0vuPW_tJu1oRW6KMIXCQA,3032 +stripe/params/_customer_payment_method_list_params.py,sha256=L6OR5dQflO5pUHRVWMAjzHAOWX5v7q_CE50EM94ovbU,3066 +stripe/params/_customer_payment_method_retrieve_params.py,sha256=Rk_ndWNZ00Alq0xd7cjkbOUb-VE_4m7r50T1t-c3MtM,310 +stripe/params/_customer_payment_source_create_params.py,sha256=qN5Kxbm0KNXmex6n2pWWIaaTrkSUzI9ygKLRieMHJDQ,838 +stripe/params/_customer_payment_source_delete_params.py,sha256=pEh0tjtSqWroeH_ImMvn_RQ8UgRJqiBVEvrJE-esQjU,308 +stripe/params/_customer_payment_source_list_params.py,sha256=XurZhoo3WaD3-y6MAE2OtGSfAntvTPmPQ35cUV1cDvA,1269 +stripe/params/_customer_payment_source_retrieve_params.py,sha256=k6RNVsIXWZ98kScQj1H6fmLzAO6QDX7UoTQbUXhmehU,310 +stripe/params/_customer_payment_source_update_params.py,sha256=3u1dB24jeiUBH-r0zTpgHQz_5KQZs7XgUZXlqPYY7IM,3011 +stripe/params/_customer_payment_source_verify_params.py,sha256=41YyNk9rhB3iA-mPRqjaftPAdogJ34TdDxRK2PMUJp4,466 +stripe/params/_customer_retrieve_balance_transaction_params.py,sha256=9I1qOVsuVqHT-PlTi9lpqBsTEWjzo6TjvNXV53PZfR0,360 +stripe/params/_customer_retrieve_cash_balance_params.py,sha256=bJpy9IM578CmErQd0jAMFuhedCn9kexUBg6HGIQWc8o,353 +stripe/params/_customer_retrieve_cash_balance_transaction_params.py,sha256=TuAvTaMUNU9P8Jzd9g12bAQSWkIBzE0nmHKKH65N3GU,364 +stripe/params/_customer_retrieve_params.py,sha256=8Zi3-5mpmR3h_0R-QvmdRd2mEZmbQ6b3CficaB9udzU,342 +stripe/params/_customer_retrieve_payment_method_params.py,sha256=BEuceqG0OGlLt3AGAD7Lp8kpjm1A-tXueO5bA5QfuMw,355 +stripe/params/_customer_retrieve_source_params.py,sha256=CM2STbXIFV9nVRb7b_0YC0Gos-AU2Z2XBAsWHJzz6JY,348 +stripe/params/_customer_retrieve_tax_id_params.py,sha256=AFewbe3j2wsU9trXbLN3rTQzP_jq8jNNCs1AV6VCFMA,347 +stripe/params/_customer_search_params.py,sha256=_axcbEnSYeTPBq4IeXjrzzK1k0VOgAd6_Y9SChB1BnU,992 +stripe/params/_customer_session_create_params.py,sha256=HleRsrHKf0aBIqVBl_R8HYbWOnkuasFIVA5412DnnLA,9212 +stripe/params/_customer_tax_id_create_params.py,sha256=eiCvnNjEwVMcNJ0sixAn07RCQyVxyZhkPJ2e8u-3DOY,3557 +stripe/params/_customer_tax_id_delete_params.py,sha256=r8vXm6we4y1po_acrBUoGzR2MT5xvxB8tU7r28xwo1E,158 +stripe/params/_customer_tax_id_list_params.py,sha256=9Koty7d93Y8A9oZvL80lnn4e_XeRBWSgWoKl1Pg4vvw,1158 +stripe/params/_customer_tax_id_retrieve_params.py,sha256=JDCFSdEr5D88_hDEWdLDI2iK6d5IFSxg3K7Piak8eq4,302 +stripe/params/_customer_update_params.py,sha256=mMWiuTNfrHPnSY81HjKtgYPw_fI24gPdzjj-tMby4iY,8779 +stripe/params/_dispute_close_params.py,sha256=se7hg1EHRTROQHcAapG6aemL9igLqFe9QJIk5C91R_w,338 +stripe/params/_dispute_list_params.py,sha256=Xjz3Kwz5tOtfeSHwmd5_pMrPp2TcmCoxF9WO5QCnaLs,2009 +stripe/params/_dispute_modify_params.py,sha256=UPJyxyiR7EetMQzyFio9zxZ64QVFblh99Twh_rOVog4,13537 +stripe/params/_dispute_retrieve_params.py,sha256=U6qWnXvUiHpAu_znOqgES_ClDIlS57FwhN_UHuJBeis,341 +stripe/params/_dispute_update_params.py,sha256=zAjBG2Q8lmDYN96nKROFfH2lPhEayP1-lHS0DOfQY3I,13481 +stripe/params/_ephemeral_key_create_params.py,sha256=P7iBMugr_Un5vyQ-0VGFAo2VAJg8RYEnpeh-6j_ngVQ,911 +stripe/params/_ephemeral_key_delete_params.py,sha256=z5m4GMi3ysbeUtqLsXSb7sEwgTttmqJtHRosBC0gA44,344 +stripe/params/_event_list_params.py,sha256=sjAIaWPw4abc0HnUmpFD7wDR5JQ-1WwwsEvTjpSESq8,2439 +stripe/params/_event_retrieve_params.py,sha256=LxMRuJWtZabAGw02LShYBkAlwGm6imF6i1Tq6d52uh8,339 +stripe/params/_exchange_rate_list_params.py,sha256=fWtZnjbTbNauGgCkxeKPJR08bgc8LRJo7XQiA_uS1cs,1286 +stripe/params/_exchange_rate_retrieve_params.py,sha256=lgNTX8gkx1fgrQCo_4zEWDLgnFTiWW2k7bhGpiS2ppg,346 +stripe/params/_file_create_params.py,sha256=q6NX-vcd94kpcKiCaVoEmARj_uwCFvujxhuWiNK0av0,2255 +stripe/params/_file_link_create_params.py,sha256=36WO40J6rTlhZn54Bgb6v_4Hk_fxmGtQQUhAxTcz-98,1292 +stripe/params/_file_link_list_params.py,sha256=Q8_zQchoyyDy3uxVoNQtgUzQiZBaudESZ1sbKe-WNe0,1954 +stripe/params/_file_link_modify_params.py,sha256=n6XaGfbptjC0-ja3seCngQNJ1hB04N_2EPlx8CjK5HU,939 +stripe/params/_file_link_retrieve_params.py,sha256=tmcc2JXAIaYc9KyXoJJFcFKm5un25i0EgdpgzQzCX2U,342 +stripe/params/_file_link_update_params.py,sha256=kRX8tlqyzscSJx8pnI8x9VRR9QKGWQjanMt3k2VMRBI,894 +stripe/params/_file_list_params.py,sha256=j2tN_MzBisHoSkSdcsn1P_PpGek-J1_Pf08f4abVhyk,2617 +stripe/params/_file_retrieve_params.py,sha256=_q-DuUbA65azH1QVoZ40iE6-GfH9DRMYZmuXzVM3kxw,338 +stripe/params/_invoice_add_lines_params.py,sha256=gNHSQ11PKh-6d6AJLFeIxWToeJSlR9YP6ZM5vOikFcg,11324 +stripe/params/_invoice_attach_payment_params.py,sha256=veXLC3x_5vsKG-HbYv2xyqetzuKfeXDAHL0aSmK9RiI,568 +stripe/params/_invoice_create_params.py,sha256=W_fGlwKAfiKyVatW1okQwjC-Z6xKkH3pMj-G_02pKhQ,27057 +stripe/params/_invoice_create_preview_params.py,sha256=Fh_7S_-rPUGiwU0MaWsJlf7Cj2a7REs1PiVB3_DiIwY,49743 +stripe/params/_invoice_delete_params.py,sha256=Gkz_Ck1TU1zv9sULofehIpRyL_WRqM6y0uOIhO1GL70,168 +stripe/params/_invoice_finalize_invoice_params.py,sha256=0rWgJp6R66WMtxgYv3niUWq8J84WUUKLE8ytc0Og4u4,646 +stripe/params/_invoice_item_create_params.py,sha256=7euIUkJ-uwY6Vg6tCqWfBFecdWc4CsUnF-pFGlAXrpY,7138 +stripe/params/_invoice_item_delete_params.py,sha256=C8IBBlI2plMnLXTXD-AI-3-RFa3wswuv8RK3bPGQwM0,172 +stripe/params/_invoice_item_list_params.py,sha256=7Twyol5bYgXe3A_mICSG1tZQXScSow-fd1s-VJJwJ6E,2401 +stripe/params/_invoice_item_modify_params.py,sha256=miQVqXVO3X99w4W2QZHBgyfqXbxESBo-K4UOKC4aYrM,6052 +stripe/params/_invoice_item_retrieve_params.py,sha256=u0mgwPYqbGmdyahKYJuhbde9JWTgMj2D8AuZcFI2MZI,345 +stripe/params/_invoice_item_update_params.py,sha256=pPHT5Dhoc5sPgK5ghqLj5PI0v0SOSDx06EN0uuIyc1k,5996 +stripe/params/_invoice_line_item_list_params.py,sha256=xtMSmuhcwnL4sxnpj_VazgeplKl5kgKM-mrUOY2M6yw,1160 +stripe/params/_invoice_line_item_update_params.py,sha256=ZJz3F-ZzcHJ1KB_6oQkt8aTxsMB59g2BeyPgfdmiovo,10998 +stripe/params/_invoice_list_lines_params.py,sha256=XL6nw6tR8OzssKqphQ3OlHygLAmUIPgUfvdnGk31ug8,1202 +stripe/params/_invoice_list_params.py,sha256=CyGVCCT2VBVU1WkBYNLMEX_4c7zHy4vRCRD5AgCQs7Y,2944 +stripe/params/_invoice_mark_uncollectible_params.py,sha256=QHW1BoaYEefjWAL8tMcSkHjQYlXZMFDoFW0Z_ZDFhpE,350 +stripe/params/_invoice_modify_params.py,sha256=QX2qcp2QcA5C-kOwTAA4c1fKGX6nbBlw7vb8Ahx50uk,25960 +stripe/params/_invoice_pay_params.py,sha256=_dtb5QsIuNrjwF2cGyMKt_GtLSs8vlCtwvDrE1dBZ-k,2069 +stripe/params/_invoice_payment_list_params.py,sha256=2OCeHOD7q9dSBwPdk1KuoGcOIuyUc6NHqYLQu7ikuCY,2028 +stripe/params/_invoice_payment_retrieve_params.py,sha256=C5j4mS3xtcDoY3rVeDGCnb1gf0ctPStXm1Fz7taxw4I,348 +stripe/params/_invoice_remove_lines_params.py,sha256=Ouqi5cmFVw_1VqUMeANwUqehX55PgnIOB_vT3doGqRA,1199 +stripe/params/_invoice_rendering_template_archive_params.py,sha256=zOCRszU1Ytl9hodQNhic5G6FXbA84mKJYxIuYeUr7FU,357 +stripe/params/_invoice_rendering_template_list_params.py,sha256=ECIdp38EQhkMFpWDX__IjtoiI5uPtYlQ2ZkQGpwsnkM,1278 +stripe/params/_invoice_rendering_template_retrieve_params.py,sha256=NmnX7DlF6vAhM6gGoSaMdukZodz7scRZnqq9dMKgdYQ,388 +stripe/params/_invoice_rendering_template_unarchive_params.py,sha256=Ev6xDFmzCACA8ip18i0SHrBpMb2JboICdkatKnsfG_s,359 +stripe/params/_invoice_retrieve_params.py,sha256=-PDG7H3DtaGaatphuORuYKTKfDp6lDFR4j90iLiKa0o,341 +stripe/params/_invoice_search_params.py,sha256=URE_Skv5mkD_nxQ7tZVob6Tk5qbK50ymDaPpTW9W--U,989 +stripe/params/_invoice_send_invoice_params.py,sha256=sNYF1JpCc2g8TFOnIPCjM47uLVscvlzFQZzSugMwC9E,344 +stripe/params/_invoice_update_lines_params.py,sha256=b-9l4fTMbIU-eKmIBlJ_P5uFLgFMA0Bql0Z2pB6pJho,12066 +stripe/params/_invoice_update_params.py,sha256=Ifrn2KFFfOdk9-86eacCH8jlYRga1no_WHlL5c4Jm78,25904 +stripe/params/_invoice_void_invoice_params.py,sha256=q9Hgtv69M0SuQBUgzmvxEd1adlwovbPQPls0SOyhB04,344 +stripe/params/_mandate_retrieve_params.py,sha256=Qdl3abJ87kijTxT36mLK7NK8UQTIhTvoyDGca2vY4Jw,341 +stripe/params/_payment_attempt_record_list_params.py,sha256=scufLa1T5n6-OO274H5G-o72vXcXHA39a4lKITZjNmU,930 +stripe/params/_payment_attempt_record_retrieve_params.py,sha256=-0immTo3fSH-NqEXH-BEG5aq-tnMNHtojgDVpUJcoyE,354 +stripe/params/_payment_intent_amount_details_line_item_list_params.py,sha256=17pUH2Q4CNh90qAlrTvb-xnxYqcZ_e04-ByL5p3IsdE,1179 +stripe/params/_payment_intent_apply_customer_balance_params.py,sha256=ydcNmi8F6rEqPJ58UWjOqqXYZTr-nU3mWFc4Q2k4_V4,1222 +stripe/params/_payment_intent_cancel_params.py,sha256=NHYm74Eb-g8SXGNC0lPTRbv5DEHqUZvOkWOtFjYVPZo,650 +stripe/params/_payment_intent_capture_params.py,sha256=Ysg6eiVoaPXY1PmJHMT2CU_yTa_aUl-lUkLLKqzqX7A,11506 +stripe/params/_payment_intent_confirm_params.py,sha256=q5CpM_yon2Lof9QGQnkzppciJol50PV2pNSJkVpaxj0,152722 +stripe/params/_payment_intent_create_params.py,sha256=2-CGrhCX0YypACyCLdjwPuoUaUthtr7L6EeuVl6cnvU,160720 +stripe/params/_payment_intent_increment_authorization_params.py,sha256=VKi5rFFQ2GwoN6OaeCSRTdC6AddVbp7kG1JGpHASGQM,11090 +stripe/params/_payment_intent_list_amount_details_line_items_params.py,sha256=LPrR98KbAYhi7AeYKd5hdayWy8wvYbs6-_tuDAGk2uc,1225 +stripe/params/_payment_intent_list_params.py,sha256=liaQw3-Q97DWxO_FTm7WJUnbsAbxbiojKLQ8z_I9N7o,1988 +stripe/params/_payment_intent_modify_params.py,sha256=BmDwtRl23Ji6U9R-n1c6Rkx2GDj_020KhUVbZM40IiE,152986 +stripe/params/_payment_intent_retrieve_params.py,sha256=pvMGO1oG9njeKPjCfJbHEI6ZBv8q794XdekVp0qoAM0,510 +stripe/params/_payment_intent_search_params.py,sha256=geRV2BBJPbu01ci6qD7B5rt6_iBz1aB-octRrGfgFTk,1009 +stripe/params/_payment_intent_update_params.py,sha256=aQTHfHhDL6BWOAubtc0K2X__xveSr8nBetgkUhjragY,152930 +stripe/params/_payment_intent_verify_microdeposits_params.py,sha256=_j-JrKn5ng3EKTB7cEC3S_yYzf0iQDo1TgRrGmezY38,666 +stripe/params/_payment_link_create_params.py,sha256=6im7N3sYi5xJTgNb5LGO3_MDApSimn6QxdzBKOFnxqY,38479 +stripe/params/_payment_link_line_item_list_params.py,sha256=uAMAd27I1O14Dw2lwmZJOJU5nnvhPjvGCfhOhnb_48A,1164 +stripe/params/_payment_link_list_line_items_params.py,sha256=pg6tSHvy_d_H11GfIFmtCThIlsTMZ-KVuUvHYtmxaqM,1210 +stripe/params/_payment_link_list_params.py,sha256=tNmSmJvm7kH9yl9r7a4l3VGA8dV8-sNSn-UOHlSF53E,1362 +stripe/params/_payment_link_modify_params.py,sha256=BR_7EV6USrl2zhaA8r-ClADovkPLWX5iF_yTQl_k0w4,27081 +stripe/params/_payment_link_retrieve_params.py,sha256=RK_jiHnsVKNskWi_GOMXTCNfd_4xSFq9hZKsSdy0LjI,345 +stripe/params/_payment_link_update_params.py,sha256=tf6J--A2t6QNG0WOZCGjTJaF5nAR61hkN5MvGKG8fHQ,27025 +stripe/params/_payment_method_attach_params.py,sha256=qXKAzdsOmhpGwZyKUoyZvH-UpspDFfSVX5RxmBKqiiw,444 +stripe/params/_payment_method_configuration_create_params.py,sha256=zQe-94s6GVtRK6FDThGSl99PShzUhCkuLpSi2AAiZkA,48482 +stripe/params/_payment_method_configuration_list_params.py,sha256=TD3yCqHjnAUD_wIOn-zvRvJgiuAIaK83A14wnuormA8,1331 +stripe/params/_payment_method_configuration_modify_params.py,sha256=-DtbmllyO8_63mf_QQKKFoPoSL4GC6rhdUlFt6TCBdM,48460 +stripe/params/_payment_method_configuration_retrieve_params.py,sha256=0sHJgt5YSFxUVLGbJmcZqXt5FBsrqxl4SPvzVLe43Y0,360 +stripe/params/_payment_method_configuration_update_params.py,sha256=_JbalQ_PMrWgvKoTW4GLUh3ed-qOAD5V4OLKxrCpzh4,48404 +stripe/params/_payment_method_create_params.py,sha256=bu_O-4A9nvJ4U9eHJZDi04CCI-i3xghfo7CU0B5_l1c,24876 +stripe/params/_payment_method_detach_params.py,sha256=HuH8AbJqcvWonuhnXiCmoNVLBfMZ_NE7o_V99d8_fGU,345 +stripe/params/_payment_method_domain_create_params.py,sha256=jOkz6kAa6DhvcZXGhyidNxJKhrdaAqbEZq4RUE9yX5A,690 +stripe/params/_payment_method_domain_list_params.py,sha256=Egr-E1_yQOYglAJwBDvfTY9nmhOEscuENo67vulEYRw,1523 +stripe/params/_payment_method_domain_modify_params.py,sha256=rFN3mD_z4PtG8ae4x0Ez0DRFxbwfdYQgzCM12hL69Hw,582 +stripe/params/_payment_method_domain_retrieve_params.py,sha256=zazQn25OLHhQkU1JE_LSqr5SL0Wr9TKwZiMcD9eSUEM,353 +stripe/params/_payment_method_domain_update_params.py,sha256=542oNx9SeT2bXH-M9vFoI-lFBN3r90h_QNLfEhZ5jsE,537 +stripe/params/_payment_method_domain_validate_params.py,sha256=SLEGAAtJZmnJGvof5vAfJdqJspLgXO6K5F00RDPzXrQ,353 +stripe/params/_payment_method_list_params.py,sha256=S_XM83lPgi-5AXSE1-4OIQm0Cx2gajBbCl20tLTS1QY,2837 +stripe/params/_payment_method_modify_params.py,sha256=aDNJPFzx2ia1WI7a5qcCvqyE8o5Ws9_7zq7NbsravMU,4146 +stripe/params/_payment_method_retrieve_params.py,sha256=KkGPuz7_ZcHtAfkSx-LuzA85b9UhL7U6Dauclmm5IdM,347 +stripe/params/_payment_method_update_params.py,sha256=kBW5SjUhTtwzulVhdqWezmmFseVNCo_lK2shxZ0OMk0,4090 +stripe/params/_payment_record_report_payment_attempt_canceled_params.py,sha256=MsX7DzGtvpor1oSF6b5BxdtfL-mfPTCx4hLj3GDw2r8,561 +stripe/params/_payment_record_report_payment_attempt_failed_params.py,sha256=VZCYXhEdVdub4Pr6C40mHD2K1r-nog-E-XkaX9xONvU,551 +stripe/params/_payment_record_report_payment_attempt_guaranteed_params.py,sha256=SeIcZfa1UqpDQSRDrXlmhsJh1WxxLySd6dcr9mwRObM,567 +stripe/params/_payment_record_report_payment_attempt_informational_params.py,sha256=TGyKydMmTSXAXYczAuP85VurDy9vzNESBEMhaVCO3i0,2861 +stripe/params/_payment_record_report_payment_attempt_params.py,sha256=kjwrNv538uqq-EBm6y-OcamKVKaYfxgCyM8LR4FvcAs,5855 +stripe/params/_payment_record_report_payment_params.py,sha256=uw6KXQR6KizvKEE1iFu0TU-gfTW3MXWWII1Sfw6QuWI,7922 +stripe/params/_payment_record_report_refund_params.py,sha256=8762DRbCg9iDxPi5Q5XDjdSARrV3rZzbMwGQlsYqcBE,2888 +stripe/params/_payment_record_retrieve_params.py,sha256=P8TR9HLWh9snpRzYusL2NvDmGLWYHTBnfvaVfbwJjYQ,347 +stripe/params/_payout_cancel_params.py,sha256=h-OG5BLDOOJjGCk8m9CcUN_3k0BUmwD2-_1gnVAMC4Y,338 +stripe/params/_payout_create_params.py,sha256=IrF6WXHiqwD15HOR1Th8-Hdo-4Gf3VALZxT5uJZD04E,2470 +stripe/params/_payout_list_params.py,sha256=SPJmEwCtWQB4QmYs41sgjam1jc1rM6WkoAipTMvyykA,2564 +stripe/params/_payout_modify_params.py,sha256=DFFmElC6GMMASJQa18GhQzxF25jYWBOLyHlHxJG9wLc,748 +stripe/params/_payout_retrieve_params.py,sha256=E6hMnrvEmoCotki8dopZvEIOuYMyr--_FWGtJ8AowTc,340 +stripe/params/_payout_reverse_params.py,sha256=zHcj4IvYhZo3dXoKHU40ZZULGtzzsCqIxh6P0Glaa7Q,726 +stripe/params/_payout_update_params.py,sha256=-uvZbXUDjpqVhqeur6Fnm8NDHC2-51bfRqBm4vameUc,703 +stripe/params/_plan_create_params.py,sha256=WuBPsrpntQntKRWtSR2JZ2SHvL5_sOEEVUTQTlYtqI4,7139 +stripe/params/_plan_delete_params.py,sha256=hAa5k83Smp1NUfPoNx2tbgbTSLEzgutwoDqJaHy0C64,165 +stripe/params/_plan_list_params.py,sha256=m3C-PUuhbbyUSDJMm4nMNi1W7iyJUYPfAgyhlzS2yEQ,2080 +stripe/params/_plan_modify_params.py,sha256=YIwkvQwDt-9nV-U2lL6OnBFWrIrmCE0P3MAnpgY38nk,1365 +stripe/params/_plan_retrieve_params.py,sha256=tOx8IdL-uj99ZiCPncFvK_85JBxs9I9859PaTdCumfI,338 +stripe/params/_plan_update_params.py,sha256=rT47DNZ356GaZdmFNqg9MJkNMnNDf3Kr-vJDe0B_pQA,1320 +stripe/params/_price_create_params.py,sha256=xMkoI01ByjnQh8Bqtp9TlAry9uh7Bly6ewRHJpqyBbs,12493 +stripe/params/_price_list_params.py,sha256=V9jWQur-VwePqQWGdobSq7y3v8MJmlJ4bJc2wFgdmec,3039 +stripe/params/_price_modify_params.py,sha256=zvTdf8q4kOn6Pp99o0GFww8-0Y5WRKlRDa8HsVd1Qyg,5238 +stripe/params/_price_retrieve_params.py,sha256=GMhPVtHLlPN43tSnVOWQw6kGtjtmtBmqfV9CT3XEnCc,339 +stripe/params/_price_search_params.py,sha256=KWhZ8y8KE0ay9c6HZLENNoQJpYVeDU1mCY2XkGVDiAo,983 +stripe/params/_price_update_params.py,sha256=ab5xcvjpLIqq3A4gX4eTse3if3kHTzbLDH2sxQKoM2g,5182 +stripe/params/_product_create_feature_params.py,sha256=mH-_849toL1t9mhTrnIsIh92JEOJ4EdKy88Ng4TrEbE,502 +stripe/params/_product_create_params.py,sha256=Dr-oltJLAPqpXmIce8jkFlRLY3nzUdHIlwHAAsHpzFs,10890 +stripe/params/_product_delete_feature_params.py,sha256=8uluOe-pXP6PivtN_4XIVX4lR7QU4HXA_1fKvG_J9DE,175 +stripe/params/_product_delete_params.py,sha256=6Y4vOmQE1HNWIfVb_0du5TLOrZT76Ps_Ou9bkFIfO2A,168 +stripe/params/_product_feature_create_params.py,sha256=96kbiAblUDOwoov0BtN15qR8llVaUnMqhTVoZFJaKLY,457 +stripe/params/_product_feature_delete_params.py,sha256=mu5qXwsg1Lvb6kTyKSMSW_5RrSSlsCoQhOmEg24x1Wc,159 +stripe/params/_product_feature_list_params.py,sha256=CGiflaxwuqQyajQn8MlAPqhmld58-GnTU8Zox33Squg,1159 +stripe/params/_product_feature_retrieve_params.py,sha256=L83zgrNJD7eJbnt3J12ggojaXlb78LxEakQuJaH6KYs,303 +stripe/params/_product_list_features_params.py,sha256=VRhJGgSH_9Vlq4e_FzNzNsRw9iq9_3ApuJaSIvg33_M,1205 +stripe/params/_product_list_params.py,sha256=3RQtNUHW61qBeU6-Fy-s6o0NnFXSOCr9lU602Lj87gk,2490 +stripe/params/_product_modify_params.py,sha256=URG_hoOc4fIsCQ6AAym3-sZUIpsvWm22BEAWZ-Tgns4,3784 +stripe/params/_product_retrieve_feature_params.py,sha256=Nagt3Ofd0nB8NY1fAKFnrKWpB3T-RETUv45_eYpeQBo,348 +stripe/params/_product_retrieve_params.py,sha256=RWNGrjgbwTuqBHPXkTRcPzpb0auROn45yoASTeIolio,341 +stripe/params/_product_search_params.py,sha256=pwsXpO9eAEL1TZey7pKAGz6iLv2EBsTTzq1j1Po_yRo,989 +stripe/params/_product_update_params.py,sha256=LXAKVJOGj5_sjd9O9lCXQm8UlI6MjjOheVKKKGsCXE4,3728 +stripe/params/_promotion_code_create_params.py,sha256=LQOSkJQb5P61OdEAMFAPjAPtxqXZClUAYyhgeoac8UU,3518 +stripe/params/_promotion_code_list_params.py,sha256=puli986fP1vRTcvhNeAZqMnafAORdd2IQYgeOesq0Cw,2296 +stripe/params/_promotion_code_modify_params.py,sha256=LDkhiH8FrQhSMVRV41iC9k-E6NYnE8mUOEf5F01WzfI,1801 +stripe/params/_promotion_code_retrieve_params.py,sha256=Hhz0cpxdsAJJnMnjyp9pFEk4roPIQ2J6UX2olcp7tjo,347 +stripe/params/_promotion_code_update_params.py,sha256=-ORgRw25vZxPD4CXDa6xzW1d9uy2XN2_ioVLi2Al09g,1745 +stripe/params/_quote_accept_params.py,sha256=JF80G3G0Tyb5S-YMbpSPcO67OE9oEMZZz00BCBj4IlU,337 +stripe/params/_quote_cancel_params.py,sha256=o3M9QIOWz6uCG7xEgwKL9XLFP7lLmpQE31IWzWxI0sE,337 +stripe/params/_quote_computed_upfront_line_items_list_params.py,sha256=KfhafO07vaA9KfHimctGSgEwuv4fuYCuV5L86vwJyNk,1174 +stripe/params/_quote_create_params.py,sha256=shPea7FJv4Abv70yZqzhhU3L1XD8WSrxA8taXh7D_34,13684 +stripe/params/_quote_finalize_quote_params.py,sha256=QndKC_Cf1QCMFXSIDKMQI5UeRTI4-nKiHgBGo6BW4PY,526 +stripe/params/_quote_line_item_list_params.py,sha256=DUTRlfI9Li6zjRddxGY9vz07lB2FKJwJOxyfZ1wAnqA,1158 +stripe/params/_quote_list_computed_upfront_line_items_params.py,sha256=5DbKSHnbKRTBSZgSgGuwpiTX49Ahb8HCB9w7j9AmNfk,1219 +stripe/params/_quote_list_line_items_params.py,sha256=QMQJ8KfQ2UrhC_d79H_t9lcRGWdtRHekbZEg2o7ofp8,1204 +stripe/params/_quote_list_params.py,sha256=6aQa8jhF1r25u3e7ismYcxcvNbmxcdh3MsTh4zGFr2Y,1660 +stripe/params/_quote_modify_params.py,sha256=spWxT2AXOed0CGHNMegyj_3WiCgHNoKlyB6qymwQI2A,11717 +stripe/params/_quote_pdf_params.py,sha256=Q3BO9qT9wKRx3ThiArnuo_h_Cq4QXyXDuXXAlWiFPL0,334 +stripe/params/_quote_retrieve_params.py,sha256=iwgVFTMBltTF9dD_4pIzk_P0WlVbfhXnilRaVTxg3TY,339 +stripe/params/_quote_update_params.py,sha256=xqo2HhdAj-jyTBUK9hpWKrPi2LTdDh9g78XnAgJNYZI,11661 +stripe/params/_refund_cancel_params.py,sha256=Sy7e9ZvwSzmTxLFsjz_P-RjbJ3McO7T8zoQSWJCjvos,338 +stripe/params/_refund_create_params.py,sha256=YBasqRaxfn1XzqEANseHZcRsaqJIm0Gc7PKPR3eayok,2849 +stripe/params/_refund_expire_params.py,sha256=41dzAO48VXmwCTu55xlYE73XgUkxPjCwqC0pp8Au-ow,338 +stripe/params/_refund_list_params.py,sha256=46YJkivZGQWSCyzxRcKcZLC0Ezyq7ZyD8bYFIkiUiSg,1969 +stripe/params/_refund_modify_params.py,sha256=5bp5D2Q9vyavhTpCFEf2xtC3eTSmuB3BK19KxKN0ZkM,748 +stripe/params/_refund_retrieve_params.py,sha256=jas_Vv0dTlQf-8wrzmKsz1EiAOjiYsakvVmX46yEmvo,340 +stripe/params/_refund_update_params.py,sha256=_KJRCAI1tp6ySKlbsJwN0aJDQO-oQ8sq420g6Vlzs2g,703 +stripe/params/_review_approve_params.py,sha256=LYQi2UDmIoEx_szknUNFX6qNKrIRbSPdnOiVglu96cQ,339 +stripe/params/_review_list_params.py,sha256=-CnJrk-gUq4WACSeLJMMutfEH2JCxtwW2UNkdNE9TXo,1735 +stripe/params/_review_retrieve_params.py,sha256=UsrxF1eAObh6oUZ9se9p5ck2T3Ja22zEY1-fSQfmfuY,340 +stripe/params/_setup_attempt_list_params.py,sha256=-R2XYVhJBrLcLmBEWDYaF3QW3h8aRRvOnZ4KQBwd_jA,1986 +stripe/params/_setup_intent_cancel_params.py,sha256=KbgXKu-N1nsvnJ0nvDtjw2Cg0MIM9y--Kj6LGAxOePE,596 +stripe/params/_setup_intent_confirm_params.py,sha256=PvoT6nsKYZoMJG-gvyHruJeE2yu_BJE_Z-0CQfZzGfE,46487 +stripe/params/_setup_intent_create_params.py,sha256=FU6OZKTHqIUJ_kHq99_iwzyT2HmMJ4uMZM7R74wMQPE,53113 +stripe/params/_setup_intent_list_params.py,sha256=yKWPnp-b_muvzMrrAGfwbmXNLcg3lmhjFcYJbfnKCVY,2536 +stripe/params/_setup_intent_modify_params.py,sha256=X04_3f3Qpd2AzcGYpCQhBj1KbSL1xI0JRZDuw0OcE6o,47064 +stripe/params/_setup_intent_retrieve_params.py,sha256=yCIJxZajlqDQjmLUOG0WqYUuzJFSua2_oJu9QlGnBrM,520 +stripe/params/_setup_intent_update_params.py,sha256=4eo54d5inGd1MUl6dJm9KlzAjg27iKPWCM2357RmIy8,47008 +stripe/params/_setup_intent_verify_microdeposits_params.py,sha256=VvtJ8nPPwLi6TCmnhlk9E3OLSfkLkuAXMiN-q4BeM4U,664 +stripe/params/_shipping_rate_create_params.py,sha256=OJap_xSlMFBKIbOUv4jkxeYF5y5ruCvNxAxHVFdxR60,3827 +stripe/params/_shipping_rate_list_params.py,sha256=m1Y_8S5GpyihLls2kqRa4BZxntM36U3BOVo5qF0h1ks,2076 +stripe/params/_shipping_rate_modify_params.py,sha256=Kvps5vtts47hm_IOoNdNDVBoUW0_5nSQ7vImnSKinmk,2139 +stripe/params/_shipping_rate_retrieve_params.py,sha256=N9NAkzrbfBQf8iTG1r7paraikRAb37TKLzwpG16CVQw,346 +stripe/params/_shipping_rate_update_params.py,sha256=Ei9rzzkQLKZ64rk5zDdyrvtlGnq2zRlIQ66-XYNpMlM,2083 +stripe/params/_source_create_params.py,sha256=2yUEa_9Qews636cU0h5iRjJNik5l2F4-0aWI8qdbt-o,10583 +stripe/params/_source_detach_params.py,sha256=xBT5w_HpKnBoPYRTH4Z4syZaT6TIDBqCI3SXa1iGRmg,293 +stripe/params/_source_list_source_transactions_params.py,sha256=ELJqD-nHwIbcnWWUwDUvBgtKdl8_z1XCTtXpuzqgkUI,1214 +stripe/params/_source_modify_params.py,sha256=wJnvvgW3TcLlKXYjjcaRFYP0Q4XSZEbCY8pQzUXgFCM,7952 +stripe/params/_source_retrieve_params.py,sha256=PCRgp6mBVSJX2uudmD4MO7zkWTA1flhP7fz_I4RXYYQ,491 +stripe/params/_source_transaction_list_params.py,sha256=lRB6J101Wp9xfHAR4gFL2K_JnLEpQKg1yRa0qQbaoe4,1162 +stripe/params/_source_update_params.py,sha256=qyyQh5tBVIROC-qjyu3ttv7Mg86y3A4VaYZxn6IpK8Q,7896 +stripe/params/_source_verify_params.py,sha256=jQ2OWbT7KdsowwD625JgsLNxNAw2XV-eZ9yj4flxr_A,420 +stripe/params/_subscription_cancel_params.py,sha256=jZeRxEF0XejE1vrFzbDk0uSNl4VllJXt53hWDCmXnu4,1479 +stripe/params/_subscription_create_params.py,sha256=C6mAcBaFU4ab7n4eLFzSi3wYaBf7Pssubyucj51fk3o,36036 +stripe/params/_subscription_delete_discount_params.py,sha256=Vw4ET1NeRCFcyhH9-p3plcNssFhSEGzHjj3DgIQIjfw,181 +stripe/params/_subscription_item_create_params.py,sha256=T5J1TRgPmNzv4cElZ1TVWhaXXivPiwnDvADVoBtQKqM,7626 +stripe/params/_subscription_item_delete_params.py,sha256=LhptQQQxd2cBUijncZxHYonWcRyiRDdg5CxNxsgMGF4,1121 +stripe/params/_subscription_item_list_params.py,sha256=FynWOwTmDlHJq7sw2IcuHjmVVZSTub6WiT0jS-689j4,1306 +stripe/params/_subscription_item_modify_params.py,sha256=-Fr9wim6voT1nkKoXHeBfqdgwp3tQJK9XX7JvjyuB1A,7926 +stripe/params/_subscription_item_retrieve_params.py,sha256=oNgXP1_ndai0h-unaM8xxu337sEdyMabTNzjPdxMYJQ,350 +stripe/params/_subscription_item_update_params.py,sha256=kEPXvFukMrHq7V871TlzU7nCRWzRDcPfGwXbuKdLxjk,7870 +stripe/params/_subscription_list_params.py,sha256=fy1kHWZ-EIRHx5Nf2fdanvMFcTMbjW3iCPVXK6fycRU,4988 +stripe/params/_subscription_migrate_params.py,sha256=xH2DCeLnJm36QqAqb0ZqaQaQ2Z2v-n8mwcjqpNXaV0k,1109 +stripe/params/_subscription_modify_params.py,sha256=dVV8odhYGdUG34R6uq-zBs-3rjg7dUCDTs5qL2gkrrA,36049 +stripe/params/_subscription_resume_params.py,sha256=fmHyvn1cIU3PClERAyy1hLnR-Rjr-uLE3wUj0RT_sbM,1437 +stripe/params/_subscription_retrieve_params.py,sha256=g8-9aJi2BqAWmYCr7qzad1hIOw-yAQ1K7R1cv52MOtA,346 +stripe/params/_subscription_schedule_cancel_params.py,sha256=H9W0l7OMH05Gqtuipyt5vu2dND_BzBQ0biUzUmTA8Pc,764 +stripe/params/_subscription_schedule_create_params.py,sha256=9w83QEyi61f2Xp4asUpCRKdwUNH6k1mJgC1J2jnX-u4,29516 +stripe/params/_subscription_schedule_list_params.py,sha256=oTMdfrvfABpzZtfcxO7DEQVyMKqeYti2GydlxOfIISw,3763 +stripe/params/_subscription_schedule_modify_params.py,sha256=zlY1pRbpHiS8Sbo6p6mz4lfkMlCbHpAnGdYK2aZJd9A,28302 +stripe/params/_subscription_schedule_release_params.py,sha256=HoBDdQJY8r2d8EqyrHjKJ6CffQR976URAp8oytN8hBI,485 +stripe/params/_subscription_schedule_retrieve_params.py,sha256=WMASujGwfUTGyEQ5aADdVwPGtxTsgC3IC8pyanxHV38,354 +stripe/params/_subscription_schedule_update_params.py,sha256=J7G1gk9HpkFthSftoYlOWGPwlmZFqGK2rulVijXn8DE,28246 +stripe/params/_subscription_search_params.py,sha256=IxWBcMBOI8JPm5nzFl5T8KgHGyhH4BDkrwks5YJkA1c,1004 +stripe/params/_subscription_update_params.py,sha256=GwsbY_cfjfn-lHHWCYBx27xpSjYbbbjguB7xLSyrxSU,35993 +stripe/params/_tax_code_list_params.py,sha256=dtUb2kXKbofdE-41I20WHKqQ8zam5oe0RcvsE5JVc6k,1197 +stripe/params/_tax_code_retrieve_params.py,sha256=vkhkR8kmFrWQj2v53qrwJiAz7WGanZoM_Fs7qVOL5Bw,341 +stripe/params/_tax_id_create_params.py,sha256=5xyI5jN0Grx9mRszbBOEJXEtBr8x9kkY5zv0yU86uYw,4129 +stripe/params/_tax_id_delete_params.py,sha256=PXMQN_hAH_nqyrtfg2Lc0MLetUXo1uA1Z0vnT0SXpx4,166 +stripe/params/_tax_id_list_params.py,sha256=Guz0CWGR_LKcQ-mus12G1NFZ_mJ-0hazX4SuWuvoOV0,1735 +stripe/params/_tax_id_retrieve_params.py,sha256=fIhnIthWKAWOf8CcBwbVLntGjj1f4c5zi0B73ouCXhc,339 +stripe/params/_tax_rate_create_params.py,sha256=wOCsEOq2c0kY1_gBGEJbx8t2cQyFieWB5kjKh6kls2A,2470 +stripe/params/_tax_rate_list_params.py,sha256=cpeOzMg6OnKj1xMAfxIL_gUePmz819RGFKXGVHMCZ9g,1989 +stripe/params/_tax_rate_modify_params.py,sha256=8B53KWo6e3eFl2ccI4zz-Sk7B2vbrHGzT0XHxdybJ30,2308 +stripe/params/_tax_rate_retrieve_params.py,sha256=MTbg9ZleDvRpdlltiO6nOIrF6CTrIJfHhwtmNFGDSCM,341 +stripe/params/_tax_rate_update_params.py,sha256=E2mXmCNOzdLpbQeRpvBpMgZttF-De_HSFlYg77KhZQI,2263 +stripe/params/_token_create_params.py,sha256=JaPb_ni0ejGhvhwKVgdwqKYj4ygxGPIbn-DKLLBBmng,41327 +stripe/params/_token_retrieve_params.py,sha256=V_pWkayXZORC7XHJTAEznECddoHvLo46K67uG7wOa7Y,339 +stripe/params/_topup_cancel_params.py,sha256=WnYAd8CA6MxHVk2NvYW77S9I9f1nMJ8ephJWzfW2_O0,337 +stripe/params/_topup_create_params.py,sha256=0Klg_kqu3fsMkGdDdtiIiWxC7RX9J9GQRjxvGgLcCJk,1811 +stripe/params/_topup_list_params.py,sha256=nDqaK2HaqKly_0vGaxe4pubb7poibtqPnAjxrWeIb0M,2565 +stripe/params/_topup_modify_params.py,sha256=87QCn7dqSPlyKcMh5K254cc5FudakoSsGi7wz4MLvP0,883 +stripe/params/_topup_retrieve_params.py,sha256=cdD2Xu5YQWosRCxIuqS9DOi9lbLMu-TcWbAp1Sbi2s4,339 +stripe/params/_topup_update_params.py,sha256=B3magPPiaUL9XSxzbjutOrF0iDvuAyXRVWKrrfyGZJc,838 +stripe/params/_transfer_create_params.py,sha256=NyEMk-JLg3edbTXzd3Ikasz7XwwPOXLHkPiYZ8f3oTA,2300 +stripe/params/_transfer_create_reversal_params.py,sha256=HfrkxcZHL22x6JwgERu_pewfYu049sZt2sYdPOeGT3U,1621 +stripe/params/_transfer_list_params.py,sha256=AjhCO8sEExfV07UduwZfFvNRKosKwNCHxo_u7kFIX3A,1983 +stripe/params/_transfer_list_reversals_params.py,sha256=afWJdNeafaf19I6KMEpIbORH_IfR89YhsvDdAq1mcp8,1207 +stripe/params/_transfer_modify_params.py,sha256=0ouO3d7fFz6zo2wJoFCdviMu4Bp9BlItwJxXjl8etgA,886 +stripe/params/_transfer_modify_reversal_params.py,sha256=Uc_SNxxTzQlW2Dv_OHFkWJvkJB1c4fcRZcF5R2umt_s,758 +stripe/params/_transfer_retrieve_params.py,sha256=--aTGoYLtXmx0LZQqcGTMibsij2poooqFGvHCxtxk_4,342 +stripe/params/_transfer_retrieve_reversal_params.py,sha256=MQkEA9-skFUxnmjNpUmi-SYNUgtJ90ZM2PkVbrL-Fvc,350 +stripe/params/_transfer_reversal_create_params.py,sha256=BwJSVlNEXrlAv5atIApinCM3j8oGv33UxIDQ7uXHRaY,1576 +stripe/params/_transfer_reversal_list_params.py,sha256=O3_b8ztVF7V2XfAO3do-0_YO1K-yVPiv0VFC5fzRapY,1161 +stripe/params/_transfer_reversal_retrieve_params.py,sha256=gMUQ4RseWpeltJwGn2AEqWmAp23tcESKiexlgHDyiWg,305 +stripe/params/_transfer_reversal_update_params.py,sha256=mTTlmNv7E-ZTUpFCHkaBQHeASbmipzXYeF5xam-U83k,713 +stripe/params/_transfer_update_params.py,sha256=VS7chqf4RyDm8KBnGte9TvJhrjaFZFDY92CYqda4Kbc,841 +stripe/params/_webhook_endpoint_create_params.py,sha256=eYKLoGFSDe4q33wqvU5UK-LfJ9VdUYTvRnN6l-OJWGc,15257 +stripe/params/_webhook_endpoint_delete_params.py,sha256=1SYGVqJL5-R-qa4YmyrnkaKNDukDpvYPx7ApQnBFFtU,176 +stripe/params/_webhook_endpoint_list_params.py,sha256=iBNOlaEukWcO9Qh119WbtL3VtRL3luCjDT8NJW7ZKTU,1205 +stripe/params/_webhook_endpoint_modify_params.py,sha256=mqS9wqY4Qf1-9INRyN6OHEW7v9o4DhyzCe7XHHmpZfM,12883 +stripe/params/_webhook_endpoint_retrieve_params.py,sha256=Ph_TqUvMdRZA_2GsXhPK_PbYro8E5NtDpEbFkjL_IKU,349 +stripe/params/_webhook_endpoint_update_params.py,sha256=Ac7pILyJQiGGSJ1XPN_7vJd_OjnwATRSX0AyvmXCiFg,12838 +stripe/params/apps/__init__.py,sha256=gXqzGfpJQ_umIxK7C1KcLD0qGONQ4sxxLEGlmrmXPow,2021 +stripe/params/apps/__pycache__/__init__.cpython-312.pyc,, +stripe/params/apps/__pycache__/_secret_create_params.cpython-312.pyc,, +stripe/params/apps/__pycache__/_secret_delete_where_params.cpython-312.pyc,, +stripe/params/apps/__pycache__/_secret_find_params.cpython-312.pyc,, +stripe/params/apps/__pycache__/_secret_list_params.cpython-312.pyc,, +stripe/params/apps/_secret_create_params.py,sha256=Ur1-8BRJFPNS96dHXZqNh8dHf-_1rjmEEFOlpUvMZLM,1166 +stripe/params/apps/_secret_delete_where_params.py,sha256=CwTGzN0Ba_mSiEuo1yDwmOsj9VtpZlcUPBgHUgOK0OY,964 +stripe/params/apps/_secret_find_params.py,sha256=5WO3lHM1F8hZTT_SLk7j_s0dQXc8TtF7n3EuOF-8D5Y,943 +stripe/params/apps/_secret_list_params.py,sha256=rXPsr3no0NjMFq1iyQwum3CTed1WVznFRqVZ6IJrOYU,1715 +stripe/params/billing/__init__.py,sha256=DVHyz2pX3kGe-keUsO9HUei4Ppj_igQUT_Np6aTwHvk,10385 +stripe/params/billing/__pycache__/__init__.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_activate_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_archive_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_create_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_deactivate_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_list_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_alert_retrieve_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_balance_summary_retrieve_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_balance_transaction_list_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_balance_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_create_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_expire_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_list_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_modify_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_retrieve_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_update_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_credit_grant_void_grant_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_create_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_deactivate_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_event_create_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_event_summary_list_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_list_event_summaries_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_list_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_modify_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_reactivate_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_retrieve_params.cpython-312.pyc,, +stripe/params/billing/__pycache__/_meter_update_params.cpython-312.pyc,, +stripe/params/billing/_alert_activate_params.py,sha256=FkQvA2pXQ2a3kKO4AOYWOimh5tkOFRyCIw6jJ1KpsNk,339 +stripe/params/billing/_alert_archive_params.py,sha256=wUt4EUuq7CwV-gmmday6gZ4Yz9PVf4MnYN2X2uHcG2w,338 +stripe/params/billing/_alert_create_params.py,sha256=crvm-q3FFIhNvjaHcc51_ghaP5Tc_RdMTalilniw9ng,1464 +stripe/params/billing/_alert_deactivate_params.py,sha256=mHwM5HbSL3Obc38-RaYDX62tzbw3uJ7_qWKcuIKsNzc,341 +stripe/params/billing/_alert_list_params.py,sha256=kU0jmafDTrUTGXx0H1WhF5_m5l_GFSMjszJinAy9kp4,1439 +stripe/params/billing/_alert_retrieve_params.py,sha256=UupKr9O0BUssX2ti-tdOcLZlxvyu6Iok6Hf78frHfEg,339 +stripe/params/billing/_credit_balance_summary_retrieve_params.py,sha256=iQyPzcRzvSnrNEmgkW8t2mIgZMUaL4idhMtMm6WjLpc,1840 +stripe/params/billing/_credit_balance_transaction_list_params.py,sha256=RUBAaqk0QHbhFKRbczKQNnawOiY5x_AoepevqeDdDrc,1433 +stripe/params/billing/_credit_balance_transaction_retrieve_params.py,sha256=u801DztBUPEYOR-9rvWDhPaPuAMDVFwxTuxh0KyvuQc,358 +stripe/params/billing/_credit_grant_create_params.py,sha256=kYVCM8xMMxZy0TVjsw5o-0g-M_RVouNDAtPs9Ty4Trk,3346 +stripe/params/billing/_credit_grant_expire_params.py,sha256=KbEs9VqplVk8nPs02fw8w2geOoHZaalitL_miltNMgU,343 +stripe/params/billing/_credit_grant_list_params.py,sha256=zJ_GicU-1qBxMwR--aUR4qcX8sSNJjjyC4VxSU3x_TA,1297 +stripe/params/billing/_credit_grant_modify_params.py,sha256=eeuPH9QzCjl0eXsn6nr6UuEjnyT-4bPp6ui2B7ZuxPI,777 +stripe/params/billing/_credit_grant_retrieve_params.py,sha256=rICP2M2Yu6NdUTRqQg5yYx4Hddc2Il30q-C6cFvxYMA,345 +stripe/params/billing/_credit_grant_update_params.py,sha256=Y1O8Ztg83wZyKtOL3XTT8e1BoQLMY4iJJ08pe0V_HUQ,732 +stripe/params/billing/_credit_grant_void_grant_params.py,sha256=vQQMSw0yHPUf951g-3F8J43Yz8JHp3t84FT7dNTzYLQ,346 +stripe/params/billing/_meter_create_params.py,sha256=WCLcewqi3eAdS4FBnWe1UIusofIy6rEqTFSh0ZtN8Wg,2071 +stripe/params/billing/_meter_deactivate_params.py,sha256=kaXTIi2pcy5ybKBvS9fLs2JltsE6C2KriRK0iuFBVNw,341 +stripe/params/billing/_meter_event_adjustment_create_params.py,sha256=t1x88x5OUEUyezsjkHvwitULKT3JBfPHo13i6YbqwE4,1004 +stripe/params/billing/_meter_event_create_params.py,sha256=Q-knj2FltzPa_WSgcm9wFypESxoJglgQwtgLvIxy7u0,1596 +stripe/params/billing/_meter_event_summary_list_params.py,sha256=qZcymYu90TZGC-IxJE2IEYdmViVrSwRDlzIbpPyn03k,1997 +stripe/params/billing/_meter_list_event_summaries_params.py,sha256=yvRUit8SLoHZHsn27ii224GHyr8gPxVk5jeEQx6OKgo,2044 +stripe/params/billing/_meter_list_params.py,sha256=t0TXMusH9xKDnEVxzzNjY2sJZIotdLgb15sNEJHutFk,1340 +stripe/params/billing/_meter_modify_params.py,sha256=2N2Q2h8udkT14r1UWe_UFHFCXE5s_afffktx0GEhETo,439 +stripe/params/billing/_meter_reactivate_params.py,sha256=dxEM0eNWUUVNnGH6dtzZUu0indhR_PVZk8_3OmfUW8U,341 +stripe/params/billing/_meter_retrieve_params.py,sha256=HWcp371fpRwboKU6Xp0rjSUEGp_eoq8zYdLhBZr54po,339 +stripe/params/billing/_meter_update_params.py,sha256=wpW-1IUjQX_RrevqIJW7Q-v16vss8xPFY2xEivyh-V0,394 +stripe/params/billing_portal/__init__.py,sha256=lWKDZ6Z3h4g6oYTzvSAKJ2fLJJ5bE0j73A1q6SPyGx8,15905 +stripe/params/billing_portal/__pycache__/__init__.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_configuration_create_params.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_configuration_list_params.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_configuration_modify_params.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_configuration_retrieve_params.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_configuration_update_params.cpython-312.pyc,, +stripe/params/billing_portal/__pycache__/_session_create_params.cpython-312.pyc,, +stripe/params/billing_portal/_configuration_create_params.py,sha256=-PgpQ2Q6vIwkSn0G7_GFzEap4V_HsyMdjrmd-QGPtDw,8938 +stripe/params/billing_portal/_configuration_list_params.py,sha256=8NmTXF74eA6WVkltnp43lKocxG3p-CyOT3TsS6NYZ9Q,1532 +stripe/params/billing_portal/_configuration_modify_params.py,sha256=ZzJ-6OM3LDkEHesXiC615OR26SdN3bbny7t6gcXikDY,9033 +stripe/params/billing_portal/_configuration_retrieve_params.py,sha256=P0bRU-nOhmWJ1rbu0m8J-k6tdLAIg2tSm3ypQknsaIE,347 +stripe/params/billing_portal/_configuration_update_params.py,sha256=8gXsgldQdyDjSRYFmmAMBROJ4TU7tUvupcWBhevxUV4,8977 +stripe/params/billing_portal/_session_create_params.py,sha256=f_TieCe2n_fmJKwIDaQO_2sZBhvvhCyEorA6UAxsKNo,7439 +stripe/params/checkout/__init__.py,sha256=vVPSkbTW4bzyLN563xHnErb6tPLK83LUhBnyEcL5Zas,37551 +stripe/params/checkout/__pycache__/__init__.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_create_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_expire_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_line_item_list_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_list_line_items_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_list_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_modify_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_retrieve_params.cpython-312.pyc,, +stripe/params/checkout/__pycache__/_session_update_params.cpython-312.pyc,, +stripe/params/checkout/_session_create_params.py,sha256=wz2A1Il6fHqYOttgXDOFkyfrxvA8ynK3OxH8awNkUO0,134161 +stripe/params/checkout/_session_expire_params.py,sha256=EGzsD5H5xc26YCjK5XlqM0QzIcNVAHzBVHSpE9akGYo,339 +stripe/params/checkout/_session_line_item_list_params.py,sha256=C-t8rxJSRDp1pq12mfdScrGKu6F-s3QBgpGpWGyfso0,1160 +stripe/params/checkout/_session_list_line_items_params.py,sha256=oojkjaYlqkJzW2b1Iv4ZlXQVFMpi0kKvS-mmPlkMIK0,1206 +stripe/params/checkout/_session_list_params.py,sha256=hLn8jmsgKi4iFjePb8O5vC9TGlATK9fVNNhg_-l5pgw,2653 +stripe/params/checkout/_session_modify_params.py,sha256=aWuUDMg3Cauxoi7wRYdAZNJWRJFtL3RL1EqcXc2Z-Vs,6633 +stripe/params/checkout/_session_retrieve_params.py,sha256=eVwRMKA_VIJ8le603QLR3mg7H0rgQbNjmzrIlgzMn0M,341 +stripe/params/checkout/_session_update_params.py,sha256=jI5mYpnjBDHywibvW-lACOhSkAIqsL0zVhOEaidKKsg,6577 +stripe/params/climate/__init__.py,sha256=6uBJUPcG9l18zgPUssXoT12FXhXX_5GMOKwDXpifGXk,3232 +stripe/params/climate/__pycache__/__init__.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_cancel_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_create_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_list_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_modify_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_retrieve_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_order_update_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_product_list_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_product_retrieve_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_supplier_list_params.cpython-312.pyc,, +stripe/params/climate/__pycache__/_supplier_retrieve_params.cpython-312.pyc,, +stripe/params/climate/_order_cancel_params.py,sha256=rfKw0uZfSYA9bw52cFbS4VGCou1Fv9bNC1zSWDJAfVI,337 +stripe/params/climate/_order_create_params.py,sha256=oJ7Yntv3Dp3hgCZ2e2wVpVZh2YwkUF5RI1AvN1-8GLY,1784 +stripe/params/climate/_order_list_params.py,sha256=iYmW6CwxP4RkLBk_52X9eebwemqRhC0odlwturJT5Tw,1195 +stripe/params/climate/_order_modify_params.py,sha256=FiEp-UISnVdT5Qem3Xez8uxVsCtII9aU9SsLLEJ-ThI,1139 +stripe/params/climate/_order_retrieve_params.py,sha256=BTUdx-cXMT7DhJoB-Fn-gaMbFygdSCleS1iGWzD5cZ0,339 +stripe/params/climate/_order_update_params.py,sha256=lhnFc5KPYBXQX-8oL6Dy46gogmoM9KtGh9laf8QmvNY,1083 +stripe/params/climate/_product_list_params.py,sha256=N5lTMI1HvReBvx-acEZZZpvIZwtQMqnLLWg3KIkCp_M,1197 +stripe/params/climate/_product_retrieve_params.py,sha256=RWNGrjgbwTuqBHPXkTRcPzpb0auROn45yoASTeIolio,341 +stripe/params/climate/_supplier_list_params.py,sha256=F7MpWYXtlYwHR5gSbQ8igm2i1tHpsxk4Z-kNlsyjq3o,1198 +stripe/params/climate/_supplier_retrieve_params.py,sha256=2khL1OHC1mlL2I_SnkOPk0wa5L5FgYBOubpgWwWqpVY,342 +stripe/params/entitlements/__init__.py,sha256=VbjOFRRmxn-HCUkIjRns93rzrpknQSkrfwG6Lrrpz7A,2358 +stripe/params/entitlements/__pycache__/__init__.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_active_entitlement_list_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_active_entitlement_retrieve_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_feature_create_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_feature_list_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_feature_modify_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_feature_retrieve_params.cpython-312.pyc,, +stripe/params/entitlements/__pycache__/_feature_update_params.cpython-312.pyc,, +stripe/params/entitlements/_active_entitlement_list_params.py,sha256=NeHkhcj4eoCdV6KifUNnYiAua1nzdXy_XT3RawcfNpg,1269 +stripe/params/entitlements/_active_entitlement_retrieve_params.py,sha256=TU97k9jGzdJ6ccUvFejsvQUJ6YyGsFgNFH2bBXQNpVs,351 +stripe/params/entitlements/_feature_create_params.py,sha256=Nyxl9jkGRMf42vwb_eLVUlcWpoRcIvWiib1-hIS-rek,809 +stripe/params/entitlements/_feature_list_params.py,sha256=yn1KZFCMQ-yU-loNIQFJfY0SyIIsp0y2HK5GagMEVUY,1456 +stripe/params/entitlements/_feature_modify_params.py,sha256=AemoQOG2bQvlBglJvm-Gzr_rXa4guQc_9UacfWlPBHk,877 +stripe/params/entitlements/_feature_retrieve_params.py,sha256=2SS9bF7SZ_J8ZTfptMmf6it0pwb9hGUJulJwE08ttEs,341 +stripe/params/entitlements/_feature_update_params.py,sha256=ejCvvzp7lB3GyI7vX6CNGbegIxg2NHWBcLXzhEojW3g,832 +stripe/params/financial_connections/__init__.py,sha256=AKhZBkkAjNsPAEuILKYAhpa_UVYgV2M37as9YLzTxfg,5174 +stripe/params/financial_connections/__pycache__/__init__.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_disconnect_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_list_owners_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_list_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_owner_list_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_refresh_account_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_refresh_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_retrieve_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_subscribe_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_account_unsubscribe_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_session_create_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_session_retrieve_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_transaction_list_params.cpython-312.pyc,, +stripe/params/financial_connections/__pycache__/_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/financial_connections/_account_disconnect_params.py,sha256=be2312dB_FvzFncUQnQsqO3gEZOKe3E6eVP0gixaedU,343 +stripe/params/financial_connections/_account_list_owners_params.py,sha256=57kmOi2nGbXuqn6-qdfDBoCe5JNBB8OrYVxTXylHxqg,1295 +stripe/params/financial_connections/_account_list_params.py,sha256=mYa-xqUkUZvk7yE88lZLbcfxsh0lmwTtxZRuLT91GQg,1865 +stripe/params/financial_connections/_account_owner_list_params.py,sha256=jTjdUI8ajDzA2uudkLbL6s7tPOvEZOYwc604XQeXiRo,1249 +stripe/params/financial_connections/_account_refresh_account_params.py,sha256=wRAb2vhJWUdbJzarVNDV_f_3ttwe8KJ4DWSh5MlbF7c,505 +stripe/params/financial_connections/_account_refresh_params.py,sha256=vJDg5E4J0V9d2JwiekuQ9-DWVdalYBkEOOR3N4P2Dbc,453 +stripe/params/financial_connections/_account_retrieve_params.py,sha256=fgJLtxY5lf5icwMfO_jl84ZJ66TejvumeWNjUVPM7fw,341 +stripe/params/financial_connections/_account_subscribe_params.py,sha256=JbrzpWxyx_--8ftfrcPbPytgv6sTimIo1oRClEWqhWA,482 +stripe/params/financial_connections/_account_unsubscribe_params.py,sha256=JADcHihW9o6Z5R0zvKz5_cE8tkPmCC-R0Mq7rzpnzkY,488 +stripe/params/financial_connections/_session_create_params.py,sha256=s-qxlBzt4XCUplmx1OLZmPZhee4P4YAJ4Hze6BbM3E8,2348 +stripe/params/financial_connections/_session_retrieve_params.py,sha256=eVwRMKA_VIJ8le603QLR3mg7H0rgQbNjmzrIlgzMn0M,341 +stripe/params/financial_connections/_transaction_list_params.py,sha256=Xyd0HRPY0hrZU5fwzvZpGaCdtndoX4JS3Qepplc4BLo,2441 +stripe/params/financial_connections/_transaction_retrieve_params.py,sha256=HU8W9BYiU7eUBNMsSbciuJ7ZuYzkg5QFFzzpPEtEOBI,345 +stripe/params/forwarding/__init__.py,sha256=ZYNeSzpxbSnZXqHRfnggVsBoXUNmkKqTVRQCiQTKtTE,1849 +stripe/params/forwarding/__pycache__/__init__.cpython-312.pyc,, +stripe/params/forwarding/__pycache__/_request_create_params.cpython-312.pyc,, +stripe/params/forwarding/__pycache__/_request_list_params.cpython-312.pyc,, +stripe/params/forwarding/__pycache__/_request_retrieve_params.cpython-312.pyc,, +stripe/params/forwarding/_request_create_params.py,sha256=Ic3NYey9GTFTyspn-OEzHilTDtZYIkQkWfIGtjfOBPc,1991 +stripe/params/forwarding/_request_list_params.py,sha256=Avtj7cjQdvXNwYKyISRO0Hp98IqDxnTTKxPuxeLuYWc,1539 +stripe/params/forwarding/_request_retrieve_params.py,sha256=w3WzKX_TOeLbC_ln2ysMOC5moMxRRHoE0b-RHwvzSFg,341 +stripe/params/identity/__init__.py,sha256=shGxc2O9V1GY7HSwm19huAmqNPRw3-XyHRxZoIJudsA,6108 +stripe/params/identity/__pycache__/__init__.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_report_list_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_report_retrieve_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_cancel_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_create_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_list_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_modify_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_redact_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_retrieve_params.cpython-312.pyc,, +stripe/params/identity/__pycache__/_verification_session_update_params.cpython-312.pyc,, +stripe/params/identity/_verification_report_list_params.py,sha256=pdB9Y5YOhmkD0ItbU2b9C0eOfAMW9JHQsSvslb_gyXI,2321 +stripe/params/identity/_verification_report_retrieve_params.py,sha256=FCBcuJzSbS5PcSDhbrDDsrpYOMt7_gnw3TEY1IYWEpk,352 +stripe/params/identity/_verification_session_cancel_params.py,sha256=Xg1r6sWf2yxaUrNAqW-Y0plk1Bqafp8H0kwIbJ8l_oQ,351 +stripe/params/identity/_verification_session_create_params.py,sha256=odOHKmER7UvlN9OmCb1-pm4BjrKn9JmBM3h1NgKt9ek,4068 +stripe/params/identity/_verification_session_list_params.py,sha256=xkQX7ncLoczmAoj3URwlUyWBZljHgcqaMRUExX9QwME,2330 +stripe/params/identity/_verification_session_modify_params.py,sha256=TPM42IoXURl-IIn5SZ_ZPUzkje7zwS8iOftB9aTSdMY,2885 +stripe/params/identity/_verification_session_redact_params.py,sha256=faJvjgHi0W0RNvtoit2JztnUkCRHuFXAPIRIlBSTr2g,351 +stripe/params/identity/_verification_session_retrieve_params.py,sha256=kc7_KqYhclOjbcuQMI-vBuEtKXcj8AmCM9r2OnybbwE,353 +stripe/params/identity/_verification_session_update_params.py,sha256=XwdJNo865iCsYRTyGQZApoteaFiCedFFN3ygvSaHSQ0,2829 +stripe/params/issuing/__init__.py,sha256=wO5qHP6g2Obr2H7YkmY6W6OOmBFOnBvtMwxJ7SpvJLw,52384 +stripe/params/issuing/__pycache__/__init__.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_approve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_create_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_decline_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_reverse_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_authorization_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_create_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_return_card_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_card_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_cardholder_create_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_cardholder_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_cardholder_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_cardholder_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_cardholder_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_create_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_submit_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_dispute_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_create_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_personalization_design_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_physical_bundle_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_physical_bundle_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_token_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_token_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_token_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_token_update_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_list_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_modify_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/issuing/__pycache__/_transaction_update_params.cpython-312.pyc,, +stripe/params/issuing/_authorization_approve_params.py,sha256=ZjPlB3wH4__A9mVcVnk5Pku7Mw6LT52Qa2CUS4TB3dQ,1099 +stripe/params/issuing/_authorization_capture_params.py,sha256=fLv2LW5OxjZ4MV4y_s7oQfOvu_Ko9eSmFh4iJNYVhFM,8414 +stripe/params/issuing/_authorization_create_params.py,sha256=VqbMxALBnyoNjxpMhQ3OWAbvTg4ltuDJq3rpcwPcEec,26323 +stripe/params/issuing/_authorization_decline_params.py,sha256=kJHg22M7YT-33NsvZKVBjfgrSPyl63BCb_SKGV9l2BQ,756 +stripe/params/issuing/_authorization_expire_params.py,sha256=jlPdyu_G2aWagyklYFlJPDmxr5-0xJ7OlGm-SgPt714,345 +stripe/params/issuing/_authorization_finalize_amount_params.py,sha256=ZNfj8nHq-lMidoevyoTbNQ4dygQ7Fu_8DTJG9KCjfvE,5543 +stripe/params/issuing/_authorization_increment_params.py,sha256=ZlTBNBq2XXJO2SJPOc-xyHlTDU9y0QvBS0McenDWJNs,825 +stripe/params/issuing/_authorization_list_params.py,sha256=xmfJNhc7pIzxGV1d_atvw5Cg0Rsg5tFOpQGbYRMnFm4,2184 +stripe/params/issuing/_authorization_modify_params.py,sha256=pL-HOcxJq0pU6-fxO5TpfZQ9UzhGQQqOn0whXyf2Lfo,755 +stripe/params/issuing/_authorization_respond_params.py,sha256=61izNJ9ViYBa9oiW9aPUj51XtVoHp29al4-gFvEKR_0,519 +stripe/params/issuing/_authorization_retrieve_params.py,sha256=yx4RrxOCR9or8oYQwPMhtO8uUZF8Q4dCREodM-T3nmI,347 +stripe/params/issuing/_authorization_reverse_params.py,sha256=wqdX0GNKwQDx3CA0tMfX5hwgay6kExvFghNU5UkcGBc,652 +stripe/params/issuing/_authorization_update_params.py,sha256=VvQMG1c2suA00KQt2pNrDLTSfNz9khNobUtvUY5djPw,710 +stripe/params/issuing/_card_create_params.py,sha256=lCZAj40y7vOEVZwc4fIBWtpz5j_wZColLGg_4cdZk30,47974 +stripe/params/issuing/_card_deliver_card_params.py,sha256=E2Xyq8X37-dt-YsfcK4OfM5V-33SnhW9aiJhxdV8s48,341 +stripe/params/issuing/_card_fail_card_params.py,sha256=ql5q9pOB147J2Swfyu2BLOIu7tyPkx4VrcYHF0uL6cU,338 +stripe/params/issuing/_card_list_params.py,sha256=cKhQ8LiqzZDZ830SZnD1kdHQjLOQGMIvQFa5NTzJYJo,2546 +stripe/params/issuing/_card_modify_params.py,sha256=ylIQ-rfaqanK6HWNFJSiUE5-94H3rcfy0UQLvvFNg9s,46694 +stripe/params/issuing/_card_retrieve_params.py,sha256=rZSC0CMrQ0SYERpmfkWsmgjiK-D2jvOwQuj8v3jdYII,338 +stripe/params/issuing/_card_return_card_params.py,sha256=a6ewwFNjrKqunZMFtxX5ZUgcW9O6Akn4YLtrOvQPcyk,340 +stripe/params/issuing/_card_ship_card_params.py,sha256=XP3J7t6NUzokVBaXNfkqFcUWWEVFTd_xGqlLcIBZ0M4,338 +stripe/params/issuing/_card_submit_card_params.py,sha256=LDyfY1Uapj1fkcryyTKyzXWKSTnMfOjGtX1ZL64yUOs,340 +stripe/params/issuing/_card_update_params.py,sha256=XrtmlllgkAWR9CVd8FoDMPHW7iaqZGLNk2-bvWex6oc,46638 +stripe/params/issuing/_cardholder_create_params.py,sha256=cheLIILDVTlLv0QKwX5nzklKYn-2tsyyPz8DzaC_W8s,49534 +stripe/params/issuing/_cardholder_list_params.py,sha256=_DcXV6p7Fbk6VfB2PawHKCeZa46dRXNSDXfyViVoemQ,2321 +stripe/params/issuing/_cardholder_modify_params.py,sha256=3L60xLgdp8lo2sauSIxZ6m_YhWV17UTGZWSQ3VwK_wI,48949 +stripe/params/issuing/_cardholder_retrieve_params.py,sha256=xyl2v5Eg-JNgbspCJPpAfXLX_XwpxWTANy-P1izSt8A,344 +stripe/params/issuing/_cardholder_update_params.py,sha256=VOzN4rWgGj1FDEAN8EuLpS85YY7cwzVPbkS0-xomhts,48893 +stripe/params/issuing/_dispute_create_params.py,sha256=GCyZm5tXp0XP2i1kyBTIaf9Bc6nOGdi2BH5Moi9jF-o,10075 +stripe/params/issuing/_dispute_list_params.py,sha256=qfJEYorAjwbaAVLGQ3RVElYmr0Dj0egHemP-hdJUpkQ,2032 +stripe/params/issuing/_dispute_modify_params.py,sha256=-B4rUshh6ptxbK2AG_1L8TglApJ86qKBuIw5WkahhV4,9553 +stripe/params/issuing/_dispute_retrieve_params.py,sha256=U6qWnXvUiHpAu_znOqgES_ClDIlS57FwhN_UHuJBeis,341 +stripe/params/issuing/_dispute_submit_params.py,sha256=ELCrRT1Gur51oRkSOhzaoUf318uJVUPAUeZTfnJ3eaw,749 +stripe/params/issuing/_dispute_update_params.py,sha256=wKzuFcRi6TXo0DyvKDv41KrGU4O1Eh7ovz6f18QXGyE,9497 +stripe/params/issuing/_personalization_design_activate_params.py,sha256=m8cD7JhtB3gM64iBmsuWWdtD7X-7UnvdGOIZJtxKOTI,355 +stripe/params/issuing/_personalization_design_create_params.py,sha256=HtA31V5f1Blfuk75Z7hauBIzvDJvOFYL2p_I7Sw1z_s,2720 +stripe/params/issuing/_personalization_design_deactivate_params.py,sha256=uSa28-l7bQNSDaq6kykCc34SXQBtrw83-f-Qf_cuRmI,357 +stripe/params/issuing/_personalization_design_list_params.py,sha256=QhQ3VQhVaNV619oLi4k2ZwiTjhx4U7emjqzyRxX71_Q,2174 +stripe/params/issuing/_personalization_design_modify_params.py,sha256=U9aGuOX1JVTnqLNzY9TZ0899N2y19vmye-dZMheZD4Y,2855 +stripe/params/issuing/_personalization_design_reject_params.py,sha256=OaBM8u0MMNbLky_Af2_JhU3tzGXK17hv-f93wApva0I,1421 +stripe/params/issuing/_personalization_design_retrieve_params.py,sha256=Q6D5T4OLM4OzvfBj3DbhNGzInSxkAkT52o0WkQ0CMZM,355 +stripe/params/issuing/_personalization_design_update_params.py,sha256=_7np0VQFcm3iWdjzgyxJW5I0HgnzyRTJbUWZYM9-IKI,2799 +stripe/params/issuing/_physical_bundle_list_params.py,sha256=aN8ThiSG9MrnOVluGGcCKlFpKhl-MVkp1dR0r34YbBI,1473 +stripe/params/issuing/_physical_bundle_retrieve_params.py,sha256=G4VuutOrjxfvUTCWYAdKpO96nwS-Epwf2JAiMafQHn0,348 +stripe/params/issuing/_token_list_params.py,sha256=i8ZdVq7y5s5O1s0MWPIWwwrLqgtrlgEHgZAsLygCIcU,1975 +stripe/params/issuing/_token_modify_params.py,sha256=rat99SRmokrw1v9WgHhxOU0R9est3g-5GHW62vqDuyM,475 +stripe/params/issuing/_token_retrieve_params.py,sha256=V_pWkayXZORC7XHJTAEznECddoHvLo46K67uG7wOa7Y,339 +stripe/params/issuing/_token_update_params.py,sha256=tB7rgvbW3EN1ai1dN-rggSN2MyUKB4U6embrZ0A3Vhs,430 +stripe/params/issuing/_transaction_create_force_capture_params.py,sha256=Y5qouc3XeeUKNZm7LJ74kvD1UMT0JqTmHVC9fgki81s,22409 +stripe/params/issuing/_transaction_create_unlinked_refund_params.py,sha256=Vtsc3jKC5h1gnaUYLneHyDT53fcAI89EI3qJx7Mf5LM,22522 +stripe/params/issuing/_transaction_list_params.py,sha256=8X7JbuiGS5dq465hY3zCYB8vWhhU4kYsP1qU40l3Iuk,2135 +stripe/params/issuing/_transaction_modify_params.py,sha256=1ZXPSS_FlAs5kgMBXn4d4JeakGZTCHuU2gwKFnUZBlE,753 +stripe/params/issuing/_transaction_refund_params.py,sha256=b8N8Hl0gX9wKEz4sq1HeJGTYsuOgmMCXxa27vp2qifQ,600 +stripe/params/issuing/_transaction_retrieve_params.py,sha256=HU8W9BYiU7eUBNMsSbciuJ7ZuYzkg5QFFzzpPEtEOBI,345 +stripe/params/issuing/_transaction_update_params.py,sha256=ZxJNjs1vkmTUgwmL6eVyGuTfeBSCpw7UiVfas22z1ok,708 +stripe/params/radar/__init__.py,sha256=Gzibap6Mj0Xn6BPjC6qQcGvqibTrNc0mXs_7MSxh0eI,4179 +stripe/params/radar/__pycache__/__init__.cpython-312.pyc,, +stripe/params/radar/__pycache__/_early_fraud_warning_list_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_early_fraud_warning_retrieve_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_create_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_delete_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_item_create_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_item_delete_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_item_list_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_item_retrieve_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_list_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_modify_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_retrieve_params.cpython-312.pyc,, +stripe/params/radar/__pycache__/_value_list_update_params.cpython-312.pyc,, +stripe/params/radar/_early_fraud_warning_list_params.py,sha256=OeRut_DWg8d8oJBMz3H05rPSRMdiTykk_DUsIXeBZSI,2084 +stripe/params/radar/_early_fraud_warning_retrieve_params.py,sha256=TQX_-eQEZZCaibc2xlFBessZzlnLRBWtVJnxUGjmJPg,351 +stripe/params/radar/_value_list_create_params.py,sha256=o9M1swWOzxjeePlqLXAe-pO5SuRbIkoy2XRE71m7Nu8,1539 +stripe/params/radar/_value_list_delete_params.py,sha256=jmnYV6YeXbQh_SeceJpHiDgXbPKpZNlYyY6yWcnfPc0,170 +stripe/params/radar/_value_list_item_create_params.py,sha256=57RxmvI3aCDN4Kt47WzH9QrbBRCZdwhQL18WGMQuIho,575 +stripe/params/radar/_value_list_item_delete_params.py,sha256=1mRXC-P3CSXSCO5GEOKDfOUaB2es71MD1e8Y-9A0S58,174 +stripe/params/radar/_value_list_item_list_params.py,sha256=1kty3EjM5_XUcggp2AGMoSwGjeePgG3J_9rVLok2Bl0,2011 +stripe/params/radar/_value_list_item_retrieve_params.py,sha256=8I_8leUmA0xCjrc0yn31KZNwXk1jBd36QTX-pbgLAYw,347 +stripe/params/radar/_value_list_list_params.py,sha256=0ozWgP2CC1Ki9cs39qrpRpeiRu-EvPEw9Mj-jOjQWj8,1997 +stripe/params/radar/_value_list_modify_params.py,sha256=eQKf4pJTGkm7SgSMcKYUl20vL_y-Z2IE4Acrz7DpDv4,911 +stripe/params/radar/_value_list_retrieve_params.py,sha256=aoIf9IfQeC5ka3WHEmDpTOP2hzMrgSOQTVaQs3FNgsQ,343 +stripe/params/radar/_value_list_update_params.py,sha256=R-0Izk9LfHd012EtQKO66ddI5aOdxoCgb8C7ZqreFqQ,866 +stripe/params/reporting/__init__.py,sha256=WYMyePhWQZ2h-6OOpoqPQFW1e8rhcWMSxFT_nuaeyE8,2201 +stripe/params/reporting/__pycache__/__init__.cpython-312.pyc,, +stripe/params/reporting/__pycache__/_report_run_create_params.cpython-312.pyc,, +stripe/params/reporting/__pycache__/_report_run_list_params.cpython-312.pyc,, +stripe/params/reporting/__pycache__/_report_run_retrieve_params.cpython-312.pyc,, +stripe/params/reporting/__pycache__/_report_type_list_params.cpython-312.pyc,, +stripe/params/reporting/__pycache__/_report_type_retrieve_params.cpython-312.pyc,, +stripe/params/reporting/_report_run_create_params.py,sha256=pAF-gHX4gTFm8SKVjZozKesZNRx5dTSGvyNd0b-FTyc,21398 +stripe/params/reporting/_report_run_list_params.py,sha256=w-jV7N6oT1o8BJceG9OFh3QmCLvF7WYJslzCNsbRmnQ,1748 +stripe/params/reporting/_report_run_retrieve_params.py,sha256=EJKe9E7OkjrbUt_9umtMLiSQd6MiNy8aJrOpxeJEvLI,343 +stripe/params/reporting/_report_type_list_params.py,sha256=CAYA3o8yfgRoo9hCGKxmfaLSNGm8RZtQpO_gxCozE98,340 +stripe/params/reporting/_report_type_retrieve_params.py,sha256=Zo-_3VxPFZxKHzoj7KorDC3EiKymqqOOnnbzpoWumk0,344 +stripe/params/sigma/__init__.py,sha256=5wQpD4l5oIVvk0eBB4SkL21qJK7E98LKQaisuSONo4A,1144 +stripe/params/sigma/__pycache__/__init__.cpython-312.pyc,, +stripe/params/sigma/__pycache__/_scheduled_query_run_list_params.cpython-312.pyc,, +stripe/params/sigma/__pycache__/_scheduled_query_run_retrieve_params.cpython-312.pyc,, +stripe/params/sigma/_scheduled_query_run_list_params.py,sha256=GoVNn1lNtWWKMh-dTvU9UdxiOIL6HhJzc1x4iqijudc,1207 +stripe/params/sigma/_scheduled_query_run_retrieve_params.py,sha256=jVKs0X2lsyVQErnrjyxrElN6wm4CbwdrZA0T5sMGgAY,351 +stripe/params/tax/__init__.py,sha256=PUgj7s7nYUPdNNfJzNTXDjb0j5LivD1flW0MlRSF6dE,46067 +stripe/params/tax/__pycache__/__init__.cpython-312.pyc,, +stripe/params/tax/__pycache__/_calculation_create_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_calculation_line_item_list_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_calculation_list_line_items_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_calculation_retrieve_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_registration_create_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_registration_list_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_registration_modify_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_registration_retrieve_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_registration_update_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_settings_modify_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_settings_retrieve_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_settings_update_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_transaction_create_from_calculation_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_transaction_create_reversal_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_transaction_line_item_list_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_transaction_list_line_items_params.cpython-312.pyc,, +stripe/params/tax/__pycache__/_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/tax/_calculation_create_params.py,sha256=Dsh4c6et5BKvy9jm8hwOywmx5OcYYufORvAMz1CZSZM,10829 +stripe/params/tax/_calculation_line_item_list_params.py,sha256=J8uWWnBGMkdecE2ob1VF3aZCrbhdKLlfXhF2bC6Uxbc,1164 +stripe/params/tax/_calculation_list_line_items_params.py,sha256=H-K_ltmZPCbAVbtkUGaygkET5ELA0umoQVsiFrUR3mE,1210 +stripe/params/tax/_calculation_retrieve_params.py,sha256=ygUJmYMNrKnodnbujtWxr3iQZybuQ58BTcA4AgNHtUc,345 +stripe/params/tax/_registration_create_params.py,sha256=B3okygoZ8VhyG6Ihs4bwutZUU-o2lxtKhwXOkWGPPxg,54240 +stripe/params/tax/_registration_list_params.py,sha256=qgqsULWaPF65OJRT5YOwWfMzRBJSXOHf19kE7BiCrUw,1341 +stripe/params/tax/_registration_modify_params.py,sha256=QSmqkDarPCGhk12H6Xg-r0XjWxj139HWROxAbag_bbQ,889 +stripe/params/tax/_registration_retrieve_params.py,sha256=Y5f0YDwAKXqC5ud44MbZ1j5WBaeEbcfOtb58rqMuGGA,346 +stripe/params/tax/_registration_update_params.py,sha256=r8RRFaI_i0qazqoPXLG6ttDBXshrLnNsQLc4pLhWNi0,844 +stripe/params/tax/_settings_modify_params.py,sha256=K41p9YMVoNureIXYmoP37pUqW2WDgL7rT5yS12EOlJA,2149 +stripe/params/tax/_settings_retrieve_params.py,sha256=YdIld4AgBudHqvLZpgOL3aEeVJe9T3b3GyvxzAIvXs4,342 +stripe/params/tax/_settings_update_params.py,sha256=rhtr2t7YS9nfmP5Hfjtgls2tCrdAAXDp56KJpaD233U,2093 +stripe/params/tax/_transaction_create_from_calculation_params.py,sha256=tOPRvjs0_DFlum44rcxTCHPQ3gs7DTFNnkaBP8GzjKE,1374 +stripe/params/tax/_transaction_create_reversal_params.py,sha256=cvmy9R4zoUASq3rSsRgmCN3Stoqn7wuc03TWif32C8A,3318 +stripe/params/tax/_transaction_line_item_list_params.py,sha256=fpNtntxv2buikYi6LNU12dX5XiEGtYeblTVQ_RqIc2c,1164 +stripe/params/tax/_transaction_list_line_items_params.py,sha256=M8bH1D60KVsyyZRHpuZTAqong-L6zsrQSnRqEPfHeQk,1210 +stripe/params/tax/_transaction_retrieve_params.py,sha256=HU8W9BYiU7eUBNMsSbciuJ7ZuYzkg5QFFzzpPEtEOBI,345 +stripe/params/terminal/__init__.py,sha256=Ece5EBB3i_g_eg4VDUxuY3vI3BX_cEbk_YLbYXQ9Qbc,35555 +stripe/params/terminal/__pycache__/__init__.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_create_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_delete_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_list_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_modify_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_retrieve_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_configuration_update_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_connection_token_create_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_create_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_delete_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_list_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_modify_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_retrieve_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_location_update_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_cancel_action_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_collect_inputs_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_collect_payment_method_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_confirm_payment_intent_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_create_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_delete_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_list_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_modify_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_process_payment_intent_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_process_setup_intent_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_refund_payment_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_retrieve_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_set_reader_display_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_timeout_input_collection_params.cpython-312.pyc,, +stripe/params/terminal/__pycache__/_reader_update_params.cpython-312.pyc,, +stripe/params/terminal/_configuration_create_params.py,sha256=d3ewOjP4fs7WK81BuqByHH31RAPoeuXie2svraClQ6U,16856 +stripe/params/terminal/_configuration_delete_params.py,sha256=cvBxRUlikSQnwl4-xQjbvTsaup7_wsNY6IC6F6ScVUw,174 +stripe/params/terminal/_configuration_list_params.py,sha256=YtEszgSldUj2O3Xm3VbMbKfqhM0pWrUZwerwdGx9jdQ,1340 +stripe/params/terminal/_configuration_modify_params.py,sha256=JbogtwuIv87b-jStZQoRUFtefLldeIqR2H90iC8NfBM,16972 +stripe/params/terminal/_configuration_retrieve_params.py,sha256=P0bRU-nOhmWJ1rbu0m8J-k6tdLAIg2tSm3ypQknsaIE,347 +stripe/params/terminal/_configuration_update_params.py,sha256=czoiGJ8CP0sWdJYR8K_dpfi_HFlL-TgwozvadjTpK94,16916 +stripe/params/terminal/_connection_token_create_params.py,sha256=HKocFTEKmprMBPzMRIJWf7aUE31ZdDJ1dLbcDTUX-cQ,853 +stripe/params/terminal/_location_create_params.py,sha256=g2Zc4q6JXGNyqiLQ-EsEzhTanYDApro4J2ipnTZXfpY,3684 +stripe/params/terminal/_location_delete_params.py,sha256=pyMUwq4tWyahJSaNIlRZ3Fe9rLYX_D-kDE4ETakIh_w,169 +stripe/params/terminal/_location_list_params.py,sha256=nqSNXD83wGL8ghLNhyez6TaBr1HMItWaKnvjgOlNA-o,1198 +stripe/params/terminal/_location_modify_params.py,sha256=8Qciit7QxtzyvyDsQhuSHluL0nNAUp1LvlpcStW2xyw,3834 +stripe/params/terminal/_location_retrieve_params.py,sha256=6gZ4xnxy5_09DvSM1yBrAI5Nj9j2P9XWcjvKC4Vi-bg,342 +stripe/params/terminal/_location_update_params.py,sha256=JUldbdY9A7R6cSJUslGAlXF-xc94v363aVhrmimfudQ,3778 +stripe/params/terminal/_reader_cancel_action_params.py,sha256=dxZe1Uk2evLVDodCfPrnbVQRIL-EcBedo-oQtLL0p9w,344 +stripe/params/terminal/_reader_collect_inputs_params.py,sha256=wejBJQlqa51vb2wIk84YMzMzhs3rXWDsu9Ay1DPc-AY,3310 +stripe/params/terminal/_reader_collect_payment_method_params.py,sha256=MApVmagjacesYC0KP_VrcE9TW143VCs6PfyO44k0yuQ,1895 +stripe/params/terminal/_reader_confirm_payment_intent_params.py,sha256=eStJAj-PNccauWXEx_6ASnmgSMHEZaxh5NEP8r2Jff0,1007 +stripe/params/terminal/_reader_create_params.py,sha256=Va2SfCERSCTfIt7kABpnw3WA3_cP9n2zMvu1SdS-QU8,1121 +stripe/params/terminal/_reader_delete_params.py,sha256=M7MmC7SVLrCWsWigXYMY6RxKGdGdQR7AkBeQyfEsNe4,167 +stripe/params/terminal/_reader_list_params.py,sha256=1PYWpYvdD3vhqtksT0pU7ZZD7gntzUOpTvUm-weeF1s,1964 +stripe/params/terminal/_reader_modify_params.py,sha256=ymB5mWEPIYiATVuKk6LciUoXk4CNRW_1Meh-PC55nIg,839 +stripe/params/terminal/_reader_present_payment_method_params.py,sha256=LdOH-DnJRmGbiErm1_ormWPcT0bi0w3L2ZEy1IJt9d8,1744 +stripe/params/terminal/_reader_process_payment_intent_params.py,sha256=4oMIkz7ELKHIU5OqTaNfLdWyz6a6CfiRLrb8EhAM50s,2164 +stripe/params/terminal/_reader_process_setup_intent_params.py,sha256=sDt-AP5agnU9PViB97xPyqwv2c-Ke6oVrBPJCgYpu-s,1181 +stripe/params/terminal/_reader_refund_payment_params.py,sha256=aMtk_Wr1qL_40NL_0WLNKrhFoMi17K4j7NgvTzcWsLo,2195 +stripe/params/terminal/_reader_retrieve_params.py,sha256=j5qs8a7SBHPZW_qhy-yB84x9jPZS_Ueu8EqjM0ZvII0,340 +stripe/params/terminal/_reader_set_reader_display_params.py,sha256=nMZ2R07xvDj_QP7BuWdEOL317JEDOLaEdDsOlUL4nwY,1678 +stripe/params/terminal/_reader_succeed_input_collection_params.py,sha256=sqSTRji_epdvzRv-c2loKRNkP2t2_cnL6AzAZ9-HOIs,512 +stripe/params/terminal/_reader_timeout_input_collection_params.py,sha256=zctFe6Vbo_PFJblvmmp2sYBzPWkLN-HEQ4a0R08rqFU,354 +stripe/params/terminal/_reader_update_params.py,sha256=JLJmjZSaXey_A9cFBhvHxvQtUMHflIIP0oNvGPqnW6Y,794 +stripe/params/test_helpers/__init__.py,sha256=mmRkBUOlFYCoJlXMzvVNv92ZP4Qjlulw9JPUxNCVUs0,19721 +stripe/params/test_helpers/__pycache__/__init__.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_confirmation_token_create_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_refund_expire_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_test_clock_advance_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_test_clock_create_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_test_clock_delete_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_test_clock_list_params.cpython-312.pyc,, +stripe/params/test_helpers/__pycache__/_test_clock_retrieve_params.cpython-312.pyc,, +stripe/params/test_helpers/_confirmation_token_create_params.py,sha256=xgUDAamCuwydGoWU5pCatvjKcB0BZhLr78ZUT5C8UNs,28505 +stripe/params/test_helpers/_customer_fund_cash_balance_params.py,sha256=gobSGk3WS7bmBLXLOWngrcDj7Jk_QYChc4CU8rXZyKQ,1171 +stripe/params/test_helpers/_refund_expire_params.py,sha256=q8xl866pa936ZxVrOveyAasbzTneyG-OUiFUgqdr584,293 +stripe/params/test_helpers/_test_clock_advance_params.py,sha256=nxojKL95Siikf2nfN_cANrcF2Srp-E7qCK9Dw0HurlA,668 +stripe/params/test_helpers/_test_clock_create_params.py,sha256=mtMprKeNkqY2CcGDmpWeUzgjmxIQ-MqbIicG6Dyv-Ns,504 +stripe/params/test_helpers/_test_clock_delete_params.py,sha256=gAaT-ejDZQN2V7kdeK54Bcu8SQ36hSBKxqzW-XbaL5w,170 +stripe/params/test_helpers/_test_clock_list_params.py,sha256=TI2UgEwcauCECpMVuogCIQmRy-LF-7S3Lwxejm08qAQ,1199 +stripe/params/test_helpers/_test_clock_retrieve_params.py,sha256=x_izqVPlpNIvn3aZUGXilEFBosPLPNJ6llLWYrwa5sc,343 +stripe/params/test_helpers/issuing/__init__.py,sha256=GHgvQJQxZfMWk6pbeTweU0Z0TPbG69uPxMhzyf_XYSo,24228 +stripe/params/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_create_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_authorization_reverse_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_card_return_card_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc,, +stripe/params/test_helpers/issuing/_authorization_capture_params.py,sha256=msHusVZkyO8VfgydF3o6CPHkJyMjMPORUE9cjU9Huow,8358 +stripe/params/test_helpers/issuing/_authorization_create_params.py,sha256=NvOzmmpYWVY-23H2iFBIdqW1Jaez6mEAiEBqAmO-21w,26267 +stripe/params/test_helpers/issuing/_authorization_expire_params.py,sha256=ApPWznf-EimcevxdNAyY8TnXvSKP6Z4C3IPb2KflcSE,300 +stripe/params/test_helpers/issuing/_authorization_finalize_amount_params.py,sha256=MOFfAPkJxlsq5MFZjCBNJa4owB-LzQA-3_K9GDSzMfQ,5487 +stripe/params/test_helpers/issuing/_authorization_increment_params.py,sha256=RGlH9nJiAEXUREOvwwpjkKpgl2iP81WbsLsmkupztqc,780 +stripe/params/test_helpers/issuing/_authorization_respond_params.py,sha256=P5XJDdXMzamFiNYFxfp_wueZAU7ClJIdAHvEUKF180Q,474 +stripe/params/test_helpers/issuing/_authorization_reverse_params.py,sha256=1hz_O_z-NrcaufVf9P3Zw9Dr_J8cTudPw6WOJ0qTMXg,607 +stripe/params/test_helpers/issuing/_card_deliver_card_params.py,sha256=TXQ7sa1mg3s9G4I_-hmrRRmhqFGcwx_q8aC6JZK_Fr0,296 +stripe/params/test_helpers/issuing/_card_fail_card_params.py,sha256=lNTPC37hG7MHUdwTCcmEA6pxYGyoM76Xf-NPkRbDzBg,293 +stripe/params/test_helpers/issuing/_card_return_card_params.py,sha256=ltD3BT8YHhnRZxWSOCnnrBkADZM4EQbF8BMg-Kj3o28,295 +stripe/params/test_helpers/issuing/_card_ship_card_params.py,sha256=5bC1Kg5JcJFADY8JpKDX0QdTR1jNwR5aBdu9CLsk5D0,293 +stripe/params/test_helpers/issuing/_card_submit_card_params.py,sha256=a1VKzNgaX2Qo3TzpmxytpLVqhAI7kh79RKsc-1938vU,295 +stripe/params/test_helpers/issuing/_personalization_design_activate_params.py,sha256=og3EM2UEL7ukvPYYYLsH9V34_xTo4CbGZ_mZImtD_oY,310 +stripe/params/test_helpers/issuing/_personalization_design_deactivate_params.py,sha256=7bjrCfP3Ggd5VMhFehxk7pLua8DRBtUH1sPdWvgyWpg,312 +stripe/params/test_helpers/issuing/_personalization_design_reject_params.py,sha256=qDeMHXZFyQ3p2M9aPvwMENWni1mtK8aBfn7vkamHP4E,1365 +stripe/params/test_helpers/issuing/_transaction_create_force_capture_params.py,sha256=FHSvum-Z_HrcIqVYW2vA9-fJIDWBeJSpn6cOaA5xkRw,22353 +stripe/params/test_helpers/issuing/_transaction_create_unlinked_refund_params.py,sha256=Vlio34kjeCf7OfPVbUiDpy2rbal6twas3k_2hQWLUWE,22466 +stripe/params/test_helpers/issuing/_transaction_refund_params.py,sha256=mbV_LBS1Aw-RtL-TA5kqAF1Pp-ZcX_sQ18aMbkxtmmw,555 +stripe/params/test_helpers/terminal/__init__.py,sha256=GpyrJj_YwXj7xUC0OlEwa2Bh4qK0IWxDhSNGifgN-mI,2351 +stripe/params/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc,, +stripe/params/test_helpers/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc,, +stripe/params/test_helpers/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc,, +stripe/params/test_helpers/terminal/__pycache__/_reader_timeout_input_collection_params.cpython-312.pyc,, +stripe/params/test_helpers/terminal/_reader_present_payment_method_params.py,sha256=jlHbh4md5fMFPcBPxIeMLkpIjMF_YbgMNeffoWlf36I,1688 +stripe/params/test_helpers/terminal/_reader_succeed_input_collection_params.py,sha256=Z3tkl2DFNWwGJrP3skzoB6TdOp1A_t-C7J1yz67_K_c,467 +stripe/params/test_helpers/terminal/_reader_timeout_input_collection_params.py,sha256=VvH_zlWLU84PJQz4OTrZwewl5gQdjf5yp2UcJMQIZlc,309 +stripe/params/test_helpers/treasury/__init__.py,sha256=8CulHFbBeA_M4_ezZHAe0JgDcJV6xad-CllMkJWZeb8,8396 +stripe/params/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc,, +stripe/params/test_helpers/treasury/_inbound_transfer_fail_params.py,sha256=KDHIch_EuFzyUkJSEPg3AZwQU3YpN7H4VtV7Ladoj7s,1069 +stripe/params/test_helpers/treasury/_inbound_transfer_return_inbound_transfer_params.py,sha256=Ltg1GWfv-LRK85PBPkeqPvIaSSyiu_VXqhZrx47NxwA,317 +stripe/params/test_helpers/treasury/_inbound_transfer_succeed_params.py,sha256=TRL1v4pSTmcPFld9jfmDVMz2sTjbLWfnweGPj75TNrg,303 +stripe/params/test_helpers/treasury/_outbound_payment_fail_params.py,sha256=mSxtW9_o6xuYBBu4eN1IKwsFP581vav6wgMZdWLiZZg,300 +stripe/params/test_helpers/treasury/_outbound_payment_post_params.py,sha256=6THus-1m6WsClYn2IhpZo0CFJEzNOzn_Rnm7wbXHRtU,300 +stripe/params/test_helpers/treasury/_outbound_payment_return_outbound_payment_params.py,sha256=TJlZcRDIBLsFq0lXXMnuNgp3k7lYJDUQ2ywoe8XLugM,1027 +stripe/params/test_helpers/treasury/_outbound_payment_update_params.py,sha256=G5HhTQ8ihB6BjWvnZ2skLJtFBO4ZWVIkxTEOGpLDx1U,1494 +stripe/params/test_helpers/treasury/_outbound_transfer_fail_params.py,sha256=0LpUr0dmAZZsr6mpKKuYEZRxeKCdgw9eJFVRrGFhKjc,301 +stripe/params/test_helpers/treasury/_outbound_transfer_post_params.py,sha256=meq4KdfnOlCD9MPC7tKCJOIXwdiTehw6wdwM6m43_-w,301 +stripe/params/test_helpers/treasury/_outbound_transfer_return_outbound_transfer_params.py,sha256=h5JjAD2EDdMcZ5xuLLMTeCmhYHlxeoSVCXPiqr8oufE,1004 +stripe/params/test_helpers/treasury/_outbound_transfer_update_params.py,sha256=QkECEJwb_BnjrXTLNCnXXYrZjihvVo7KY8hfCPS5KY4,1501 +stripe/params/test_helpers/treasury/_received_credit_create_params.py,sha256=OeftUxtGRAHBNj6KGGtNa6EyBI_4U8NNgGaP5HaB3eQ,2016 +stripe/params/test_helpers/treasury/_received_debit_create_params.py,sha256=qdtbpInChCtFKDabGN8vYA7d5NJ9bbCTqkoJyyPORFs,1993 +stripe/params/treasury/__init__.py,sha256=Bm5mZrcAcEotQolKdeclV2JxW1o1EsQ-6PpEkUDvhXQ,43068 +stripe/params/treasury/__pycache__/__init__.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_credit_reversal_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_credit_reversal_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_credit_reversal_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_debit_reversal_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_debit_reversal_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_debit_reversal_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_close_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_features_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_features_update_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_modify_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_retrieve_features_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_update_features_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_financial_account_update_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_cancel_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_cancel_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_cancel_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_credit_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_credit_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_debit_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_received_debit_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_transaction_entry_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_transaction_entry_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_transaction_list_params.cpython-312.pyc,, +stripe/params/treasury/__pycache__/_transaction_retrieve_params.cpython-312.pyc,, +stripe/params/treasury/_credit_reversal_create_params.py,sha256=AaOTxcbI-pB2FpqfwudHEamDyUjPeQm8Z0o6-QSyjwM,809 +stripe/params/treasury/_credit_reversal_list_params.py,sha256=05c92N8RmH_87MVTRLpycGBM4g9nGAvJv9UzR-174nE,1565 +stripe/params/treasury/_credit_reversal_retrieve_params.py,sha256=S5JEPwkMRiomJkVTjFWTzcFBPA6nk-WVhwRmKJRJhsI,348 +stripe/params/treasury/_debit_reversal_create_params.py,sha256=4ZaBTmq0DaMx2yDzWRxecWFSGlw-kAooP3IVKIZfQ3s,806 +stripe/params/treasury/_debit_reversal_list_params.py,sha256=wJH3NQKnE6fI1Pnj_cHUXl-uBKiyuc9hzU2tQ1Muxfk,1686 +stripe/params/treasury/_debit_reversal_retrieve_params.py,sha256=yirWyk3-6M13Ygd6ht_NuzJ8MtbYxGUAkaHYkid5Rcs,347 +stripe/params/treasury/_financial_account_close_params.py,sha256=z5CPFHzcF54-ktm4g2-0ldBYtVpx9Zojgx6HfU49CHQ,1060 +stripe/params/treasury/_financial_account_create_params.py,sha256=d8jw1AuNw6UUDsygwk2FlXJXkCu7Us6tVLzIxbVSW9Q,6405 +stripe/params/treasury/_financial_account_features_retrieve_params.py,sha256=0hbAazwurNwuf1yHK1Vh4wJA_EHnAmLm3AfPdByZZYw,313 +stripe/params/treasury/_financial_account_features_update_params.py,sha256=MzOLknAUJ4YKe8PEYpAKxxZXCEpPIbA5D4JRh4Glg1o,4924 +stripe/params/treasury/_financial_account_list_params.py,sha256=THP88Pth_vj0jwId80dHf8Fjd6a7Eg5QHAneaPoX9gk,1367 +stripe/params/treasury/_financial_account_modify_params.py,sha256=mUtWEChJM4twt9wy-QOKfip38q2DTvvInEx9Ii5WqJU,7037 +stripe/params/treasury/_financial_account_retrieve_features_params.py,sha256=unYkAHGUpjos8g9hkksCEX5eLCGx43E-_si8KR9myUU,358 +stripe/params/treasury/_financial_account_retrieve_params.py,sha256=ogVuKhay7hpsQTWGabvR7E824zsV8UroxMtqVkvRivE,350 +stripe/params/treasury/_financial_account_update_features_params.py,sha256=guVoTgrw5aC6qH7qSPzTUHWnc4iQ1GmDZq9RpFdefq4,4980 +stripe/params/treasury/_financial_account_update_params.py,sha256=9WF6YSePXtdChoFPkTB42OP7GjHYusTqqosbYJcggx4,6981 +stripe/params/treasury/_inbound_transfer_cancel_params.py,sha256=GKePfpR1N_-IJh4xLliUrROZx0VKYxOD31UMav2CauE,347 +stripe/params/treasury/_inbound_transfer_create_params.py,sha256=zqj4sCDoEvJ2YTBJY5ZlIWBpTqhQm9iJx1uB-ubv64c,1504 +stripe/params/treasury/_inbound_transfer_fail_params.py,sha256=ERxRiIpGrrNaAgZvm9fhITog0a5HfgfNIF4YL_Mij7o,1125 +stripe/params/treasury/_inbound_transfer_list_params.py,sha256=Nwborg9xE60yIdJtw1u_Auf7apPq7BWjrI9wRB_Mdew,1540 +stripe/params/treasury/_inbound_transfer_retrieve_params.py,sha256=f-tkAwHefq_FSlIxYYI-ambDzPBKczJPH7Cg2LSONBk,349 +stripe/params/treasury/_inbound_transfer_return_inbound_transfer_params.py,sha256=z1Hp9A4EhTZTofQPWjV3CDrPcIYHzOwGoK0km88Gzrg,362 +stripe/params/treasury/_inbound_transfer_succeed_params.py,sha256=XXUU2jJHw4f5pN88wV1GM_r8TWh9R0AevC4SoijOMBY,348 +stripe/params/treasury/_outbound_payment_cancel_params.py,sha256=HMEdI67D0pnghwJjg4pVdcmWt5rO-PzHgp5iJdDTN5Y,347 +stripe/params/treasury/_outbound_payment_create_params.py,sha256=JsI0_VCxkqVvCgs-LFg4OTVGHVrVqJVdSiFSat2w59A,6952 +stripe/params/treasury/_outbound_payment_fail_params.py,sha256=FqvkMxGw5YePyP6nWwVMlt1Sh3aLXoFWpw-ry0a7c-s,345 +stripe/params/treasury/_outbound_payment_list_params.py,sha256=xLnpiETr-ze5UiN3L_MVg21Uhiyj62LbYa8Ilv9Vp7U,2228 +stripe/params/treasury/_outbound_payment_post_params.py,sha256=tKaMxKoYRVylKshTqxW4KSaMAPxTwCLSYzVVmL-FEC8,345 +stripe/params/treasury/_outbound_payment_retrieve_params.py,sha256=C5GZIwsONb8GEMblCcFE2nQYIzwvzKeTMCwI6ObCu4k,349 +stripe/params/treasury/_outbound_payment_return_outbound_payment_params.py,sha256=UaNFb0w14thtUS3YOl4G0e5VT3XMlRsWcjocWLRn7pw,1083 +stripe/params/treasury/_outbound_payment_update_params.py,sha256=nqOq8DhnjWCtYok0nhDAZ8cI3mRNd_tmyv_pPUF5Ajo,1550 +stripe/params/treasury/_outbound_transfer_cancel_params.py,sha256=OIFLucN1oLfyQJzX-Xy08c_YdvOIosSv1hvQ-rdBLQY,348 +stripe/params/treasury/_outbound_transfer_create_params.py,sha256=lrHrqW-z3NUnQr3Z5GwI-CmyqpgfDGIOfw43zyfwyso,3158 +stripe/params/treasury/_outbound_transfer_fail_params.py,sha256=QlQ2gagiPuvzge22bzP7qKHg_6_jAWQkNJZUrxItJQU,346 +stripe/params/treasury/_outbound_transfer_list_params.py,sha256=2Q_t-a71RReGPeV9LUY2xjwNT9jWzT_-ASlqquztW4s,1561 +stripe/params/treasury/_outbound_transfer_post_params.py,sha256=UdO1CfMd0E8UMmglIyEtrlUI5OG9Y_w34lucQUKuMbs,346 +stripe/params/treasury/_outbound_transfer_retrieve_params.py,sha256=kMQdYnh-itwF_mcyKOu4mgeYgz3oUcxRRvzJj7-Ujug,350 +stripe/params/treasury/_outbound_transfer_return_outbound_transfer_params.py,sha256=i9oL92wdOBx0drBuby4kG45YQ8QcHDPlll5eQ0wakGY,1060 +stripe/params/treasury/_outbound_transfer_update_params.py,sha256=ouX-kpvcDjn49QxpScvTVhWiztFwCGykPIArEN7qzV8,1557 +stripe/params/treasury/_received_credit_create_params.py,sha256=mzVzbFXG17CfdEm1_2giwgAWeAEDH2s4VgNcP-D6bGo,2072 +stripe/params/treasury/_received_credit_list_params.py,sha256=FEJ44ySsCwamCQmbQ5Qycg9JQ1EUcRMl9VqdU5L-PLE,1868 +stripe/params/treasury/_received_credit_retrieve_params.py,sha256=ZG6o1VgHz71qqUGjRGoJ2cx2qzZo3hvocaYwpuqmaj8,348 +stripe/params/treasury/_received_debit_create_params.py,sha256=81VCiVyazSkCQ2xtP_R6qr2JPvswSGBIJno47TqxuaY,2049 +stripe/params/treasury/_received_debit_list_params.py,sha256=W39g2AIEp2_dmI5e5hHmynXwZRe--9ic_V_5Tc09ZJI,1465 +stripe/params/treasury/_received_debit_retrieve_params.py,sha256=fI1wAvp6UehFr377HDUvma6-OqIGwn-t2uGlmN2W7VA,347 +stripe/params/treasury/_transaction_entry_list_params.py,sha256=PUZnQRCFIzPXqDkavXglY9Z7pJYkUBZ2TrC68qaf5R0,2664 +stripe/params/treasury/_transaction_entry_retrieve_params.py,sha256=mzNrHN6jkMG5EYwP-ZVJFowPd27MHkLOEXhSVs_8dbI,350 +stripe/params/treasury/_transaction_list_params.py,sha256=gOiYhM8n5lbOvHofzkIoI5NeI1mm1w8ws3Y1Yi1jusQ,3099 +stripe/params/treasury/_transaction_retrieve_params.py,sha256=HU8W9BYiU7eUBNMsSbciuJ7ZuYzkg5QFFzzpPEtEOBI,345 +stripe/params/v2/__init__.py,sha256=qI0qdrX-RR5wRf7e72iD_IwoYQIfEN03vAx7YmvpWuI,750 +stripe/params/v2/__pycache__/__init__.cpython-312.pyc,, +stripe/params/v2/billing/__init__.py,sha256=YuSkVai75_UQUxDqGk_aZ8Wk9N3EkYTY8DVLCpnE3RM,2162 +stripe/params/v2/billing/__pycache__/__init__.cpython-312.pyc,, +stripe/params/v2/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc,, +stripe/params/v2/billing/__pycache__/_meter_event_create_params.cpython-312.pyc,, +stripe/params/v2/billing/__pycache__/_meter_event_session_create_params.cpython-312.pyc,, +stripe/params/v2/billing/__pycache__/_meter_event_stream_create_params.cpython-312.pyc,, +stripe/params/v2/billing/_meter_event_adjustment_create_params.py,sha256=_oX2JxA7B-WyQihblYpuK7un4-HK57PttWqj-XrP9DQ,771 +stripe/params/v2/billing/_meter_event_create_params.py,sha256=B36L0QHFt9ZW-eatsrFcuriMEI2ne5USavFGc0y5vss,1164 +stripe/params/v2/billing/_meter_event_session_create_params.py,sha256=8R2z7Ng545-t8XPut9sKjEqqVzaQEGjBa8RMkUDEAu8,162 +stripe/params/v2/billing/_meter_event_stream_create_params.py,sha256=Rq24VWHVjJ7kJ6VVI4bqWBKAK_gGdScExuQeKhXlSPU,1391 +stripe/params/v2/core/__init__.py,sha256=ijUns949C2DETSdQC7ggBK1pkAKk0Ih1TeUqXZcPa18,3925 +stripe/params/v2/core/__pycache__/__init__.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_create_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_delete_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_disable_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_enable_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_list_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_ping_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_retrieve_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_destination_update_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_list_params.cpython-312.pyc,, +stripe/params/v2/core/__pycache__/_event_retrieve_params.cpython-312.pyc,, +stripe/params/v2/core/_event_destination_create_params.py,sha256=pK2lVrrZvPw4Itc2M_mxiGdWZeldF91DX6S5c0dJm5M,1871 +stripe/params/v2/core/_event_destination_delete_params.py,sha256=s5TTvU_lKfcZlI-Rsdxi_vt5FYB1Uf3cMBKntVvr45E,161 +stripe/params/v2/core/_event_destination_disable_params.py,sha256=symz5S1T7VtMVWS7ve1le2iQubGp5cOCj-3Dwu4BMxM,162 +stripe/params/v2/core/_event_destination_enable_params.py,sha256=68w0Qn7kAJPsGHyCa6A2H337afHI84v5iakYWn6xPjQ,161 +stripe/params/v2/core/_event_destination_list_params.py,sha256=6STnxFB0fr4-zjTvzQQtdJNgUD39gOrsvfKur4DIZj4,432 +stripe/params/v2/core/_event_destination_ping_params.py,sha256=82j1p9ncpt22Sh-ASdvZEdV7keSbXndlAsN0kmTZCHc,159 +stripe/params/v2/core/_event_destination_retrieve_params.py,sha256=nIL4zTzygG22vHkEWavuEI1cVvsJnzvr2oHy8N7UNl8,330 +stripe/params/v2/core/_event_destination_update_params.py,sha256=oYyTe3a5KQtANHKpQ6E7M_ddKZLqRk7P7bDkLX87ahE,1049 +stripe/params/v2/core/_event_list_params.py,sha256=Obqia_XJeOO9umNmemAos6qT_wO4ODDWiGHFmkVOTU4,882 +stripe/params/v2/core/_event_retrieve_params.py,sha256=lvbBN_D9JMPjiS8iUTySyca0qjGaZcLJHUsn8Jn_tKw,152 +stripe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +stripe/radar/__init__.py,sha256=ZB1D80QebYPSOCp1WNAB5GYOEKXm_GrSrjfzcNKg__U,1626 +stripe/radar/__pycache__/__init__.cpython-312.pyc,, +stripe/radar/__pycache__/_early_fraud_warning.cpython-312.pyc,, +stripe/radar/__pycache__/_early_fraud_warning_service.cpython-312.pyc,, +stripe/radar/__pycache__/_value_list.cpython-312.pyc,, +stripe/radar/__pycache__/_value_list_item.cpython-312.pyc,, +stripe/radar/__pycache__/_value_list_item_service.cpython-312.pyc,, +stripe/radar/__pycache__/_value_list_service.cpython-312.pyc,, +stripe/radar/_early_fraud_warning.py,sha256=McIAcym7MKkUqqBHSa3nIyzzT--vgfjk5ZnBIeeMtxg,4454 +stripe/radar/_early_fraud_warning_service.py,sha256=8LAcRovAvB-JY56jjLFpoDRE_oYMXvJpR_j9giGz9xk,3596 +stripe/radar/_value_list.py,sha256=Oy0NRBNFpz0T_xCOnvUr77w38Z1yFmT_0b2XzdhJfj0,10501 +stripe/radar/_value_list_item.py,sha256=EHqkpy1VfoX4ltuT48Jb4eNRz-2BwGLA4WnCQwU3SJI,7950 +stripe/radar/_value_list_item_service.py,sha256=N_HrTyiqeWemZjGbGZoV6nYbcmCTPoINmX8EBg1EgLg,5852 +stripe/radar/_value_list_service.py,sha256=CtmReQCeSUA7VqBF6_V35sSar821yxpTWECml6WONDA,7491 +stripe/reporting/__init__.py,sha256=h3mWU1F4gm1VbvjwzEc69rreSLLj5Jm76zmPm7fLWEg,1210 +stripe/reporting/__pycache__/__init__.cpython-312.pyc,, +stripe/reporting/__pycache__/_report_run.cpython-312.pyc,, +stripe/reporting/__pycache__/_report_run_service.cpython-312.pyc,, +stripe/reporting/__pycache__/_report_type.cpython-312.pyc,, +stripe/reporting/__pycache__/_report_type_service.cpython-312.pyc,, +stripe/reporting/_report_run.py,sha256=JySy34FXji9FC68lG6euR8n49Rft8seFMfPAfPIeRXE,7382 +stripe/reporting/_report_run_service.py,sha256=UUY30AhfJ7cI_OepvtI4xl6VCA4ETBjXi-1IsTaX6iU,4390 +stripe/reporting/_report_type.py,sha256=T7Nd2H6CuPFy-Wrm42a6yAGthGyKbT9Rfjy2tpA3BkU,4539 +stripe/reporting/_report_type_service.py,sha256=6qGx_C_o7Is7MYqoLwt1pKE_vwt-i5onUqbO-jKMMho,3218 +stripe/sigma/__init__.py,sha256=m5YvzbbDYa3xDTVqqJ54wYNXxey3nDym6-n9BIZ12hk,1002 +stripe/sigma/__pycache__/__init__.cpython-312.pyc,, +stripe/sigma/__pycache__/_scheduled_query_run.cpython-312.pyc,, +stripe/sigma/__pycache__/_scheduled_query_run_service.cpython-312.pyc,, +stripe/sigma/_scheduled_query_run.py,sha256=CgkMCKefV_ZOIWqYKMaM262EeFvslJcDJSQe-yTNMK8,4218 +stripe/sigma/_scheduled_query_run_service.py,sha256=CMUuFKhA1W0krwSpZ-i7AlRi8MX5j8BBBT5VV9XJNbA,3246 +stripe/tax/__init__.py,sha256=Wo9pTDi6j-Odm7DasA5CsD53dCFF_S1NyYp-11fKH0I,2595 +stripe/tax/__pycache__/__init__.cpython-312.pyc,, +stripe/tax/__pycache__/_calculation.cpython-312.pyc,, +stripe/tax/__pycache__/_calculation_line_item.cpython-312.pyc,, +stripe/tax/__pycache__/_calculation_line_item_service.cpython-312.pyc,, +stripe/tax/__pycache__/_calculation_service.cpython-312.pyc,, +stripe/tax/__pycache__/_registration.cpython-312.pyc,, +stripe/tax/__pycache__/_registration_service.cpython-312.pyc,, +stripe/tax/__pycache__/_settings.cpython-312.pyc,, +stripe/tax/__pycache__/_settings_service.cpython-312.pyc,, +stripe/tax/__pycache__/_transaction.cpython-312.pyc,, +stripe/tax/__pycache__/_transaction_line_item.cpython-312.pyc,, +stripe/tax/__pycache__/_transaction_line_item_service.cpython-312.pyc,, +stripe/tax/__pycache__/_transaction_service.cpython-312.pyc,, +stripe/tax/_calculation.py,sha256=JF-nDzMytBFR85Fo4-lmr3UM3mqx0zgnPm5EYLSgLS0,24422 +stripe/tax/_calculation_line_item.py,sha256=SyejVwOrSx1g20xTGqhNr6KCTTRzdoySMz1Esd_vBR4,5622 +stripe/tax/_calculation_line_item_service.py,sha256=LGNPKVudstgbm-XoSObaXN0e8X7qO-XFNLJ1q7plzCU,2086 +stripe/tax/_calculation_service.py,sha256=O15x2gIB4zVzn5FfxCvJZbqjfnO6aVti2oCSt5C6h-M,3850 +stripe/tax/_registration.py,sha256=l6JL8pQydUxLEP6b0wGfkJB4_AlsuCu6LnBZDvtsJvg,43314 +stripe/tax/_registration_service.py,sha256=OOgRhgIqTR51Z_B-37BMWwQ1nAqe_4abAK4UvzL03Fs,5505 +stripe/tax/_settings.py,sha256=UGi6xcbqsaabx9d3luazRLDOqwg3VocBXk6kYOvTTb8,5682 +stripe/tax/_settings_service.py,sha256=1uM_DwodfNKTZEwNFeCoAxiRkzE5FfHSS7nSAUm2k2A,2700 +stripe/tax/_transaction.py,sha256=5bA5eSnk8N9KB1XxYqP4GGXL5x80IJvXu9g9jf-02MI,22207 +stripe/tax/_transaction_line_item.py,sha256=gSL_dwemw9vetTjcYonnfMSel42JqkOn41-BPkLM3_I,2516 +stripe/tax/_transaction_line_item_service.py,sha256=4hW6n88rEsOQRLpYTeaNOcrPMztWdBSO7vpnbY56A9w,2050 +stripe/tax/_transaction_service.py,sha256=p0Vg5TgTfQSc6ZqoiJKC8uMH0A5qoEA-FraXMyd-qgk,5239 +stripe/terminal/__init__.py,sha256=33ndi9CGHC6AjGUVBCP0M8Juj7yi9SgPNvgfyBEIGSw,1867 +stripe/terminal/__pycache__/__init__.cpython-312.pyc,, +stripe/terminal/__pycache__/_configuration.cpython-312.pyc,, +stripe/terminal/__pycache__/_configuration_service.cpython-312.pyc,, +stripe/terminal/__pycache__/_connection_token.cpython-312.pyc,, +stripe/terminal/__pycache__/_connection_token_service.cpython-312.pyc,, +stripe/terminal/__pycache__/_location.cpython-312.pyc,, +stripe/terminal/__pycache__/_location_service.cpython-312.pyc,, +stripe/terminal/__pycache__/_reader.cpython-312.pyc,, +stripe/terminal/__pycache__/_reader_service.cpython-312.pyc,, +stripe/terminal/_configuration.py,sha256=9fH7gEeWniqjgVzk8Nc9zMYdoPkgc31DkTUfq_8S3Bs,24397 +stripe/terminal/_configuration_service.py,sha256=U5D5Jx0nLEtU2-1oCusmis5ULYXlIGSnOFqrhFC8cbo,7086 +stripe/terminal/_connection_token.py,sha256=4ExKYVd7gcz1ks16piDWtsgzAmW-YTo-3Ji_IZM2DHs,2500 +stripe/terminal/_connection_token_service.py,sha256=p3eYG__YL7w5aS07Nu1SFO5SNNr0Ubh-kCZ5Qt9zOBM,1918 +stripe/terminal/_location.py,sha256=hfU4Kt7PbWpDk0v7u-mxzpM2ZNOBRLG_cQmu71Ao44M,11220 +stripe/terminal/_location_service.py,sha256=Su33K5F6pNObOYfvG0PsbtoI0S7EXP-eN-XXszFxlIk,7182 +stripe/terminal/_reader.py,sha256=L2cNrKWldT1NHH9FDwd3Qnwcvl-PESJUzz8X_sNPr9o,77916 +stripe/terminal/_reader_service.py,sha256=GHpTJg5c6H5dMLBrL9g80A90juqY_apJC2LuF1tCrQg,20288 +stripe/test_helpers/__init__.py,sha256=G2a47cEewGwFWTTXAPF9cC2Cxt1EvU675pb40zOVnjA,2333 +stripe/test_helpers/__pycache__/__init__.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_confirmation_token_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_customer_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_issuing_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_refund_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_terminal_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_test_clock.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_test_clock_service.cpython-312.pyc,, +stripe/test_helpers/__pycache__/_treasury_service.cpython-312.pyc,, +stripe/test_helpers/_confirmation_token_service.py,sha256=OVTC4cZk77ZXyjlfl9e1-GtRMvyGo_I0ZNctqxxB_QM,1673 +stripe/test_helpers/_customer_service.py,sha256=xpfDVuK6lI9FXlhP88nB0-YsbtKPkWUee6_BlMGJ-co,1953 +stripe/test_helpers/_issuing_service.py,sha256=XOEng8NxzUFw8CK0-V_0N2tJ1JN_1NF-l6L2iRTcuS4,1824 +stripe/test_helpers/_refund_service.py,sha256=S3PXbAQ75Wcr5EslA3G9mAuQ6ZOZM93YG3YjN6-hpPQ,1727 +stripe/test_helpers/_terminal_service.py,sha256=lLtLTbALcNRWy4tdlx0mRKQD0APwYs2sEJRE2rXu3XA,999 +stripe/test_helpers/_test_clock.py,sha256=zL6orDiMWSxStMVx3r8uyna57zhy846Dt_oIBm8L13I,11702 +stripe/test_helpers/_test_clock_service.py,sha256=ESFz2a8I-JhskiUvBn3aSxTUW4dy3W24MupncaWKMPA,7022 +stripe/test_helpers/_treasury_service.py,sha256=x5w0cFJjjfHg7oJ6hSaUoST5vCPw1S_oMHWb-00UBng,2241 +stripe/test_helpers/issuing/__init__.py,sha256=nJFn7Vght3P4x_WvbHHnvglQFQpG1Ga7j3_z3gpwKt4,1524 +stripe/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc,, +stripe/test_helpers/issuing/__pycache__/_authorization_service.cpython-312.pyc,, +stripe/test_helpers/issuing/__pycache__/_card_service.cpython-312.pyc,, +stripe/test_helpers/issuing/__pycache__/_personalization_design_service.cpython-312.pyc,, +stripe/test_helpers/issuing/__pycache__/_transaction_service.cpython-312.pyc,, +stripe/test_helpers/issuing/_authorization_service.py,sha256=gZf3wi7Neypbhz4Bn_bj5purQBsRuxVJttg-OGNDdSA,10813 +stripe/test_helpers/issuing/_card_service.py,sha256=P6XxTpOPG1CwrAyTOl_i-fn6aDMF0cAXeeCjkntgRDQ,7690 +stripe/test_helpers/issuing/_personalization_design_service.py,sha256=kFtcYxYptkJnhuqWSaTNk09MGQ8MeMVKQUPVgZrT_ME,5636 +stripe/test_helpers/issuing/_transaction_service.py,sha256=hZ_vK0m4S1iJtPnKNVG-YSCKy5fjXvBrwRn3UO4t3Zc,4542 +stripe/test_helpers/terminal/__init__.py,sha256=ZJR_lnIVjiAfLfqU1lfTZ2QZqr6wUD9_ug-3ywLildc,775 +stripe/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc,, +stripe/test_helpers/terminal/__pycache__/_reader_service.cpython-312.pyc,, +stripe/test_helpers/terminal/_reader_service.py,sha256=F8RsnB1vrzipfD_h4rL6Qcx1Z1XTw3X5jPXv4bNxzvg,5241 +stripe/test_helpers/treasury/__init__.py,sha256=Xt8tP-oS4zQzWabMlYwC32aV8d7A0UINxOWpJy9Jw2w,1863 +stripe/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc,, +stripe/test_helpers/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc,, +stripe/test_helpers/treasury/__pycache__/_outbound_payment_service.cpython-312.pyc,, +stripe/test_helpers/treasury/__pycache__/_outbound_transfer_service.cpython-312.pyc,, +stripe/test_helpers/treasury/__pycache__/_received_credit_service.cpython-312.pyc,, +stripe/test_helpers/treasury/__pycache__/_received_debit_service.cpython-312.pyc,, +stripe/test_helpers/treasury/_inbound_transfer_service.py,sha256=L2dzSDWui9EsVh0fF8gnxoEeha674nEWMUqAgfO1yO8,5378 +stripe/test_helpers/treasury/_outbound_payment_service.py,sha256=SwtpCyqz97LlMQLxzFedholKKHPk_tv5r2WYdBBXwiA,6893 +stripe/test_helpers/treasury/_outbound_transfer_service.py,sha256=Os0Qwuphqbxc4TfE6yAUEtDr3Y-oXCHiIbUHE94vVWo,7482 +stripe/test_helpers/treasury/_received_credit_service.py,sha256=4QzNHHIi0qL7Cc_M2SYlSjw30Ne1RBkvQe03aMcO7To,1816 +stripe/test_helpers/treasury/_received_debit_service.py,sha256=2Jw3e3SOgyROK8B4RPME3ee_LBOX-zEFIMj-mozd9bE,1799 +stripe/treasury/__init__.py,sha256=jL3GUfPxbxFdW4ZXHqsOFdNxOtyqg_QIEgRDnDcy7bc,4933 +stripe/treasury/__pycache__/__init__.cpython-312.pyc,, +stripe/treasury/__pycache__/_credit_reversal.cpython-312.pyc,, +stripe/treasury/__pycache__/_credit_reversal_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_debit_reversal.cpython-312.pyc,, +stripe/treasury/__pycache__/_debit_reversal_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_financial_account.cpython-312.pyc,, +stripe/treasury/__pycache__/_financial_account_features.cpython-312.pyc,, +stripe/treasury/__pycache__/_financial_account_features_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_financial_account_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_inbound_transfer.cpython-312.pyc,, +stripe/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_outbound_payment.cpython-312.pyc,, +stripe/treasury/__pycache__/_outbound_payment_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_outbound_transfer.cpython-312.pyc,, +stripe/treasury/__pycache__/_outbound_transfer_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_received_credit.cpython-312.pyc,, +stripe/treasury/__pycache__/_received_credit_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_received_debit.cpython-312.pyc,, +stripe/treasury/__pycache__/_received_debit_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_transaction.cpython-312.pyc,, +stripe/treasury/__pycache__/_transaction_entry.cpython-312.pyc,, +stripe/treasury/__pycache__/_transaction_entry_service.cpython-312.pyc,, +stripe/treasury/__pycache__/_transaction_service.cpython-312.pyc,, +stripe/treasury/_credit_reversal.py,sha256=udpHaiZQd-o5omuYouDQgajvT_AvA1gTK4oGw4A5SKM,6181 +stripe/treasury/_credit_reversal_service.py,sha256=AJVdAz3klmesJsXKua3-NEMYQ_0z8h4EuVZGE-r-9X8,4535 +stripe/treasury/_debit_reversal.py,sha256=8Z-uQnNkiKaid_xWbX1QY-oDABO_BIPyOOwwCvpsz1Q,6229 +stripe/treasury/_debit_reversal_service.py,sha256=WD2gO6zTuEOKi8v3AFR53PVyq_ZwGyfgGOjnPkftNwI,4230 +stripe/treasury/_financial_account.py,sha256=Jk5F18YPM02RODKP3dtEb-MmJfDD4LPcDdMzo2qUKTY,24080 +stripe/treasury/_financial_account_features.py,sha256=oy89icMrc3uOBXN5CncMLn7COUnbh9GoiU6_ddsLtiM,18685 +stripe/treasury/_financial_account_features_service.py,sha256=otWdlNjqaUtnCG0ixDT0TvISyeLZHrifnMG2Qby7CeM,3718 +stripe/treasury/_financial_account_service.py,sha256=ApWDHKSbvYoAGNTBWFzmHCYMCxyECP99NQyOJQMe_h4,8639 +stripe/treasury/_inbound_transfer.py,sha256=2WgxvmEWjjf7MskVs53N1Uqg2Wrm8af7YzowlSvY1PA,29400 +stripe/treasury/_inbound_transfer_service.py,sha256=bpVecM98HYiP5y6Kwgc1HGXJ69_iXeWMHbZbvbww9L4,5728 +stripe/treasury/_outbound_payment.py,sha256=zBDqwxD46gmwzrgmuOrIe7aKFBw2It0T1pQh6nNqjUg,36352 +stripe/treasury/_outbound_payment_service.py,sha256=WtMSRFnf5e9uz8WOU_X2jHxj47tTU45Vl3rrLnG4qIg,5842 +stripe/treasury/_outbound_transfer.py,sha256=IYnpiNaGC_xDLj1DpUjzC_FVFY22YgCCjoIxqyMfCvA,37412 +stripe/treasury/_outbound_transfer_service.py,sha256=ATbdBicguNCm0Sfz9SgOT3yS_xNjz2i2MssUv1577wg,6237 +stripe/treasury/_received_credit.py,sha256=qjOTQh9kK7YPe_0ko2YGGlVNW-qFnquKxDkwH3v6M4c,15116 +stripe/treasury/_received_credit_service.py,sha256=cxprG29-JuulHgQF535W06pdHUXK_ffuUwyPyMG8bi4,3155 +stripe/treasury/_received_debit.py,sha256=9UCaiT8scJazbsQfkN7cQ8DH3lMLH2M4hwCg_7rknCE,11409 +stripe/treasury/_received_debit_service.py,sha256=w4KbNbXeLSq_EsqQTPwuj6-W2Q3gdF7MOcpuum7lYBA,3046 +stripe/treasury/_transaction.py,sha256=pSpmuc9MY4inwO2ZSa43yfrHxr8ZR98HzGYOQvALr8g,10383 +stripe/treasury/_transaction_entry.py,sha256=00HJcyLAmhKbX2TPY401rgwuxeM_AbCfQXS4prNz7JQ,10765 +stripe/treasury/_transaction_entry_service.py,sha256=Au4zIic3BOg1kDeDRO6ACXTJxz-iuXVFGav4qzfSR9g,3059 +stripe/treasury/_transaction_service.py,sha256=v88G4tX3a0_9b7wtH3nf_w6j8uNYEeYdMCR7cz3DDlw,2871 +stripe/v2/__init__.py,sha256=pLqctgZeTVkHt-Y1cc_gjEABtb0EA-R1cK7U6s5iU30,1315 +stripe/v2/__pycache__/__init__.cpython-312.pyc,, +stripe/v2/__pycache__/_amount.cpython-312.pyc,, +stripe/v2/__pycache__/_billing_service.cpython-312.pyc,, +stripe/v2/__pycache__/_core_service.cpython-312.pyc,, +stripe/v2/__pycache__/_deleted_object.cpython-312.pyc,, +stripe/v2/__pycache__/_list_object.cpython-312.pyc,, +stripe/v2/_amount.py,sha256=1vYvurH_SZEKTuaOsDN-8RDRCoqM2r0nlRo0WIhGPXw,256 +stripe/v2/_billing_service.py,sha256=0E-TIC7o3KLmvTskqG0mUd2hDxzUeVbUb1kwwYoGuWs,1885 +stripe/v2/_core_service.py,sha256=Pb9GUUqslqL31UT6b6MbBSJkmJ_HtexEg5jjyoh5ji0,1209 +stripe/v2/_deleted_object.py,sha256=dC-UbVWM6d6xNZ67w3JYcDTWndXDoxlYotgUNb6ikrc,429 +stripe/v2/_list_object.py,sha256=6Lktk6pH4V50wIVGvZrRRTuVORG7MG_VtmRo-b3wO-g,1751 +stripe/v2/billing/__init__.py,sha256=XO7FInT5q4fHtGWSm1_6ViO8gCDMFg2jxbsp0ryIZuQ,2071 +stripe/v2/billing/__pycache__/__init__.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_adjustment.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_service.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_session.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_session_service.cpython-312.pyc,, +stripe/v2/billing/__pycache__/_meter_event_stream_service.cpython-312.pyc,, +stripe/v2/billing/_meter_event.py,sha256=f9Nu9c6QwhEtaQt4Xe2fXPiQ_RQa8a4LpBAb1zSZyHE,1708 +stripe/v2/billing/_meter_event_adjustment.py,sha256=cCQ3_TSksDydjD23_fZknPXhlCsDlRuhoillcZIjHm0,1560 +stripe/v2/billing/_meter_event_adjustment_service.py,sha256=oGL11MSLR_SC-YT2VEwU5fOj4klLwVrPigdOjP4OwVc,1671 +stripe/v2/billing/_meter_event_service.py,sha256=wzIIyP2Fv5RUybqB4Nj6tK4WCNEarId4ekJwmCTddNw,1807 +stripe/v2/billing/_meter_event_session.py,sha256=Xt9140ViOZQqlSBPnwsFmpTAGInK_v_xorPDz2a-M1M,1054 +stripe/v2/billing/_meter_event_session_service.py,sha256=UjYp_HGNMJten--GsJQgNs-s35VKfgXzyfigqjhekE8,1952 +stripe/v2/billing/_meter_event_stream_service.py,sha256=zD5wNQ1zHUSjA9DMyOh7CG4YSioFTiS_v2ey2DRWe10,1664 +stripe/v2/core/__init__.py,sha256=rAZxg6u9lDGHkW69OrKxZ64JJf2mt_8wsJ1CphEIoM4,1493 +stripe/v2/core/__pycache__/__init__.cpython-312.pyc,, +stripe/v2/core/__pycache__/_event.cpython-312.pyc,, +stripe/v2/core/__pycache__/_event_destination.cpython-312.pyc,, +stripe/v2/core/__pycache__/_event_destination_service.cpython-312.pyc,, +stripe/v2/core/__pycache__/_event_service.cpython-312.pyc,, +stripe/v2/core/_event.py,sha256=cvR_sMu2iBYd6sxogTub89Rc8p14n08hDY2XCPApLd4,8123 +stripe/v2/core/_event_destination.py,sha256=YyK7qm0O_V_bDhLZmRY78cmIceWuacZAdPFib-aESnU,3819 +stripe/v2/core/_event_destination_service.py,sha256=T1oncjGQxJpGO_iRYQlmGe3ms4QxJ_FbjEtEjoXa-xU,10839 +stripe/v2/core/_event_service.py,sha256=xySRCNtgLRRXyOWz5cZAPLYJYLgZbubYK1lAdUamEbQ,2700 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/REQUESTED b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/REQUESTED new file mode 100644 index 00000000..e69de29b diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/WHEEL new file mode 100644 index 00000000..d8b9936d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.12.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/licenses/LICENSE b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/licenses/LICENSE new file mode 100644 index 00000000..f9ee781c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe-13.2.0.dist-info/licenses/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010-2018 Stripe (http://stripe.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/__init__.py new file mode 100644 index 00000000..643e1efb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/__init__.py @@ -0,0 +1,884 @@ +from typing_extensions import TYPE_CHECKING, Literal +from typing import Optional +import os +import warnings + +# Stripe Python bindings +# API docs at http://stripe.com/docs/api +# Authors: +# Patrick Collison +# Greg Brockman +# Andrew Metcalf + +# Configuration variables +from stripe._api_version import _ApiVersion + +from stripe._app_info import AppInfo as AppInfo +from stripe._version import VERSION as VERSION + +# Constants +DEFAULT_API_BASE: str = "https://api.stripe.com" +DEFAULT_CONNECT_API_BASE: str = "https://connect.stripe.com" +DEFAULT_UPLOAD_API_BASE: str = "https://files.stripe.com" +DEFAULT_METER_EVENTS_API_BASE: str = "https://meter-events.stripe.com" + + +api_key: Optional[str] = None +client_id: Optional[str] = None +api_base: str = DEFAULT_API_BASE +connect_api_base: str = DEFAULT_CONNECT_API_BASE +upload_api_base: str = DEFAULT_UPLOAD_API_BASE +meter_events_api_base: str = DEFAULT_METER_EVENTS_API_BASE +api_version: str = _ApiVersion.CURRENT +verify_ssl_certs: bool = True +proxy: Optional[str] = None +default_http_client: Optional["HTTPClient"] = None +app_info: Optional[AppInfo] = None +enable_telemetry: bool = True +max_network_retries: int = 2 +ca_bundle_path: str = os.path.join( + os.path.dirname(__file__), "data", "ca-certificates.crt" +) + +# Lazily initialized stripe.default_http_client +default_http_client = None +_default_proxy = None + +from stripe._http_client import ( + new_default_http_client as new_default_http_client, +) + + +def ensure_default_http_client(): + if default_http_client: + _warn_if_mismatched_proxy() + return + _init_default_http_client() + + +def _init_default_http_client(): + global _default_proxy + global default_http_client + + # If the stripe.default_http_client has not been set by the user + # yet, we'll set it here. This way, we aren't creating a new + # HttpClient for every request. + default_http_client = new_default_http_client( + verify_ssl_certs=verify_ssl_certs, proxy=proxy + ) + _default_proxy = proxy + + +def _warn_if_mismatched_proxy(): + global _default_proxy + from stripe import proxy + + if proxy != _default_proxy: + warnings.warn( + "stripe.proxy was updated after sending a " + "request - this is a no-op. To use a different proxy, " + "set stripe.default_http_client to a new client " + "configured with the proxy." + ) + + +# Set to either 'debug' or 'info', controls console logging +log: Optional[Literal["debug", "info"]] = None + + +# Sets some basic information about the running application that's sent along +# with API requests. Useful for plugin authors to identify their plugin when +# communicating with Stripe. +# +# Takes a name and optional version and plugin URL. +def set_app_info( + name: str, + partner_id: Optional[str] = None, + url: Optional[str] = None, + version: Optional[str] = None, +): + global app_info + app_info = { + "name": name, + "partner_id": partner_id, + "url": url, + "version": version, + } + + +# The beginning of the section generated from our OpenAPI spec +from importlib import import_module + +if TYPE_CHECKING: + from stripe import ( + apps as apps, + billing as billing, + billing_portal as billing_portal, + checkout as checkout, + climate as climate, + entitlements as entitlements, + events as events, + financial_connections as financial_connections, + forwarding as forwarding, + identity as identity, + issuing as issuing, + params as params, + radar as radar, + reporting as reporting, + sigma as sigma, + tax as tax, + terminal as terminal, + test_helpers as test_helpers, + treasury as treasury, + v2 as v2, + ) + from stripe._account import Account as Account + from stripe._account_capability_service import ( + AccountCapabilityService as AccountCapabilityService, + ) + from stripe._account_external_account_service import ( + AccountExternalAccountService as AccountExternalAccountService, + ) + from stripe._account_link import AccountLink as AccountLink + from stripe._account_link_service import ( + AccountLinkService as AccountLinkService, + ) + from stripe._account_login_link_service import ( + AccountLoginLinkService as AccountLoginLinkService, + ) + from stripe._account_person_service import ( + AccountPersonService as AccountPersonService, + ) + from stripe._account_service import AccountService as AccountService + from stripe._account_session import AccountSession as AccountSession + from stripe._account_session_service import ( + AccountSessionService as AccountSessionService, + ) + from stripe._api_mode import ApiMode as ApiMode + from stripe._api_resource import APIResource as APIResource + from stripe._apple_pay_domain import ApplePayDomain as ApplePayDomain + from stripe._apple_pay_domain_service import ( + ApplePayDomainService as ApplePayDomainService, + ) + from stripe._application import Application as Application + from stripe._application_fee import ApplicationFee as ApplicationFee + from stripe._application_fee_refund import ( + ApplicationFeeRefund as ApplicationFeeRefund, + ) + from stripe._application_fee_refund_service import ( + ApplicationFeeRefundService as ApplicationFeeRefundService, + ) + from stripe._application_fee_service import ( + ApplicationFeeService as ApplicationFeeService, + ) + from stripe._apps_service import AppsService as AppsService + from stripe._balance import Balance as Balance + from stripe._balance_service import BalanceService as BalanceService + from stripe._balance_settings import BalanceSettings as BalanceSettings + from stripe._balance_settings_service import ( + BalanceSettingsService as BalanceSettingsService, + ) + from stripe._balance_transaction import ( + BalanceTransaction as BalanceTransaction, + ) + from stripe._balance_transaction_service import ( + BalanceTransactionService as BalanceTransactionService, + ) + from stripe._bank_account import BankAccount as BankAccount + from stripe._base_address import BaseAddress as BaseAddress + from stripe._billing_portal_service import ( + BillingPortalService as BillingPortalService, + ) + from stripe._billing_service import BillingService as BillingService + from stripe._capability import Capability as Capability + from stripe._card import Card as Card + from stripe._cash_balance import CashBalance as CashBalance + from stripe._charge import Charge as Charge + from stripe._charge_service import ChargeService as ChargeService + from stripe._checkout_service import CheckoutService as CheckoutService + from stripe._climate_service import ClimateService as ClimateService + from stripe._confirmation_token import ( + ConfirmationToken as ConfirmationToken, + ) + from stripe._confirmation_token_service import ( + ConfirmationTokenService as ConfirmationTokenService, + ) + from stripe._connect_collection_transfer import ( + ConnectCollectionTransfer as ConnectCollectionTransfer, + ) + from stripe._country_spec import CountrySpec as CountrySpec + from stripe._country_spec_service import ( + CountrySpecService as CountrySpecService, + ) + from stripe._coupon import Coupon as Coupon + from stripe._coupon_service import CouponService as CouponService + from stripe._createable_api_resource import ( + CreateableAPIResource as CreateableAPIResource, + ) + from stripe._credit_note import CreditNote as CreditNote + from stripe._credit_note_line_item import ( + CreditNoteLineItem as CreditNoteLineItem, + ) + from stripe._credit_note_line_item_service import ( + CreditNoteLineItemService as CreditNoteLineItemService, + ) + from stripe._credit_note_preview_lines_service import ( + CreditNotePreviewLinesService as CreditNotePreviewLinesService, + ) + from stripe._credit_note_service import ( + CreditNoteService as CreditNoteService, + ) + from stripe._custom_method import custom_method as custom_method + from stripe._customer import Customer as Customer + from stripe._customer_balance_transaction import ( + CustomerBalanceTransaction as CustomerBalanceTransaction, + ) + from stripe._customer_balance_transaction_service import ( + CustomerBalanceTransactionService as CustomerBalanceTransactionService, + ) + from stripe._customer_cash_balance_service import ( + CustomerCashBalanceService as CustomerCashBalanceService, + ) + from stripe._customer_cash_balance_transaction import ( + CustomerCashBalanceTransaction as CustomerCashBalanceTransaction, + ) + from stripe._customer_cash_balance_transaction_service import ( + CustomerCashBalanceTransactionService as CustomerCashBalanceTransactionService, + ) + from stripe._customer_funding_instructions_service import ( + CustomerFundingInstructionsService as CustomerFundingInstructionsService, + ) + from stripe._customer_payment_method_service import ( + CustomerPaymentMethodService as CustomerPaymentMethodService, + ) + from stripe._customer_payment_source_service import ( + CustomerPaymentSourceService as CustomerPaymentSourceService, + ) + from stripe._customer_service import CustomerService as CustomerService + from stripe._customer_session import CustomerSession as CustomerSession + from stripe._customer_session_service import ( + CustomerSessionService as CustomerSessionService, + ) + from stripe._customer_tax_id_service import ( + CustomerTaxIdService as CustomerTaxIdService, + ) + from stripe._deletable_api_resource import ( + DeletableAPIResource as DeletableAPIResource, + ) + from stripe._discount import Discount as Discount + from stripe._dispute import Dispute as Dispute + from stripe._dispute_service import DisputeService as DisputeService + from stripe._entitlements_service import ( + EntitlementsService as EntitlementsService, + ) + from stripe._ephemeral_key import EphemeralKey as EphemeralKey + from stripe._ephemeral_key_service import ( + EphemeralKeyService as EphemeralKeyService, + ) + from stripe._error import ( + APIConnectionError as APIConnectionError, + APIError as APIError, + AuthenticationError as AuthenticationError, + CardError as CardError, + IdempotencyError as IdempotencyError, + InvalidRequestError as InvalidRequestError, + PermissionError as PermissionError, + RateLimitError as RateLimitError, + SignatureVerificationError as SignatureVerificationError, + StripeError as StripeError, + StripeErrorWithParamCode as StripeErrorWithParamCode, + TemporarySessionExpiredError as TemporarySessionExpiredError, + ) + from stripe._error_object import ( + ErrorObject as ErrorObject, + OAuthErrorObject as OAuthErrorObject, + ) + from stripe._event import Event as Event + from stripe._event_service import EventService as EventService + from stripe._exchange_rate import ExchangeRate as ExchangeRate + from stripe._exchange_rate_service import ( + ExchangeRateService as ExchangeRateService, + ) + from stripe._file import File as File + from stripe._file_link import FileLink as FileLink + from stripe._file_link_service import FileLinkService as FileLinkService + from stripe._file_service import FileService as FileService + from stripe._financial_connections_service import ( + FinancialConnectionsService as FinancialConnectionsService, + ) + from stripe._forwarding_service import ( + ForwardingService as ForwardingService, + ) + from stripe._funding_instructions import ( + FundingInstructions as FundingInstructions, + ) + from stripe._http_client import ( + AIOHTTPClient as AIOHTTPClient, + HTTPClient as HTTPClient, + HTTPXClient as HTTPXClient, + PycurlClient as PycurlClient, + RequestsClient as RequestsClient, + UrlFetchClient as UrlFetchClient, + UrllibClient as UrllibClient, + ) + from stripe._identity_service import IdentityService as IdentityService + from stripe._invoice import Invoice as Invoice + from stripe._invoice_item import InvoiceItem as InvoiceItem + from stripe._invoice_item_service import ( + InvoiceItemService as InvoiceItemService, + ) + from stripe._invoice_line_item import InvoiceLineItem as InvoiceLineItem + from stripe._invoice_line_item_service import ( + InvoiceLineItemService as InvoiceLineItemService, + ) + from stripe._invoice_payment import InvoicePayment as InvoicePayment + from stripe._invoice_payment_service import ( + InvoicePaymentService as InvoicePaymentService, + ) + from stripe._invoice_rendering_template import ( + InvoiceRenderingTemplate as InvoiceRenderingTemplate, + ) + from stripe._invoice_rendering_template_service import ( + InvoiceRenderingTemplateService as InvoiceRenderingTemplateService, + ) + from stripe._invoice_service import InvoiceService as InvoiceService + from stripe._issuing_service import IssuingService as IssuingService + from stripe._line_item import LineItem as LineItem + from stripe._list_object import ListObject as ListObject + from stripe._listable_api_resource import ( + ListableAPIResource as ListableAPIResource, + ) + from stripe._login_link import LoginLink as LoginLink + from stripe._mandate import Mandate as Mandate + from stripe._mandate_service import MandateService as MandateService + from stripe._nested_resource_class_methods import ( + nested_resource_class_methods as nested_resource_class_methods, + ) + from stripe._oauth import OAuth as OAuth + from stripe._oauth_service import OAuthService as OAuthService + from stripe._payment_attempt_record import ( + PaymentAttemptRecord as PaymentAttemptRecord, + ) + from stripe._payment_attempt_record_service import ( + PaymentAttemptRecordService as PaymentAttemptRecordService, + ) + from stripe._payment_intent import PaymentIntent as PaymentIntent + from stripe._payment_intent_amount_details_line_item import ( + PaymentIntentAmountDetailsLineItem as PaymentIntentAmountDetailsLineItem, + ) + from stripe._payment_intent_amount_details_line_item_service import ( + PaymentIntentAmountDetailsLineItemService as PaymentIntentAmountDetailsLineItemService, + ) + from stripe._payment_intent_service import ( + PaymentIntentService as PaymentIntentService, + ) + from stripe._payment_link import PaymentLink as PaymentLink + from stripe._payment_link_line_item_service import ( + PaymentLinkLineItemService as PaymentLinkLineItemService, + ) + from stripe._payment_link_service import ( + PaymentLinkService as PaymentLinkService, + ) + from stripe._payment_method import PaymentMethod as PaymentMethod + from stripe._payment_method_configuration import ( + PaymentMethodConfiguration as PaymentMethodConfiguration, + ) + from stripe._payment_method_configuration_service import ( + PaymentMethodConfigurationService as PaymentMethodConfigurationService, + ) + from stripe._payment_method_domain import ( + PaymentMethodDomain as PaymentMethodDomain, + ) + from stripe._payment_method_domain_service import ( + PaymentMethodDomainService as PaymentMethodDomainService, + ) + from stripe._payment_method_service import ( + PaymentMethodService as PaymentMethodService, + ) + from stripe._payment_record import PaymentRecord as PaymentRecord + from stripe._payment_record_service import ( + PaymentRecordService as PaymentRecordService, + ) + from stripe._payout import Payout as Payout + from stripe._payout_service import PayoutService as PayoutService + from stripe._person import Person as Person + from stripe._plan import Plan as Plan + from stripe._plan_service import PlanService as PlanService + from stripe._price import Price as Price + from stripe._price_service import PriceService as PriceService + from stripe._product import Product as Product + from stripe._product_feature import ProductFeature as ProductFeature + from stripe._product_feature_service import ( + ProductFeatureService as ProductFeatureService, + ) + from stripe._product_service import ProductService as ProductService + from stripe._promotion_code import PromotionCode as PromotionCode + from stripe._promotion_code_service import ( + PromotionCodeService as PromotionCodeService, + ) + from stripe._quote import Quote as Quote + from stripe._quote_computed_upfront_line_items_service import ( + QuoteComputedUpfrontLineItemsService as QuoteComputedUpfrontLineItemsService, + ) + from stripe._quote_line_item_service import ( + QuoteLineItemService as QuoteLineItemService, + ) + from stripe._quote_service import QuoteService as QuoteService + from stripe._radar_service import RadarService as RadarService + from stripe._refund import Refund as Refund + from stripe._refund_service import RefundService as RefundService + from stripe._reporting_service import ReportingService as ReportingService + from stripe._request_options import RequestOptions as RequestOptions + from stripe._requestor_options import RequestorOptions as RequestorOptions + from stripe._reserve_transaction import ( + ReserveTransaction as ReserveTransaction, + ) + from stripe._reversal import Reversal as Reversal + from stripe._review import Review as Review + from stripe._review_service import ReviewService as ReviewService + from stripe._search_result_object import ( + SearchResultObject as SearchResultObject, + ) + from stripe._searchable_api_resource import ( + SearchableAPIResource as SearchableAPIResource, + ) + from stripe._setup_attempt import SetupAttempt as SetupAttempt + from stripe._setup_attempt_service import ( + SetupAttemptService as SetupAttemptService, + ) + from stripe._setup_intent import SetupIntent as SetupIntent + from stripe._setup_intent_service import ( + SetupIntentService as SetupIntentService, + ) + from stripe._shipping_rate import ShippingRate as ShippingRate + from stripe._shipping_rate_service import ( + ShippingRateService as ShippingRateService, + ) + from stripe._sigma_service import SigmaService as SigmaService + from stripe._singleton_api_resource import ( + SingletonAPIResource as SingletonAPIResource, + ) + from stripe._source import Source as Source + from stripe._source_mandate_notification import ( + SourceMandateNotification as SourceMandateNotification, + ) + from stripe._source_service import SourceService as SourceService + from stripe._source_transaction import ( + SourceTransaction as SourceTransaction, + ) + from stripe._source_transaction_service import ( + SourceTransactionService as SourceTransactionService, + ) + from stripe._stripe_client import StripeClient as StripeClient + from stripe._stripe_context import StripeContext as StripeContext + from stripe._stripe_object import StripeObject as StripeObject + from stripe._stripe_response import ( + StripeResponse as StripeResponse, + StripeResponseBase as StripeResponseBase, + StripeStreamResponse as StripeStreamResponse, + StripeStreamResponseAsync as StripeStreamResponseAsync, + ) + from stripe._subscription import Subscription as Subscription + from stripe._subscription_item import SubscriptionItem as SubscriptionItem + from stripe._subscription_item_service import ( + SubscriptionItemService as SubscriptionItemService, + ) + from stripe._subscription_schedule import ( + SubscriptionSchedule as SubscriptionSchedule, + ) + from stripe._subscription_schedule_service import ( + SubscriptionScheduleService as SubscriptionScheduleService, + ) + from stripe._subscription_service import ( + SubscriptionService as SubscriptionService, + ) + from stripe._tax_code import TaxCode as TaxCode + from stripe._tax_code_service import TaxCodeService as TaxCodeService + from stripe._tax_deducted_at_source import ( + TaxDeductedAtSource as TaxDeductedAtSource, + ) + from stripe._tax_id import TaxId as TaxId + from stripe._tax_id_service import TaxIdService as TaxIdService + from stripe._tax_rate import TaxRate as TaxRate + from stripe._tax_rate_service import TaxRateService as TaxRateService + from stripe._tax_service import TaxService as TaxService + from stripe._terminal_service import TerminalService as TerminalService + from stripe._test_helpers import ( + APIResourceTestHelpers as APIResourceTestHelpers, + ) + from stripe._test_helpers_service import ( + TestHelpersService as TestHelpersService, + ) + from stripe._token import Token as Token + from stripe._token_service import TokenService as TokenService + from stripe._topup import Topup as Topup + from stripe._topup_service import TopupService as TopupService + from stripe._transfer import Transfer as Transfer + from stripe._transfer_reversal_service import ( + TransferReversalService as TransferReversalService, + ) + from stripe._transfer_service import TransferService as TransferService + from stripe._treasury_service import TreasuryService as TreasuryService + from stripe._updateable_api_resource import ( + UpdateableAPIResource as UpdateableAPIResource, + ) + from stripe._util import ( + convert_to_stripe_object as convert_to_stripe_object, + ) + from stripe._v1_services import V1Services as V1Services + from stripe._v2_services import V2Services as V2Services + from stripe._verify_mixin import VerifyMixin as VerifyMixin + from stripe._webhook import ( + Webhook as Webhook, + WebhookSignature as WebhookSignature, + ) + from stripe._webhook_endpoint import WebhookEndpoint as WebhookEndpoint + from stripe._webhook_endpoint_service import ( + WebhookEndpointService as WebhookEndpointService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "apps": ("stripe.apps", True), + "billing": ("stripe.billing", True), + "billing_portal": ("stripe.billing_portal", True), + "checkout": ("stripe.checkout", True), + "climate": ("stripe.climate", True), + "entitlements": ("stripe.entitlements", True), + "events": ("stripe.events", True), + "financial_connections": ("stripe.financial_connections", True), + "forwarding": ("stripe.forwarding", True), + "identity": ("stripe.identity", True), + "issuing": ("stripe.issuing", True), + "params": ("stripe.params", True), + "radar": ("stripe.radar", True), + "reporting": ("stripe.reporting", True), + "sigma": ("stripe.sigma", True), + "tax": ("stripe.tax", True), + "terminal": ("stripe.terminal", True), + "test_helpers": ("stripe.test_helpers", True), + "treasury": ("stripe.treasury", True), + "v2": ("stripe.v2", True), + "Account": ("stripe._account", False), + "AccountCapabilityService": ("stripe._account_capability_service", False), + "AccountExternalAccountService": ( + "stripe._account_external_account_service", + False, + ), + "AccountLink": ("stripe._account_link", False), + "AccountLinkService": ("stripe._account_link_service", False), + "AccountLoginLinkService": ("stripe._account_login_link_service", False), + "AccountPersonService": ("stripe._account_person_service", False), + "AccountService": ("stripe._account_service", False), + "AccountSession": ("stripe._account_session", False), + "AccountSessionService": ("stripe._account_session_service", False), + "ApiMode": ("stripe._api_mode", False), + "APIResource": ("stripe._api_resource", False), + "ApplePayDomain": ("stripe._apple_pay_domain", False), + "ApplePayDomainService": ("stripe._apple_pay_domain_service", False), + "Application": ("stripe._application", False), + "ApplicationFee": ("stripe._application_fee", False), + "ApplicationFeeRefund": ("stripe._application_fee_refund", False), + "ApplicationFeeRefundService": ( + "stripe._application_fee_refund_service", + False, + ), + "ApplicationFeeService": ("stripe._application_fee_service", False), + "AppsService": ("stripe._apps_service", False), + "Balance": ("stripe._balance", False), + "BalanceService": ("stripe._balance_service", False), + "BalanceSettings": ("stripe._balance_settings", False), + "BalanceSettingsService": ("stripe._balance_settings_service", False), + "BalanceTransaction": ("stripe._balance_transaction", False), + "BalanceTransactionService": ( + "stripe._balance_transaction_service", + False, + ), + "BankAccount": ("stripe._bank_account", False), + "BaseAddress": ("stripe._base_address", False), + "BillingPortalService": ("stripe._billing_portal_service", False), + "BillingService": ("stripe._billing_service", False), + "Capability": ("stripe._capability", False), + "Card": ("stripe._card", False), + "CashBalance": ("stripe._cash_balance", False), + "Charge": ("stripe._charge", False), + "ChargeService": ("stripe._charge_service", False), + "CheckoutService": ("stripe._checkout_service", False), + "ClimateService": ("stripe._climate_service", False), + "ConfirmationToken": ("stripe._confirmation_token", False), + "ConfirmationTokenService": ("stripe._confirmation_token_service", False), + "ConnectCollectionTransfer": ( + "stripe._connect_collection_transfer", + False, + ), + "CountrySpec": ("stripe._country_spec", False), + "CountrySpecService": ("stripe._country_spec_service", False), + "Coupon": ("stripe._coupon", False), + "CouponService": ("stripe._coupon_service", False), + "CreateableAPIResource": ("stripe._createable_api_resource", False), + "CreditNote": ("stripe._credit_note", False), + "CreditNoteLineItem": ("stripe._credit_note_line_item", False), + "CreditNoteLineItemService": ( + "stripe._credit_note_line_item_service", + False, + ), + "CreditNotePreviewLinesService": ( + "stripe._credit_note_preview_lines_service", + False, + ), + "CreditNoteService": ("stripe._credit_note_service", False), + "custom_method": ("stripe._custom_method", False), + "Customer": ("stripe._customer", False), + "CustomerBalanceTransaction": ( + "stripe._customer_balance_transaction", + False, + ), + "CustomerBalanceTransactionService": ( + "stripe._customer_balance_transaction_service", + False, + ), + "CustomerCashBalanceService": ( + "stripe._customer_cash_balance_service", + False, + ), + "CustomerCashBalanceTransaction": ( + "stripe._customer_cash_balance_transaction", + False, + ), + "CustomerCashBalanceTransactionService": ( + "stripe._customer_cash_balance_transaction_service", + False, + ), + "CustomerFundingInstructionsService": ( + "stripe._customer_funding_instructions_service", + False, + ), + "CustomerPaymentMethodService": ( + "stripe._customer_payment_method_service", + False, + ), + "CustomerPaymentSourceService": ( + "stripe._customer_payment_source_service", + False, + ), + "CustomerService": ("stripe._customer_service", False), + "CustomerSession": ("stripe._customer_session", False), + "CustomerSessionService": ("stripe._customer_session_service", False), + "CustomerTaxIdService": ("stripe._customer_tax_id_service", False), + "DeletableAPIResource": ("stripe._deletable_api_resource", False), + "Discount": ("stripe._discount", False), + "Dispute": ("stripe._dispute", False), + "DisputeService": ("stripe._dispute_service", False), + "EntitlementsService": ("stripe._entitlements_service", False), + "EphemeralKey": ("stripe._ephemeral_key", False), + "EphemeralKeyService": ("stripe._ephemeral_key_service", False), + "APIConnectionError": ("stripe._error", False), + "APIError": ("stripe._error", False), + "AuthenticationError": ("stripe._error", False), + "CardError": ("stripe._error", False), + "IdempotencyError": ("stripe._error", False), + "InvalidRequestError": ("stripe._error", False), + "PermissionError": ("stripe._error", False), + "RateLimitError": ("stripe._error", False), + "SignatureVerificationError": ("stripe._error", False), + "StripeError": ("stripe._error", False), + "StripeErrorWithParamCode": ("stripe._error", False), + "TemporarySessionExpiredError": ("stripe._error", False), + "ErrorObject": ("stripe._error_object", False), + "OAuthErrorObject": ("stripe._error_object", False), + "Event": ("stripe._event", False), + "EventService": ("stripe._event_service", False), + "ExchangeRate": ("stripe._exchange_rate", False), + "ExchangeRateService": ("stripe._exchange_rate_service", False), + "File": ("stripe._file", False), + "FileLink": ("stripe._file_link", False), + "FileLinkService": ("stripe._file_link_service", False), + "FileService": ("stripe._file_service", False), + "FinancialConnectionsService": ( + "stripe._financial_connections_service", + False, + ), + "ForwardingService": ("stripe._forwarding_service", False), + "FundingInstructions": ("stripe._funding_instructions", False), + "AIOHTTPClient": ("stripe._http_client", False), + "HTTPClient": ("stripe._http_client", False), + "HTTPXClient": ("stripe._http_client", False), + "PycurlClient": ("stripe._http_client", False), + "RequestsClient": ("stripe._http_client", False), + "UrlFetchClient": ("stripe._http_client", False), + "UrllibClient": ("stripe._http_client", False), + "IdentityService": ("stripe._identity_service", False), + "Invoice": ("stripe._invoice", False), + "InvoiceItem": ("stripe._invoice_item", False), + "InvoiceItemService": ("stripe._invoice_item_service", False), + "InvoiceLineItem": ("stripe._invoice_line_item", False), + "InvoiceLineItemService": ("stripe._invoice_line_item_service", False), + "InvoicePayment": ("stripe._invoice_payment", False), + "InvoicePaymentService": ("stripe._invoice_payment_service", False), + "InvoiceRenderingTemplate": ("stripe._invoice_rendering_template", False), + "InvoiceRenderingTemplateService": ( + "stripe._invoice_rendering_template_service", + False, + ), + "InvoiceService": ("stripe._invoice_service", False), + "IssuingService": ("stripe._issuing_service", False), + "LineItem": ("stripe._line_item", False), + "ListObject": ("stripe._list_object", False), + "ListableAPIResource": ("stripe._listable_api_resource", False), + "LoginLink": ("stripe._login_link", False), + "Mandate": ("stripe._mandate", False), + "MandateService": ("stripe._mandate_service", False), + "nested_resource_class_methods": ( + "stripe._nested_resource_class_methods", + False, + ), + "OAuth": ("stripe._oauth", False), + "OAuthService": ("stripe._oauth_service", False), + "PaymentAttemptRecord": ("stripe._payment_attempt_record", False), + "PaymentAttemptRecordService": ( + "stripe._payment_attempt_record_service", + False, + ), + "PaymentIntent": ("stripe._payment_intent", False), + "PaymentIntentAmountDetailsLineItem": ( + "stripe._payment_intent_amount_details_line_item", + False, + ), + "PaymentIntentAmountDetailsLineItemService": ( + "stripe._payment_intent_amount_details_line_item_service", + False, + ), + "PaymentIntentService": ("stripe._payment_intent_service", False), + "PaymentLink": ("stripe._payment_link", False), + "PaymentLinkLineItemService": ( + "stripe._payment_link_line_item_service", + False, + ), + "PaymentLinkService": ("stripe._payment_link_service", False), + "PaymentMethod": ("stripe._payment_method", False), + "PaymentMethodConfiguration": ( + "stripe._payment_method_configuration", + False, + ), + "PaymentMethodConfigurationService": ( + "stripe._payment_method_configuration_service", + False, + ), + "PaymentMethodDomain": ("stripe._payment_method_domain", False), + "PaymentMethodDomainService": ( + "stripe._payment_method_domain_service", + False, + ), + "PaymentMethodService": ("stripe._payment_method_service", False), + "PaymentRecord": ("stripe._payment_record", False), + "PaymentRecordService": ("stripe._payment_record_service", False), + "Payout": ("stripe._payout", False), + "PayoutService": ("stripe._payout_service", False), + "Person": ("stripe._person", False), + "Plan": ("stripe._plan", False), + "PlanService": ("stripe._plan_service", False), + "Price": ("stripe._price", False), + "PriceService": ("stripe._price_service", False), + "Product": ("stripe._product", False), + "ProductFeature": ("stripe._product_feature", False), + "ProductFeatureService": ("stripe._product_feature_service", False), + "ProductService": ("stripe._product_service", False), + "PromotionCode": ("stripe._promotion_code", False), + "PromotionCodeService": ("stripe._promotion_code_service", False), + "Quote": ("stripe._quote", False), + "QuoteComputedUpfrontLineItemsService": ( + "stripe._quote_computed_upfront_line_items_service", + False, + ), + "QuoteLineItemService": ("stripe._quote_line_item_service", False), + "QuoteService": ("stripe._quote_service", False), + "RadarService": ("stripe._radar_service", False), + "Refund": ("stripe._refund", False), + "RefundService": ("stripe._refund_service", False), + "ReportingService": ("stripe._reporting_service", False), + "RequestOptions": ("stripe._request_options", False), + "RequestorOptions": ("stripe._requestor_options", False), + "ReserveTransaction": ("stripe._reserve_transaction", False), + "Reversal": ("stripe._reversal", False), + "Review": ("stripe._review", False), + "ReviewService": ("stripe._review_service", False), + "SearchResultObject": ("stripe._search_result_object", False), + "SearchableAPIResource": ("stripe._searchable_api_resource", False), + "SetupAttempt": ("stripe._setup_attempt", False), + "SetupAttemptService": ("stripe._setup_attempt_service", False), + "SetupIntent": ("stripe._setup_intent", False), + "SetupIntentService": ("stripe._setup_intent_service", False), + "ShippingRate": ("stripe._shipping_rate", False), + "ShippingRateService": ("stripe._shipping_rate_service", False), + "SigmaService": ("stripe._sigma_service", False), + "SingletonAPIResource": ("stripe._singleton_api_resource", False), + "Source": ("stripe._source", False), + "SourceMandateNotification": ( + "stripe._source_mandate_notification", + False, + ), + "SourceService": ("stripe._source_service", False), + "SourceTransaction": ("stripe._source_transaction", False), + "SourceTransactionService": ("stripe._source_transaction_service", False), + "StripeClient": ("stripe._stripe_client", False), + "StripeContext": ("stripe._stripe_context", False), + "StripeObject": ("stripe._stripe_object", False), + "StripeResponse": ("stripe._stripe_response", False), + "StripeResponseBase": ("stripe._stripe_response", False), + "StripeStreamResponse": ("stripe._stripe_response", False), + "StripeStreamResponseAsync": ("stripe._stripe_response", False), + "Subscription": ("stripe._subscription", False), + "SubscriptionItem": ("stripe._subscription_item", False), + "SubscriptionItemService": ("stripe._subscription_item_service", False), + "SubscriptionSchedule": ("stripe._subscription_schedule", False), + "SubscriptionScheduleService": ( + "stripe._subscription_schedule_service", + False, + ), + "SubscriptionService": ("stripe._subscription_service", False), + "TaxCode": ("stripe._tax_code", False), + "TaxCodeService": ("stripe._tax_code_service", False), + "TaxDeductedAtSource": ("stripe._tax_deducted_at_source", False), + "TaxId": ("stripe._tax_id", False), + "TaxIdService": ("stripe._tax_id_service", False), + "TaxRate": ("stripe._tax_rate", False), + "TaxRateService": ("stripe._tax_rate_service", False), + "TaxService": ("stripe._tax_service", False), + "TerminalService": ("stripe._terminal_service", False), + "APIResourceTestHelpers": ("stripe._test_helpers", False), + "TestHelpersService": ("stripe._test_helpers_service", False), + "Token": ("stripe._token", False), + "TokenService": ("stripe._token_service", False), + "Topup": ("stripe._topup", False), + "TopupService": ("stripe._topup_service", False), + "Transfer": ("stripe._transfer", False), + "TransferReversalService": ("stripe._transfer_reversal_service", False), + "TransferService": ("stripe._transfer_service", False), + "TreasuryService": ("stripe._treasury_service", False), + "UpdateableAPIResource": ("stripe._updateable_api_resource", False), + "convert_to_stripe_object": ("stripe._util", False), + "V1Services": ("stripe._v1_services", False), + "V2Services": ("stripe._v2_services", False), + "VerifyMixin": ("stripe._verify_mixin", False), + "Webhook": ("stripe._webhook", False), + "WebhookSignature": ("stripe._webhook", False), + "WebhookEndpoint": ("stripe._webhook_endpoint", False), + "WebhookEndpointService": ("stripe._webhook_endpoint_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() + +# The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16b8aef989cae73abe0239c21445062174f530c5 GIT binary patch literal 33748 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 W`JSAJyXyIrp#JLmJ%Ud@`@aBDhLyDd literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_external_account_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_external_account_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..647245fdb3400987ed06ff307e95e3d29623424e GIT binary patch literal 7810 zcmeGhOKcm*b(VjwNQ#tX$(F5TqsWfsSfoF7?703(@~=%S8*x)0Gz?<3JCfGk4>P-z zBga95Bq&;-Knnz@kIkWn8cuIL6lhT(*Y*;j1uPH|+Mt)VCkC|JLZ`krvrAGECDFBu zCTI!p?VFi5Z)V?b-kbehIxQ3UxqlxtcJ3zR&)5ilQ6H)Q7LdC{C%R-3ODakd;vq9+ zg^OX1hs}r;Ek>LJw(HL82%9&(W5(nRF44` z=U75d&d9p_0oYH+)LlRwYeSuC%R3F!@s6o8K%Hnq-QAXV7O0aQQ|EwMZlOkb^sM9C zJCo4+fU>J2%56ZI0x1u2DM$4FHL^|U13;19lwvzjWEP~+ozt<*Q)fl5*h1o0Hxv5-h@sj-t`p9)Hh%RV2Dfpv@*1refF7d#I z#7~#*kQ=`527UO{Lwfi|D+hnjiw9J9r29UXmcCHX_i^NYNKoq0JK;N#k7M_JZbAQ5 zG8$j`rmXls;d6?rxMivtGX~Wa>ie$Zi$s}m7!b@F^VAOd@(l(I)m)9~+;>;T3iAgG z{yewvwvWA22zZv7V}}0Dy%6hz*=!rK2&-k|Ubvc?R$W?Bb)8YyW&Joj0N`GP#gHmd zVj|{LW3Vkt^;iT)qt%E@&6y^<=1dm_z~6SIQkZirT9~!pDx9V6P0uM8E;=4H$0i)- zreV((CRFVvwe3qR7rVHf-Z_cp~=MNq#xQ0i^%0QsbQn%pp2wMo=r?mD3ORfmM z`SJqW1sk}%L8S5xFfZh%0HynF0Pm8AeI(nrl-jeD%Kq@u_b)AFw=ZQ+Kggb6%%1;j z*9$+3|9;nj&jyA+I`rXpYEhEAAk|4Y*HcT7XP#dg7+Tu?Y%NF9gLRTjXX?>ZR<4m$ zQmzAMvd%!?htB#>0lY$_|FV(3PxScP;1)j)-3@;?8YNAmJxYF%_<8u2G@4*LVXNHg zxM0~3HlIQ8ECL0Cej8I@!|?uXwVi-S&Xa`Odp6f} zKz9W=ZRDKWp4>Uv-gfHysySx?#f?V-JAj~#MyA+49BJo(nLyOO3-0esF@kyyxNho% zkFTT6oRE#-TVw%z6b$SbB zsyH*?uG3H-G^R{b)3Ima1XVnzv5Kl_j%`Dw06B$!>?^9RD;qUspl$&r>J5t zI-OA~rpFTw14gt8W7O6b^2%k{DqFQ?V;LP@z%X4!WmK^pPocWusnaG^rWX{Qy2h-X zmm9=yI2A=xZN;%+^$O4aS8;WfTXT@*T=Vyvhd1z;W15uZG4C)KwW#ftH0;u_hEfbz zxm-34O~vMZm~UuvieYPJ1y)y1sLC9pGbe`&zAy?}#q}I(%wNGBJ~hcZ0ui~__s)4< z**#t;=#J**MWO*4u?mnNHFGP67h%u)Y)Yaz*4*z{`~8l#5eB1U)aD{n72R+V(^p9a zMOmf{6E4&-$j=v@23k~Z8IU7YJf+N>c|#Wj3k`{@Y_@_ja}~%UwK>&>>}hTG7%4mO znr&jm#?d<_cCb}iC8*xT(BP+4!)wy2{{KgAkyahSc*Z05ONh16#wL+FB?R4B>eNd6 z6I4wzbqci8Or0KIKU+ub3@o}b(!9#Jwox&6UBhHC_+bIa(uFQP`QQf zgg2<%jx`($x4*7db49V%u1-4+o92h|%HB?kw0n{$s2Yhi_eV&s_aHA`x-|+k7bS&d zmdK?eCT#Ea2G>DB4vjRwfobk#0FXHMaNj)CD0$$-KK>v(zL*^kN}gJnC{^F@pS4(u-bp3*4bEv9o01_U|X!AC3X^pdW z=v*Ui8Aa)P-`?>}3zsJ4ACON8fGAr6={J4vG31XR@|N|=(DN>#a3vK+l)BAzOh-mIvmKN5yCis5~ixEk4y*g*t`5gbMEGJ-P* zCJ>xQa1p>g!XqY+-mDjU5n$+Xe*v|_2c#yG3F*AFlt1)ESASIgQ?9QTg(rmJbhZ{p zEJ1QRKHYJ0F?*_(#I{U&20tC#x0rjehBIm@B9GM5h#h;Htj4}##Li1iVL_YA9s7mc5$l}SS&5vH&T?rb`+Q#T1YW4Q zuP@LImw7fi;QIJgmJ ziB)_x_%^_j*wq_Q^MhE_Z45tFRtJI+|BAb`>dV6se^h*%$Or4Jzj^j!mH!O`&)I6n zbNw68*6$yOJ6)H*k3SPL?CQ}@XEv^V{Mnc~iG5a^$(?NPao;(xXr)8haFL V2S{}2VXP9C3cZiql7c*-h zlmlvLFYSS_S(%wuBZIx5s?5v&8R6TVhKfjsx=DnHU z`_0=QHBCh@=pVb?)dE7lut|R?nbLa~lojM4NAQp@GzEd_q9^)NQ}X4eoX#aL=POOc z&o}dap;-_RE)WI$WUuI}O;tc5I*pv%J>)1@aFksTb5-IQnx&|C7tUV9G;9+a*TkgI@GMH-v`8Y`7L99ClAm>BOe`-^t^|=~FDBaMw=T?>jWaWi zb7$vHL$I+a+YZ}7JnIIFJnjXHSU$CRW-fEtr1vE#D+r^e;Gm{>1uoo_9I+|m99A5W z9hv=b-jOERe*rX^X+^H*GClJJtCFo0LCJ)IvDY8h8>Y%H#Q@SUw!i_h zH`%o%tu~aDHeJiA2neY)@06+x-)5IKK08D~=<2(lBV6sBVY8;e<9d zvNIZXo5rxl4=^4MQqZr?>HPHTGmXpU+|(O0N#0Hg<|Hb<6}bdc(~1)% zoWBO3BvP9IouZT^qzDyB6oTV632Z=lFyN`668w5i5GyDi*c{;wx|Y#;;0=l+!g`-) zn+*NB-x0o%`p;oiwgWB5=j$j9107ihtB|7XOtlDm%hs5D}Y%Qj2^1+9M?S&Te{g(pk zSH19NeQ;*NKuY8YSn@z1RhZNy!eB^-O&SAVY?I*YZA{~&XtURC0{joeM6x}ax>JUQ zuCH5AXdfF3!7bwyri*bH8E3*6d*jn#xCmD@rs4VHz%g#%;D+J3^G383x5D7n`jMjs zg)TA9`h&HAX+|i++)R*qw3H~E7PqTY8!e;G*ABuV=rIs?(X$~`*}hiZwN@T}T;A6y z?^~gDnkwTtpawFf)V7XEw$i@h5l&LQD{=g=}V z-uHlqpNT8dhq)Zu;M4^AxbUrXQ>f+0C?roSM0PN348&Z&KBNDrk7?1Rz$UC~k=-D& z!jP9hPs$u7?sI$RRsgwWg6%s6;#c(7CM2t)kE@3|)k9m6+;$j{+&1**i*R;jKzE&% zA<+AWPYB-$6YBTH6T%$y#e!)DmXA#{QBBhiowmpHvT0s#TV7_#n)E1`?QHpva3A3*;}N+~ye42*I}p6%Gf#C{MD5ZTLgh6BfvQJ#gSUxD}l zJr#4gLU#xqJ0;vbcYo*S2fwIyb|2}C9DO7=*0jpZ+T?uAC6?goega4k?w|DpUwg2#Z$|CVAu!GOl z%E`X0<(j;z>_co?kqa-Ce~Jm~Z;28wMey)Afa#MS;VUM-72|+?GH41c2aI*hq?SeI z?X~{G6U?%in_4f&^A*^+f$@4_lGpV$Vt|1)URnpyl>|X}t{`Drc!KsnL6aRc`Lk4c Z4&W-!)Z>EsuzK)oty4Yr9Kj@w_cx4`UTFXT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_link_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_link_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d50944dd9a1dc731a0d69218d61bb9dbcd0d482 GIT binary patch literal 1817 zcmbVN&2QX96rb_e?mD|+vxyQC6lz)p$qiW(ir|8fNLn?hZCW*Ozy~bHo+M8E)fsQv zEjb_>At51gBb?z>rThu}1zhNfm8A+07q~6j1W-=A@$8a~s!E7CJij;Zy_q+^_nYze zwVIA#us>&lM;b!Ea$_*mzS7$UN(*jucxdY&ldT&DJm?8f}1I z2}@DgE*CyEtVFu47rGXXL{+ zz$2!Vmv5$7ki>47E1t_T9`fD?x2`zLD_54Uy}No9CPv=zyrdOp*MoQm%+cHAPK&Ti zBr=$p8VXpZ#LdVpm%0)2LIpRf6)4b3m_ ztG4n?Zw0(+8=E6}V`%gKu~u^}EefC&ST8Rn#Ss}Tb4#NnYtfkUdb~bHpd!S(#_iq` zhy#>i_!Ps(duV$&axh<%y@&UtN9tj}vxky!t|3!9`A#?bL!iP8H#UaKHInsh;$=p* z8v*$Zgvz_P9bw^NbriZlJXiu%w^)9MZ^d96rO{xbl+4~U0HH7~+u^zy^ z_y`dDQaX@7RaJCKv^UY`ZM&zoEZ}P-{&7*qD3Vn0p$x@s|O&@zKA|g4b05%M->a z^og;6zsB?WH`1mIColZC_GewOgh8Giy$5%`U2Pa zf#}FUJO>K1LF}V$8CjS9D2=K5&vmn_!ndoT#>@{h7axz!clkU-=u^E4*IxNgu}3^s zY|D3CHAnMFLCK~gz5_B+PX1iW+9?oRR9@VdF)`zidl`utJj{&3KLq6ygJp)9EpF)4 zz}3HL&Y9=V?0dz7*gShP`fVP1ECo{MVarqWPRefy#NVbSIQYBBE`sRF7~^9N;l-cO hOHa`JFLM2f^6C@ijblktwIh8F>tD?tBlr|+{R1da+8qD@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_login_link_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_login_link_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f23ca33c04398fdef0614af123e8824eeb3cd5fe GIT binary patch literal 2270 zcmcgtTaOe)6t2EZPfyQrZgA_zUzO_`=2qCLK3Qe9^Zt!>ZXQPxWPY0b|q$`{DFgbxxf+b-r_| zzAcwE1Rwov%>773=qEnNzFZ21vjFCigB-y_zR(r~jzv%OrM47f$&>wDJLfBHB_7LO z-dEeIfUrvHV4L#_zSh=ao#GY!Qo9u6yjS)s?TUazbP74@E#wriuqY+_wm0>(M)4Ou zXb4exk`cFqCo!3IZ447dY6UKHuVK@58e*ir-eGPSSY9OC7G-?Jn-|WXG>@M?dHl?4 zty3^jI2%s6!C5z$fkEXBe5H#iOO{cX**;<0VK-oFR>ujp7(Q9(?%u3Quo>q*qe-z$T;rl(($aH?Cn$C=VS zph~|K5}2^VAiy@mj-H-aXCa4}Qk_j>{p8gS;rN6_r!R&Uahlqi+Y4b=x2-@A1Fxss zF{v9ipvewN9=S7%>0OFruWvo#_U)&q8SBuO4Z{g-+N5z&Hto@hk=h^qXtJ#xzB8C!}n3w=sLbNY6`+>nVEQh_hqz?9c^)lp&pw zWOdvHDJosGC^jv};mIHs(2z|a8ZuG1m1>ft>LZ2kYB9p=VL^^$ioHv*r}agY>o_y3 zp)no$*q92g8YeKFVPVHO9Wv~V9}B}7H<&VxS@sML9Ag#-vxethG&(&t9R|-g4;(b8 z%kX#y46G?kjU-`)nV!X5KZ;3{)^2usk&>`A8>3^{XTO>I-+PN0zEbzTdv@%lvoSpBqT1c65luT796Polo{hcl00IHQ0p8 zV?(5tE5lr|str)Fpbf#}qn&aSCWoJaID>@$v0H8;Cx0D!@pExr`Y@M6>)mr0eWHFP zy(cu_j)kz|!XcYE+QP+FE=IT*1<}e%ppun7n z+w=EqBvuXXVl{#qExX+PGs407;?TB>ckv+eLw^~FJ+k5yD3yEFF8Qf>c$ z+YL0NZ5tR_rz%PGKG=3W z`K#*Dgtb?Q0Sf+}&~Xq0Nf3k;1qlb1(VidB6U%7-J*m1ZKf5d+S`o#Za$hq9?F)Ye I!7q0AC!VcJzW@LL literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_person_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_person_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5163c1362a573b7f4873d2422b139ed5635722a GIT binary patch literal 7188 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_session.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_account_session.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbe710554c722cf5635625e464da4816ecc43d29 GIT binary patch literal 13105 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 L`U{DQ!Ycm4Zg@gCYf>p8Gzk?-L>9iN{U8 z<#IEKy|CpI;l+Y@GbHsEBPLIFNGu)r7BQQl%Qq4lnVuV)0#5`;0%~s1B<6Jz`>@2^ zq;AYjFANCSSl|=$>gr9?^*l&s<8fFS32CmGFn%&=?Jij0AX4rynRAw^ZZmkGrlob4 z5y$m?3IHv^9cdXvO`+o6X~ChgGQc&*NVsw8!US=^!bxatB@wYU1!ghGlw3ZW2 z!un#8?7(%cMc0Fy`qnOqcdam3x0-FfmBd#X3olzN;H2IJ2X~V&i)F=ZIZs3jQD^1d zXtq<`%S!Ryg<-z?1=5gc1wv!5fcO9%RZwNJQ@YS8RX)A_@$F7!s#Cetxj56AzSw!@ zh3*I{S9?e=kM^`;#pt49(dfat^96JtjJ;@3W^|Al$7SuLy129Okc^13FKbsHG3hI{pgJ8DAIcxQ171 zIuw)>yAg4m)Nq_A@mrzLOOA7=<%SZWIao=nLOc)R0iw?dUEGO|48&8QFdM`^>K2f7 z<@fxUX8cr{?`kl1bu?c6zIyrL*j!iG!NaKbib9+JPrgUOR~{=)T&azwQ?fQ2jvNOi zNktc=I&U|j(q-gXul-(M@Az{a^Q z>F4{*3n}@UfrC#uJSn^`d4Ge}01%HMy9}bMVvLVu!B2Qi; zrm#y)k@8eL4`C{V;}NWml9y^yTK)yiwBSdUY8Cpn!F=U)k21q^m>-*UYj&aMa!Uoo zc17+O?FBIQ2_<>XBzfNC@`4E&sf0OAfyy0AG^G{Uly}8^1Zt92cryaF(yMh4Bs>>@5Q!|;2YT4>c-;dXp zRl_#bWdrx5{ufAvSNOgy{=uS?waRRv<1hbrO7$RS+nd_ZO$mHQQOq+Q2UNnvTkXW znpbq}Y-Z{O%>@c3D*!N7sjImjvno{64ZGH>HB+hiimqF><>~sy*}g-_bfZx$=Q5~m z(vr!AOMBwIcr!J*Cw{ApJs!V|lw0zuiXef?>RkoSl-Rj(?LJ3X2=leY;XAV-9;+Ef}`#cxu^N$2KYi z{T8-cuUD7S5*vbr{4;M=ZOu=O{bvi44-I*jmacbqp0xs8E)c`1jiLNg@RF3h<4{e?UG-4UQ$|0M0&n? zPQ5?;d9)>0}_371v_rG|vp3;6J5D6Ch6N>Dl@Bjb+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_mode.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_api_mode.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37cadc68536b1c37eb3cf540fdf8546d35974899 GIT binary patch literal 283 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_app_info.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_app_info.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88e0db2ea35c1af91d4c5f4fe3787d9fbdb1daea GIT binary patch literal 611 zcmZ8eKW`H;9JS9*nns*xK;=)XP6(k4twmWYB&tfZOIct!sj`mvM|#S|HntP>W7;1UgShH>OcnG8urFiOyKB*=RtD3GtD&SbP|beq4T=wjb`p- zik|D$)*9zIG~EyS90AI(Kw0t%0RbxTPIwCqAot^>BDto?HBFq(O z*?PRqY~f&22SeTm%feoT2F7!(c@Yk=r7P16d(0sI9s4lA2Q+D??+zv__dehLlwQz{ z$#UoH!Rf{Yy)#Ky&w8gvKj@n2EOLk4hHtt`hbpt)zEcYhCk|x13v1}YY*r$hWp4#` m)!M1=<*8W>5{Jj$4e*;_j4#ppC3^IyN%8u};x7tg7W@wiT%6
ev&rCD;;m-_xM2ZPnBfAhGyK{E1rp3Ax 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_shipping_rate.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_shipping_rate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f64fee7c061cc1c0f4762c2cb0126ba8efc4d15d GIT binary patch literal 7911 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_sigma_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_sigma_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a597794302b47bccc35d78c5cab1b23702dd00ac GIT binary patch literal 1590 zcmb7E&2Jl35TCan_S&&iH#H}LtapD${q>6H4-hPmRxbS4p&YPJxGw(Mu z@0VgR54gnhap$TA@VnfkOHY_X3z;pj!6q(rh((Cx6<6t~mKyP@t95isC%|-`L7nDi zI$0}=I^E9L*|y>k%TVAB*v1CfIYxHW*teDI=W9cM$W4ue#YVuLE^9Ep?6jB^IGwJ~ z1KRQJo*M~1x%c4=y?uA)_U!v}chF+2(OP6uX@AsXy#H~}OHPMnk!t7{Qbl>s6RR~5 zg{TXs-D%e8f7nnFhvykgsuiah(!{+AtDScVuPi8ipVh4R&Jtv6BdZAZWxwk zYa3wco3KKxOap3qSZK(gNq&)gp2ZU_C3YWC8AJXLCy{(hwjhYak~~xf@HN(CKz2wh zB+!RPWUi)!y6ANo4-HBk&j~24si7vAyAb9$!`q9%=V6Z0mfIA9QXwN$D(k27=Az$W zX4_ja-(zAa@Vn++KVa^)TfV>Kcy04mv$e!L+gxVevgtbWX15R*1LUP#8|5@y?FI{n&l{}LW_wUc}wko&Nr-h=yu522`*4GUEC=98uq zVYbbJW)N_W(+FW!#Jez0&kAYGvi=O`SkmEXv~=cs0gLuEoe#@Xn%C^Ga3~p`1@3pG zqiCqYV#36|AS6Z=x%hc`a){C-KBcQ;|0>$wnsGE09+Gu9P>Q+ge%1U@ds2P#Nujbi zyFI%9N_D?CLR|i4piKoiUNjwFrAw&z)ywpbVWt*u;b-rDMf^m zX9D>G#hGuqiRK)oP0#ZYR>$|S{iBxTugd!tlbL8S*TtzJTy~?7m+3`$K7u$KS4?uEpwpiC1t&ER4S9|H*X&Uej?|80i>auPXGV_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_singleton_api_resource.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_singleton_api_resource.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46a0b0c9f4e00b85abbb4e36e48cac0fa16904b7 GIT binary patch literal 1604 zcmZux&2Jk;6o0cHjvYI35~r1Dq1jXr)rfity;K4fnlvIo!bK!P;LB?5oj9B9S7+8y z9ho*lmPigzE+`;`lmmxW;g8_XC83chD=I+1fm@JERprE+^*TzVj5IU9dGluGz2AFp zejFI+2WSv7IA*OUZwZXoy+4W>{b7E~lOiBM%x+JHr3N$uQD zqF7OJM{dK>I%O$sG-?BGlS+CXifS}EZ+mrzhQ4>qxG2SF*kE3b^q$69#h%69c^QW< z$rgl1yJ12FKnp%Yx-DWui+o2uC-{a`en84aIZ}Bepp0ekbd<*XnN3$I%H^8Fqf}rr z)8$ddFlvs;xnXcYp{A`LuINj?OZB>UTfag1O6UjrtRGV6@|5qdpz->YSzDo=rLR(N zRd?*F9yG%x-@8(pd`;(eNG}JdVAd(udCanI@Se|x8Q2C(LQ)EvY!Dw^d*L)rNlorvp<~0VK+V7!A&^9ors+9r{mzTg)D_QciYM(0G17t zgc02BB)on?TCm)Uc~2eZ<-TK!1X_|M_Y(4BVks^14f$3Q5iYOQPjg4Jxn_ErSw&9F zTByaWmo)7ozoGFZzu{OKMr+Y$u7=yT?{UrdG&|%PZ&YJt%C$?hR4-{$rek`T(TAjT zNc1&DU!By8N;lAjvLDX5fkR#Dh18m1%x6*d=F~eg(+fuV`nxkxAESX|;&F-P(V0l8 znw)ZxP@2X@ge23=hz4`kE}Z5{>1cll)%lw^ti$iw!TphmpRyCbj=Xdrk>P35k>$eR z0muV`2RRrj+`GGZ_vie?UVdVm-=BV%e|1y&<^0%getb7Q&I)+Pi2w?F;s9PmAOg62 zl>8`2TCdFJfr%t35_UeGB85|Dk&6?FOF7%)p&-o=UX7pX)p3>Q@hBJctiz*x;ohCi zI}h_?yXmpm&|)S^8-{1P)G(rc!*G48;Ru{Fj9U%UNp`X^O)kaSu$cJy;$)9aWEXH5 z4J5T!qmE-3X#KEwRapI29Edog@gTkdeiesjZFr;(A;0Pz*`9m?V(!S08t#e?QV9Q* zGU~-di0J8AqH3|-@m1wwIvVZPW$8pUGC_Bg3Y!5ID-&f9o$2XyXTy)bOC~<1u0!H) zc>vwZMd}=;-{_KYjbW96aD|KC>p&)iJcd{PhI5ah^oNq&nEs-*ue`WUp7f6p?W@Ar!HnwJxY0^$-uvs?Txg$-K+MOmdozBXH z^FZ5azyF+bAG=t9WF*VZbcZAH-2%FW~Mv?t@8^76PR?aS0p)$_PF?au_J0zB?Z z2Qv**4Ln|-4rRhq;Y{OHBTxI&O_|74B-1?AoN1YA$wa53nbxV+Oxsi&&kv;AGaXYM zna-)sOxIMGOVPU6AjS|(cV~L0dU%CoQyY1_F}*1> zFg3vAP3ghR(A1DisZ$K9#3(7_vWg{Hg3TT@H+RUNtfOa^bEgaejXqN*T<Af-?lIeXi?Nje2h=krl&;YfwNkaBpkg$Z@D{D5&^Z}V}lIiZxiw+th@nP@8BxPAq&zX%N*wQsqKfXyr|6kjFtDWmDeis zj_|yVTANHC<>^7R^N3Y;NE^@wrk#86Q7f-q)_aWClRFi)k69%;WQj=&(kUU2^Ew-~ zE}1?q)7>)tS()yU=_h1*gG`^0>0X(BQl|T4`YD+<@%S{Qfpx;tGcvwW>zAdU<)wY< z=VW@yDq+@t&Vs~bna}e&!|LK?NML&isv1q=r^@RTb-Y9MxAliz^EUVxXxPZX7?IpbVr#zC}XaD-qFsyqs-n4{5eaVwo6%<+b1z+m-DDE+vTSAah#p0 zz?rk`g0t)zqdV&;bN8B~`=VXS8r?lLMt9CGH+2sm-T5^~_a$dp^;PxDU-3-sPbund zE$~g3x0&n=Y+e>(Mr7y;`5vuf^0?zEl63uBm$$er@D6!zZMl#P8QB zN-&1s3j**$EXO59J(ftPb1%mha`Ul#E|y3pwYhvO5hFQJ%P+)o)3Le4LPpExV?sjI z$6`;;Y74wArp+-;r@TZgDdp46x>X^S)$?qg>W;<|Sv8hSWMe0_*u1W(v6oZ%*;sy7 ziwQ9`25FZ!c?!+M(y13UH2K1z1XIm{?vLfNNiCL~O|Tg*ACFS?1+!5BS4U$xCPBQp zL_VKL&Z0le%^aaV7UX%dXEmqk+0FSF(~`Li2CHI#sq73NoJtc+LTpxJ&k4NgG}7m{ z%;xiR`u_28Ob|l$7;28Ixuiaxm`jc8T&&ec#&|E!XpWZivxz)MbwbSn%{2e#jtlf2 zH0n9Lt?fsTx)n3##iheT*uW##DgcY3La9SUJ8b zmCGB;FU)BshMv%XTRi*2z z(tb)W1V(}@ohLX=j7=nGq1mXZJXdnB)Jf6v^^Jxw7P(1$9d?HPQi^o|bCTF;@0gR@2Jdw@j@(I%6^mzQLaua#V z%5&qh&{)T3vS-E*Yx;}%+}!w)TwY6WKbXtCh{22>gkFdZH-1{no*qx9PL9tlKncz6 z8r!jRT!;F&ofOB!jHb(dHXavbFgCYfG_S%X>qn)-sg`||msf7DU8b;II`OUJJJH?naw z%XT2BO?g@5e43QEP(R{dX|gHnuy!()XB#mJqn^_gTVR_g<%RB^-_3?8?jfp}WP~O* zMggDHU6kbqMnxODklcws{eA>Mq>aAjuEl{%y+wbY1CdP~i|*Hfv<(iVHMU>WU(a0k z_lWlQp`F@D`#y3$O{6)tcg^kU$PZL)=OEwC4I`nIh=p`r=NL1Z`L<1{D!8g1Pp0w< zMzjKyPGzvF0t^i@PoX)?d1v z)xYi^5^Med`m4R>L{%SW%@;f)-j%Sq2I&+|Frxv+twfxT=Pmdu0%50t?ctO#>vD7zwMZXLJ-zFye5K8_6 zCo64LV-xcSwWK7u;7R?YWaly9`? zeOQ{CP2kzooCJAK!pf|225JP7r;`%gV6p@VE=E{gfM}CSN{R_+XXYULWb?CzpP~y| zf{F9Ao+L5iGwxI>Yxq*SJ`c(wmTY*q;%xw&)-f(tfQJjoVt=+59S$LMy#ZI;Y;O-o`P(myk|2{Ch{rxJ$N z=b&O}LOOa1BM@8KpFEw3bA2bk!}&Y5VUt=R%YJ5sEQ{wmQPLd*4gK17*iCGw9THQ;PVtbPXT8OVF+~) zKTfC6M@lssDG7;$Es$~rO%IoTs^klXj}p)XdvSf1N#SxWj!QMs7a<;#~LvW1zyCT?!&GF7m00oJNg!O^LB?qWFKNf+uu&U zg(GgKW3Ssh!Ilwi9@A@aC7X-b+{SKi>&|Ptu0p=t_X%+zyAN9dv`1j`tj*)s+;4&N z?JjM(>ss_`__}|O;7_N4l-m4h5INP7t1v6Tc<->+B55|0DeAbdF)Q-1QK{?}x=5!;#r7hZ1>quE{lw{}8 z)g}Dt?FcYnn|`W9>@Op~_Gl-Ob0?#9aM7A3p9SxTZ>3Sr=HV2}LBU{;p%X4!vSSom zTXw8BYy29@{Zstubi!B6%$}otmR8O7Rn++uXB(2UJ*sMSn@%5u8pj9VSq+dIm^e6H#9}mrSHJ!=KL0Cr2kxtocMp`d@41$| z`h3y9-x1q&?+*_B3sC2S4wy~5LVmvP-z4bo`{=YnI`INPznj+)IO&f&MY-SZSq>BF)3I24#&R3P?y3Ro4 zVtQG@V|h1%MG-IWRzPT*3(cEwZwo5nx-58|xOFrEO&xUQ2*aZZSXBbX(FY3MyNdo@ zW|6Lq@`l(1;OrIFP!mv9!mo7pmtx}|dEI@%g1=iV#~)$zwTZJ2IqUI*g}M>UrQjGN4e;3gX) zhG;S%ircKmyoY{5OKOn48K)n3H)ObTgY?cZnq(TXHI-5w02te{0CbwCY93d4C+Fd= zV%o)OM&mU0J#3UPBqelQU<8>)SR_S=okg#P8?oBd z1nh`L*q@@{gM=M2R02De^l8qtt@Dj0Gj17>!0H>D-|%y|K)|1&dhJc{2gq5E_NtFW zN4lnY#*zOE5lJ2GbJ1WSG!kCvl6?MzHkYV$;jxWEhKIy9_FI@Qdz*r*6nu|@cPOCS z8ZPFs-$tzV!nD-rpoG#-&=SodQejB4tt+<0XLx|%UsEGY}3GVB8S_Ce6?YeqnTR`AICJ-F&)A)mDm5TC^lOY zk+u?J)47dOTcNj=?JCRSPpT1VsVUz=j+1KdP))HF6hA!nP1OW%@kq79R80a}P^dH# zZYn4NtwKTJibfEMMgv!e%?mZbavo>64XRBJx20~F7CiHSvG4TFW5$M<=e(_4n5Vs6 z#y<1SD-Opv$ByD|!|;h?-tgo0o3_@1xOVf+C6K~vV(=mq+WlTE!{kWqi}3YtK0MSB z`|qgFh<2ntB55MD5eF03M>_hsohUS50#<1o*n4pAE3Q)oWJvx`Qppjg-TzpVvd9#E zYs#X_B2E)Nao8hWFVp54*bs9KY=}v5HbhdKij_;bru>{M_LyfDcRuBGGwRpiGEOP$tBjOf7;k%h&`pu+D%@b(Y<^P9;>8G8X0^J7`53+#*C8&8-k3`7Rk1c2X=3tePu?Gl1kxS~Yr6x=f5LXv`TOu8ET5rLX;jhiHASn0|&ITBb~ z+iIk0mZHV}kdk8*IGi}m1!n&f8DFRQo;v~=h8%n)Ih+v4ATIK<%WsU~+UOcy~;8Fg( z%f2ARq@(R`gfYF^$|iJ6&*GDpgN3F67@^H#K-}GhmO*l+*}UxsorT_mmX7$>=)3lw zo5awZ48tLQ*1T&)zRA*mS>mx^RbJI}`ZCkM5T`E(K5onBWua}PeI+V6$&=)Wb@&8# z!(u0hT%JT=gvt4XEX>?Jggr$tyuu9EDiUAl+!8Nav!|&F`HZk$-Y~tsSRw zFCds4@mJF|r`%C0KsyCYuB*L+3nflnQeitH3Cbwl%uyi!u}8DRC{;akDNQ) z9p<^hcSnV<@G}|=5pWiT;}PA8!4s$9CD^IpL&0_C!|1EFR^}5m+5bg}pU@)25LrX$ zuaZIQP#kWGq=nFp8Lm9Zjfh_T2oO*ur+p)sfWNkk`x4v>8L!YI_HtrDH|o==40tC- zJD=6(v?RCe!E{0|Zb5xfQ~Dh4+&H@>%8s9ekFeP=zfIvjvTOxoHbO+@aUg(R+cLuP z8Ww(vupJo992LScD15hYWbqFYsDh9GFKWWA!NJ2bjn0kw8Q~pa)B%@XI8o92{x6D) zUw;}F9`4@c$Ms@@ds+oEjvF5F0-E8?kv-jT&+Xi8_@!ZpQA}DnT6HYeD&z$@RA3J; z2azUWgmffX_ZCylunxGAArX;;iAF*U7n<%yb4xy!e6vYoiP}c9D4| zi45!KN2~#VH;JjdspPFZ)pbre<+jRM5w#9*Q;o5pib4hk`kiyVYu&TFQzu|26!;^F zx6$YgK$tI}_u}O*dS5Iia3MupwOOfcC;Y;CfHkCSh%k@e)c2n_$8*h5+Bf+v#9|&?uV-+^vKzlb&BX|^F7Wt$x z`WkMmzKB)%R^6NKuX(+Sjp2RD*Zsfke%UqRWm|wOjy`;p1F@|LCQanERUr?T{R`P7 z8>NEV5maC;B+w+voHdU$C-5X;kl5B=Dt`+kHcBM6wB2agR%qF_8i~d){TSYf#2c;0RZYf42@L9Bq^>4xY zzaMH}>eyNcZF6j;wo+vOjmShHGVy-T@RifWp0To9X+G$>snj*MK-BH*D>v}{<)i%- zp#2r7wZG7d;8q?)-c%M`SL@hr%xaQrAxPNsBvLS^*}3Kn`{fMRD)2QlbCYQ06{Q?e z0-@Dg9(k2RVh0G}BuarBd2}s3y^0;N`%&cVt@^%5h?RXentikVs9M2uNC)A&;X8;p z`OPP`8^mDhH)T{>ib|kCh^obejLIGjE-_=K1cIiamR4 z(QEfjr3Sqc;h8_e+Z*`1`Ogqkp9i1V`rLwB;mq*e;>@VMGS;F@Rxp_zv=;V)+(TKf3=v#}sNK_2nf(eOYKSJL(iJ&+Z zI5+yco5TlSt@GUZAXn|6BN+AB+Z)NBRE~sr)8Da2h$=pVpaNgSoH)M72K5Wu03VA% zVSCiyVte>+gK?4Tyv?~9P0l6O&aquMP8J=O?97hLnQOmIA*+m@eOorNoC@*bNB)UzI9m!CA|3rp7(d36t#IQ{Dlz*^-YooCQ)FU>-zg?n_#g67<__{_St>nAtE^0r%U1BQ{G$fDIYsdDEll0q&_?Kzg6hw z$2h;$uf%Rhpi`brrqbsG{taRJ3A8UxqVdSD{p`UBTQeeg#C z#8@X_6`Y2+1D%97??&(@zIb>JBImR#rJSq#=dN$K&Vx6s$9r7LIX6rau9Y8KOv3y) zBQ{w!rk#O8L@YtjwP~7&otVcvg$tZD%x6=uJ(vZK9*#}3Tn0Lxtie@eyex;k#Z44^ zW1rxk>Je;0SYmin$sDdI>8(O~qZeCxdp@_F`~u9jgq6yGMZ$KhUbS4=h_43BE*m)^zAG0YNZieGoW(Mfs>vY3;bk3emyErx9H6m;8|%{?3BG z^EzHKZ|b1&?+cxUhGobBBOgk*6Ezj4_ z0bDiBMsrq@lG~(|RS9mRDeuB~IW4cAbz}RD#=%14V6k!dhJSd;Kg{P2Z6L5&+ADgu zxPHSm?733E#l^_zP(i6grJPd9bH=Hht!-X|al$(NP)Yvs)){D@mA7G>*kV!m)BH1| zAkj6<5Ej2!>8WXk;6~X6hoa^Y;tp|bhj_DE8))F#fT(`f^ek||VzdH}V44p5QH2q1 z`;Ex%LS(noaqQq{d#y7KovS%Ujm`}?-E<67icx$i9t5;+^(a^tUw!m~t#FRUg) zOY6N89&j5VUln?SamU zsvlm#v`_lFchEBZAko$=ecoeVTAU(Hs_OTSOrQ5UTD1(f=Y8kA(8KG_`4B>8hVJb> zUyq)M603fy=UhD`58$7EE+tR9mH$-lImb0ro@{6W?mJg^7Pk^=y*cMsT_gTUMpw98 zML8R=E;|e#-r6Kho1~DlM}(vn8`5L+ZOj;H+4yV+K7T`6Dl}~2)t84X?)uni1rhdz^#0)=Da4O#Yv;I>31@BKA zS}yKh?7rSG_;%~>^nS1R{b=9fd@(w7;c%&==gsq%&R;n4ezfOCbf^#=Dn>V7IQ)Ls z;FV{KU1Jv>F}93;@6-Fc2b??*cp{Z|H2XDPIK z8D2*4Hgh#^DQzA9$n9#r>%&Ov&3atWmFa?xi#hO)q|ZWC-#c$27T<8c@c@Xf|v!Z^uEjOawTk`cZ0uNty_6nlVzhbTBo0Uh?-`;^h0D*GY@ zU#8$y3cg0ccPaQj1%E`rA5*YI!JkoJQ1BrIKcV2SDIj+bMvf8U)uEG=33`Vw0*=RWr`tPval^8L$8yl^ z?WGr=@K_G|0RKFdA6o z9bH!NSPoGQvra(6wNdTd$2W4WbXOb3tUmMNF_kc$S(Bg<#%TD{xI%?^*{QG4Fy zAe=6jHti~O?JjzDlhcyF(6q7W*;s-fQCA@{Q1lGIW_0oCLTE$Lvw=JnXO@PK6#9-9 z+8!x-9)aH-mcXaL|LDZ)$BLdV699+BM+?y{Mb8#$sk;yvEP4h@LG0<*$BLfL65N^Y zEwpSddN!A$?L|+!S+6s;6uYa?v7_kOQ3^+1d(4E(cgsBVZW-@!6##7yyxxnZO2P1J zN6lhzzM3h7`-+~vlE2}#hfOf1^w8@M6g}O}$u+jTHfa_>^ZCU?SE7qYE`6!cI9&9Q zPb%*iPFLo1LeYyy3L*5_Yi3&QngDxL7|EGJW31?jl^juEe_&6cdvDRRcMX&~FeTqw z_iQ#>2ZkOs<5-%{7h1O#JzGn`=5k$2pyeZXYlH75mfTm~D#niC9eVvf;NPr-b(2f` zp*K>-ehMy5FAd#O=-XcgeFcAT=4bS{=~jGb5;5#HiiN#Fn6j4ob{0BzmEA~v7-;^P z7f)Fdv2q_T*^InMwCu%`JUY9Uy6!8q++VJzv|kCfF12nh1h)JvfV8YjIm3#tvE)TZ zK5qzSv$C6>{XCC;?l0FhVQzLUq#Ru#MZMh1OO-eMgPY+4Mel>RHNy#)bBYn51pe4=dd7yA zHs4!_9pEXx?10LpL##Z=k#grX{N7I92R*5e`wFr9%WkB2A9%_>5G%LxKBy#(ik`Pu zgO;|fv+Snl;MS#W4-^I;1Zd2Q6a_ABxhW)b1;js zTg+md=il7a;%zK%>FV~C{Jl&4ca`0Ue&~;0e75XG3@jqhb}?11r?_7UG+!Jp2Ph7U zQ0HP#xq;##Ds!qFrZ}!%n=X3FO%#WFO2=YDxtZcEN?^lM@Ah((60J(0@q%7%qje&Qj+$cM{*62mv_{frU+iMKf?!~gG z%d#Y+uGOkEh{%#;FBh_HrM$c1KY;G>(f9k=>kx_YPdI>--7c5w=RU=C(Di{b^ntSd z17+(6%Gd|W#Gfns|6G~4L6HLm<-lLKBOiDUeBk-a&mp$>P{aGM>jTdt04)0wjV|9( ac+-`;3*phFu|q#TQW!h-bA_OsR{tN2zHZC_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_mandate_notification.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_mandate_notification.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d3a5e3a526b06fe6fb631a0fa393c3bbda7504b GIT binary patch literal 2323 zcmcIl&2JM&6rcU@dTp;0o0xn+fE6LME+Q5mQZMv_ga{~!sT7KYrE0X^9pWwf;m)i9 zSL!L{z>Qmj)I+YQe@c5G@&%1lA=FcEMhQJ|>YLrQ*;IvFSG#ZC{NCF)^WMDo=C^XW zh~Qy=A8}_V5c*S0Mo%tf_HG07Gjfn4dB~Sqk|cQ9lYOP7_-ady=Zcr}wU*}RTX_kQ zJk>x)^>n|`Do991SCNzZ2{{^(epM2?tzti4*Z&fey2Oo*h`L>Jv;7^hqq@xX70+Vq zwne#qvm3c#V0nP%*W8Fu%j4x+cfMZ5E7w+6Zd`9(h5xmUut#lTC$I#C18wn3fuBtIbgzI^GMd$tH%KY9ct{}56zJ75 zdWSRobjlYeRU3t6k-e4|Wwi&xZ z+HS;aEP`nG;45|rv!Mo}kT#!bT*o-De1b7AV(f=b&l9|X@%KH;OC(ezI9FIi`6R|x z08Yeb#V~$`_CSW-b{ie=y0IBNY+NDiUKDm4*TRT+XO|&nZm`){w(NT(a2oeXaKGWX z?MAmBb;97n(z){u2E}%^3kudIVGURY3bcVg5V@sppBKiyQD`V=8a`G9@(8^+etL&J z^#}Typ)3~+Is+&bQTu;l44$Pi&Os}QE;eaJEGRaVEIkVxFO1dbQJBxeH`?yx%(n9Q z$ALbd+3qor|Mzy6LGq!LfSP}oByw7R?~u6j^woOqLus=?x>k}lQ&3@!3#o!#2XY6> zlu#-*&#R-9rsOW6B(TYQ93LB_C*Z%6@UaU(;GB*v?$}Si9q6CLjt@0dnaxH5fcaB9 zD^EWg=pSc7BP{SD1f4-9i`3REKkNk&FSY?pv3%MYxa>My7o`fRO}G}ueV=R4H&__( zA_Gs8U#KqZYDw0?2r1rUT#fo&Qdj5#2>(?bR2DouSz;vbK+4*f+Agk>D^4=TUWT zdv3R~Fi;m>7_}!GkJkt497G;$Ygt*jvb8pX3&z&f5kEP#)g1BV+Vk4EUE};fJwJvj zTQ^4hft3boZ77#um01L)$2z5nt?P-tj%Lgk(AL>d~F#rGn literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_source_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d63d7a6a1c760385dba5e6232d73e3574f8a735d GIT binary patch literal 7986 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_client.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b3099e4a25ec0363cf1123403ac519487c61ae0 GIT binary patch literal 58776 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_context.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_stripe_context.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de3fa3d1c25734a468c47e3fddd440802b6f5eef GIT binary patch literal 2631 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 F{tqMHRMP+e literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..742345e3256e77a7af63fc9c58bd56441b02e458 GIT binary patch literal 6348 zcmd@YO>Y~=b(Xtak}Hy;C|O^XosH|bW^9qM-72wbxUnVIaa}WkouDX-mRNB|67Bt9 zW>>PMs6c8P1&S1CPjS!fNw9nAwf+GGdZ>jQA}k;zK`!l$0qwTXsqfA1QY1x6YJ#=~ zx&R+%=Djx`?|bIYsgy$CbN)VF{n^(D`5Zgp7Y!PXKS1LF(TOe?#1u+`fbED8F~yR| z+oB zJ7El%*;1Cb6=TpGDh=^=pK-t(E)DZ`(ikyEOQQmbkjq3*-6wjQ3J*np&!w^D{#@p7 z*vScA>W0gzHF|@xrD}!3K%b*oRkylA%T+xW@#1gR+^TJ9h9^}t$3>2}fB4p=^7I>* zrmtQpUWNhX`&Gw%bM_{!AUb`WzPm_afb%&plDV-s>r`MBoal;6O&FW#9GhlTbLm?e z(@f;qfuErUZNZOs^5Y(w+=n``*D0KmF6}b^J2kzze#IA*4--MB@xFkXrlch3q!dYz z1kp$J2o-gaO1d-#WO@`@GH=E7_*`61+y~9?i&6nfxr4H=>zqlTjO~ju1(fj)%5>K` z`++jCFUky1Dsb{KUDOBK&YPW+^+CY)^~4SVHW^?KwDHD)cNnm#p4btxHrT?f^5hz~A(jM%crn|zLWWxOWJcXZW-)Z@iUc71`k;Z{(QpAgATDUy|8!xM z+zk9C9K(M-qKh}f7|?=nV_|1ico@v`ND5nebTzUnK9U~>oDU;D^$n7XZGE7q!RMR0 zqiU9lCsOB_ZL019Rhq0nVQQ`4{MSqInRw_Lkcc*Az7F?rFp zZ-ER77q!YQYUza~YAqFv>TIF5>@L{W>HNu41qb#ySpx!Xo;n4G$Gbv#$AQX@9|QBX zWi|>6uk45-fu-erxf}u-=Q4oz$@zp;` zADz4QBs29hog@-U1E$((miJ(=@oNBAiSS=E z&3iVdR1M^JtW8o9e6Nm+{|=w}o7sjlj0Jsc?BQ3@vON0c1_&^Ol)hV3i2LS#`{@J3B?C{6gm)5f{ z?MowrM?oWl>3_7Vr7nS%wi^8~_uVrWWZ{p(1xb0FfEG)`*mD<0W}03cCOv0|r~5JD zcGX?rsQD_mje2D!-(>XzfH)6nvx`<4ntnIM#Ua4*JiDUyQd&syU6`Vm_Z;{V-ouV` zQ^xb`J;zaqn2Oj51YP7@WJeLx#Y57e7y}I-Ma_UDYcuuTMa^=n?y_pnHPfzbshV0@WQAG9e$?r_KdwOLZGL!s>^Cj~*l%&FORK_aN8XYca%r2=vZ30YK)@@Jj6EW+es@?bxnmm!CLr$?!vg--BP{CjkDP zva3_*P(;al6j3qu8Z5FcI(7!TE%j3%sBhr#w*j;ZN5SI<7Jj(Xj9NwH)2!hHGXVT5 zDU{WAmDDM%-Hf?`H>|trr0`qexbnNiq`>eR^&d7}vuSP@bRF&1qPP8O#ov# zycD(Bs9LnQG5qqP^2^XHRVxdcHBWU+0*pdBs8GElzB3+r+V#TD!cn{EL$2^=jNXCW z$3F({c7xr%IzWhdz6}<`P)kg17fg|z?=G37fAYPeaVyndP)eQFdT3+YT02Fxo3*mn zVYXbPSj-8bYUu|3&cu0c@rjhVm04EQ5uddH=f1Mjj9!>226Fl6S5#paK? zERL9w5EDG$l-r)x#zJgs+~w~?{#7y`;Qhxr*mz3`!O6;j=LfHMm`c38nSzIc)+fIc zd#=Qf7O-F~=Do5fOY^!Fu;I;rAKMFR%YX^*MSd{&9=7np$^*n!{G1v3Ha1mT%Xgp-@($S35*O>+D*F|#SIgf>Fl#eBq~3XcY>$Nv?wUQF`p6q=j;3n Dr;+j) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7947d593fba60d68580b16bf6281dccfa0b5fab GIT binary patch literal 24662 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 z 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_schedule_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..212ffb05c4737af99bd1db1b058bfae10202ebfa GIT binary patch literal 8378 zcmd^E+ix3L8K3cGe2MK$oHR|+ZFhRzx=rjh-EG<3Zc5Xn-BOya8hBVEFcZ&7GwqDW zduE(8X^>#ILPA1OxUq^@tYJ4oRYcA zDZPY$5O&sI+_Nm^`u>iU9B-#*Evi<@ETM~PnLtC2DOXfWT_Gh^$%X9rwW_5W6Fbgu8 zEiVwIrr}IdQ2PbBQYPAaGL>~48;qeuwn!7RFNhDWsfpMhgt$&LBAc6R4g`ZhJY;bb z6}X_UR+Z+0%8ryBns6(Pr#zYr;flP%6+;Ow!6|!`5D6>cVSp$RC`DOGP-63f62BWQ zMs`Fc02TG2l3RH70Iw9FgdI_7K*d~ChQ!(0dIR{y6%mk$u8@6zOtvAjfjs*G+0zwr z0FbFR;cj zcK8OdHbx4ICkuXjsfoA4a#g(_wo`N9nI&0KC^1di4@2nykozGjAe(rJIza}Y5tC^1 zn-CLs2+Q4|g#|+=g&URIg(+g*vW#lsUBe>U*rZ|HQY$wKlXCeMsVId-Qdul$>Rh3^ zY%Lg-Q~8tQ1yi-iSQP;B4Pq8d79tC!z%`dlCv@hk%XS1svJw~~T!rTmu^*Obz7FKu z+*6Sg2i8;h^_2L7tKYl2F78?vN7wfrSl_*OedyJC50@Tka6&rMh$h5jol7K=4H(C5 z(fCKu*!TvJD;)paTK|YsggYR=ABFCPzZ;Emn^tg!`+ofA;Uzv7qeCzWQzk_Zp(9B4 zAbADIjHjWDr=gN;E?3G_f=*90^Z-=sBuc{RT{#kD)_#dOI24&V1>|qszkQ<14nEEv zUdtZdD!l$9AiVy}zgi_&kAOfo8Yy7(p)|(-ls}&QI5EakY@p~qTcnFN_22WS?=+p_ z0!w73Buf>t6zoEh!4hj;nwHB8Qn_YYVAWJA%N1!sUL;bjDp`i~#)%V>T((qbFu)gG z_fuL}`kfJXX-BFCSaz!d={^*K1f*44LYXafB``^PnsP9gaBz!tA81n>*#I5IQmb%g=n-s`fV4^{w_;vpm4D!-mxmFrq(oOktKo-2Kq`rC z{I+TOt*JyImaJ+fW)m=MavMSegye)uvu%JjJ|*&8Lyz z2I(0fZA!>^;&mPWSU0M0uqY!F^R<)8Je_R1e)n3zpb*C-*P@zw1gaYii~=9Nd0yau z$)ArTf0cj|6`}2giwtL*k-@o4K~mf?5HyGQB6fgA=^L=&ApHq7c5mB0sX3S*1B*@$ z1X23`$AKnLmMr+O1Q{Ui8TwWSd8Zs%c9SOk$X}rBxAT?m6|kMJ(6hK~%#tshbNr)e z>CW>Ao*2!b3l}(zBB>Vio2F4#;ZdUX3@E9(P84j1ba_;rXDKt7(*op1a6$J}>Br>q z()kY4eKcMhSKsx2f&!B;w9X|sTy=adA$;WWKZu-9aVCg)*_#Lu&H1@mqsI;`8!j*AJ z)im%uqw1mXU=8PNbjd0>IWb42xtb-xV<_An<;rr0&m?L^ohNEbjONWtAFL zLM>nkfzl+_mH_ygDP5kzI|W`Qye+l7{74>;z=$>0UBq%Zx4BTqkQH z;N8Dn(5L7(orBi7$Ku5`@uELyU3y7_)@6`{FKB%UtK9~zv@1!eh&lckbw;0G2cr%I&{YO?0^P`t_0gGk`R7DvaB6oA-a zcm<+g!0Ovb&LKIEWEu%R=g=!it^&Ewu{$5TgwiawB9Y+F{42Z}-{s)OI5Eku=f^*d z^+l6^7Ka`Uzquy9RgXdq`m!UBMvkrZ9j{|=J zfbD$86}$ut&hyiqv~YG!d}n7ZJU4@&~F_aUc%|TKtaceGQ;t=(kf| zXU$SI_KaW))^ZgRmE(==@+V`@ JIQ-8h`wx&BEusJb literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_subscription_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40c6da4993958b49f835e97e17c2c11c40cc70b2 GIT binary patch literal 16046 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_rate.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_rate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1427bfeb46b8c8c0bfccfcae57b0dde6029cf07b GIT binary patch literal 7005 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 E1D}F{{{R30 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_tax_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cdc0d8f96604eb1793374e04dc1db93f3405c8d GIT binary patch literal 2042 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_test_helpers_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_test_helpers_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f57e143905ee5b5361bedc17422226994b0436b GIT binary patch literal 2669 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 Q@-U!SdHgF7siu7TKRU=_%>V!Z literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_token_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_token_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e79493394365201ac90d14f36f14bb07ce5f2b28 GIT binary patch literal 3293 zcmcf@OOF&qxO%#$=dm+G?<}ufMOq%}xa_ox57ej$umlLQ5Fjy*(N1r7vD0inhN_yy zfi*E;OiWDlBzHY+z?%mX{RdvycyQ9mMu->nG-g1}p8Tr1dv|~pF(&rm>#x37ef7Pn zzAKlD2tNAzm^)WS=qJ8Nzifi^F9UKFImnSb>% zZf|HEd#Y0csoXzGl|d@sk!l;Fk~mxv&gm%2cqAgVB@R!9z~v|xijY#0=PQ+9)+Pbr zhqe^}>BnVx%K8kzRm7x};YbVUT$0R`#{W*nk{^ORQX1Qq0LNWESM> z>a|4kS|*l0jcU1-7mIrGrRkzNYhqoTO26Q;rdZCp^El9tPSsb%#c?8e7PFPAF+XVt z1!`Op|MwOpQh{9}*=o6qa#WhJC^jv}A(&FK0XRehP*aG?rSc|;3oKI4hQzlR;bB@- zB86h_tgy7EL^+T9yfR}nLmwNn!Mny3rgJQ88An2fy@>;1IOhhl#sSNQ+&BjKK5uyL zjM3__W*9tMpWJIum*I&P2w1b28dUU%VG8d}8uv=Q)rsO@lLcsj|W09F%A9)nd> zNkbe9UwmZU_{Yp$T>T9IKchbf5>eg!Lv{C3b@xN1V&n-(#Yp9kyYtagAU!LTm+a-2 z_N&r2(tf4*Z2>UC?*eA=@3J!)$&~1 z;_=u6e!2X7f$g;&O!b3p%0fRq+(0JcL8`Pu%2tYNlXR_pY8f#l$rx1CqD;2IZ(thA zu!Lb4_l#?n4U$f(&0X!$2aYA8gW`R~eg%mAcL4mGv2<_2 z!;n$`VaVjjZrCIqGEZ>qNe%|)OA?_Soct63dRJ6RaR8DzGJ4k>8DzcAHKzdl-4wYu zOb;9xB`|bZpO8M6#*1GRCZt+sdb(DCyUq+OADd=WG)+Hr+8)PCrg^??c?m~`Vki8z zCfhmK$w7^SaR7@*Bts;ez$+99zy}ol6~G6mmq*X;>(=-FR;Xr+H#by!S@`!>C9*-}NsWx3J@F>dOBI?Y&=5O%xhxkIY(&fY|-VSYN%I8PF04z zX5cUqy)9EyJfh|eGjOJCsHLK;nPOhnpeOrUg5Hyw?HJbg5t@F z#7lgN2M^FbMByO7Bml=LA{69Ekc1Ski^6B)k;ZSsEdU4V^ey&S!8#^jV?uR|L({Sj z6SgrpX2gcW07q>&LRv`66k9W3V>Z^_1z_Sf#uh}tBpnQKW=++5wc0CdTSwDwW1@$;L^7BsZk$YEadwQzWrwG*Rhp&}CB|jy<>y+ zAy<2+-M-!GPk{3XO^M157gc&ws$myZ7f^xZu=VV$ug9nCa?x~eLNnr`>2cBQc8xRY zqUqg)CgY;%n|)z;kLhI!Ecd`!ha`B;mn5T9mMUdw7OaMJ4ivjgq)E%Jj383VGgBeS zNVppaOUy!!O7CKuT$HG74cK^UQBh}9r6OxKxjrJvx^#(X8oo8KFp>%z}*7r{5IeH4!(T(n)dyUp-BwK@L2J<0>of#y69y!Y+V?%VU9Xgj?

YZWRJv?maT2PkztC7- zv$fYPXztj=%LwMzP@dNogCVse&%pz@2kkuTL~>~=+Uuz9DlWBX+g#S7WdacUyqPCx@-Fs5D7k-|w`>AyZi; zv$&Rb+e?bAt?iv&Ke!yw>b#N^fW{WLRGInO%t3joW{dg;n9)6O2MlMJBNUO+arP(= zF_IVzrSfyKq5SB_{ERZ_5i#W_Lf4@DL^!?5k3k<&enLdG@}p}bI<>xL=-Nnt#;c7q z(0T??fWy^B0)#$oBtYtDBQBkzjrd7I+K8Xpns5wdEWqJvBYwgpZA53avIl|`BJeDX`kJAq8CmCn}9gTq=+;j-toAx3B|pvJH6 z@ahRz3ok91>R>uoi*;(86hlP*MNy~Lr!IX_ z4A6KN#Rgi>q8Q+C7sUXfZ&3`8I*X!9=PZhTlF*{)r?y79u_y*O+(pq(n6xPBtg%Hg zLKj*T(^&MLr7wzU+@3`-jWN0?>Pe_I&sY?F1PzO#&JtM^!(`q?F-#s<6m^F9qG(Vy zE{ZyJa8V2q#TP}L%Nj0$MbY4hEs8P1*rJ%h=UEhE+~GwrnJcs?>IsAwMe*~N#Y4KC zZ>!uX_OSMe$jXepWvXAJfT zGmPr6MgpxXD7D+*!4;`&oekNh6JqNAQFVEBGKVWPaZJkNsEK1z zP`kns$7FSkHE~Qbtt%+CRO0Y!YN;w}S6E`HszbAhrD9rFkUG54(A@SBO!Yi`9-Av( zxjq`x5ob8nwdiT&uDHZDl<#6CwxOVQg{4-lb!arTYE3p*y!tJ0LtXKiPIV}(nRMD> z_#kMa7$SAWCJ+^z zFmd~0J}#HIeKD9^(TV-EI)I(195SsdC~?N*W7~;qJCV9#68k8v6!ICo#6AiJS7hP{ zq!j3wc;X1Gh+R>M(=&1N>GH%WOi=HNFg}%@E{v#MVX57NPP3us0tQ!P;s}(7 z{1XR-pmv2N&Me~Ay2P2KBA&J=@tcA~Q5CT(Dsi}sh`Ae#6dK(P zF10Hx;%+e6)7=d*J~soAsl-UA(cR!uyTT%Rp2;3}H`uhUpvVw2n3eY+HYa--T#=D= z$4DW;-Qc5l1x98tUjmKph9HwGI^u3HQb}_+1Xx_LiLDCnL29dl!4(x@&a2!9v2ziD+zqOnK%MTWZd0gi5v6yY!at1;XsIa04!PLoN&vPF08@bU?PFe8OVmxD{~3X8ZLO!jn_LyXVOKx%0lT@HrWirN(x(e+IBxXZz&bp=I+nZcam za_};^A|q>$kwSvY!AI{3jOgsX1R7lqK_*vp#N}Y5lIC&r2N9c&*2J99Fxs12SZ@K%fVphcWffZy=>a)m#Wd_V2H~9g@exCZ%yb%E4jyt>Tw>2`b~zZ*@?8!Fd%DXZ!seDWqBrU3G`Jir(rJrn za5?B=a$ODvZ=TDcfz>T-Vt-9=Iq0IN<8mvGU}Q(O){dbeDOlUlRO!4Q}4axmECrR0%cIC#jXU$#bi6Vx}`) zq@s5PCT?F0??KE6V@TC6mUl%bZbO?~4!Xo_mxIpS;Bv4?-SQ;%(Il6HA#7SM2P=iR z%fTUbOP4r3H@h4xS-CC;i@m|+;8MFKOI%Rb#9a=Cq|9G97`)1ZkUE7;&*h+ttQ`oc zQ&`R6R%hb8SvwF?h1MLd(8PIDxe!w4O-1htOdRa+Af&b?7+jHwBe2=!ptt=rTn+|% zlgq&&cFUEhMl`w{bW!;(2c6sS9;B{z29sOL#0~=wLTZNrgDWy|Vry_Y=oRC2Ib4LR z1*OZOU(hu!@e%|I}47XMML|6gvKskG_(q05Lg!ZNLs>nK0hpMob26^{K86Y z{h&k7j%I2NrvyVMF70+}M>{_B0Mgb5cc%pYLmP0a37af3-mTc3at+GMZ|~= zakw8^tc_dXil1FH`;R(QaxLG|D;114O4~;ZntvBK|5;rBK=|%Dl z)htpqQuzv3zW7OKI9_Nu>NycNpN5tZ$t=`@NHfuDuH6ePWbq1sD-idvO1i8!(du;d zyAO%q?8$;e`(2|y4gDMgrC|;%k%o0x!Jm$pw!p0H<;w4<>|nmtA*GkOda|45_wRxR6Apx3We1$tDp3c`f` zD$waYRbWR4sz4{Rt3c`E^oUEZ-(E}4WA*8Mh)M^gD?kf6!MBuu|1w^*w?0zk!&_Hb ziKvTdRU+5OTHKXHWTzONh5i;!O;$j2;|N00M7YzqDc!n(;Bs$bF~*jvm6eUPBC_XW zwno;P-IkOZd+K_L>6A?LAzZlMl!V<|E=w$o#iu&R9H^Ea!LnyWM!KL_Jkgu#4%Zg< znxZ#{iZ)KV1(USLjhc9a46@THYj==N>uu^0pCGNTr<6;=)tTJCB3(5#4b`#Kr3qPu zkUdJ-5W~Fv-WWag)a$D;rcUrBb4W>z9mMK%BqSv6`W8DbMMi?*gyC{lX8tJp40Koor-^~~OsTvSCZ zXEX5QbXO56b(Jz_L<;ScGbN?!x)6OmSfp?1J$sY~ zsqfp1{=mt)u1$>YMVX`@$m)79<-__ymCCQmkvuD6eTS|%KHB+8s=$Dk_6>v9mV)wG ziC9KDh%%*(&M4=e7AG)gzCJfM2z&M4lo&ZnjH{2g6I zzEeD4F`#ED`Q<&G$)XUwYD2d(l>PX`CXTA6j`L6rhP??bp`#oUS^3pFY)3e;)Jx^t zeTO)4mCWPa&#HOULxj{*_p7M1<~Y>)Alsun%=!-b)RRPA>rF+g8rP)$$*M_N*Aa?9 zT}L>$+|=t1s$@I8MC5WE-Rq9Mp~|}6cVyP}PyVb&C<0lJaLBAvJ69u4)cOjtK~MG7 zIG)7?(_+OOL^cEW;xjaluPn?oN}L^pGMVr&q?C5hS0(UCUjeG zy{&5Xx6$Lk-7T`_>DnW=a@VxRw$b#qtV8Dh>YYaFa;n|LTxYgh)gi^}occ^yGf8rN z+R>7fvBoUA2M@<8Nf}!YVB(~yM2~X@!r?NWnI!)}E@(4&ELY5RijY-*l9K|>AF500 zqY_oCe+*WwPUNdvRT@R`G~XSu;j_onw74BFFm2V2*VnH^+OC0fvl& zJ$@QUF$8`!>VLgbh=~*zLOr3rap&`HLvV} zhg5_FCRHh^HDQl(KPdqZ(C#a{s6K#YA@on4E*grqyQofw<`>;ikFq*hDY{{V!sv!N zoho%Hx`ZzZ`4HXEM`CxwD2?3>bz-}Zd1}|{B6CHrXm3W79#nm?CQH?H`V=P<*FSlh zE);Dyolb`;6HTW_`I|06VKkjiXEmKK3i%LC=OeM3E=prJolYERI-SI7x&wt3!dfuY zS8dKG={(}c%@<`bSjV9D!}<5Fj*ljHc*x#>LGajJAl z_3^56k|k-!t1|aV*UBiEIKFjea{kmotaK6bVAh4{ zBCK;*3zIqdTvj?YpVLY&xH`9$!6DCaElSS6IMrLNDJrB6xPxwG^p#5uI{lUv<9mzG{-)j75F zamDA>(kqNsT6vBwy-|pV&b6g?5~AmGZdnX`?k%ItbPg_~%w#jD?v5&hDwCst80X~D z`<8ZYE}cm`N0;6qajq`C9_n*;=}jZg-KBRHaSkt?UYyHIA63SYql`{apW93CW_*A@ zjaoVD(mI%=t~J-CNt24rCN~4qlMSsgE6cSCn3ZL)Sy@h7s$>DHBWr1@oyK8FOk3?W zes!ulxNS0~4vlgB)_zeeTgNWZqP!-jfw`bMw>*d^(=Kn>eQA*-Op*hX2%Bg3AmCeK5u}*88o)e|_MA-o~DA(`S&d(ubOtMRz)qI zc0%gN?C6c9VfWF@Wu`K$MZmggOell$cs(~7z07oFEircfej1M@$gt(4aw$WQG3=9> zg&k-?ph!l^tAZK&kS4{Utk+UQ^@y?vBapFEj?-H)j%NKyt}JQ%F*L%c4Ab^=S!&;s6Tdv?s7yb}ZB$u)(hDUFKZf2N zE0nVPBnyycA49!~3b3p`r=?aK8-0?A+2)g6W@Yk8XOI>jV{08Nv@rN2_bkiaV<@XJ zF);Tex1Lm`l82(8Uq(LyOs*_t>q*a(F!dx4h)O3)ZVF-ONiJ}0=P|UdSSx5|p5&H; zmB-N2Vp2>aPjY2dHlE~R#3r8Ps-mS)T6mHhgILJGliV|iob5X~^sM`)7niI%>BWU{ zC!_>9x`JWbN$yXYX(yRSv+N}IK^S(Ds{jgrdXq@API3X=)mS zB`;|i*VvUIC$#G^rU{Ktx5StRhtRqZV7AOSH)r&bxJAge;v`KRGLusCFl+-2oRKC z;Pl#V*6q&Jl<8*0bQ85I>B{M*qYO9Yv4IrU(EOONwoT0jN+c-fKr;nIJ zqKvjVBuZ?XL!!h!b4Z-QV-ATjxaN>Jxp~czzM+ZodCehlj_Pt@V4 z8#%m6VbLcnI8ou)=n_~`%QrqT` zII-6p(!^q!Lz>8Kb4U}tZ4QakTjr2BvDX|DWeJ)?;#|e{-uM*X?vmaI1LlyZ9IrVf z&OrlXS+S`zOka;Y=8(9E>UK`u91a+tM5je^6QvGQWz|Gx;Z3;-DeI-;R~8Wa+xFM zkX=hEW)5je*<%h#WAU0p(pZD$kbL%#Iix8i#~jkc;4z0ZvB0oV<_s@zS>0VXhcrnx z=TqGrlEv9*4%y|@eCCj>M6F8F%^_LoD02w?sOoUds$u;q$~0-{KgKdl8hS+Bq!Fd8 zmlIuQkF&TYjRyLNNh8kbnlu{dEt5u^8ta*E(ulJJOd3%ptYwBu*TCX6X~cQhL{XIb ziq%YyJCsY^;GDtdGik)xZIecv+BIoJ>3t@RID>1_h|@<*8c{~uq!A^yO&U>RpGhOm z;4x`L8C;V_oIGsOi1K+&8gUNSq>(^xn>6Aq9+O6#!8K__=^c|sl-f0E#L2xTjW`S5 z`!P=MMtQs@jW|cpq!DFvOd3&Y+oTaE_L?-BSS*u96S-~DXri}G8gY8dq!B0fnlz#; zL6b(D%Wu+%@&rs84LrlnfQ@&$12WFxHEG0IdUWaCu+(i7aeBw35hZs`8c}jn1y3%w z-=qU)@EE=xVvjT4P&Kn2X&;vXwt}Kj+iudEvcAEqbX&NNh6KLYtl$#4VpCa*+V9crj#6$MiYa_ zq|w9zpB+fUrd-w9(V3W<$YAJnD~1z75>|9}6m5AW?AZxK_C<1h>5Z0o?WD_m|95rN zWlyu_bjuUnY@;Qq#{_d5AhL5yS6AvuTc#>2OM1^Sv!uravlJk*voxnXa9wYzZ(iO@ z1~uoK?BkS^P?UCmJS>PK3mDYW7@S@T@d)pvCHM&&?+vZoy3#?wty1rGyi5~o0G zi#A;nMfW$)cjLsD)%`ZH9v6*XNsmdCCq+qAZy+zUlL<|bB9q18+pI(^|1b!b^6o)D z!>dx^Q6NxtUsg-}qETLNHlld-KC2pB|7JC~C(3Q`D3R6RaayCnbyB0joe0(7vf=c2 ztv*%51)}wa3y`Q5Q4QBXRyW+iA{*Awr;9qB2CL_?QM8#ps8yTk->f$CM7eDiC9>Kq zPHVK8PHME76JfQP9`9+hK(yXw0TR2-8p!H4lY>nx!*UqSp!H*F(_pOMnXE3Xt)7gL zEAMHc7;(4Sc=dpb{7v8J0xKcyU~_r0k&qTcd6U-wR^?ulMu*G%7N*g!A-$tVuVUm- zFQ;G3pOwR~Zb-lHPnN-#qgSU)PYlY?uXjB?g{r=X@yrmp{2k`fonzz0;_leiUY~v{ zzPYo7RztlLXe}f;XkIAj#~jT>xYBgAftWXfgRQ;s_JGa-2hv4DpAw?5FOdvZltn1- zk~}JyF0Xmv#3)u)j8=?bQ*z%%QBI19tnZ)<4h2pOWc4+a!5WfYKvKi`Uh@H6Dj2A2 zi%|Y49spDJn`OJeT-$Tj?v7Nfy~^@kNK^ae^cB01Ol5{ywTlT@#kyu!lCzvrH}1Z) zsK&ObJ50;=|0dn#Q-+i!yC6mV9(Px|Z*70LdKYqH+7fQtT`75O3uFJw)RnE_?4XdM z+olOeTi&amc+-N=d zo|@1%3Facnnbu^-wOd*}HlegSdAPJXRiw0D zvbwZ;lTAtMDRrCD{@VK;x8kgC?I4qZmqyy1OqIS)T9{>qLgQu~dO;wW>ft3xSEYVxj3`;@)ba&wVzoSnsFa2}dWyMY(ff{BJUu41V+qrtsm&br z+GGzEB{b9Z?O4L8*R^fzSeh6-JC+EGf5&1l1a~YUs(Qy_>=tx#cT5?(5S`SsD>Y|& zofs`*D9$>CwPP@ceuU7swJ^wOj*KKmv2K~o?yq$lo^VkVWBss22Ii3<8Rn5PSVL=C zQ-fk@Z+u+bH5MbRt{lgjZR|nx9Axi7GMNK=km;skDeJ}_Bs0y>9wajvcMmd+1gv5i zdyw4ZVtbHXOUu|Dw2hfx8z2ciO5N7Bq(yHFjum>ku{}s;?!9}E%rpXfkjzvfdyrj8 zsd*2wyHoe>K@1^@dk~!`yazFB zGgEPw>dP}zu+@y*a#;LQ`!H76gsKepdLQ$et*t>(Hg<}N%v5Ym^J6e=lL-pWMNM_< zktkK^OQ+4syO_pC4GI=Y_Ozr!<2JPVaGmMu_r+<&)mZ8=aDEc6+w%>ZNHCjd%tZ1j z+6B@@w)AUAZEqJ$-5L#LT0K}?ats-JlCVTp=M%+vb^El|H57fr=oZact@Ss~2vrwm zG2p4U0BL#DCy~*;=`e$*#cET5X&O+asN=v|0i! zvxG~wmL6)QDUK2xJ<7k9>Z`nerPC>_wZ}gTMi}(Ps`Rc9iOlsV_pWr2RNV3IofIP} zSfebv92S3UrHkZ3@1*|TqBB>6!oSivWagsP+{T_Y1Cyh7rE8EFTj`QmgDYJUcVwk& z;*YO%F1NO9`KR6}OFag>E1kpZ_I&TsgfK(CY?XF*hEs%`-y+C(U~KQjYF2Q*fcO< zka-uI2Ikmelf)WaY?8Pmi%k=Me6ex48yA}>OFag>i;ctU_I&T^;qaj`6Un2Cjgz`P zn!Nj+Ca&0GE;e44hQ%h%)3B{_nDt4778}EGxUOjRad6sl zXzB@>4oyAAnn;Yp1z|eWnc>h3)640?ID*+k%`=42icJh2hh~HY^T3Jv!fY_;L*E!z zA*y<`8(UVL-0i7`LsKVhbZF|tXc5C*r&HL2I9MW!P>x&U5Q&j457lsD6zi5bSm%bF z!`RH*BI_|2?6UzKFIYoSho&yy@+z4sXN0i%P-P}_z@a(aR4mV*;n2)XGvv_BOvZI+ zP9p)UScXG0H@TQYbJx<+9gpUr%H5Z4%%Pbn#p}?_Oe5gX%uFTX(A<@jnjMs_n9*tQ;agTKn7?B~!0#8)qsH zbv{+Ux1m%7v2kc|M!8=_UP~(vwmvBCgR1XV4)!Sdv;AXJx^SFj@n1bV&3%PX7n zuG3StI_!vSjiarCy}T}#o&xxeawPN8uSWMFPHd$E&G&v*zqBupaHF@6iAkoM=fu%= zY(PF$cjSnOx~%JagZh`21JAgQGpI5h9ms)dYq!@UU7o0_zIj4C4WgkA=~jbCh0;p4=p!x@aU>KHS>vjCF=P<Qoi@vT#P}z<$zth`lH2PcP(lIfkJW$2g znJo`@ztuTCQjb*0sjED+d{|{cKE!v$2nWfbDp{wvN82$DFVa>qRvjEsryxpSmz8Qr zOJBq~IdIYs)xGuo$eW5yTYJ52q$*GLI^Cg_Ej!v!ap^u-i`&Sw&1=>6e2dp9lFhH@ zyubHd?sAvW8FwB?dQ)ezSTsor+QeW{YjSe1zQ2!%JH(9JB;G<<-@mJfKFS-tk>|nI z`1<}#L3OA}MTZ&3w)Lil>-)33LdM3cn_kxUXN%|~OmYgT6)DQ+h@d&aq}i+< z$=*0tzmmPazpo%Z%p&gf@1V=B=yz=E`*Q?^mE%sk61sDJf3AqPs--g+OjYdriRgn& z0sU6H)nDJ=UqsHcBI%NxKL2WWeg6P2_n@<7qP4z%pol!c7DxF#;wKpBuy0S`-k|`p!shw)u)0VD&kK!#cynh-O9$X)?|x12dy0& z$4L+0DEiWh{yf2URx?|_pk7F`7FZ7xtYPF5q?hW8K2;Bj zpt5`fvGM<OI?IatBLRUBN+!AcIU;ow>huH#@82iJ43 znu9eQ+`z$F4%Tt7o`Ve>+{nRA9Nf&oEgam+!QD8xjf1;$a1RbPa&S)$S{!WRV2pz{ z2L%V4IoQI%Rt`EG+|I!^4#qi{;GoMvkAq1L?!`f$g8>Ia4yHKR&cPiV?BHN02X}IC zZw~Im!F@Tn9|!m6-~k*wkb?(t@L&!e!ofp1co+u{=im_>Jd%S)aqwsk9>c+7Id~ig zkLTbC96XVOCvos(4xT~*P3osLbh~PAfWG=v=6o6lPv_tn96XbQXL0as4xYoob2)e( z2hZo=1suGPgBNk|Vh&!y!Am)K83!+?fU*-BjBPrDM?*I_7+)dSLxV`Nt3mWiK^-c) zqBhI^s(22atc{5guVlWO*!!>H;I$mQE;BWir)uq8(SN;QKPS+7PG*eB_6>shf>dT_ z%6(&I=Bk8d2cP2L z(;R$;gU@pCISxM0!529AA_rgM;L99*g@VXDC-Y&|;#ZmTYaD!?gKu!~O%6&9zQw_} zIrt6--{s(Y9DJXHA8_zP4t~VJk2&}W2S4TD|0rnAjy2kUCYVCQM3%uA<3DF%zYu&O zWlZup!~2&>d9()guUO!(Irt3+zvbX}9Q>YxKXC9z4*tZ!pE>vo2Y=<@ZyfxcgMV=F zPY(XY!M{294+T_ZCj|zPC`CPf{>waf*`wkKtq1+$cKVqrdfy&`I;4G~f-t4*1nUgJ zx+svjnpOP99ejHVzR(;DzTkk{OC)e|lVCNz_ZIY_z5s!;Qz*851lz)Zm;o8&$PT*E z8b5a>uKr98W^pi^gAoq)PT=4~4o>3WWDZW@U;ziC9GuF*X&fx%;B*caQ9!*e z)PtG9GuI+c^sV2!37*#$iYP%T+G2G99+u5WgJ}2!4(`_$-!a{ zmT<6?gJm2n=U@c~S8;GP2P-+ahJ$N4xQ>HW99+-AY7W+La03TxIatTRdJZ;la3cpd zad0ySw{UPP2Y2J(HV*F2!96(G$iY21XmPNKgE0=;926XE=3om4TRG@(a61RvI2h+( zf`cvxJq{*0xEBX~4h9?yIhf*LI|p}gu!Do09Nfvly*aoK2lwURejMDNg9mW%Kn@OPvzig z96X(aXK?UL4xYuqvpIMU2hZi;c^o{SgBMUhUCbGhlk@`?nkaT|Z1*Nwv|Y3Y*9#Nb ztVQHSg3Vc%ZE40b@?yc{=pi;!J$*<8^(BJQQBa9dy2LhaE(%q&ezAF~+s5ShQo-z~ zO%}6})0YuX|K)=5YXURO+nk_HQD#{+l^?3kPrI;B6GpFt^8$la!N(w+qI`JXkgS4i@@O z4&KGVyE%9d1(XN7)>R&c>?{yh>Y8@B_cHVQ1hYM=e9TT6-YqBQ_291%asR6ve2s&z3toEwk;#5@ zr%#u?vjRHgBQt6_QS;n4nERU?lpK7EgKu;29S*+B!S^`$J_kSG;D;Rih=U(<@DmPx z%EA9}@G}m6&cQD@_$3Fw;^5aD{DyM5f1j{U=9a! zIoOYb{W&;*g9AA@h=YSEpdM{6LY_)?y3Zkk^%Q%+^7*9x&W(e~V$7UX4iyZxDpDP2 zQVfoid4kF5ZoR2VcLQ=55%&-0;D{)jHJ=0oEb@q zEOf=j4xQ>Y8+cT3IunYPiK;T0y`J$-66sG_US zr7>m_A4BCHdt_p=6wEMwW5RU~GmO3rhft$7+g{wYMAmsZf}D{s3P!^i7z<$#4&z`v zOb}#qwe3K)2GX2Ajp6Fx#Jpw6!vK-85t>6Y$;i?_8@RR_b&QNjOmiNfU3rs@JfDN0 z9a|%A(m7RJTcpUmWoe5v#mKT9xy<2nUTv^!2IgQy8JRxkiPs6D?S`gG9gb*-F>34V zYt}h;K3=A+`9k4VESG*r46j#2MAtPM*vGvFruo>3V{Zpb$lUW#3x1wztX2<8rIEE%Sdt9+z9?+Ln9a zt@T_x;w_SF$6{D=YxT&}it+|w*R)=0Wcxgqadq3@wz2FcU2s+6b?aDeWcxgY@Sg3l z19L6R3Zo|5M@(~v;;PBqFjpE0KIg7Sf@K3R^H&-9J`aknd~M5Ho!30=h_%MZ^SKYv zE~l(DitCpKU3+IA_vO|}nqxg|fQ_&THp3R!3fo}2;BVKXmO$HVcjPTg+gx`VS+90e^y{si56(kQMktWn%HG*20&^-s*Pv*c20vRsjt@14b3 z8+qEu&`Gw&6nd@XHFs}?*SK7LgSI$kqM>szj~w5=kXQC6W)R|@HU)%kPw=wObyb|sPb11v(Ku$Ad$jkB zEPZvES=x*^M?>e~0(<}$;Y0WcK88==Q}_%%hcDnu_zJ#;Z{S<_4!(yU;79lgeuiAQ z1ef6oT!m}!3tWd^;WxM;_!$jzxzxovb2NS@^$++H{(`?Dpn#AM@4X6pVpf=Qjx=;`5Lj!0Cji9k0 z!{TdoYdgFqMrr*pX-*El0x=_Tj$Fl6lh+)^rbeEA_0cTmyy$DL0d@DY8NF)`EubZ| z5~QMg+DP%Wb=faBx1pi7d1y%62el)wJ#>JM&`FT~>K|P#i*4HOx~(p&N9E9)h3w&Mw8v#rB>?mai4;&eD3&iza(RALtAHpg#aF*1E^3)%`F zN@K%dIE2Co7zv|bG>n0<5C-8e4#vX-meSg>|qV zHo!*M1e;+CY=v#G9d^J@*af>`5A20~upbVyih*We(jbqZ0jatW^^2 z{H0>ouHtqhN&iq~OR_#5bcbX)?u5JGZny{Th5O(%+z$`HgYXbMEXb_5S&POKE3SS% zLh7UN7(5P7z?1M4JPpslv+x`|4==!r@DjWXufVJD8oUl~z?<+EoPoFDEW88n!h7&O zoP+al0X~3>@F9EzAHyf`DSQT>!x!)+d<9>_H}EZd2j9aF@FV;LKSM5Dg3E9PuEI6= z1+K%d@EhEK-{BAV6aIp~A)ug;5As6+CpfXf}s!$E8Lk*}2wV*cCfx1u+>O%u)2#ugIG=Zkj44Oj=XbG*LHMD`Y&<@%| z2j~c$pfhxVuFws-Ll5W)y`VSrfxgfW`ojPSh7cGCg9ObcET>$4SQfO?1TMq01m<-I1ESNC>(?1Z~{)kZEy;1hdba-xC`!v zd*EKU4^G4V@Blmr55dFm2s{dp!Q=1*JPA+1)9?&D3(vvx@B+LDFTu<33cL!h!Rzn_ zya{i?8F(Ac!aMLTya(^YIXDj&-~&On1pVm??ckG`ET5g7C+AU~?~idE8ZJ`Rhwu@6 z44=TK@ELp#U%;2}6?_ff2-1Uo{tx2L(*|Eha`z3^Z;i_IkG9(4Sk6JdqZ8j7c{kZ1 zXrIr1AoEA~34VrLxCEEs3S5P2@C#grU*R{n0l&i^@F)BQe?vf^kPq@h0VoK85Cnyw zFcg8JPz;Jg2`CArpfr?$vQQ4nLj|Y^m7p?IfvQjqszVK^3ALa$)PcHC59&h$Xb6p< zF*Jdu&3B8~<^nt$65BkFZ2!;?C z2!miS41u9A42DA}jDV3a3P!^i7z<$#4&z`vOn`|n2_{1XM8Xt^f~gP0iG4kzFw+y@F9EzAHyf`DSQT>!x!)+d<9>_H}EZd2j9aF@FV;LKSM5Dg3E9PuEI6= z1+K%d@EhEK-{BAV6aIp~As|S|2l=4@6of!Qwk!RbjkaB>=N^(0qaE_b(bSZ*#B}%J zE6AwA*WpVpYfRVgm=&Vw!cYW?LNO=~C7>jfg3?e1%0f9P4;7#yRD#M-1*$?ds17xt zCe(u3PzUNlJ*W>2pdmDZ#?SM4;=&n0<5C-8e4#vX-mqi7*YO!wg7*WJrNjm;6-=|UWQlTRd@|vhd1C&cni+J+i(`%fp_6OcpuKedAI-{z(x2FK7xgK1AU<%^oIcu3?VQO2Ekw$0z+XK42Mt{ z0V81)jD|5V7Q!GL#=&@)025&nOoj-EgeedOQz05+AXbo>>g&?H*O_WN@WdIF+|q2- z4n*;ECIJ#*8cc^7kOaw)0;w<)c&(%(4bmY4G9e3Q!EBfVb73CLhiu4!1+Wkn!D3hf zOJNx-hZV3AR>5jm18ZR&tcMM-5jMeQ*aBN&8*GOiuoHH{ZrB5RVIS;=18@)y!C^Q8 zN8uP8hZArTZi7>BJKO$6cnBVbN8nL-3?7Fk;7NE2o`z@O zS$GbfhZo>QcnMyHSKw864PJ*g;7xc7&cNGn7T$q(g_|GswP#V@BlCSY2j}4ed;k~W zL-+_jhEL#A_zXUWFW^h~3ciMK;9K|(zK0*+NB9YThFrJ=m*EOrg=_E&T!&xbH@E@6 z!yoV``~`nQKw%*tkGa%<1|pqX(BRmw>6b;hsu z7v5i2QrgJXpY70&iYnJ~I4pB3t!l@?vPQ1{-2?Bf+IDT_Zlz^ypH}`>TF#VbuPiSm ztzcyPI-6G`Z5gJDMvAXb4Jt(&pGuPCs0>x0DpZ5&g3J$J*RoV?wh^mgq}`+w+ECS` z!CFuo>OftnCrBsy`?!LwZhSkOuf&y0=El>I=52A~W^k1Yg1psCSGr6TWBZ9iqpR}X09UdjhT(Kr-lyD5jsI<=mK4#8+3;r&=Yz= zZ$TRNwTH4cti8yh4;A!APo{uHq+zr4s=UPzK09qV3EA^rU&%GlJ(jfyfAq!@~Y(dtCufC`$toLP( zk>#r|+QgshzYVi;?RM%Z>8B`loF+EBu$%Hk_4G+OY~&8+l&FIw{5ZKBj276=QBXX4lq`xfa&JdZP~8 zsjef%vkuD|*g)P!Bkv|{Yb#vo0-82 zdF0m-V&!>GbDVbiE32JD>@v#gPn#I^M$1pY$=42JA~RCs94XH4x2YRC+DmPA`)$#B zBChCg2dY>HHM7~?fI_`mc z;XXJG_rnA5AUp&Q!z1vhAmgo{?Wh5ciE~Z9$Bcsd{=+C}+bSM6N_+3QwlO?GKc0lA z;AwaUo`vV&d3XU{gqPrDL3*yAPN{QvZF6|Ve_`uPe${W`*jcIa!-TGJdCe%SpOdO? zSoTt{OHs!gek<2j>YGMk{nT4kZX5Nt{MM}v`x&FKzCzWP=Hyp=9DHTNoQiK7rR|HU z-iPIJUVK)HI^HqL+k5UTZ|nKHMsfWMMe;h$j8yL1IiG8{4CZ^Z^1hL#A1aJA^-#Jt z6V4ea`VPjLqCJm&p0+N)2XGNSgpc53_yj(M&){?T0=|T=;A{8>zJ>4Ld-wrMThAL1MszG(A0X3l()P_1x7wSQMXaEhN5j2J-&=i_Mb3yh5 z{%3)86K_FYOK1hHp$)W!cF-O=Ku72VouLbKg>KLtdO%O;1-+pU^o4%V9|k}$gup-; z1cPA+425AZ9716PjD%4z8pgm_2!n7K2jgJ^OoT}=86qGOra%--g=mO@ScrpoNPt9` z2Gd~%BtbHyKq|}xev`|Q2I-IinUDpuU^dKwxiAmrLpJ2V0$2!(1X;KGb0L<^)v{k$ zOx6-3%kPZPcC|~%TL#Nv1+0Wsuo~9DT383`VFPT0O|TiZz*g7>+hGUngk7*3_P}1) z2m9dw9E3w~7>>YEI0nbz1e}E1;1t{rcfg%+7u*f^z`bxEoQC`10eBD|f`{P|coZIk z$KeTh5}tym;Td=qo`dJ%1$Yr&f|ubHcoklQ*WnF#6W)R|@HU)@Bv(e58)&D7(Rhd;WPLgzJM>`EBG3|fp6hE_#S?MAK@qX z8FJwgT!t%f6|TWAa21+}3L)P;Ib9~ua<%JoMiEUVn_^L!1B z3T%gU`O)80zCP-F!-jV0q7f}Oh9=Mynn80xdSg2qu~cT+>$D)PrIF^p587_06^X5( zjghTi;^AkD-AiDb_HFahrZ(@}(Oi4zU}Wp((B5CX)sc)&&>6ZwSLg=ap$GJYUeFu* zKwm*d)JH?wUB!MzVg0*`p0DImfA)AKl>75lf4^;M<3E7j1w#l7gh4PEhQLr52E!p# zkVVnYY*mkJD`JC?*tToUn3@(Xzx-)j*RkHhh@g?kyyRKW%chVQ1ydm!VjvdcARZDR5vIX(m;p(U z3@MNbGl5?Nb)-Q$WI!fl!7P{!b6_sagZYpRIj{g0!Xj7QtA=e0F$ z``bWQH^L^^3|j>0x&CB;eH3gP+g2m<=F6;YK-*|`JM4g+uuG6$*v>pX$H8(8*iF_R z*bDn$zaW*^4hf!>Bqhc>k51-C?E@qpghNKQ-wjV2&%@*$funE?j>8E!3Ae#1xE=0* zJK-+48}5O7;XXJG_rnA5AUp&Q!z1u0JO+=$6YwNF1y92>@GLwB&%+DwBD@4I3o=}O z7g&DlJtN6|Vd51d#dfmjIl{Ji@~V;KcNPq_FcR2etpmP z;*X&}WBq1mCkJ6hVf`|&x7TonQ~5ZfyneFm>lK{ieHZuk0d9g(+}lvv->5i|{!F?_ z1KLh$vQgaI@H-o@4S&Q<>eps+q)}YIP2%-OYo*U@pvq`H&4cumBdqB3KMdU@0tv<*)))!YWt|YhbM) z8-{*E!WazONUt+W+lMYy?igr??Dc-jS`X11jI#ROx%3q3wQQRkrKDpMZ1z{bHl?;0 zW$jBz{kEmt>aS*PGHo-;+O{=*!z)gHC_}sYvE3-HpDQ~*QhOAa`$6)+md9g+JB&Qr zMrSr-8Ka$2*s;sV&_4pZT5@KX?YKY3?>5qWE{`^_dyL{fmq!&h+i~65+H2(5wsCWL zZ0ls7k)VG(aV?H3!PeCNn{?5YpslI{MxOqW%%erMjx1w;@TUD#S*{M7pFj@fwV&Dy zJZ$9oTw~VavaRb=A}e-kLQ2Z?NO>PwYKq*y)8=emGOPzI$%mDn*T-z z)C)+LFNqod)t58od;#fl?b-P6l=}aod|3gr3XBiP%GV^{@Fsy5ibWc%vLiJr?yI+Ek93@+^%JtwyosL;jt}Jr9f1CY?@l3t&HuVRiwNd zPktjSvSsRQS&&H8@yJNWX&L#h-2wvA#!4R+1mxx~R;1p=dM!_+pQ+dWO!3+)f;SAk zSfTELj%O=0T@ie~RJC)JYHTR+MY*cyN>@Bry8M;E0_98Q1{5e!@>jXDTe|Y)fP9i( zw)WYwb>AvpH@ATN?M7O0sd-V=CINekH3>LbzDI%Kja!$H(JNvMr!0gqnq|^wJ1-LR zv(U->@^YGkak)^!@&KoUHR@pHIpm8Y^4SMicMkc)Bx@3A&>>C8Z2%|*rJ)Rzg>q0H zDhLAa^i9o6o@K*vR3=NmlI+Sd4*foU zOWVPw;;0JMpgL9g?0`|#jFfo!VP5AKvW>~(s6m!~wAVVIiq@o+T2LG6KwYQ@^`QYY zghtR9nm|)%2F;-bw1igB8rncxXb0_~19XH=&>6ZwSCFYKAB>;}^n_l}8~Q+B=m-5_ z00ct_41_^27>2-57zV>36h^>E7zLwY46tE2!XO;R!FZSe6JZieh6sp+DG&uyAsS*J z7UCct5+D(#!E~4bNstUFkP0)w0cpTa)sX?2kOi|~Hq3#!Fc0QKHsrtpSO|+?F)V?l zund;N3RnrNU^T3PwXhD>!v@$0n_#nWK|k*4b573ca%sHdXMBf z?uGlPMZa8Y_QAOuv<}>9lI|zT*N)V=gswwJqU&cM9S@MDUs`iFB@dwKqh)@Sa6Cw= z{z=i2sy2g%=-$JW*00!GOFJi$tNKUCdXy}m3*|m6SjXcre_858(={08`<)$+ljZB6 zrn225;W>C7UVs7w!DnAoC#)m)4r%Ygd+_z`}BpCK16!DYAtSK%7`0@vYJ z_ziBr@9+owDO}J$>Y1B~(SO$#@)rqzli+J_?ueZhD_^Qn+hIUHDeCJS(KRUc4I>|U z`V|1PPwu=7hrCzZ)mVO#eCQ)=a_oIrB)kN#!@ zUVqQY5hN*&LQoirKv9s-YI24TC7>jfg3?e1%0f9P4;7#yRD#M-1*$?ds17xtCe(u3 zPzUNlJ*W>2pdmDZ#?Skae;5G45CQ{X5DbPPFcgNta0rDFFcL<=Xcz-yAq>J{9E^tvFcBuf zWQc%Bm;zBS6}SlCh=Ev$gLp`QM3@HCVFn~YGNeE%%mfFdK{{kWCS<`Zm<@AaF3f}Z zkPSJo02aa`SPV;GDJ+BKumV=XDp(C`U@feJ^{@dp!Y0@ZTVN|}gYB>bcET>$4SQfO z?1TM+eM^*gj&o;ucBHpg7B~*%DaU$fI7p7|Agj0Id2l#HhV4W`&v5T7jMK=&WZ6z5 zB`YyH%K3m!T&(MRSC+3iJC2ZPJKfPTJv(?*5*)|K(r;DDmj*2DIkSw`T!(_=dFiM+ z`>=NOL|!sgiuGLKB$>9uiPl+_>A9r0k!RcWde2jP>r^EP@l2PCb7_(08K*Iy?~xqG zy>K6#hWiEEmSL+$Z~XzXZrZwaJRhXFhu~p&1RfP^V{EqWyc8eh{9S0zn?#Ps$b6hk zeOvLCsdxPe67}=SsZsK3O7r+{-Pt@zdHvpObd>xSgtgpLl+(||lQqu7bybJG< zs2?qy?<`a=0EzT+GuiPzspsH4T!0VYB76uR!N>3kdn@@yC2hMBqjt~jwHnn{_fxHP`>R3mniRKfbw=I# zQr7ZQwROX&P1SWMu0OXgqY)$bZ<6^+wRL3bl2Z@rLj!0Cjf4yO9bV6RT;J=pti{Hp z+4d10%{zyVT-W(f6H@deskJ57cPkxD>02{0{4Jw($eUAKzi#H)K&sq!PK?dsu7z~V zbLF<6xt7ohT0NBegwrfR4}!It%vwy_f1#MO{eh3f-VP^njj% z?OfJ#S@r4Fiv)jTX`N%eDXt&MJ?nS=%#&w8^|%j-`Wq2#KW^lC79o|mAJua7C11Zr z;WyuNJ@zA8f6T0*3GLZmkxOsf7peOKo# zsh;EKx%?qi(c5w>w59u}rF>SQ_hcZ|*w((+g|IIDAW3u#Cfnx}P^;S<1kWW=Q)meJ z`ftp+$HAB`aT&=meBCKAS(aAbQp25K^P<{NdNB-!Q{<}Z%nK!91dN1HFdD|d zSO|k~7zg78`%X}+U48#WE!%{=q^O4mRmwzC^p8BQ;ZO%N?F$wT9(?e<;MODHWWRk< zWvz=5k(U(fVnmW+JJ6Ve#p<+f9ct;PkmhqTc%22-9ZHl`;Ft>0RHgs^qH7?Xn~|4U z>6%qBr1$W(Z8_6@ZD6iCVyVM+Dq{|U=aw8tkK-w>U+b{;SgzqXe?-T4EupKS1Tt-B zS(b*3HR{Spym^MPLR}ft$nd$Ht7Eg55j8i{>E!#|%cy+Ikg7Q`LlPZHWc%E-t!Dl*DzSV?(6NM6 zpQjkE-ujvMOZ_(Ps=?dLUq-6W@IU?XgT&9DWw z!ZyM8PDFLwx+QMUONw<1+(C+dMccI)suj;IZzl;p*M>@PtrWHXcah|CV6B_jZYk^7 z1AAc~?1uwz5Dvj%I3n1NhH@suE4w12XQa5kaO5~jN&UG7v!v$&9;4pll-95MnWe2q zh7*)O3Ae#1xE=0*JK-+4Td;k2HLKJI>>djHYTr6u_fq+Na2oE12jD??2p)z<1lyX9 zO-+zr&~wNm>(gW97i2AGvya|9!8(^7BcZl-0Fp=Ioi9yue=vWX-aJ8BeF2TK`dB@2yQm@L;|^)IhDo}##ZUBOyhZ{cZD^b0s~^3GyyM4pjyj%O*XUxaWL_VNtR za}?GW(_Pqe-aSv{FZi$AI`dwnus$&E%Jrpu$$#C}S@kl7^*5cVy4|bt6)EL-m7@9? zsk5lwgV!jjA2iG#dX9?WXP7;%_PkEzZ@`=I7My{%;VirZ?+UgR?yA-N9UJ4wqV`Ac zk)p2_GsU_UyiXJ7;5=M_58xtv2p_@6@CkehpTXzw1$+r#!PoE&d<);f_wWP!2tUEk zkPDaKGF*YHa1DNe>+mc5Ciol&bD`ArD>V)`$on1sfIs0c_#1dI-jNUTLjfoVfe-|R zpfD7HqEHNqLkTDerJyvFfwE8z%0mUH2$i5RRDr5c4XQ&8s0p>8Hq?Q-P!H-u184}1 z1fMI~y7y{KQT@PX&I#As6wQDdz$PT=cVEmh_O}l>n$oFe&>UJoOTm8~){eHKysxcD zf7^hgHBGd+X%p5xOIwoKL3`)`9R=IxLCd1*n|miR{0@$FpVOIUxn9wR;%W|sQ29U@ zM2dca!%Rtva!ilRNRCdKF+-mIN}TF^`huU9a118R*WS#!Vu#SoP#6ZoArwZyNEij9 zVGN9gFbIcnFdinrM3@AVAp#;{3PizFh=v%5g*b?Z1W1HwFdb$Hw!^VG4DwOb{9uqo zIsM$#qnz`qhUXzRnc7px@-;oo54!qPPW9K6{0K3xf3&RqnKZ@sO>CEo%nr(9buqCH zE|Cu^p$#&_Bo6GAs|E+%74OJK#>Z3+{${;9j^7PQ(5106Yi}2{&!d@~&6M z!{j{zkHTZ{I6MJQ!c*`xJOj_dbMQR8058Hz@G`stufl8aI=lgI!dq|#-iEXA4!jHR z!TWFy&cg-x04~CZ@DY3rpTMW^8GH_3z?bk9d=1~gx9}Z&4?n<<@DuzDxo`0a07maKj2UJ3;u?Hfq2HHY9 zXb&BrBXok!&;`0eH|P#MpeOW#-p~j7LOqvui$bd}9f>|&d=D=K-2lF8ta$o^0ghj9zmcUY22Fqautb|pt8rHyCSO@E2 z18js%uoK6#hWp_Gcn}_fhv5-;6dr@e;R$#Wo`R?08F&_+gXiG|coANLm*Ew76<&ka z;SG2b-hwmmHk^fb;9YnR-iLE=9xe#B=LfW7PGYiLOK_fAM`g%Y!X1fojEAPxf$jt9 zxd^@GJZVH{f^p1O9}+;BN>B6!JlSC;$Z^ z5Q3l(6ow*D6pBG{C;=s*6qJTCP!`HTd8hytp%PSvDo_=wL3OABHK7*NhB{Ce>Op;I z01crLG=?V76q-SEXaOyu6|{yn&=%T3d*}cip%Zk5F3=UaL3ii@J)sx$hCa|2`aypf z0KpIf17Q#hh9NK%hQV+Mg%L0kM!{$p17jf!!eJbYhY2tdCc$KgfJm4EQ7{#vAqHY0 z4&osJ5@8xlhZ&Fr$&do6FcWx>fg=slAp(I}ov&gy0#-V*u%R`3sW72Fo zHwWgzJeUvJkOK=~AuNK$umqOEGFT2PU?r@A)vyNE!a7(F8(<@Bg3Yi6w!${p4m)5c z?1J5}2lm1~*bfKbARL0ja0HIRF*pt<;3V7zr{H$D1MY;o;BL4F?uGl{G~5plz=QA* zJPeP(qwp9!4o|?7@Dw}^&%m?r96S#%z>Dw_ybQ0vtMD4U4sXDl@D`kbx8W?j1Mk9n z@IIV_^Kbz^fQ#@Ud;}lEC-5nJ2A{(h@Fjc&U&A->Eqn*x!w>Ky`~*KkE?k1ka0RZy zHTVUt!>{lg+<@QV5BL-Qg1;dkNXQ5Ip#T&VY}Z<}%}G50kdzoLKcywVxhd~ZaUHAz z$@g`zl1mfQwcAiZG+GD>LlGzn#h^HpfRa!ON<$ea3+13ZRDg<52`WPss0!7fI@Exg zPz!299jFWSpguH!hR_HaLlbBU&7e87fR@k-T0?(GUZ%5C`#)0EsXSro#+Kf@Da6RG108#K(~a>5u`LkOi|~Hq3#! zFc0QKHsrtpSO|+?F)R^$4vqSiU%9m9{uOA)QZn?*vgRC98P4xZ#AnEjZFwS9+w_;w z>~dHED`6F^hBdGj*1>w%02^TwY=$kc6}G{4*a16X7wm>Tuow2hemDRJ;Sd~#BXAUs z!ErbNC*d|Y1-HW;a3|aacf&n!FWd*G;eL1k9)ySBVR!@{g~#A=cmke;r{HOL2A+lI z;CXlfUWAw6Wq1W%h1cM9cmv*qx8MxC4QJsUco*J-_u(9zhYRolT!atdBls9TfluKx z_#D1~FX1cr8oq&V;XC*qet;k0C-@n1;SyYiD{xh?Jpu1`mU(^_x<>Xb%~9)~?iadn z9e#!1;0F8-f54yc7yJzYg@k;N9|}N02!tRg1cjjp6oq0?97;e*ClKK zN9Y8dp$l|{ZqOZiKu_oey`c~Eg?`W<20$=`z(5!TgJB2^g<&upLSY1qgi$aW#=uwz zgK!uJ<6#0!gh?*24za2%BItY=Nz?4YtD$*a^E}H|&AEun+db0XPVU;4mD4qi_t4!wEPEx4|j6 z9qxcT;V!rv?ty#ZJ~$2c!vpXjJOmHJBk(9Z29LuN@FYA1Ps20tEIbF#!wc{tyaX@9 zEAT432Cu^#@Fu(kXW(r(3-1UwJI0$2*BD>NewVcO;C(m;=ivf;02kpy_y|6RPvBGd z3_gc1;7j-lzJ_n$TlfyXhacca_z8Z7T(|_6;R;-ZYw!zPhhO10xB^u1WwytirHeU;05o0(BF5}h|?)n}LTr20BRSL5nAE)^*6 z>)MYhZyk_|lHsTXm7xk$g=&J&OHZmQeTb@)bCc$+V^f2sYCK4*{z|tVdP8ZZ7+;DlST%Ep=5?pNfM2r9Q=H$Sx;2J=R@W z11cNzFIAS99G9ZL2=97@wWFcb=V%0tp$XOdx)JVwq1CW8rJ82Y99lq2Xa%jI4YU<( zUtBWRiT9RN3++g64;`Q*bb`*%1-e2v=ng%gC-f40?s2TGT3=t#o9sT&7y3be!RK6e zRc3t>W&k<*!?d#4DH-yDXU`v3aRmD-X}MJyLP`DcW>u%>W)Y{A%IZ(~xXSW^ZP!CP!~Ar>x~UJRq;275MCqTLL#3Q!1dN1HKGUoZTaKoj z{v5PCt;LIL-OoXfp~|s7tF#VT80BoMm@4%F3-?*0bqvN)PJh%e)xkqh)>D)5QqVC0 zCc-3`3=t3sQy@yPJ;`rW=(*TaDH{zjBzW(Eb>U+v9S8A{K%Q+%ID4)SMj}PMH(|Z+ zFwJ*C>#$9y2QwfElF73@a3hy%<-5V=IL65r%`;rTXzfTL#om2OirOos(!@;QRnm?$ zNQVr_ge;gP`0Rz6n_4eslj5rv*6BRQU+reK);TjbFDcem=8>X5qbI+S?Hoz770-z@ zp9KAxOg%xL5ZNTzP772k&e~N|t}DDbWZ0*W(J#;bERceZg_QO+tkzk*i1LeJ2}!<| z#I*$G7^u0ilqCH@I&<+|NviNN3j6AobxT<8uc&ofSRq9nD`6E$UWPR(#kd|Rw=c}C zLG@@gX=`9DtfKeH6Fkp*`ye zZKbJgu$^3e8qLh$l_~PBsn}H4+cJ0fE@(ZL@1&sq-Ug$_=#(VB%oY=wks9YnaekFb z-Sx1(e`J@Rwk&4@yQQFG5A20~upbVI`p8?iM zdY2S*+zt1@y>K6#hWp_Gcn}_fhv5;ycGjVWGbYab1o9}Q^gV%5N}ukJQPg{ft+V`b zntuYGgs0$Xcm|$@=iqsG0bYcc1lu`{IzzTj^_TsXv`o}j{FIEHm73^248KZA{TxuW z?zyLVP0Bf5_fxHP<-I{k{oGbns}Jy-ermOj@LQDB*P8lTmb?_w!B+{?G&@64`*Nu_ z5V=o3-&BZ?K_m!zd309fVBB>*K^$7rT+KG(Rb^XADycbZ*!7b zKuc%^t)UIHg?7*$IzUJ01f8J^bcJrv9eO}d=mou@5A=n8&>sdsFoeKB7zBf12n>Z` zFdRZ*1dN1HFdD|dSO|k~7zg8F0!)NSFc~5s5~e^DOoeEOfmn!xcu0Umme(CdKc*z`7@0 zLef%L2Fqautb|pt8rHyCSO@E218js%uoK6#hWp_Gcn}_fhv5-;6dr@e;R$#Wo`R?0 z8F&_+gXiG|coANLm*Ew76<&ka;SG2b-hwmmHk=h~=R}sZZ97@F9EzAHyf`DSQT>!x!)+d<9>_H}EZd2j9aF@FV;LKSM5Dg3E9PuEI6= z1+K%d@EhEK-{BAV6aIp~A)u&`5As6+CpfXf}s!$E8Lk*}2wV*cCfx1u+>I=390W2%q-*agV$hIB96B1LMKcD4%@q+bI zK||VX1dX8yG=*k@{d~hxljlCBIXNxJ@!z_2C)1LwR?wPM{Yp-nr8#|)x4C(1)>+<` zhT1`UQuXV3Uf-0|f#MyZ6Lf|y&=tBtcjy5f`$S)6Y*U*3s@yrv^YUgup-;1cPA+425AZT(F&>s=nx}Bb2iGM|yj|Egu+1kmF-L zSl8W1x-$w!!x$I~VGs`EU_4BKiGr`XtuJ?)L`mD;((@PAt*6P8sXpT7NtSb~NRp;N z6ikI^h=Ev$gLp`QM3@HCVFn~YGNeE%%mjYo&XES`kO7&H1+!o_%z?Qu59UKQ+;r)b@N(J4>!O@*aVve+g)w@lIz>j7Se7$VAf4!D-CXg?XUxO z3icC4&t>=AiSHt1H|&AEuurh>(>-fQN{n|NSk%hiPu2lANUGoM$~u6DNIDEh;3yn} z<8T5_!fkL0ZihSIPPhy1hI`;%xDQUl{qO)h2oJ%-@CZB#kHO>c1Uv~(!PD>zJPXgk z^Y8+^2rmi#m(~%RmXYMTQt&e6^($SLsiDt`SIE$xt*~UIMJL4a>!I3x$5(G5(X!Ke zO%ffi!yE7>yai|AZ8!_>z`O7sybtH#JY0Ye;39koAHm1)3498l!RPP=d-5zEfL_O#RUpUzyf>-Ni}G+Z43! zoJ!E;l28gtLm4Ow<)A!NfQnEFDnk{h3e})G)PR~$3u;3hs0;O=J~V)a&*XWVc*^Q0vDE7<>p5x@=*C39 zRa^~KuayH4w**-Am%79@|erN!}@d&`n-qpW@k>-_xcQC9Au$RkAVN7uHKWZRU? z20TY(hm>^eq`3Z()76HvxY>g1y7O5+cQ^b>nhn#lKw%+qb;>AJcs$fO}eL2T>Vs^0S@M^d)C=?h$NqD z##;6;W%V_m6+1N{C1rY~yiqDOMcx&p&B!Bp%CR0`j*_FFq}$r@9I<10YQ;Lwj+3MR z%8{)VeUMM&sU_>Uos=BMDL5^h4B&TBml2+JEyB;KeyCR2!$aKWT+~lKX#=TxYMc^LbkacZ}U0`@URb2k8C>_c*!# zJG89yK7I{%^SKhr<0U2m0o>#nzQ z?wC8H7|UVjsxwwO4~@Gk_5Y`Tuqyuz*%!vSfNF{S=eqwjueG>GvM3{IC)XLP=&spb z#F=I*=gx4q;f{Ixleco-VtLKYYftO5fsN4>F$xYnEPLE{ZIa9-#@#A&JnXO z=B;;E4kaMf5-F$G6ESKEL6|7irS1~_}0P|)9I>D*}5 zw&~uQ-8;8o&K3V(|L=~#)c|MTCKYtAKKGyg?{@pT(e3|uy{x|093ubM$#ph4)#J3s zJ&oLdYDC}uU0ik6Ji?<3|E`vt%V2LV)p@Dzzy32LkQ?BvXR60Vx__qP>qf=@@&0#! z|IJgtHNaij?fu^&*V&g$j~%6Z5B)#+leepq?)v=ytGk^0PufLf|DSR5dYbD0VuHJI z_n&-TJ#ZKC_9w0P?jmw}e9d(;>ymMUOa9gNCm+ju$+$*l_DbE9Gh4gnx;k&G&u0<; z4SDO@t;gI8t##agRa#+f5%N%}R)PQ4O0%8bluOPcb^TZ6?O#h!y$`NA|DpOnnC7m^ zJxuPH|37)l@D>~EJmdLK^jd&(sb}O5cMidSuGa#b%buFwJwHY|hvYxSYXQzBjmhuc zr2bPDT`tASs`fGfmSg=j*F9x**z>th*8bt9hxALvRbltQyZ_|lZlm)yiw-C_m<&aOmDHg z{;Rv(|K^=d=Y7;`?%SJw=ApKExci&eKlvY>yw>vXFPB?1XJ-CV`OgYw>`KT8n z9}rmgQb2+FLAec#K=XjWh7xETl-t4xv=0cZFM)X~YTb7NH? zP67?2OrxOOcoj;Pkm^B-3S~;Dqm=3#l$)hO*%IoVPhx%Z1?A?bU~v9`z)lkD5|kT~ z-{|Ua38^IxRiQ9?R#kq2L1Uju{j2(r^iNmQr1Vazj-pOhR2H)IBIST!kVeqy|4yh2kWnIuWlz$?j4q zDwHXqHd0qR88Q{hb|>bjP;kM3z#dYnmkd}zHDD6zAfZmuFBJ-tkm^LZ3PngrRUfHB zajwwicoj;PP>h zNl5iST!kVeq~>O%3dKoCO@Vk7N|un(`^zaRlqn%|@~cp`g!(i2gPHs)7+lEJjS#g% z8!jO=JfSKSCLz_0a21M>km_ut3dKoCEoHn4CA;fNQK3wCU0EuWEg`i?IVuz^yHynm zDXd0JLTZshRVYkC=H?czVi6KEhfIayBxH6>g_0$tx}Ty#nG!O#z{^=Glr14OEpk*S zxJW=?D;dN#GRf2~f4GENN~pC=eiaInkhv;VC_+MJUn5m4PGYM5coj;PkQ)6I70Q%Q z%`>%z=VqzEED5N6Z~?no6H zCn2?09iW@U*poIERuAh_}q=F+P*iB+RWXx1(oP_#PuD_HUuYyzD<)Tz5 zK|-pDL={Svkeb9ZRcMxk22fiFy;H&7B?1C#ORR3t5jijGGE2NT`v7ngr!0s!*zg)GD5-LbKe7vsI|KoWZEN`jk|o zCLz~o3{t@n5>#_&qza9bkUFmzuR>EKq&AZ%6-tnhTFHqjlqw-LMQ5teED5QD-fR`> zUCOl;_ED!-10`ha3N8;)p%D^N)sIx6aqiG~6`CR;bv6;DLJ1Nw*QE-jx)W!r&@2h5 zozH9)>MbXEYN-2^RwE`MW98-!QlSwNGRI4W#!0A`tfM|mG8LQRt}IH05+tPNK%xqz zN=R+yGgWAogv?!r3iU4ITF5@?1azQ;)RBFV3XPDEvD}wOs?azInY#=Xn&K*z8>K=C z5>lN=RH0M}sllJALbD`fu1FQ?EvLb1BK9e(224V#u0bj^LPF;5bfk)nlbG7ik5{27 z5;E7M3MEL$c{-V>0@Ea*R>yP|a=6pdRA`QbRONG3sBbyfK=f1R?1Lqw4(mfyXq1GE zE?ge1LK7sU=EOu5nkpf+8lzQcnkzAPx(YcYq^eI-p*a#7#qMK_%#*n)*jGL~)Rb85 zpxl1tjWHZ7A+=)|qC%r2r1mJIRcL~Q)InpS3Qd(zktkqC%MxQd2NXg|a22I*_A6!4=HW$_-H;e1=QNSm?{4DikIm*FuM@ zV1xwKdW=+|I0>oEDqe+>C1h?^DJqsJF||IjR47|QY5{UoC|Ev$saY6O(HPX>5>m?) zszPBBQZp`Gg(4)RHmgV#ij$Dqoy4n9vV_!Tm7+qK?owGQlr16Ei5wLQuH@RRLez)D z;Sy4tRj3MuNyyl&E{Cg7goIRGkt!4?A#<~eSFvP?shOXmLYWd$L!G5U*%DGioufj* z@)^|}>X6E6#3ZJMI#h+iB&3EqT!kVeWcEyj;v}SoI$nj6C8UNrMTIgYq=q_6g|a22 zhB`-uf~&ZOIz)Yb9xfqODpZBSB&0eKu0jzKGWKAXBULC)LTaevRVZ0PY7ds8LYeNm zvQ#KrLgrBCs93Okj8{V)QdJF@gw#-ns!*7O)YcuYLJ<;DyVgh*ij$B!-o~p?vb(Mn z70Q&5T5VY>lr151wdJT-a5dLz3sILChD%7TwonxclaM)LDik3hwb~+8C{99ZhZwIy z$r4hlEk%VgC8SnJmI`G{NNpiGDikaiI#j8U>T19wq&g9*LSYh8qZ6(|5fW0XEmDQz zB&1ebyb2||>q=3fObMB*Elb6+C8kzejtT|W2neipruxv_5OoP=paj&!AEZJfB;-62 zjZ}eA5>VG2Myt>S390d$s6taEWDNY}Xcd|!A-S+LJa@VZ%#eUu`AI62E}=TImzIwR z87ef-Ra5SK73wdSiquDv0X2;Q9V#K$2ghM5IL2LWtO`x?EH_yNVQdHF390@LQ=u^uQuU8jp-B>QeFB)Qf-w>d z;mA2CU(n@P6`Uc#P=X`naGIoo=@N9E;%2DeJP8h_Srh;Q6sMgw86`CX=)#b@56eA(E?}$~Q84@xtxLi(B!E_0#vz81MnkON( z`OR0M{&n3$S6B5-Law1xu`v=ehfakiNyt5PDj4IgE>?wRcvP39V(AidZi5*rkSPIm zaWPAUvL&RBGdU_0T+h|nka|XEhfBy@^xRMt43nUm*x@P^AtAMqN2*YqyHvaiB}>TI zrCd%?p-c&xqmiXz*%DJjo1;R(^<7Pd)K^`TkeVK$Dir1}6|O=N5>l%(Qib9qWFFj9 zC|N@0*?n$DsX}oQ zQvHutp=1fExtXFunG!P322?0pLPqZ|=crI{V^{A(8moRu$aRbeRlzU`s&0gl$xataNqIxDFwMd~V6y^?vt5Af5 z)C!4Ip*RVdn_Ik!B}>d4G8M{{kl8U6%9fDoevS$SH#N7w%OOow$0VetMW_meNl1N0 z3s<2C38{;Vkt!4?A#+u#P_l%~zNV;Hro>eJSt^t*AvO9rDiqvIU0e)lW^`+y1k?$~ zAQc)RA$8_3QiaAzNPSKmuR>EKq|UpdR4740>Vz#(g;FJ?R>w>gnk6B%ea}{*-pySd z?eqVty00F|nJmro)ze*#0e1It#4ft3rWS*_8m(1VlOdBC8JT2AG9($23`vG0Lt;K+ zeG_jku-9Xc`}rFgH!oiNU`{)BOp;E|_?H%!quEl_M@F$DyL@7lIzlU~)!N2kwQ24JbHb;IBjSSs5u!l-oQclgS% zc4)T&jZy2!?w&iN;9qkzoP__{Vsm6;Dl&>4%^u?QiBamvPN$hs?#NPE7?u8mlgg+b zs4;3C`D}EC!N2kS9{wAP%#oc@Bcs@n4ei7zb!2Dv%qVwc{azTAj%=fx_bb z=PCSm7MG(xxbvoa%n}*Jj%;ivMyVru(kLH3SQwR#>=05J)dMv~?QpHmDERmO^5MU? zxE$GuDKd&3v0@mdjx2?lQSPtR7e=KcYfxoW4FxS2gV+HL zF-jdxYs(CFfL((<2Uh*Q(aCU~Q==-~jmvj=DXnEPn>HWcjN%@+RaaL2y* zUoAXmglDwj$Zx)zhI&C&N+`pZ$qhfqlN!AI-oB8H;c}p z9Y$7-HU`=>+H+(T>>Hg7bZT_v$R_c%(Ssx3(nrHLhjxSWZnW^Hk{WT$3V&aAVpjUF7)hDWnEXBP0g(Zb*QW-b1$MK{o@(S{?R%T2>Qht#ldcH+#E zd1`bu(6!NnBc_7Uo1<@k;imL=J*6^S_|tEG`$PEC;o_exJco9EUp3lrG&_#&dCnl_NW?UK>3)nyu9aPY!GceKz`VWGmyR(bC`9$Cm$Y7Unkx z(~TlB`0il3QLGsJ;3KOBKONX*e;I8#ny&ZT1}PuP40eVO?HV09`kia&AO3oBY;@ts zwuwulJ4ds9y1zGiab&ystI=HW7yjTsAN<9vZQq4-7}7ea@2%exp_=s$#ZC|?CPgnsYXg!jaD%-;u3 zgx1Vc@JeVwU4suoyMK8E--MRBcW`0Op-qUzIU*I>9nmVdA^g4TTX$~S1owoNynXOQ zXel`buY|UNUxN=qJN!R_Z$dl9y@Lz$4(({aI8U5H>!nq2Luf~gO>j?Wx!(s*gv1G6 z39aqd;KS(SkKmhdHfj2Ia6zwi+Q%0ch*N02xe9IwZJpQz_k?y!whx{NE%;OLYE<$X zd=T1J@d&;NhXoE^Sadv{;ETL}x+JpRTn2v%EzV!ymeAtd1`mYRafjfU&`xRR;EmAY zyak_xHoTv~kKvmAC%ClaO4?9dUa}d_S&upM2o1A}GvVH@$`vPJn#Xo-u!SZL`;z*OkFErWA050Su9XfGXAU@e^PCk=Eb zvX%NthS%VO&_>)N z_$HjCqkjh%zB{zUEq*6Xp(Sn=+z?ueHo-li?b-X_$p}xutI;*D!H3Z`AHlcL$KSz) zl~J54#3{5LZWY`RT1cDVp3qjreeh&d@)W!h+A?_!J_v1%e+1uzY!TpsUZ02M7bj)o+TcdK@;DONQ+97x*WI+ROgm${W1)qfeVEqh#i2auT2`{ZW_Vaz2 z9{~Im+Zg=?ZVCOVcpE+t+Zp%}JQLcSKL>9{cndxWZ9G4NA3{suC%E*}p%U0H|FlGZ z6IrM2!7JfE{_{VX z>#w03(eM8J`)G0t)uL%y8t86X%4OQ!^xT6l!aq86?~=TNb88N#cV_cz)|v&84ctZW zhtN&0)yXRKQ{+ZyH2DR^BAeI=nEH=q(2mGf&|UDzmpg_|MDBN6!Q>P=6S;A*JUNF- z(R8X*(8aWrYpc7xy#()sv*`MJ@I`1F#49+r?$8#A`E|?7cOmzA;F{1jopo?WXg5H+ z;L+&g$Kb{2D!3uExw8rGjY{r= zCqnDiQ}9Y?>9__Tgn#Su{&#=fKZ0+m-xR^bh? z-?=v7J@Kk8^2=RhA3hN$;&sQT@RisPlUFnoPt+E+tjYX2ccE;2)+qz^?3&ub{tyc7k7wL$b)`x zL+BrXZ^C%A3hQLv409*iD#?Vdae`aIS)BbgcpxNB z@JvXY;EmAs>|5|j$n6yPA+*{*!KK`xWobDlPNCKQ3)~V~?c3mi&}u&f&xCg1I0tWp zc9(SvJ_+qm_6&Xq?b+xjxKuc_m43M(PN6NezrZb_eS8}{7(U(~f@eZIot}d?!s*S| zEmVu9H(w2O=jk4L5Ltd6!8hS-SVJEox&d4|a%iWy<@0Y@RRsVTZayA&+v!XFWR5*(urf=%H7zkP8|;Mo)WLvC-fJ*HRgUBJ`mF@lSBAS><@0|@Qv7p z%q{pNv?Ikc_#tEzgG*-)r#G3)XBO=@k=+DGU@Wu`CtxbH6lP#P`gj4BqmmU^3+;r} zfUVHl(}BUcLpw=^=fo-G;W!uzr_Ux5XicOE-LFF%B5UF%xHrOm@I+`$JO!_Wwq9L> z4?+w45quL`6W_sw(xDw}7fWl+51}o#tKf#vKE4U=jXu5)o(QL_)+ux*vMxIZZ-lmL z-GWa-TeY6S523AEpWssE&{nPGis3DswY>iYZV7GG+6E7VetsOnXJWrJV4&gJgU$xHR8?kTYE&L?* ztJX98A@-}*C%km&*sog4m&7f$@%Rhe63%+M-v$o`oE(B@LR+=Y!5iTaFZ?9-34Mk? zzVIi!bmdC>URk~(Ua?=be!*K}n=ISlfzVd1L-0(@1CbVx8A}|)(3X_1Ta5e?{49tag|673N=;IYw3#|tluoe2D(ZRuuV}G9& z-Vm#JQ+w#P+e0Hb7W-5uaQcNaI2YTEPXU%f3$6ldp}ln3fUVHhkq!)Q9kNW{60Oiu z6M?ai%z~-VYR|x2NNV~5F2z1I6(sRiCAo@iNIKB!6jfSwA5r^ zF0@6v088PYT$kxhzzVIU{?)<;ZpD6G>ENJoY&j1bf)(1shX{;?_VgeDQ=vUN$-rFb zZ(a+y9Ln|;SPL1tU@Nq$Ixx6%Xp4V%N2Ee48G*6T-Y7}HR7j*?F7)@T1zd{#CQ-q) zm{`GfblnaN?p;ai?eLyhg%&{s#zMcuC2%UX$1fR}kFWqsp;c9Z^?-c?wn951bYSq{ z&}SfgAXc$`#T9|E&>E0{snB{L19Kq@0a%VcUV*icoPw>8NWtK7s3?3SPN8*m1ja%O zJ^@o9&pk3Ums<4&SPCuq6<7HEyg;r4lra}@5=0c`= zftFHheFfGdY`|7%De1uAd8jFTCQu=x6pV$|Aqkj{FavWTX)e%GYHg~(T4=3rz;=Wk z7__dWwZ0EqB9;2%Rs_dlt1AIhp4bSc0ZfMgf=$nO0yqDp`T`sAL1SLZ5^V4qhDl=Xv1^;fh%V`v{K3zR3xkj!RE6 zI2ZdW3%C@o>$I_{tqZQjN8%I54cv-tn0H|C>d+Dtz7n(0Z*mbFi~Uxez^T}uk~26L z+YBhca)cFF3oWn)Y)9CE!J8{-^DlfOTA_dR9>KAAw$b$omyI}A>R2RMzuh52H1ja%ZTQC(eTQW44GSUmQl-j;tfwj;dAsV<9TLc{# zd^lvi{UBB$5kzP#C0H;O&QjZFU_Ria0863ORDrdSni{l~($)?QK1UjU606iQ5P`9f z%O+?l^=n85=VBWj1y~BLu@zX4umM}4&vpj~!9V!TZ?`lZQ#T#M;2+q_-Qs=mq2maS z#ls|nQ!!`lNe1U)YhGWVrIZANwb1SW8n6}G4Oa&Sp+mdb3q!&c+T(=?jD>d11Wbh- zy1-oMSH}V_#r{UNf@`sV>d?Tg*#CxZ$hgm0%M_dbONSA3qAvLA**qL zmQw4{3ao{e`vz==;G(})M!URl(R#67#LJ|s=Lbh127Fy#QupMCs z29YZ{%Saza#3>}9U@WxY6EGE8GczzBVF8vxvRt9H)M{$LR%ngyz~K9U;dcTRvb%z@ z(0`Ghz^T}(%D`Oc7sLWCM`bIp7BZc{R%j7)V6ftlnG>!MtaMhikHAwgQ(f%Y_p)E!c7z_PzErC<9ZEzWw3mFbz`Q-u?T#J3jHE=8T-*$9x@XImr z@-MJ|6Ovsp7TV}bz*K09N(Saan<)iY3K{1WT1&b20$ZU!IdpIkJGKDAnA8ecXu()$ z0VH55WJdsVA&CXc5msO=w2B(A6|yFPLE?~>h6#a=H9}*lwLbw0?(3;wS?Fc(CSaT(Ps>3yc75j(f5gd#Cd)En^iiZgX=i=ea4VPkTT?N)cvJ19C zdtBau!Ma0x%OqSUUZFkzj=)%GA5Xwk$XOfAg%(l)mO>tS^c7r-Gp$m)db$C(V!xVn zaIoR{M5WJk^R+>|;zMzvn=d&2!U>#;{R*AIxtIVa1zd{#VX}g2F{83UTd9q|4h%LO z+O8aK60-33E@Jny%?ONz_AOchrb4?_%fMV{w`v7g3ORX!wUA-cH*hQVw`v_6=&wci zTeWbDXvKa=MsWOv6F3#y%94S((1I(#QfR}c0&Ah&JvCq}w7aJc47MHGYz_J27T<&{ zVPGuu6ElI+QP~X4g+vOLLKX(F7P8!e?NGAsz#w%c*%wl>DkM@c7IGp;&{XPop$yK& zgbJ3U%T{15v_5ITc2u$hgUprm13t_MR&1j<0^<=TU@D~h!F+@TSPJbBT!FQa1T<(X zwKcc{gB^#n1oq($feNjsA}|(OObM6{AD?7kE+nO3DI`#^7FtCO*a|ttfWfXq3qIT> zP9ZBugvL^keO4V^{8kAw!$G;I5>1n zwnF|k&^M_yAp&C|GYU*cB{MJ|l`Ozg=rd5kwb<{?4cvk&Z9|V+>yp~1CNt3JFYP~j~1eFVlrt3Cl!A%TLq(ArsmW!g_h+6Ob47~ zU@l~51xumd11q=|TU8C%3jNu$gM)e~8`i`sWIBPdkbMeFh0L4`%|}HGuoMo#!nK%e zHE1hk0DwW`kQvnwtB|~c@u*}1rb05%XK*g|=ludM#eVs#;95+B8?^mWxPybcQH_)E zj*!Ki_a_k?i~V^&fm5-K@C?j_*6IQ*h5o!>!L``$qz&AP{dvEGgL}s|_``c59$^H= zLJKSb(-CH1E}Tuhz5q+1Kdx7BEw&A=0b3!%0Sq3-7YHASRqQ)1f@3k~{Ye6+VzLY7 zLb3~%LK}S*SPNNZ!B%K9r2~UUhm7;^kzl3P+6at={^XFrsn`O@z+A{e3zouJ0DT44 zLP7;wA&CWprvbw!A{AOi5f}?u6TnnROEWYdYk`(hYkvjSqpLPxEA-1p2M5oNtpVXP zu?nrJ5g3m!0aKw*bq42Rf8H+=S+ibBtLTp+IrD} z!Mj5nRN*^u3i**27z-JwU@Bw_0CS;rY5|r)Yf%N(LcS{kTOnHj7<@SNy%&BEsd!d@ zAAzyZ?_vp@iW#b4F0@t^U@5eJIiLb-p?$m8fUWRv+>+q_k){p|J{{UR5q=V>kbw%u zLe_}{O{KO@WMD2NP_Ps-r@&gs+y`4BU%-Ju@Rz=$!r(7?71kkhAB zoF`79&AteXg+6}?oQj$KU@r8tuYgOjbyfw|LVJSNfUVG`PX`7I!^gt~VihudA~crr zNB~TQmZ}WQg|npg1y~Ag`cz;owCU4;t&pUG!JUtT#D_t*A-X` zt+obig*JUUFj#hI(RjW)mVvpDe(MXk z9F?uWdR%tWz^$0^3kF*bhw-~bykh1X7z=&d5;zqze!*Pm`?!EhvHkm36<7=HB-eng zknDoNwnHC5xJ|TTvJ1w-A-ixY=6nX`!r^=dm&0}Y3ar0ew}D$R=LaxI9r_s`ro<~I zyI?HzZA;)(%=rw=g?>a9a4F_|2G&B~!wuYuxlad!%;9i8%ZOJ@ykIOG;)PQ&t1p-f z{md-jQf&QJfwho+>l?TglV32{aX936hj_(|2QU_L-AMwcV!Lhz=3lN`z@?b;8CVPb z*{FeAG3PTd*mdZ4*l?G4#l#E7!XaKb6>~lVbD@u+fJ-r}FIWrx%xvIxDBE{nus1Fn z?h&teIG@3>csQTIshIN_mFZn#gxVp~%qFcz|= zP7*j3vz~#u&}XfHOELQeSPT8^Y~WUGz1)GpfkS$^4-be}%=rwAg+6BqoQmzb8JLf+ zJ1O8&Y@@vbYoVV-4cv-3KY+oZL!Yzoka)$c5MV6y{g%L~m=yxdg~JK~mtyh@*1{pb za4Tki1B2Y5U;V&j{DMK@aL8{# zykb@eFcva)CJCI5%4T5xrECG0Vpa&S7W%d|a4WX9bzpGh(6=o-B3?1)GcXp?$9)2) zqp}&8kIPO9xD+!Uz*;zr2e=gzFBlv<9O6ADUNQLvW8sirI2Cg~19PG8w*oFlWh=1$ zQnrCxG2<5uP8<&7_k?)G%r`I=`nDx-DxURmpMkm1_i+K2VtZ6rfwhqH8Q2QRE*P9T z^bv%oL@Oq{U@RQ63#VevXJ9TI&S!8rx^4y5U#{E0t(fxz7@RruGd?^cUNPAPW1(+b z0;gimXJ9U5MD_(-iaDQwwb1u)1Gi$%XJByda5$fx6R((f!B{xN3#VdMUoaOkGbaUH ziml%&uon7$Yv5K)e!-x0IOMk^UNPeVjD`NX37m@Ux*3>%xo!cM;@R1#ufSU9&qfX0 ziaDQwLFLfzuwg~KV&Vm3;SevJiaDQwxzNW@z@?bg7p#STW;Sp;D%*j<#kg#ELA>JO zd#<;8e_h z4CX?gwE`~1>=$4yWOhy(xD{J3cVKYk(D!n9MZ99pXJ9P!IZNPFY}d`e{L6ITHQq1@TYoX6W1Gi$%XJByako@-HE%Az3 zA;4JZ$4&yLqp}&8e<@qQrI-~0tcAX94cv;YZ5~$U~uPf7{7PKD`vidvCy|Ifm1Q#7tDpej|;dI^Zh1R3wgZ-Y=!o6Mh6D>4y~&2 zo>+xeG6G|v{h^WsOodia2IfM0q*s9DsAL7!Li={P0b3z)g297BUKw~GPN9vh2#kgH zVp0O8Lc3-L=A)7YSPFRu3#^6q7f~9p9bK~ngU6ww@R2x$c7~3?SZM$HdIF{c_8FK9 zt@Z*eM_7TikoT{^R>*hoVDRM7-k}Jeh*LGz5q+1)n0+MkT}6s$oK?|;3F^=S{El^DkPs^F0>y~7GNo4od;{-ETp~xTcL&2fx(+Y z^7%%bLJKJZV;?uVr^|@IL17omj>GRwaUC zv2{uUrb6ytz+7m76<{g!2gnMp#s1$kZQxeCt$&0kbAKPVgM$yp{*)Ac5V6>vTSQ{WlnVI<%e$KZ#W6A0k9>EcRJQ;8g4nA{m^E z?EqPTrO@T6AD5q2t#Y!oM`$7!snp{(e%&p zEJ92EgUir2(KL(*`YxK*xB~qUxyyg+SD~LGTl{~4TmEX>P%4`Kk=_j25l#O{?=H0G zKe!Jah^A>ggmPc1fR04dKfHDforr8woPt+E8)nzwgV0W#kKmioHima_Va}m#$%}KA z^dG`Mx@oPyI0|kEUE{t_HlZz%ZFJk{IL{FCG!HF^tlmZNhtTR>1vi9N? zwEXRZC&JlZk%G=dcAz;2Z-n+^s$1|$$cofI!yjT>PCmh<1&4MQw!C1C{3*2C?_c1S z(CXg?4}{jDL-0&!EjkBpgwqz?LiMOz1GXdVz+lmR_z!N3{n7oaZi^P>Hz5Z^Fc#WQ zpMa@w+K(BuGri)U|Jmwf7upj|Bix4$MAqg*@Ju*sbAJxr2rZaf@JTrPLr737npV<5 zFP>hZH<8u*4lXP?v|KMPG5dtp-c@izXj5$y+!NZ$zYm@WZAUu=uY`80y9OVGw$eR< zZ$hj69b8y;Xca9k6Q|HBS_LqqFx(=*hH zIF5qBH$EDEv#{qxcJiACzYFcaumY|L|Jk4a_;a!jZHR0hY=V12TP^m%lhGAV!7G2o zYv@K~tMV=QB(&as20w)M)aDahiu}j><;a@&Q^;fow}jSR+u(uFl5q&032kbggEvAO zLAT(O&~p9^evCf;2`+tiCABL|mcLt+-$c`HjiB!$3ugsf6I$P_gFC`$-|RwrBDw)Q z8GZN^yz(EuhHgZ31NbDIbwmFQehBFXaA{@u`0@(fAhg!}0=IJYFcw;F z5-=ToJOgv#EH`}tmcr@DsDds$T|!r$uAv*z^ssje)uQQPuYvCT2k)T=(e!xv2tD~y z&rmCxt?lSqbNk*O+`hL;GKDr$A}|)(j7z{&Xmc|I zbKz`n=?kzF+F`!}YoUM0+rX{Z-}ZHI@Y695Lw^#hkRN-4v5?yhFctbQ*)ljEl`X(h zXt$^pSPS_HJ=h9u9qYj0*HAM2MWjMI2t{BlBvLRH{>gQU{(@YF=2HJ{RRNdcS*U#l z)}zZdU@No}V+RJYLkl2`303HSm4?PrTgMYH9bpFMLaV6&%Mn&!Ewra04cH24e}@K% zQ+q-XCPXT<@FOr5T1O>dDzum~Fdu!q081gA57xq2pnU_jLaV3)gEfcN&*2(z3N82u zjD>byPQX;i(-ANiTIvh16k6>SSPMxg*a|I69T=<+7_Jki&?<_+SV%s>RLI>smX+FL4z?Wg%&rf& z2w0r|g`6rvSTY)9CE zK|a1fm=mj*xdg^SzZN8LD&{Z%=0d;37H}zMx9Tgn7W+T-(7>&jF#raIL%#=w1rdvV za1k7f`G=(3>)}>96ZLXmI4z{{_(Sh=9dAT3PqB zvcj?0za^Q#so1|Zlfk*zZu$$b6#k97u>03%DzFyXm(vZ{3fWx2;Mk$G?ua;fawS`Fc;bwF2Hhx6<7;dxWHCu z&F{eA%%QE2;TeGnE&2$Ih1N|8m% zE%*qGg|-wYU@ElQGcXrg<_oYCTJ05B3yBkKg_flb49Wq+k~oD{Q3S?9@(HFwTYNGw z7upCfz;c8YSPMA-fUS^xfUkfU@7Td&Wz*gw@yABR69kbs} z!b{>6`~5D0WAQ9weFCOJzu#qWF809{a4GitT?N--YhMGlLPi1@TsgEs7TO$7z*K0HGy`*?jm82j zg??~Ua4jZMupM2s1A|*v(#A`8OQb@pKLTSRyI6vzQk&)(m=D+&U@5ekDzF}51GYk2 zbvrPq9a{6lnm~nY1Yj(*=o2s%TJke67qS?D<>=!TSPMxg*b0dg44R>$upv$%XB99O zTJQ;&3Rz&mTxhiyU@4qszOTSqXw7WER!E#+aOcpn6y6c%2qQ2SS{El^DkPs^F0>`3 z0862@y#nhIHef5XgmhqVKU5Un6Q_^?3dTZfW&)-o%)ne|NiM)rXf3M1T4+gbz;?h% z2L=zWB+KaoaSDg!6plw_6EGcN2IgNbP{5^_xdhfizZNubE9UqI29FN?E*3r#uh{Qm z5gd#CE|$Qlm@xq6Lcfa@a4Gh|Rd6l#yI2Fa;#vFp4h)_gT6N(Q5eqpGfU(f0J%Lj( zOMQmsQooB8a4Gh?SOwQ&zl$|+EB3os2M5oN?VXVDnUIBlaCdEgba#VbEVNxL0aKxM za|Y%kEWlD|Z=_UUEwq`}fUWR%u6FmGWd{bWL;D6dY>87yoM0@piV`ptT16R{3;*aU zaxb10U^%*G1=gc$HefrtW(NkHyXN#u<*>6T=R|f;m&;gx17s@L`0H;G57A{0=U>IJEEL7hkMBKZN#r&MLSev<+Yr z+!Icdu@4=H?2G(E@XVJxhf0wptpaPIC9MHlAurm3!K*{QOMYdz2&YMlpzk6}+6uTP zwC~5)!5yKcVi!CTS}Kmg3!$ar61)@YyZQbedJx&mOON22aGJ7r=tE?w_ym{U99k-t z->iW@g_eq6;Fi!*u?-#wr>QuEa*?H?0862zq5^B7rJ?~_p{1e&gLj9PitwFo5KfyI zLEl9-kypSqq3!DH;LfPzE_fuIy_eD-gBL>EfiJ;3p#^jgz6fm*dj;n{9NJnw|6!qj z7h1^`a7}1S=sLI~w5@&@JQCXR;TXIST2EercS39XJ@_KDo_q!8J{{U)xA{-v6xy3o zE8v>YLRtrRg!bCuE_gI5c?@0%?XAU2@J?vGehj@bVx-(C1f{6kMKf4Zla$MA*N|H|6#9o`Z9=Ip{pVt=wYhA+g&y7sBN_9c8Lz7SuzUq9T#FJjx+ zUctFJhc+VT=ZINoU9|$P32j8KgF8YSQoG=h&<4secp7`zbD@8F%#`sf~f5wf;|bIT5G6`o%vPNB_?6>v>x3+_6&BeaTk!6PB_ z2)r1Tyaexr7W_TJ7a28U(0OFJiw6zru5oW4{W|N5m}ltMCfECibiFI=mzHtMD#-B=)QDF?=ER&AEi{ z#C{dNhhM~g6@G>1zB^_Wp3HwIZn3SxE8v=N)_?svxFfXw+Xat=oD0AUp-rbt@J?v! z;63;vv=R9V&aDhMze1cs8_+A@n$R8vu7f*5n|Qn6k?`#a8i_(kkr z9(sl6evB_N|AUCdzRDGNO>Ajg2X}q>sT1A>mIh;XAP(()aL-*bnJfcrJGAhsS(OykdWm6?jeTt6Yb7 z#H0|IhXhZrEyc^*?_#(6+{R+;ljjNhpBU-TylNE67OWAdJN6e`KJQCWFJ_av@zJo5| zyWs-;J@_KDd*N4bZr!0B&gR#NRmiykToZD>0e6JH{$2P;?1$4ad?EH@@)Eui`~JO$ zU%p)A6`tD|S2@2y%wlF7xF%%30C&DzU>80T`!RV8Ux@uEyM*t=L(K5YxOD#t&uzNW z)}iy8L@e}Uas^%!+n8JjcZ8hJz@rf!gBL;@lb7I~&{uU2zlb?Wf^%Ervh!O+E4C)A zfNMeeSi9!}@*+>Ybn zbiPB(;^A}-uZf4#IlLpj)B_7WBiV(I#KY+vz7YH7T*7za;dBnah>vw`JtKLA=XM7bPiq!-B0G0CzsHb=xmM!XAPiW4+{4z0dt~hu=CJ@$o(Sz=VTFD z@*iA=zKN_!5g7Y&3A85C4+#5pXhY;GSe{3f&;)Ci1)?%ReRlLT55v2}nuLJMaXJQCVX!!dXv zw7g$}cS3uTeh_7jn|G$4R o`@jG1*$V!z|Ksn2li&X4AO55N|F8Z}*DC$r-QWISzxmDo2A9_pKmY&$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cedf3c257b4bbd9c3cfe1078753d22bf4b1cf59b GIT binary patch literal 610 zcmX|9J8u**5FYO~n%8&wQW9GoH`(*Y))^aKrq)Ek^|4mnRn^JqL?N4jh31 zK`N+8L5Rmu71ePO*GZ8Oh~OEB_&taOlP__|E7C5_v)`WNq)%Q*WAmuLG}iVN9?WEm zqF;T}H7IsvY0Hok?0ErL+;#j25DFroh~5Imm|%L#t@??XAluG&Q6Beqo|L7YDf^T+ zd{0)=cK*PZyydm&Gn_YEiE+Nt4;WLtM#lOz#%e8QmB&NI4raUxkv4HfTi-+<8{769 zjB%y3FmB%4@URyQzI>IHEsi+prP&<*&uC}?NY{r7FPZj!z!nSh4`rH+7;iTH-4Jy&U}C$ z!yCuR@#~MP--estlg*PTN(b%6#l~@-^_lG&*I3YYH4uh#i^_OuLAZbRQ2(+=%K}#% pIvZ?<`+D47bJYD7F#Z`%VnWDi2IS^Xc=#tv$lz0c3eGK4{{ifappgIo literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b4b39996a2c2c9f4848978f74ce2d79b2e49a31 GIT binary patch literal 618 zcmX|9J#Q2-5FPLCZ7$(LKuCNwND<8ziA6wE5fUL16zGHkG}~CtdUUaF*WRpsr`v`K zenUb>i})#2hz4y#K}8qo2t_LF^94(udC#61&$In?eSHnwFn{mL9Rl#nlgrUtg85?y zPC$SlB~&CQ#N()psyL6UBu@xL@Ek<^9z=r4mpJ6*y|$O7zdgxFm%Nn5W>I%#sO!7I*ia7KNTD z`;6E8P?plR2WT6KQ+&l6UYRb%SLHKKdG7^4z& zifT$rc}VNl9%=P(`@s%1(&AR_0{93Gb;rmWX}xHdG9L7>;=dr)EETa3vt75%if_{! zKg~^NKERK`t<&W6^~cq3gU#>B=2;Z=`pw2=;4n+O)V8&2F6g@+2*a60WxTu~-amh+ vf7PQ!fol$3^moIZJ!x(@>V6Fv{~TvAA>=#-a{DJd`jaN4|4E*MbBok}Q;?)F literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_capability_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e96703d811264132633011a6b10edd5b88bd6374 GIT binary patch literal 667 zcmX|9zi-qq6t)v5%^g>@MMC@%QdKdKp|uJXQ-wsS1W4$FfG$}qU;K29F0s?tS6w7V z_!~GjR>YseRCPgF7?{{jDrM+|eYxXF&;H)a=l8y6=lkkv7g^JP?_~FVgnqeTX~68yoK+y2&bztvr6RUNuSYGb>Tz%C!rkKWBGnZEtpIqPkmldYNO1<@=->vyMnXKS11 zWOL?`AgVT&NBeQugr+X7*mmlTHefI@AhjF1y%P7ov>n$Snisfk(N(nH-sF?&h7GZG d?OtoO#=u+Gfp%vZM^F z$0R-U=2N5Gd~DE5{zoq*bRqVVLxBRlxv?C6`F#;^o)~n#ir;=P05v;GRH(makI^=t2R|v zYia_@piht`JwcX?g`dS_zh;i33ZPl64bePDRY0{7w7}6Ep!pHB*eTSCf3WRp0xf-o zAGUE2-fe}p?*%oHO1Eq?q|zNb2&w$Q0~EmQ9XrItaA>~ahir*Wutl}|offv3znMgr z$l=i)u%9A~nu3LznFk1qSgHVqWlOjQqs9;gXBjrYGXq@3SxdAeOWsUZD8m&R&f@H5 zW@J^C&2`k8M$dk1ntt00ZxU>T`1T$|?HSGhyk`)@4d|?eH;uLv>YF~%%{C#}Gdonl zdo9DW=zDM9;if?>y7G3v8-}+t@S^A5?#{No@9$ub9>ascbt5?rRb3n!mJu3_T8^r^ z?inuDb(+(4*SFdZ(+j%(ux&WW3{l~YP-(;W9a`3P!}I*m;3?L1!V*NqAS6TqjYuG# zqa%>$^`rW>@8bHFw^zS~gPqWC)j#z^?5y1I{TQhE4NwUgprgN+| zMWCSpflNkq#ozcALsKXimPK$7=%yWZXnAO{f+HPTOaaIC@P%>n;y-2pM8q_oI)7)k zs5-1d(cCqu2BiqR_QGwdGPQ#ZLM29Qs(5X80~0b0(KTusnSqhaGBL+QmWg>L70Fxi}3<@FNJ|Sz%^>?T5QP=|ntzs%u8mj9c;C>4TYQZn-Bd z$1@AvAeve1NsDh#r%ra)qp34J=}cUzbQh!2LQh(Vwb}jkNUQXuN?e|P+=xq4kH3s_ zbNgnLtM;U7Tqr;Og89FhmMq#aS`Kambo2;j-i4OXc4Z9Bb=W|m&9bxu&d8BATBdUv za{rXroQPuxr(!2p%abx}LJJ$v_0no53k;eWbTNI~cPvbJ^QvWN*7RLyxgDCbJQY7ryN;k+n0#n4xu;c$!z0!_J7b~k_;?%et-`^2?&UU42`J3 zlU-RlSdS{hRssD7I?~s_uH1^2Z%382p0t*Bpt<8cX+AX|&v#NCy3T+ODFVC_quHgN zw8W8wn=F$5PV`lnd6z`8i+$t5QJ9>5-z<&OA%UniLOWJ sdS96n)Snjm2!{UoDbT;^BN+PcR|NINXMF@i|EegIU({Y982BOo2EpKgPyhe` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_login_link_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_login_link_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef39f48e781ae65566fadd52a7e3281fed38dcb6 GIT binary patch literal 656 zcmXw1&1)1f6n~ko9qYDL5ErGV;$;urV0$eKRzVL-6~)USggEoq4m*=flWf@qkNP*X z-n@!`iYM_R13h{2R#@wyCzDAV$ot6q{Jod&>+5S^kN)?td`AF&JLTrY*TQOSg;OY? zAQjXkBgDx;71UuCc5+xnb)3Zn0(cHZ^bv{}$+ytQXUQ@d_Wn3!NZO6pcsxgKUN)wb zLfe;UQfg!Q?L%ptu~b;(KGf6eJg|CX^;1B|NC8>!7BIvJ;|KQDT}%qHZ}~D9hV9mq zJePA}o+{)9CvsYfNhxNpxZ<^L6I?W06ovn9>8D&rlTf z1jPxh%J;Ncnjz^zez;W LFXKzFtc(5+v-7be literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67fc2d0c1425b3769c344215718d304248a6a31c GIT binary patch literal 39772 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ⅈF!iVVdBg-Ma8xJ<#WV)Gis z(-d!_cr(RYD4wNwE5+L>-bwK;ig!~yNAX^Y_ffE#Ft1a5h=O0`=0_=RP<)Ky6BM7M zxJmITiqBAR#en%D#Y+^QrT84h%M_od_yWZjDPE!Y62(_2zDn_Rif>SSi{jf9(-aFS zx><&0dFx_c$@;{8UhSnApctf(WlueHaf-L6DY(o*=0eL{T{FR3nXGz&S1F216yp?G zil-=KCfPf9^#KZ*tg(tdbCk)HA()TyioN(Id$^@vS2`U{>BnO~ne=hU*Svh~%J-l1 z-6ainwn(M z{7GqcX7gX?`t^Y3R?|Cc8tQISzS~!HuKTHlS@-irU6<~57W;vGZ1VN8n0e_FC?``s z*UOTwS1&VqzTDK@-qidLxYfAsR^`zco`f5S41Z@Hsz;H(iC{~~UyAEvGd1{`*~{xk z+-p28jHWy_e1gE$HGJ}}UmkF;5pTMc=;QICeR;|{p&9<;XJ!NKz)vrUZo;j1t)jCP z_IJsP+!~55aDO01&(icF?fQBdTgeKzcU9UQDIFb>Xe_TFT#l=FjDOX zxFjAdGLgi7H?Cm^KQo(~oooEe^s%}ca1#>O%n(V`)$j)#KQqUfNGkO@kisy)&&*mx zia8>2gGQB8w3Bk}z&Ab!;wkOJt!JOtUM{mXmFqRIk8AwQ4A&Mpphsc}3T{mO9RndP GkpByMAc@Za literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_person_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_create_person_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eae81e09b675fbd152c9607edc94d7d344f27f6d GIT binary patch literal 8663 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_external_account_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_external_account_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d6c40a15b6b9fe666fab6c4632ac4af498a887b GIT binary patch literal 497 zcmX|7u};G<5Ve!GYD>!q5(5JRQij%ot_X>$2qr*`T`ZHF+Ng=0#!l6)sQ=Jk0Pz8Q z1V4bXGO;0*GIYX@12^2gcfLE{y|;F|iL}X|gYZ?y4@3T}T7vbl1}hYx07odsLyVDw zu2A4CQQ!i8ac$kuSya60ry(BBckf}EfmFAN3I&(Gt+5`LWZlwWg#Zn4fOI?doc!p* z_eI9l03uLuIaiQ!7M006maS7TK3)v^M{2AIVt6 zKt_B{1|TO&B;;Bsh&p{CCLte@KJzEQ12O|XBT@K3l7$)z-s_&65*aG!B)Wi&KoY6a zFaeSjYY@upsx&BerBE*WpSN}0WRV&v3s=)X8n#65m3nH#FY@N5eLKEOQ!5=6R=d;) sY)3QE~%%QzNU~)9%Z~7;kC__r7ZwH=YhRNQa{D7pKpKhyVZp literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7beb85606e9782b9585c3bcb44ae544660cdea4e GIT binary patch literal 465 zcmXv~y-ve05cZ`%YD>$41QHK`l%cVpD?*~G1QQ^}E>?(7ZPdh0W2d5f-=RDLh)3ZC zP*x^3q*8`X*fHF2_kH)LyYH>n>kwn==Qw^g@xzjTYy5%Di2-ZE35SHFFa{tVxgy+K z5ne-ht+~Fjx2*e(PfL6#_wR9DpwhRQj-^nM>v10b$fj$+njjeiCuSUcuROSnB3TGM z!UQ$mg?X5&8^2bz7!zTNjFlb6Qpt3BN-JDKkigY3#=?K+K%Zy%2 zjY)qfI}+4cN^o? zam=NIY?)iBD%UhXS+*kY^;T}ht@8GTBeyMJxs!%Tr%i4JbSv5xRYQ9Q?ONyV(~G=k bsFh6}8uwKLfNhh&;JXRXehRk4glg^=pE7tm literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_person_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_delete_person_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7431cbeca718bea27743f6b4674ef0424fc2fb6b GIT binary patch literal 478 zcmXv~Jx>BL7;f)?00N^%e}Ksi&?u`hk&x)5#F3>ruW#VOU3;`W0z3bK)zz5zNBjfk zRwp+T#DU57iXGnfdHR0jd7t-oyNS$Gzi08A$)A?|zv=;O&kfihh8RvzipLlu58Wc> ztr7D9zxu9k?5!$6^~;g~7oA6#=b-dMrencXEN1+T;bszXeol+jAKxxsWG!-mQEN)Rc&%?x3UeMOA-!I8jq(CNoNrs?i zT4dx-Xh^yPA!ae3kU<#DfHSfHz932bM6#8h3f}KsToM&)=w_xNoPZ)q%Qyp)l`;qo zokGe=i8L!UQdjL|D`|ZzL(KqX*&2OR>e4!0{@Y7V+|nME&L=9IQPR5URx~UshmH)| j*RR~c*RpM>^-vv~@awJ*fw1uV#!ip021Jok5NHlHvDlQ_e5WcK7yOU&zz3a}d zqnKk`4%~X8?kz_uF8wzU7goNk=E4C9iCa(%NImi1tT)((s&pm4dG9xG#&72R-kTq% zrm_-z{+|`+hbc+=1&!oWhsxmtP##IPWXnydB{$?&s*!3b4Mj#Q)g&#op|-S!)=D?h zvXqkEmu%&MWD}bHUWxZ;=mJ#%)ke^aK+}NgBWPBj89=imXs(;9=6}QOstPC994p}D zrsD@(z2iEb3t;-D6HsP0d9LmSpV7M=hf$knZg<<%Mt>`gC6-5rYl8hqqEbV)rAF$G zL={TPfKkF`!NJ_3 zehv0_+O*admtIRwVoV;*utaW**l)GnWmq;s;2Hca5MN7CWoh3IE6aVde2_}1`hg}* z9q*Ce`r}NPU+9yC1f4$->A6Th8|fD#{q2LalDYW1qRwlFlB#M4`FLru(p&8L`)j?u z$E#tX+9y@9oFS#eKacSluM5A!UqOuX*_H)wi7j|bRjLhb1sOSFlL=d$um!tE`~{;& zY<YBIlC55Jt zH*K3y-#08L=vAO1US{szH5=2+8X4o{0YzDcE8o3qCy}mya&Mo!HQZ#d_=Z7*l7()~}O?A${u%vSoO66K5cKSuxO z(-NZ{qa_{*zr%YVUWS&?c2x?^6>nllS3yU>ksL{*MP1NP_$R~`L>xl|6}#DLjul`- zp5K73msC4DiO|fjiy7Nq)22)`uWE{?Ew2SFx68ARYdgD+4c+Tsz5zTjypU`VXCGGz z%CSYS10ayS%u+9+r<<1@s^2NT2_- zaxGlC9+q$P$&I7~%^mNP`NV)c-%NDqIzu`n2=Gb?XBYcqQ6MolF_QmI^d*>inM8|p ziq6wjs~Ri9a&`g*W+lEmHNXd_&fY>~qCSK_id*pWap72fjIcXbc<@miJi6Dbd9Fd; zASH3#VFMLU4KKy8cm!M@pQE^BMYZbaCYryfOpy^0!+2cJ^vm&^_bz(}R><)4*FYR7 zvMm3lN%B%CE&eQB38gCoZBEv|D-R?X24_p4e=(3?7`$1Q^`{>WBp3#l6uJ1c`iBIA GIK$s1mTZ&& literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7978b161dbdd55a41b090feac71ab346be76b4d4 GIT binary patch literal 486 zcmX|7y-ve05Vn)HYD+t?Ai>Ch$k1BAijY7>Fd+t}E|!T;ZPdgLv0F7O>O1ri0P!fi z0Lse5hE&SX2|EtlaQA)pV}EyV-EJEhQ$KsrlZhXe{8_yMs{;d;h$D_;l;9!8$U|3% zdke&Uz^}gR8+v&ysDD}#;G%Vxr@#kMs6$tF9#>@5F<^-R4KYV%5(i$fe;$T%D)i-C zLnc^U(E-Gu;g)4AQ8$5KG$|D<0ZNNDrHSOz*y0YQ4^tMq$_rZAe>RU~EE6CjF((61 z6D?D6Ej7fw3n?d&7?BGWPC#%n12H3UbWhS;kEJ;29~~1FY3QY!*2UuUNW<0m`xkdapGzd-pPLciPr@YV?%P2^C49GJ91w+_I=_ n-!f>^JatQ-WnDwr7+?epzn3xmdk}7-5?FnycIwi?lo~ss~g<(2m^7*m8HN){(md(7v94A6` zDI*cvM}4}Na;hA9oMA?k9Y;wdJwtW+m<N-N0u~cFirA#2i%ZVv7Vv<`r`U)*ZgEXQ3K0EfesTjyK^IxWt#;aRtI?%`aTR0r(KKvufj{G?4`&ljzQuc7|{sUj= z2V2eb2E0#&uTPCK>StB+e$yACMlGs~Gf_^jnpibk?lfuqRvA@QdOEstH|i&O%ICF& g`V)7xIX5AMmkxlvUtqHUn}3~I=$_@5K)WjYKOY0>uK)l5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_external_account_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28c58a7c7bc59df968a0e142886464de3c3e668b GIT binary patch literal 629 zcmX|9J#Q2-5FPLCZ7$(LKuCO*QJO6hiw}X2A|#?9D9{N7XtuG;d30IbuD!8+r`taK zhJ=3r;-^p{8ng`s61@~SX4i`pwgWe@OZ zT4)sQ>f5G9v0serDC7j&6@bN-<0pWS69IYj4lu?9dw1NbpO^}=>wFVsal7?wG*VM( zpU*97$;*x&pw$J=@HN-GGHr_UnoBXvR@y#el2^!ByT(|h#I*Eyz}V50mtjXIuDbT! zw6U?e-C&GMsVujJl7_L*uyA{DaZC?Yg>)?EbRW&cs+zu37R&8Dr6z?O(>*?#pcHh5 zaz@MIJ*^visN{p4d-tg+EN<5>fRE8ocT7dFRQ+>lx_kqCpmpO|GA?GQO+dtvqpEM!;PfyOlxn=4>(|CFrX3kdze2k9@1Tq~#M|Kt-@k>OR#3>jXtf>4!McFhW@Z`f?0 z>V}`w=S|C}gyp_yd6aOWnQWKX?%wG1p}=FOs3s6p6E_f*D4qZf%@E-cJaa&Z*dg$ftpa)Cc z(|T5^Y<|=8O}F70POGvsU9lWu?OCL0*p8LVOwox@mEw=dosabW+W`jCmz;fi=rTd=VaGkKu6z;aD;WHUL!yyNyUaBB% zysDoCp}#Z@W|Jum8XAyygJGWHs+wbp9%ozESzd=VNzyxvuSFaDPUpVA1PuwYuA&+K#iYt>fouA6ie;7XsF!5<&+HGY~%L& zkGZIDG4NvPsB}LXdeFfSQsKb(OEb!sI=B=Qe<97`)mLK~USGZ%i4b22n27NOAgS2D z2_p9K8SfARyLq6-o8*5$s8`fIv=;-&EFm$=EmpktVS(HrS56D@YDv6=IvfVra(GEosoa+|whp z=Q#J=yt(BVlb@2y4tog=A%~oD6G+a%r&P~Fad0xwHC10%SJhN~)4%k3Z3IvD*QMaY z4nluOqj`*4IeiAoD?|`cLKG=eMUlE1s*yI;N?i-}$e0?DIW;3|YAHxXUm&8tM8u%V z&sr5{YL}=9s70-Fv^BGx)}PYFQN+sE^hHiHzMJwOi8Da-ogm|mCaj%+Q|5)DGfBAg z3K%7#^<^P?M-b(B%SLYjC31 zh|wU_qS`y2<~d%XaMpScv1`O6tvXs;BD0Ru6@y2d?tXmiZqw|L zC#m~o!fCiUN|HmU#2tD5A&rR(-8pi@;JKU5_(2li-ump8n*n7uQ*iM1Y34%KAf;|v zcG|_w7lbea?3Y8p)!tS*V=Y;T6gI5vC5Z3Puf2=k?wqKqVV{_2WjG%!Hb%v8T=ce= z`gVg4uP?4oinZOPzS}^(wYffj{6nkgUR&zd8nl09{hjzk8zUhRv=tW&JnZCBfdO`#Et9qSmC8zrjC*Hi%wQ({N07L1uuP010z1 zpdrbC0ag(EVNPJoNfdDL!CnsZpqN#EVFbL)CUA5hkFH4}Grlv>kED57in9KzQY-UF z;lRp11py824(8Tk{ZX+tD!SvPK5qJO>Bf)WEH)n$H$E?h510DG60d^E5EG{@2Gw}C z%BtW7X&BDrT_8;0C$OcYmRPL}OpiH@GkMQcyek=KfqOOmvci8?{nox$aryzf34RK! t>=O_tnxZIgOr+fY4Gn%r_X~9Y%)F}D^Y{$G>ujXhiv82<4T4u$_TP)DZZrS@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_capabilities_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_capabilities_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..977f6edde485c964d83c3aa136066f03399d7bac GIT binary patch literal 657 zcmYjP&1)1f6n~koUF){BATEktikCTbgZ5eqt%4q86~)VdgmmVy4Lg%eC)u(K9`$c% zy?GV?6i?zs272=3t+3WZPbQNV4CKAv%lm#W-&R*wz#jego_I$9emUX##8+UsYrzQ= zP>>QTk`dx?PzF_)g&hvdsEV_gKmgC6h(16OBl#M7|14P~Y45iaQqr!y#-kZ(^RhNV zNo`-E7eX7$Z;q95O3`4Edsk1d;=uBul}`X6BL!r^Tfh(_jPKf4cQGl*j^&FW4ciBM zd9G&CxY$p4%@0H=j6nU0H@wnqg7ccoVx0EcK4X$s$XL6=Sfz?t>F|KDqZu!~rg4*K zB1_s(o2Ff7j7zBu?^mCv>0ZQ8KjQeg_Y1?7>fBi6TF{&3$&lTxN z-(G#kl8^9nFg%S;-+a39eX#i>+B^?}xZkW_8@l#~KGTRbelJY<#WZf}ZDJO+E!_9M z;RS|sgHpTg`N4FF*Idvp@-2%l`#XM=yUlGY+Mfmbz9r`&A><+fvV8`_Gf4j=5$S&( JUw~zu_dnK-vCRMg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_external_accounts_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_external_accounts_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31ca82ff24090f5d34da6509a60770a7f9d8788a GIT binary patch literal 918 zcmX|AmS6u|BK%B4+;Pzxy(q0)BA(4J@|=ujb1fncZ#qGGwla&m5a(VbHGqF-jY% znOEefPlS9?$dpl`iMNvq*>+TICzXWbOik}HX{=IClCJe(_lZMr&b5952#8?9cM~VA+H_SG+bM?iC4>^7e%LSG@8W7&5H2Lv`PQ330`Azi6vgv4B$ z+jw6)-)+}bh!Dj&K}by@l(VFt8M%SbQ6Fda4-a&B$`z8UYY1UVnZ#vr5#nC?E2WZ~ zj(!2>dIy(pqeGUH=ztEQCq(olE28I2l5BOGv7UZD+Q!|U&LcV|^f=1WPE-u#A)^~> z_tzt#+q7C}1AIV4q+d-75*20gQI!|Ubb%0=RH&i?S+lib$U_}RxfwwudV3Fk%-%f} zquJ%Lw|wR}es~su=KQI5y7#d@YAlVtrHVFMAH-;SVeBnbMBCNAFFqK}KO8kS$KGbe zZ!CUtM{_G1!>RXw|_yVqw?3iT(9aOOe?F9HBJeuCC7u>LoggW>0y3!snk_J4C3_^AK@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c94768fe9b15c55b64ddf705656ee0494869e85a GIT binary patch literal 1223 zcmai!&rcIU6vt=wSGPb5gd(k&K!k%m(2Zgu2Vx?S$iY-2n3!HBOLr(6_7^i#LXAhg zbEDq88vhh8HjRmy#CY)JjRf$($(fyQ2~p!F{mz@uOy|9Q@6CQH6h?q}=&zgp7Yl$N za*{pfz&Lv;j1%Ai4+bEF4G5*J1zM;#^wib^BQzUkXf-SdH1HUB#v9<77=F~%8I4>@ zEkSeG8dAGsSMxvRmMY}M=lGzFDSMhQKaQv%#uJ~is>Vm_F_Viv!5+_VcM|Mv_)XSS zXDb~z0%w7kp8yOR&;t$a1;DxoD}rIe(^kcp7X+IFq7R9s*nk^Do*NKzNV5N0l5}!a zn@>J!Hsf~0WVp{<;)e9qtv}E@!7jtzYd>N<*HjZ;z>()iEwqDoV}iMbj}kZXxEc7N z&v=nCmoT~R?lMg3!j+9sNC8Qhz)KFQ%9WdC)i2S1USf5IYEI)3R19^bcijyrXmfBguDe`3+2z1 z2fe~d-&i@-G}At{KxwW^ds7R2V<97ja@Xi?z03E;ZugDb86BHBroGYGzA>AT>G}71 zue8`V7E?l|Gmn4omu<0pyY$8Vbx=mq-szZCin*X zRxe-a8^(6Abaf@{l(Iu*{Ce;MtBZea?@349Y z@m*0RS3zHYkxP43wedqTFZMz4qj!Xy>JY*U3&7=XVCFlxe{Pka-7TI2F`U;Xgx$FS IVo0O?4f>!ijsO4v literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_persons_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_list_persons_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e567150d90473ef8a3a41550889b2f664d8ee7d3 GIT binary patch literal 1357 zcmai!zi-?&6vwF(CF|_-*{Pk{jRV_>9iTVFLYpiFf&vX3v_s(rX$us$5c28eELaj1 zlIPrY$dv5aa@{(%$e+@sf|i0n(VZ52~f42hk^!VWuANlwtzgt|KC-}%; zuOu(qg#2t8&Es7-XJ4T6g2W_tQj$4+$1#2@ZDnrXt$jD8nb-F+zwbMwMLr}keM({v zoR_X0qd!+uAL$(UGa5{SUi%jl(sOk80X!OkRG$3PO79*#ihM-;y(Q$?M1A5zinT=HqZ5G0$H||yRUV|=gf9;m5yA|E7iFmWg_|IAzWB31RsZq%9Dr(3~MKjINzp3aybR{~N zUe8A(EUrkt1fhc%kHA22q1!Nq!AK=1pt~syqm&Itk%*Hh*B*bIV{BJIAwWWIcKQSk zdcIgPt6etck}Ne{Z%KJJ~=1&Ip14%f^Xh?MetM4_BUvDSfT&` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_login_link_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_login_link_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b2fc5737d84f6e97e1e261c713e7e8d3392c178 GIT binary patch literal 613 zcmXw1J8u**5FYOucbK`FC4V0`S|Di;)TAK9HBWY|N^_RxlzQTi< zY*F;9Z@LD>o-Az{a)LcC0E@eh9|1x^1QgL*z!(!uZ@E=JF%x9R`7X-i{?5~~)H7vA zdLq?Gs_C;9xy6^f<+bTEoHtyFalX<(%PA^B4^bV` zO1`5_XZN*wuzl}7HPYf%;{x~u4Ry!J25GZwmogs2u*$1pm6OBDr5+X{wwtb9@lAT; zr@8LTNBB9sahx2#{+U?<$zllGdU?!$obFL4qRLQXRvH-Evyzga>CpC6xsbIa8K^6;Ua literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_capability_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_capability_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a563e945da057d3105cf4fed3c985406cf83e649 GIT binary patch literal 710 zcmX|8J8u&~5T3o4&&DAM1r{$UN`;Gf6@sXuNCYG(z`R6r&1&skoRjZ%FSqN+CsD$0 zi0Nn%KZPnvgHB3CMQ6!`A{D!LHY3fz+3BIq`LTi8YA^|$RyOmxKF<2xunY+iH06Yp zEkaVsCW*yuLXIaisc&*Srra~8bd}D_bwa2RQq!tG6YUM8OuoUwM8MTYd?ZtjM`DVf zay8a6!_TGW$=ioM?M1FT}rcQO+|M_gg^S)6g4 zRrO;+>-KDwravZYW^Pwi2D->hEA>n^>jU9a&4scnuLo9@ xvSE`}nQs_$74Fv~KFDvHBQmP)8Z&nhLYD!cy$k4EK=)73LgCl`B^Xz|{s$toz%u{< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_external_account_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_modify_external_account_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a26b64b4583c77a65adf48b3bf0c75c039e3772 GIT binary patch literal 2198 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a3def719c0b8ab61b253ee0f5c1867bda2e2a12 GIT binary patch literal 467 zcmXv~u};G<5Ve!GN=iGhAi)P9GPD-3A|$FxFrf}iU91qF+NgwHgdLX~?%wm=S?}I^x7$W0)bC09Z0e^a|Iyro&8Y!v#1O+7%JCRuqaR&eeV7R{^Cw&VkaZO=&LJJhQk%>C-&UT;~;S?DxARnTj09gfGbu)JzLW z?u3S{HxOc$@(CHl$qYCn3*ZZqrH@3GdMfy3|NMfeR6|difp`LnC|#ryh^%E08astl z))FbJHB#5@%d)VR)v0BGvTTJu8bM)AuHWq?hq{zT1%;&su2R8OVJ&pap+)uhfkC_A h%AI;$bPcucsUwrVeT?z8h49%=3*+!5+#*xzy+4Xyc;5g3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..567a3cd76b6d9dccb8cd5758792f0242a87faaf1 GIT binary patch literal 1291 zcmai!zi%5i6vufw>MZ$(?8Z*x#(`tU_Mjm?G|3ngXeuBX0wc(eMGJA(y~u=5`1s+E_xSjw{$5y^CHU$8FY>fW z$P3r0zWS+id>5VPBqp(!kb&3rJm=Sv+Q9Gn1KOn?sgc_x_MeiN0{zP`*LCX!ts@QI zp}}OP-FWGyv^`7ja&6i*JGUpzeRwkD3S!%QI7uPy@Sf?FJC*iyTXLLW|2YBD^0*IK4KHG=KQh^O%oJJzH^@I<&v0I;6b{~?+a4GZwPwl*Vx7X4pQpRl=JvN~B zFnEJ85e2$<^Nc+iMoBrMC}wJXZIoSPED}PRG5}-B)y?``m_Nxey5#jJ zJdgtj`(hk+Kpz^JhIgca59hE9xEMxxx{MQJC=kFrAnKDX#B+e=XG9z||Bd zM19a92IMJ(X;F-jMP-#(T9k<;SSMDF?WPkogTV{q9L>-?BmXY1Pj$AumD8=GTCLtV z3dq9hlujS~*39Ow+0N;9LDcyw z;-`f)#^J9DsglQA3034wLT7@ZA4%v7qEd4h-p)ottgYg|fU=Dk_1`m6*(QvkH#B?% zwv|9XN?3mwshCH?*5%Iv=e8823N#3J(IePv2dd>xyXef4GleARzLbeN=lUzo6czc_ zc`kZk*3r@KP2p`UtxY@G(q>LKtCB8WoNi~W%Q?MV5u9@)TinR$Mn$mfG+Wup=}txP zwoEp6DW{hz^1+-k5tqYWd&UN4lA`cRseV&-7>o@F?OsW76y^SoN(~jMzki(9jhp4m u_(5&rJP&_*2hEZ1dETplc&q=B8z;ev*O>AXg3Zb9s@M3V{fb~yB=ZJXe?g=G literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00d328b0a85ffe50d302ee4789d76b86546a9d39 GIT binary patch literal 610 zcmXw1J#Q2-5FPJVF5yBzNPKn?%@#Q;fT$uQqDWAnQxu@t##+v!%j$M*$M&6Wso^&y zbhL<{LWOA1HWXBJk&aNL!aiRtdFDNjXFSjLx6REBaKrq&UkwPrZ%?j9x&n)*4x9o9 zPHJdKL5Rmu9W`+gH%XBYh~NeA_yh0+ldo~eE7CU2vp=5Xq)T2^#^zCXZ7A&#o=hu^ zyjy?MD&z;%$c{ozu&V;Fc||QjA)*skRQo2n*jU|d zF;)s8ZD}hh3}atl;bL(4o*v5v=~&F^0h)=GioTQ<>z#cmCzTk}{coVIa*I3YYGZ2Pzi^6zmLAZbRQ2)9|%K|qX py6o+R`+BBtIqH5382=3CF(Kq419JBlJo%d?r1v?$0Oyve{{b~4pw9pR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_person_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c21131027f24b018fc22572d09d738f5c8a189d5 GIT binary patch literal 8600 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_persons_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_persons_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01829090c1d83d29c6ce832a97711c639379e767 GIT binary patch literal 1344 zcmai!zi-?&6vwF(CF|_-*{Pj4jRV_>9iTVFLYj<0PzMIup>Tt=1&Uh;`SfxYEQt!q zbM87Pd$wGsW-a=sbg7`FAW(GZ)XjjM4w?EWTGwAeD?m?=A3pJsk6-eK#l?AokNo{w z@@<=tUrnQVybI^-D|B9wn8Z#>GN_B+9Nm2kPe<XN5|5E|Jhr6RCPFy>P&l=}ZK~y8XqZ zfOtO{sDT~Z+KWWwEXDRK0;KQ6q~H3IfD80}WZ=clef+i!@h!XHtr?%YAZ|nA=3lQN zv(bD*CUd<&ukH;7e3Yw4ASBNGQ6!>F>P5)oBpuaA{Ddn=Z$ISx7&C_tqrovQDm;Pw zButaTu$ZVLp5NWQ^I<3x1-AoS97Mzl8H2QW70Zujiu?)>R~5 zgU~^YsvjsWbQ{Jn7^&n0bT@@zl(OL{5^)mc+T+i1jO_|21W3ruCZE7T&lgK(wadm_ zGNzUTJ>)zUE2e$fn7Sfs#xvP#vx$y0Ckc0Bd40NHF5jr=ji#ha*QPsVceA3K4Z)au z<DpJ5 z0wrlhe91N#j1}b4Tpsm8g^!U|VfDiPzSy_HeS2meh;58>@Rc8+IdvV!dE*o3?$2cH c7jp01Uv+}%gL8tP^WCdX@Otuw;HRGLAKq$HA^-pY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_reject_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_reject_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb0553f814e13d4991a7a7b53df722c215e1ea0c GIT binary patch literal 668 zcmXw1&2AGh5FYPewk4sh5Q;#Ya?7DHwAZQ<6%t6Gf_ff0&I9X*mY)McMsmo4w}2r=7~iv2cQMJyfz=y;vBiPI zi*OhQ_fL&%?si2?`W-2^ zfF?1E+E(tH-|>Xu+@R2Ik$y655nC>4n|a5gtMtIn@=)Ei)c$0kA6T&p2_csWko^nj RU%>Ehl9F^ex&*7*=>Hx@v0(rJ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_capability_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_capability_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55b8545622f530ee136a059f940601b41a3d7f76 GIT binary patch literal 661 zcmX|9y=xRf6o0c{x5i7NARdY!1e+^zLrfb2MnMaSqS$OROl}{S<#uN_GjqpnW2JvX zVrMJ4lu+B<9qhiT}*PaXL%D0!}j5m z@mS7;4QNz>b9~BcepHl&X1E8QlzsJX}whrKpsOz;XBYu6a7WIih$?lX2W zrX#7n`mQA(;b(tv7M;EQbmMz}>qoS85d?9nHm?oc00utS$Oi9r!=zu1a+7Zp)6}+f z-~DYbFkBcE+HKH}rc1oxf_9N_S#*`|`C;y>J65#63-kj^E&zF6}3z4grVytTirudjg}`rqA>5`f>1T#k4N=DQZ0 z00&Mgs7XeM!$B3)VHVa=77+;G8SwA}@Cc)?p|8v0E>4p_j-;fIUXR?C(7(3fT&) zZB&U};;V;T^ihKY(hRpP3x~An`c1~57fqG;wVk}#B`1A%$vLJ3B#E|p`ADH++Doazv|FJ s;F?7jgMI(Q9;+Lc+V=w5UBp>P2suxH-2MfR{w5I_eBL_;yDUoo1J8G%x&QzG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_external_account_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_retrieve_external_account_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e31792a5fbbef516ef9355822d56cc1336217af GIT binary patch literal 672 zcmX|9KW`H;6o0;d2_+`cXxGG4*pv24XfnI3T?1hT zcZ1N@AdO#U7*Lyd%Li>E-*M==dk{uC()XO`J{p)uj$FoskgE*H{sr_eVDKkPNcZ#T J3LI;_{{airxHfjN5FIDkbX&F*geV`!iUT>cRsnIUkf@@bSHh1_9 zU48=Mr*J}CkS{%O;#O%Xhn}$4TT33lm+?H$v-5p(a|7Ja|L%*21mL$PSEIKAi>D5p z0tZeis7X$U$59p4aUR!6o)C!O1@QP2@C1`@aj46CT`x=jc#;vDycXJIk-aul<}IE~ zM2p<6zwa94N1`-ks0nc;0E-8Xp8`ToIONd>z!($k-E&|4#FUc*w{}q$+uP5}Qca}O zHm$%ZzA4(G);7giQ%F9{)@+|KS=7jw-C(R%d{TKlVC-a4R3XzQPOkOG+gO{{ZZTF! zsZ3#nlA5uvuy8rJ)bv=@NJnx;k5G?|YUoR4u-ZLTYAoc49v0;oC8txAQ(B3SwCT*T zl8^WHA5kp~?lx{iF+xqTMT3!>_@ec`|?Z zW&Ous=V!8W9!0%=yLGj3n58x~UE?|mrfvqpaAr_y?LIk2&3TwF?T~@biZ*1S`jyn8? zgpL;RQ>YLPS}7G3U8ExvsTi*>mOS%~$1~$^#^2Z1*MOG!_po@+0De2;X2mP8+#_%X zIpnN_ilvM>9F##7reTZ2GOFS(W}B((zg$lb5zth)U(t(&3&EC)2F-9_{*| zBN9z$tZp`i$fQ&@YY7PP6_(_K>yP|cRmjJ3&Yz>1SXJ|v%3`^Fpwy(0V}6j0CMa`0 zLpkGR@qyP1d#vQn@aZ#d3X9t{UC730IF%`C59@{QxFDB5+rN$jGgXM5&% zy&-UJQ5rWn-?#4aa{>Je82n8l*8MWP I0#a@Cf7QpZRR910 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_session_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_account_session_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7af6e0e76d96c0cdb1af3dacc473b162211b9a8 GIT binary patch literal 12536 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 YgwUO9GPowgze!BH-=5tPJet@40k2@VB>(^b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3e77b42ed29596667e8bdb51cf75283a585e7dd GIT binary patch literal 481 zcmXv~F;4<96mIW;0D_|?42~u@K%=b2L_(sI8b_9<(igaJ*OqG`p0odf)zvuoL;M5g zRwp+T#DU57iXGnjzSs9&zW2Si+f8Jj{_VtXHh((u|EfE%KDJ_%-x>qad$D)h|aPTj-fiNh^Q=L?qjpBJ=t`?rr|DpMd6@j!;4 zXGSV=B@HCqft0gYOvr$ZXCOFPf>@Fyz9%X-Qz`nrlT)H&16^es*aS4uCW{piRmvcg zIf+!Uobpm6<)unnaWZ=<&zyB-s9B&LdqN+Tdgjb7>+Y6AzqUs+Zxxl^tIQedS2P?d nhxRPm*3bOO=ULlQXQMu_;XA|_Z)ynle`**vo{u)jrgH8NB?W$# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f523652924687b640a0245aaf651463b5914d80 GIT binary patch literal 839 zcmYLHy-yo46u0jy0TQYRP-sC_`B*ZLQ_G5wijdl&N>Nc&DT`&eN4VzBKF$UuOQ&}4 zM!I#a`lob?B30-lrcT`=Q93a7`7WWB{QP^r=l9{~_oG^!CAiezN8wM0kY7fbE_VWM zb`e~XfCMxmF>O<7uoYRc-L`XVM^5avT}mwSf&|V-61YIW+l7DI>wAsTZ=*D5Hvb0B z&Ozzdi4LVu$T+V;rSY6=No|Z_3c+#VTF6Npa`PVbO9G@#1JbtM60pH}h#a^9-7)8X z-7@-&VZ7qbV}f&<>)moX28DfED+JXYCUkTXp17_use zAQT;T1Sc|u%!6LSMUc5s7>7EWSDL5V*!hWuwACnQWtKZKmd!F2%iuf$#1+QQ&Us`) zGM1X|XSUL5_JA=igw#Cm7@F{-&=d;&joct4cRl}9#^85E&))~t)iUv4N)6H0o|Ik8 z?Cscc!767`Is=gsaQJ0r zSXm!A>r=K;|Ez{{Dq>Ix`E&P~zQD&2+#WXQlj8kf6CG&JY z!B-c3suc=@o(7@J%;l{uDqk=`^TVC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_apple_pay_domain_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38c28517f99dd990eb7672491aaee516d8fa2682 GIT binary patch literal 656 zcmXw1&1)1f6n~ko9qYDL5ErGV;$;urV0$eKmVzFnO2x|{gxGm(hn-2%B)jZ@NBtXG zZ(hYe#gllEfu1~hE3EaqA-bLL8&j1{E)*B}(XiK~j0s*LW6c_4mCR?Qm-~#J&3M^)v>$|y z9BD#hb+gGB7eZRzB4F$*ES(Q-KG0KHA)SZ?Jw!9LQqdREV!3l5<+KnJdcaSnC~`VS zF{fqmo~qiOO0hS3x=T%AaYwlae1e9$GKE5_+IA`99t=~wW_b&T=@lMl^MFRG);-^( zC#k#Up(CH*SATF3UA*~x=SP40XS9741aYc2Zy$R2gRauZWo*~NWVaXXhu$Q%R<7|5 z`~6N~xUeXUUtTwuw(y2e+Gf7zq?>fV8|7F(aH{)QV745&3JD?C36Q-@7+k{eZxWI8 L%lH}`Yoq@I-~_Qq literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_create_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_create_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7920a9d16353c8975f2b1fbd6e503c0809624c26 GIT binary patch literal 797 zcmYjPy>HV%6u3T?ojR7@>FZQ^*fpBj2t zt{=nc2)KBWi6~{O|M?{F5{Rf56865%8f%GyhpCAl~hy=`dmgze9UN zV4;5o?97j&H-0t|Cn?)+?>+Q+Bw#mF4s-zASD~W}{H$!nC-h&lqz^!PWxFIV`z4iE zJDcRLDx*9!;CdZCps$V1!kji*GpjW>4BMSMsJT^G#jA_@w6Qa@c2?}hcJZL#mxsmp zqCH*rW|mi4^4qJRUC))9Rb_3JyIc*DR=bhw1(J@KWUA3}D%Fr~Rt$l$0LJwem2<5s yy`>|U;qNGP?H*Kr;!(b(RIEPUQpeoH7+*OE?|(=4z9H|I)4=ZK+bg85^7S7(6xJO8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90cdf50cae8d01657317fc383a882187b3036719 GIT binary patch literal 1296 zcmah}%}*0S6rcU<7Fs?6*j7kT;9w81QH&=75r}dyXhaj!%Vg<3%7*=7Wudk*oM9P-==IZPix;t)?Zm=Ien`GXk?_Do90-k*mK$t^vv?Ej^=_OITB| zIWT*y)wHVlpE9JX@PX&By9bm#jhPpPR51DzkFu)D``05TogM*~=U+5qa96!LtEXqD z*iD4a4#oZ$0jeo3s;Ms#XrNaF2ZpOGh&3-5SM4%d#`I$J9%H6lH`3_wxh`Y&nC$$V zWMoUc{4kDvukOfB9s$Tco;kz`C^zfd4r#!f>8m1E2sjMfw_eD2uAXjq5kl7s8+a48 zA_ClmgV+gOZunl{F+M<vAq^C@Mo8!Xh&qWm!0~K zDAL}CaNqX5O*?L~?I@g|yL->39)sCf1UL<#wn*s3V8_WkZ0!7*6y5^BzL*tGopW)M zSR#7@(xAHn-lMODQcG(WCOZ1Wsj3>*sfh+EUn-03;!;On%Ba!F7HyAAcl7CuDVAG$ zYvV({U6|_VQyE(*9np6Gct;=4n6XYOc^= z)2Nz!@*0(JwZXX7V8B&h7(Rpbs!0ZAy+aa)CCGawqY_3Wj7dmZDoIPKIe}?m&@};K zz}CpoO4}-T^l~8z#ydZ&mir=6p^VQlA`}^@~KCd(az z(H4SJl8}UEB&QLj8e5r_+mT&kJ9Bb3aw)OME0Q=LN#X+iW}E!T>w7`tw{`+r&F;Zb z52SiisCAUQCp#*XWdQH1^}0TR)KMAmx(HaPc@12>_YxKC-u zGu)WBZurKSv2U13uA`a08+g^@=Vh6t2eFp+5?xAELRmDWz8)p&J)u;erHzyxY`2=T`)`I{P1XPuwT~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_modify_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_modify_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be30d0e5840e07aaf459a1493b0d51e047e8a348 GIT binary patch literal 772 zcmYLH&ubGw6rS1LY&JD*sUCtsq4ZJ~Y?ijrUW#BT)kBR^@v@~1W9B7YvcEbrDT#=9 z(7&Pe=2iStyjXgXx%A-4TOig$PR{J6I52PC_ujnszV~Ln&(F^xy~N*UG_?@=Wx(yK z%#_K#R?ZPa496(JA;w0xVk@yjJ8?p%z;;|o+|W&`VHG0_Jw?pOmxd(^%bUXVTn_IIvEcsg$#{XtJg8 zIRX@7hC=H#0vjBt+}BpK!DV?P$i5z2*OPE+=_Ib(FRx_bQ1a6J-|KU&t}Sa}IZ%BZAmzp6Y!QknoEYL1X3V}sb} zbwW-DG%h{7s_SzzU}ftBYLO6{rkN~g2tvN1iT0uChu|bjAn2vTU=KuJW_j=|lMt`% zW?4TltYjgO$CJhZ<}-h z3{TxS;YH`9yw%D_yk>|R;pr`WEk2>2^~QyB@#=H!vc7WVtc)$I;*DLj*!wdUnLW;R8l@AmS6u0jymy%HNAr-0$p^D{(=ETQ@DkRbh7*K=)EVo!Deo0Tc^IdJH%54m= zu{YhiBK{PnC=0rUfr%|r_>ekbUlQO+e*V4Rdw%xs`E#?mfwakA+wlh*p>HNwo4W#w zhZ>wBh8RvziX)s_k%dicC3fmWPU=Q3MizRCnEehh2i#A(m$Aqz+`#*8U|^NbVcb)t z^E{SHN0&O8>ca6T7Qo8-t0D(x@;y_$HfIGET@6kVpa?S*S+5b;;M~+4xD4;>y>1u} zYKB|!)?eO-8r1sMe>vOa3MX*O+mG`+iF;JV8Gi!Mh5m@M0|8XQ3o2+TOOK}6h^x|r zaZWia{S*{sRMAdQFMUEdO@WYdgOD_1qr~6_A;%+{EHlE)v9x2|Vv`Wcd8Vq{Bq74+ zD{ZNSFa!ID7TTkWx8YHiLO9^#@DSusWqJ54Q;_VnvuqgiLD;6fA#fI+06z(n_)VA> z>L}y)TX*k;GFGsc>jF9e8S2(?4q;wN2?_ltmh=ILsN|AfrI#$LT6rOS{fx@hG>~oW z-lH##t%*Ht?97~t@KopYbllP0AKe*hp-#+3j7 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4746f6d63e1f99a510aa842dedc9bd7a4c575ca GIT binary patch literal 768 zcmYLHzi$&U6t?f2YtkkZNKp%wD%5t#(4P1qrV5Fw0){F=1qN=huDO@g%AN0OJ5{nU z!HC4xuysZJDNIoo+X3AoR-`^HG|C z=@SFaQG_BKqXY*STkOP6;s$O)0)ml)UZBYRfFc6qn_Kt=r9r9T{kBE}YjVh>YB+kS znW`f=?J)t7uDls!5FN0VY85`kItzfNfw9jKpa4fGaNZ(tf!sA5lp?%m_KIb^f}8Qq zHNP-p+-qj;ODtoH(;LsSEM~1xv6MdtID&SMN4C;ep$HSHYrrGMJMiTY+dc%DPM`4-=qNFH)MMQ7^W*O6h4YjEfUt`i!(ImC(zShMcD= z&o3zzR=IW=S6|W8Ky>xqKS>ktJG}27fb6O?^IxV4;+_38?V8N~e%R`oBKn&a8;Au{M7~%c z56$us{itsY<*2?jCR-E7DU~N4s;v#l@b#C#yNVvH|6gx7we$A7$=xP0;M5}7S`{Rf4v%c%eW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57b735ac9d973d3cd81a387a03b0d410f9806329 GIT binary patch literal 784 zcmYjPy>HV%6u+|_$0?#{7J>s;@5NAt^d@}#d3Q9 zr&HkKRVu=Sao3R6aX1vxdKq$|{5SfE&{x6?f}wu15o--r0|m|zARh>0oSMpG8NrWuX7v}v47 znUFTjQpy79#2{!u1?{^H=@7zb41~xnLgFNtMjAH>Ii1p|@?^HkBF#{R*dc^6mWVPB zCnVFemL?ZjrhEK|R!XDm+&f8P@WyQB9Rr_;B=ue-0-}Rnl1xH2_Ih+U0Ty^?z|OoV zeCMUPI7!%H_u(UthXM{#b%Bn7dn$C8f|r)9c!d6IlZ*gJRyIm1cQ?&5N98Y-23&8z z2lTbMTbT1^XJK`ghEa2tHfrq^R`KSdF>mfKto;qU(=Hwq{PJlryXelh-G$|rp6vD} zXy0|@ZdFoOF$Lj-#5+&59u~6TrA$oN}O5rMGnCGW;EduAQUm n7d+1Pl!?{HJ4!80jPaF?@ZooK?;CP|*-h+R-oHZXC|~~pWb)91 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2f4225dacd575f6acdd49ffaaf2ffd274e35945 GIT binary patch literal 625 zcmYLHJ8u**5FYO&#kyUuv-X{CTLix$ z;U9qbDO89CZ9_pt7wHH^D(rP4EP3YpJP*%|{dIkP4eZi??}FlwpE4~2BM;06d z2TlqoNk)jnK@pT;7M4*K5eVQJ@bEqG2%|5dkIUjFPLtn`q@;~r2yN1!y)vxK2#;o> zM&7QzZWQu;F*ai#kp{WJV@nv4;rEU{ks9f@4y3+O-lX;1ZwQG!(6`vIj_Zd5y<%PG@keg`VI}Wx-`k;D7~E3UA)lb8_8Os(s;*qh^8YQd14LGLO8P*#do!*F9mlFetU1qV@xD yzrg3e>QI;9nnmZmT|c+S^$kny=K<|rRWj literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_refund_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5666a3efe7c35ede0ec6e95db7fcb0325b823f9a GIT binary patch literal 732 zcmYLH&1)1f6i?=BXY1Bd1;s_A^il?Fhbpv}wqPmhp)6AEWl9Ng^ST{&zM5pqj(G5( ze?#ldtN5pg;L?la;=z-*h4lk^GMU+8;QjL6FYkNi^X%*l(ntJh$6qXjei-BGxKm}a zrIj>aN!`dzy~xAJLQfF0-y-IK_sOo~qekfl-cMr$mU4FD zu2jx$EM#D-#%?Tu(?nhC zdq=ZIz+-qr-%ZUkYs%P$DV@Mo3y+E-iMv$BdG;7!4~_;I+b8|baNmizrUd2Q28lHs$*y;XeghMjHW<{njs|3*&s1`i;$B6P3jl!>H6H! zplqE$%@IPgESFUqf{>4BqTkTvoA5YKA?#(ta0f(R=0*54myj%P=XpQQdf_(h_90{8 zDP*T%62AIO`R~Z(PN80$+Ku zEOf`*e71V>`I;dxl#mI%f5FW^R`14?tBcPYtx9!MYnT2;z0xgyOPg4WxT|4oV~qcL X2;cjTHb-dlm*->uL-`x&tBU>y!dAtR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_application_fee_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..817a2b8d972cbdaf94b060dd7c6d3ef1d91ad68c GIT binary patch literal 655 zcmYLH&1)1f6n~koUF)`05ErGV;$;urV0$eK7EupUrQ&4}!npI?4m*>iNp{)6tNsnG zH?QKK;z_*7Ku?~$71ny_$z-y{K;HYkyzlq&ZGC+W?9qSk7jFo_FDG1|cm_-d zd``>aEtR!77JP5`aF^=B;EuEg*#tGUX$px{w&hZm{cnc7Lu6{z4)X>>S*wn#(UGpb z`mQA(;b*UZ7M;ENbmMz(`$x2W5d?8pZC)F??)yH`&_-;x!h~Ooax-rdQ%hU7Z~e9x z7%mKQ?RMwq(k9+;LEFf;EV}CM`$>+}9V^;@1$xVpi;xg6;#A>i*=1((^Kwj_v}Q;ir_P} zd;<_4g$c2slR7c6RSIS3gndqhCBOH3e*fR|xApZkut)#BUmOyEUrx9_@d_+=EjR@Z zoRm=mYaJ@Pr0+NwiD%c`WYHN z0^*}EAr^E}CnmN^p$wg{K9_j`W--}CqF?JclJ|9hUF5`f=MxIgg*tdA|Yf($ZJ zKuJeTS6Eve+-Z6)OQch=q;F8qjI8K8X|OmLNjb~Kl#cjhh9aX26boA9XSAx# zxfF-PSFfqg4IWh1fKO3Vni^;gmA z)0YQ7diy`4{hJ_&yK48|&~@GS35GUey9Orx9+Vq$lbE`)_4=0gyufg2P-wR-KaV!? xjtkmGeq_;I_sCE1SUt9){Yao+SaK5*LT(cvhu6@*hQZ$?BHh*a7A$MM{{x34s-FM= literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39a95684fd47d742fd3886180e7c292a728d9800 GIT binary patch literal 2367 zcma)-&u`R56vxNwvDceqHwD6vO+-aQC^dq$N>u0pS`<-AX;>lxs=5)fob`}c@sDNf z4H$83rTz!d8@*Iiz4XZc&`YenM04TLQ*Wsfdf?Re#_MF0rd2HY`T0BJ@x1q$H}iY7 zIz-@#{~q^NYJ~iOFU6(xoz0)Yc}`s7Dn1F6mZG3v@=Jl*QUltef!5NbruuqNZj}S0 zWdxO0MIj~fC2{F@#MPMctD2A38j`9GYME8G)nTa`pjHOd5vdM=Iy|6Or8)v?bwI79 zHFNY&{E4ZE+Fkaj%i`otC-I^%HdR5dd+kKfSuak6c0U9a#PY0{Fz)zbxEUq*iN~2M zD)-V3bFqIrpL1^e0g%m0@cx`I(o$T~D%~ecWt3@kQ1NEEt6YI+1$4L6S5#C|YHDI) z#_^r7&E{E>c;QlfJ952;>72uzAQn1%(s4ppoc^Cqb50ttFo}iH>3dDHEDYNYoq*Z4 z7_#jka=SkIBewmh>-c#KH((ANu?jU#xEQrR30Ug!va{qG$!CY|S|B6&AYIDhpRF-&?dgX|f!J(~XZWS}`Q_LI*lHODwkF zH(rNX9T}ZvFXo}!aX)sPC#hjEH%aIUcl=6kX}a{L8-G5=#F8=36U$&FG; zGd6TGI=(jkc~-mDqt~Rwj~3tVPi+R8_fnH|w14r^T**rkr2RgcB&eHZUWI|gahEN6 zi5;>fNZ%?eLW{+@1E2$hQ5Oi7fuMAz5AYE#7@r~fdtLw-#34*$uGoo`nx@W2F$?dZ zIfMrDDClAo`TPjJkD-y7I))y`A`Ldi7$W5R9KUYI<1ASNJdUeFB+R`z0Qx4WFPu$_vF2O!YLHs4-mSYN`3 z3vVojDw1q$m&I*Z^hw13gGSEbFhsBy21dovOu=2i_~87y@hRkaav;zB)!)o&cY5?r zL1f~?m+fr)T#ud`s0SQw7YqslUYjj2d+Q;`f!{D~2MNkgz- z@QF!<<~p9A3O#T_*os6sh{9wUg~yDoz|#OajITn|k$w~G2Ur%i>!dO4nEFHRfeRx< zAwG>{xyxhp$_ec8=u{pvH_Y9``LKgyG)-f_vfyQyU``|76k#HJkzfoQ%_nfjb6}u8 zYV{Xq*Cuaf<6mX9TRnQK05E>$<-J#@fBH77TRmzOYJFr026|OW1L{4lEu6M?j{OJ3P;~A~M9p44B zp(={UORcx}EV I@Q~F00j=&&p8x;= literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c4190e48fcb1cbc41e3c72a07219c588360e9b9 GIT binary patch literal 657 zcmXw1y>AmS6o0<293^c*LPQ`~DwYh5Rk~IkA|x14K&@C#LYA9*N>917ueK8<5+nQ# zEgLK1PhmnV=%h|eY?VS8I$@tvOMV}IpTGC~eRFdI?9u-o7w-wcZ>QXzcrC0Bt#A%G zkBl#Bk_$*l_{mvh!^hvXIgl99<=1px1 zDYSiwUKiR}es?5|GZqT-u@Cihod;IWtbPs%8Ob3F-T{UfVf@Ixx{FCp4lG{={jhmD z7NUtwi!aPxtl$_nX3Ea(f=QzL8oN*XM8hf+>$7j($SQxrL! zqnOjOIHC2@oJz4j*n3WOVQ{y$4t#=|+A>9rv~Js_?8KvCdJTuEH6G?Y2K7>PT$7HZ z_Ueb0e1c!y-bHkA{Q1t0?#|C>=PC%|RBhinI`}ghF I2Fu#$|Lx(i;Q#;t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_settings_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..536bc96df14abe78362f4c10cbc5c80420146b9c GIT binary patch literal 2304 zcma)8&rjS&6dtd~UIV*J38Y~crA_%!YDBOas-%a|Mkq=YZEwb2 zf>DmG)c+u~CwfcOOON>!b7Ui1Y9LptNp7x|bLE;WaV*!su2NH6wWhlHT3$jq z^a--%Z;*{i{%1LfQPTvf0IGJNT>{Mms&$~<0__5{y94bJXb+%;4zv&z_0sSBCA!S; zeWxBWJm&-@czEcG1yo`28Fa zRFiB}%Pk`!6HJscp!_DPE!~B&3vfG^A~HuJtSfA2)@oQ@oh*_tbiDOoxoKM=S+J<( z223T}P0O>{$p0)_up*auVZgLz>Q(hT(@fK|Tw z%-SqWpJz?5qx_36#TI-C264JZ5e%w&o)#bwyJnL$Cp0~>4&~b-S!w~BxCC`Tq2B@q z^T42RrZ4djKQIl#sb6wjpn>)AGA4)_3aF~96oiUsFE?*+!|TZKn(sI075=-Q8&RpN z+~c_j!zTltBGmi(doKp!>r-t!mDRdb-Y-9hix1oQVFnG39B4Ct$hkrF2;~&@Pz6?! zz&z$(7t?~w8wfx}f*aE&K^+c#=+pmT zBjKSBGB{5L&x&$00(VBnJCg_6hfwF?jyk8OzZ#e3+ju@>Wa!5X9QHn z_Lg3Z{P!16Y$Of$(Kj>$8N{v zJ8gWY&7x2$bQhf16()e1@_(eAoDiC!S z??2nHUTb%gkK0F-Ga|tq%!4_UB}w{QMbcP|Mqioz`lwKGo=G6&!&oZc(o6ffGK;a`k?tPM z3Lf2yLlriAH+FsyI{y*oPZ39B9HFuGDdKj7H-K>xS$AOU0^!b_*jETy5Vwh%M>-4M znG<(G+TA)=hYm_C@#xDq zQ@Rs26YYglA$S(f^nhnkoK5H7&(8vQaD z{=BhU4)!XtcV=0RcjlsNqtmT&`9?)k^yKa;h$pV{T=c15<^n58#Q!m>B2$fzd52(Zrl)g5pE%P)5T zC$(ms2rtyvlFOcG$z@Npr0$8CpfFSBzOT#;8QB z8?$E2(3twOM#kH0O#qI(4+egXw{o&qdc%qg+q(4DP9Buqjf!lvq`UebG0h=n|9!u! z*BjOBP|;jHG;i)6VQv%cg6u(rjci|UCX^p5o=I~-HQ(SuWFw_I>6bs`g?FdvlDlFX u;xN3@2Xkg)jGwy*-~JV?|AyYbaJRAd?Cu4E;bI@ZhQ06n=Lm*6-M;~@$ZIbE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_balance_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42910137da296f02399a9b76ed7f638995ea06fd GIT binary patch literal 663 zcmYLHy>AmS6o0<293^c*LPQ`2RIy}etkSjW5Fx>U3M#PNV%*$Qddi)BwVfzgV1d7( zWn)GBDNKk3oz#hmtx_mMC+u@7Ecw0P^ZS0!-`3aHz#jege({z7{BpweiC18`Z^0?# zkdqQBk`dx?PzF_)g)I)tsEV_gKmbo6k3K*iBl#M7|14P~{mySE^hvXEh$mCj=0$A^ zDYSiwo)_9!e)B*Yrz{laBk$_zDh@0kS@{$YGLl0Uya5a`!uXzjbr+MI>{-4D`eE~M z$V)Cp_*!wH`N-uuM579v;Y+S~rJDrjH5d6oztg0Q30@&%%^G8s%%`QpUB*tPy!0C7 zhM^)$not|nY%<1$kcPKiF!lwORtHz_>9MSkj>VilK|L|Drq86oa(gJ{q!42|%Gt&;!4v{_ofWKh$Py7Kh zTUYK(5Era$r`W~4=kz{u?s@Na+sHiidm6o&{AtPms~^Dj%zzEzh~osMc!DwV&<*0= z8gU=+tMB?I-l`VVzbpxGdHe{A0+hbbbR>leU5|_SK(-wNHVDuJb7aPG;FY}*6Y+Hz z%0lQdB%tAe5rt0BQYZ*7RDerS%O%SB$|?JrRP!%2j>?=MH>2lKy&92mCmHxI_XxlEUJc%4B9s@ h-MLqJ*HG)9Ix*qf#~AM#2oHZ67`L9q4w+QV{Q=%sd;b6c literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_card_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_card_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef040ff6b745d9a1310f95ed0013deb144db788b GIT binary patch literal 459 zcmXv~u}%U(5S`_K0D`g7#1AmJ0yau(ERaMiHI_7+lbyhYyWL}VA<|g!0d{34^@Gn21tjEN?KDN*ZZbBVMTviTg|)l76?809q$BZ2`=}>IX7pMb zOxisuC$SjOUNoGb;B<~+PLue7W(zZxqT4w=qdGR&&g?)mLQS<%afUQ2WKcG=!Wb`< zG2iQC3*}5IQq=w&|XGU`(uWx zs6CI+-`Z%N)=WA1UMVk7h(a8r1P?LRx)ocAJ+y1xj!DuQwi0LPU}T{$QAnPnum$)R z+vFIwYw9T42Iq{r6W8nfqeDDgU3vruV-WJ2Tt-OEzodr5@n6osjdK?0Xa!Da!QCtm#WD*icB@ICYTzN8Htz1N@81L>zht=8z z^*rG$6}!Ng^U|3);@LRg@!ZO#G-U};TFp_KWZ^j0dY96JF^i3d>prXO zNPi=xEKM_2sO|ttIjLPj@}JR(Qqk)Je=keGAEk%>Hi&(h<^EThgm~jYmhDIB$bZ0s zeMm$98KlqrIC|>m6S~_^+hCMBUb@z1j1KYqa6Ia-e#W$_1@FKY(6!3GoNr* zty>GNh@X`B0sYZkn%YHowIr*@meq2P9kh7$s9!AHD9Me6e0=MrU98?I$(@GuKAe*2 z;~zUkcfBO*4IQjaMbW=jl4}iFxp@>6%ePB%``98X`y5)|c=@=vx>b^`CT6hq``Q;p z|9(mCH)!F?kzEX~m*jd)_;OSE#W&>><^I2$GO;|HU)DJ~O6+(J?`vbA#ex?4;P|2z zOIqj-H*2nFt)8jHmU_hpN}S&}6Rv}HyiT=bj%1T^^CzI0`4w<|xhqFba&^L{C*C&( zg+mFc(A{FHaa5!^v3mKpOM30zGcEWzzoO!>dWEONv5hf)51jgDcE>ihsU^R8^P4v_Z{FwrStw*B_<8?U zEPYLq{$>;LOUBImKY)29nUX0tq^4Y#WyU8OiKbFlny8NWTxlemsd}oJuBV%7U6rMT z^sQu~UnDb$<=>U)ta^r{DL~U$?V(wYs(@w&&>TmzfaV6!JV*0@76#A)M~i??44}pK ziR$D(?CPpai}&%<7WVvmu5UTES4~iK%QAe5?pmH-RcQLI+D&B*7NIFK6 zBS>llNejeO<6Rksz)dRV=fr5XCzp$nyg(v3(7GTHvlz=v2&5--LLla3EK?FlPiATa zDUTr20x@Ueb7lq7J7#QL2+(4|w4u9xi(sl6Ekdwuv>E65P7@QFGqGn7iw6i@8ollogpXzOOSo)rlER0s zZks<>;uv~#_Uz;5ENC8iJ~@99$YZKDv9FuDuhTr}xQh?;#-8Tv(dE&5?t>hO;+rB2A>JYjx4%NKY z-kxX-&s$H5i}Qw5Kh- z5v`CkIGHLI^Q5Nfw(WqPEK5NU?K)0_DqusxD$*P2Jy7YRTRQ-s)%NYf8o1?&@3^(w zj*lA`ZaB^pczx}LZal%ZS$l@XmEY5ezL18&W%L19Gbk>97|0AWP&Q3778lqLPtF-iX=~^(k6{0Ps z0_yDimI?A}AzBj>6P34>D?#yUh^`7~YPn+sr9q+c%G;H%gQ@Ewx-NvuD;+PGS`X2> zK*pR@m>Yie!kHr@sGJMYx#I)^J7lG`3$J&A)y)uXii5`7HhuC)3CgEJbczd+bHc{s zt1Vj|uC~28o5WESMJBJaZKaAx2{zEQZWydekQ~gmt7!tAP9p1!oMPk)M$Rz8!jPP1 zq{;}_=1a!0b2!-n##;sgzAv13aaX);$Rg2Jwrl)D*a^cAiAx}F8|_3@A+sPv(;oIb zNQLb;sbRgjwteM?RA#&R5kCRrF;$q#bDgQ6uoR-D0edsa@oLs#Wl&91#!6&e=xYck zxyp(u`dAWHMF;DziVoICcn52zt179$1$6cEHS8PHB=CN4pN#D8k5d_NQ}uSHG!D{>QdK--f%R#J`?S(ZPf zB>D1R($ZhjRv>M4Q@3SV?JRdCHg`E|ni)G;FyAllDjX7C; So#{$2bgwY^haZ?c_v3%QTlDt; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7af6ea4df86c6b6d634500ab4b147273dcf43c67 GIT binary patch literal 1370 zcma)+y>AmS7{=}U%B5|>M_ZCosZ^BZgy;#1U_lIR1sza9v`8q6b>!Ui)ceAAP=gQ? z>|Id9hS(5)3JXydWC<}au~lke=)~*0Tq-CCPRirgKfho<(H!xPQ7HW~+(6d+%jmT`6k=3v;($H<>8!wP=Qv6=e=V+8N zY5^@#Ye?;m?UcW%6bH-defqdfxwxB(Ac;8;<4(YZqsh_LM5w`lQD2tVJ1O;-gQjTa zbLTo(2<^Xx{w|`Zfqm4_9w4gwcnTObeC-CbWgyfX5d9c2hQ!LV2ASrNmj=Wdl47>f zF=8JhWkot8&Zs=OwCS-HReQYWF)!jzr++6)jCz9l&w^OUQZw&JyV>R-%J((|yj>N{i}?m+q{WhUy6V`{ zCM5PEN{AdGBue~tsNyj~9=E+PA7RQB@&qAX94ErdJ{9EXTrg&+Asv=`hxQ>vhq1c} zg}SYH+g+x7OC+hgk_Z}JT1=8HsKj0Lnp?05_X&-kxMA?fO*>*Ui5KQCUvYUL=%o}A zycXpy%pauGO|z47Ni#b;62jq;oXw{l1`bAK~`B^(xo<#`Qf-GwnSK zojBW_>s4p^#!Nvb&UJZje6DZI6{J${8r`+m<=)u&zHz>wW3?UL8=dYO(*>EFeWUj# zF7%BH|4mrEsPoSjUWegdEliEfbf%AohAPOBsS9#s>VjmZ?wF1xYk#qr)LKI7EkUIg zLJ$hN>R9ZQs`IpxaV6^0volI2l+=`DTT#Wa=|V0-z*j)v@a^%PrJh~y8};IJMkaUG zdgZCUF;$TA#6NQKMb!MOPFdD+E6fv?-xnmwFAS!x0BMO%3eL*Ccq;D@x()vTu5Oil z4;EzRX32{Fbt8xNjokV-*&O6y_;CkhPsbR4w-8?VjA~!d)dOo5+dIz>5Htt3@JVcU KgYO8MtlXb`08_gF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_refunds_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_list_refunds_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08d709a75d6542871d745de27d703db6bbdba777 GIT binary patch literal 796 zcmX|9J8#rL5Z?9coW~_Vf-Vq*P?E+)&Vsa2ihu+~bf6#_H!CNeT&&n@XLs+E>!GL1 z(a|DGeg@U)8e}OI72Qc86sef?-eo1veDjTGc4l^dHkgbO{kI6Jmfk;`;q{OXhI_E0|6VHN63Mj&|TDXn(+)b z<*hruF=gyKW)|ycX5a>1)p~gvi!SJb4&kK76ZtL{aW1PS@FeA3b_6GdfXai5GUiF; zW@(KnO6NN)S#X^}(NAkY}nW!#9P3Yb2ue-X-5!FGv1#9fdfUYM2;mUU+#JFZ)18TQPCX_^^dyBvrHUS10yfjmI* ziTql5I+UZ8&9SpNu`Ji0c%->DbcXN0%#9W|#?Ho!U2J`pqlNXcvp!=UKKp8qR=38^ zR?Uc&S^7@Us9L77HkMJZ2rJBv2)zK6rv@c9YDRP47z{2HaH$umo~9}HflgXyUPW~4 n@0$7Vi8VASe)0*5iA^cJ@d(|yBCRVD{Ppfpf5>kLsyg~V1ZdS1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..868d4760e1f97206a35701af94498c8a928e971d GIT binary patch literal 2232 zcma)7&2QX96d&)7cfGsWjnbq^yCG@Qq^ef5aX%2fw2+3XrBX=|p$E3AEY~whtoW-l z-jW4wz&)I@+#*gO{uC~;d_i;RffKh%*>dQKH{7%QH1`IANivXl>Kc`b`U{C^N_E#HBIUTuizKkMIX1ZueWuD6}^&QZkK(dZTOXT zMMDMj5E1+XB0AN6FJ}9-s|qavTBemDT2rV2Xyp((qR=X!wL@sVJJPEEEw^iFqVWZN z*`Yjs62)#9@K#aa`>qoU{MhBO(4Pi?0$6_R#+2EfsI7#tT;eiHMCHqFM2WO_vgk57 z2o>%B0^d7`qP9j*yYLjzBE{zcqdL*_ybDZRB^&wIk*pzc*xWADj zq%yFn=E%^dCJ{-7IP=Md&DQB>A#vBbpWDp#xiFj#k3*j_Q6rQ)%vB7D65WdIfQZ?X zOCB)0L+;bqc0DfYYx2t?+2=RS0fEo1TzUSTWb7G_+0~06o(sbVBVxz4s59zNaAZ** zHWAH}K2|r}C~|{!VenjQ#LN!(8fDfx3p>$Dt1Jx53T&TRmZ(~mACitI^%2W@*|EKB zh8b{pQG@`*sAbtf5XQDj0n1`CcYj0sAkn+X+yD~H^RSY--rclt0Hzjmtrnj1m&82uQN9yN#xVQRqB^kMt z;!8O?abfSm$I19oikEU|w7J*(FlpRQ@$DR%xX|Ot_3KF*ztLj`ja6#fJRa96*c;_G>`KzfcR^_djU^W{R6R zbtkDlN$*MIWVbkGlU;#yztU=msjOEmLba*iqZMZVM<$bBl;W=J!3@KPYL=?@#8?Jf zbStI-m%r1j9M!Qa(pI%LRf#I4)QOMQ={w_2)~`QeAHWI?Uj7ioo1&&^Z%atK^%^ZC yXyG-wo1nY>(nZba&Gr!t{RbM>jNPyL2!?)R0`&8J1VexEoM!x5d5d6Br~DVGDHKlt literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..194329880cba27d1072a258b0f35a4f8f66c7ffe GIT binary patch literal 638 zcmXw1y>AmS6o0<293^e3R1txgDwZ1>3%XVrS|k`yK?RmutRwf7oN{MhZ70g@@HaI4 z35Y+139+D)Ix(?T3T5boeNHX;z2E!v`|$Ve?JY1z{d-)zCjh^#aCgEDSdR?2gdB2G zLPb(SEcQyT@>9RVei>9@8WQl}CFH>;$U`LGd>5ZaO_cQhSRoY2fS6CYx+)6qX719Y`(if;^TGaHF&{!Ux2r(=8gq~#M8S4$YAd$u%7Vsq6)Lq5Z={$LfX z-hH|Eqkr%-IJow_FqXS_j<)H6%Re+3yCpE;wjk|@+ekOHDc5zp=LCjJja=DPxp8z4 x@7SbW<_8Ad#>Z}eBe`!x^Nm0~G344Ogxo|xj;>&E1AmS6o0<293^c*LPS)Ep<>C^6i1r@Q}Vjb}#Ipxm2+D??);csZ! zSP_2;6JkLpbz)+x6w1&E`@^!{1WB*WexCk#oub%LjJ)aG?<3MsUG ziCz`jSbqCh8mBB2^09aIbR7p)kF9(L2pQp!1@8buj4*y+U){xolLO0}U>LSL&!)MW z;0YR4;KK3`bHU%_Dz9{#;IhsIKOXkllrfQ4$XL62uUGBWwCn8Z7sYq?{FELXYzC3Yf$tp91~RlFN_~a+LttzktC74F4t(NxwY00?Rt@ E|FfpA761SM literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_search_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_search_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..782be563fa9c0a588b1fa481bdbf8751a46a8007 GIT binary patch literal 755 zcmX|9y>HV%6utN%f{s zNzNrO&g(=f@U4EX%w-~2JTTE~S>-{?_rP2rhC&>p(E5Ow%^c=F1lB0?VtfdG!|;t2 zWBq5UIEb-Vj0@N?xO4+gZ$BMHV#rQdBnG3mk%%&>JvJ>O9&0yEvP5a8h=xqNP`xPo zfvxaLmgV{j z54Ahza^BjxbavKE>;Cy*-t1mF-8IwR`t+*8;_fIXqRpxtuZv4Y~=11ZI95JYT1ZH7ljITX}53W$>3I%_> O+t{ByzDD4xum1t|FUA4@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_charge_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35fced2452e46021d0f5f860dea5af6197b6108d GIT binary patch literal 2169 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 M{M2XEeEb&pA2}uV?f?J) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_confirmation_token_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_confirmation_token_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cc6371e0a4f02ba04bba94a7629c3e020c710f1 GIT binary patch literal 661 zcmYjPy=xRf6o0c{cg9PiARdY!1e+^zgQg8BqM(IDiP~&4thdk0a=SB|nYrVxvC_XG zv9lHb6f3cjg;Z8{fio7Ve6w=_2j;!soA>?Rd|O{%13KpK-9j*cUrx9>@d_;W2%JC; zIV+)JDPs-?Wl)7_*y6B^syK}q1n?B{=mX?2vag}{Pm@J5==^rVfHfP3csxa8U(~ix z($GuvyfBvd^#f&{ve1~1ysM|HIIw&`@(CcMEQd6B0~lh2@f~_~7n7Xr5?=&^u(|(O z$#;dWGMDAGnxH&Hs|%dr%S>mLX%d{*namFcou(^<%qkS3SrejC`LuMnC&ckIE4@a$ zS?GvJ6B?_VO(8NVm2JZtA-=$pba45eAE^rYSkCzqG!v_8{!CdcxA&Er6mrb>vk}#j z^BKw+FN?RlUf3fgcZLriaZ^~_uE`)9qv4dMsFBxgxm=9?>ql7EkkG4+gtr;i3*B*L zI?|0Vw2gd&&}Dbm4|7l7B9VR*Q_qSO>*+x?qzo!`FiN- zVmewx#qXf9+@OIM#W+P74l&l)O0CQe?F!qelewXbk%eBP*!hTJm*VfXi4VQP^J{;!;p1}kJ-rxE zsov%);YhBor$1v&x9H|&x2+m*jI?65XUIAJ|JpS=Miw!jqyI{CCzw- zoAcHkUz;=b9kYmaG*h^~SFXS01ExfAoYS7J>RlwFOqNZ`;)I=%6MD)8Ej>ESBNmr# znq-M8SEY)C(*EdFQPK75Wt|WfWt5O|nUIXfgH+=NAs2%vH6Ed-TiQ~I@*W`(V_Zem zLH;fSB4C;~Nj*y=&CIM*d&#KCX|tHwaV}{U3>`)2aXf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_country_spec_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_country_spec_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f11a4936873c3dc35dca806d8873aee024772ce4 GIT binary patch literal 649 zcmXw1y>AmS6o0<293@RbLPSMO6-$Q3g05AEf&>F9s1*aZSV!(DJ>|}JZ70g@@Hez< ztcX8_39+D)Ix(?T3T5boeNHX;z2Ecue$U@GH#fi@{qIrvo&fxI!tIIIV0B=@ITTQk z3Tl!O;&4y}b(n=64y&k+vzR~tFQJG&LJ=eR7JC0IX_8Uzj}u0u9USA?9JP5PO)0px zFVX8#8_Vw=3FDNd!eZiGJzd9v)e|e9142d$$bxr(Ax0Q)+gEonDagL%O)v`E?dM|7 zjcQILPL9#25*PS3S9z`51eY@B#nGtOri}5tM#kC=#%fW_D~J1xoz3&gYm}RUiY#eE zZB)C(SkAdHc~?GTUtwi+aI>VRqDDI9OZo!!%m_(e34_({p%Al@Pw8PknISLe0{Mbg z`)uJxhMGPV)BeK6q{qTICG#5B?t?fbs(1%^w5 zT)VCLp>&A{E@&6|o<%q5z8~X(dSFHSqd-5l{WtQX~WZ496IQz})?r>*j@2^^|jNl3X zYdU|{5c-=B#8b$XvqMmRMK-dfE^?)|BynBt%C6E@T-?U#Sm_pAwXM3vcG1<^nuKKZ zEwb@X$Sx4+4<%cxT}r76v`DleEvHliTDm|h{jy&9hfmZcR)0ud^hg*z2qMS#LS1I~ zuG5JazVC#QuCU^LCnD79vdWGhabJfLo0T5-17dT>P8L8WaXvV!O8md}!Yag04ft$38e_su}rA>+~okUZ>9%KAh6ZZFxG`h;TOjJi(CCU7wOeLK*hG z4q+uq0*J}+_Lye(C}_UN#)M`%p6U8tv>!5+90itVGug3O!?lh~s089>%YNU?>*VR` z>a!nsVLS~Z`q?~)XH0WRWZ70^G3;3`VU>W;4#~e8wzmm!&FB3cy}~rp26Y*CSU3t$1WU!SkoG zT+mKcGR0i|tpwi^sL>oO#r4?)&k8cR_*$#}^5|sj#!2l)tZn|Q$dl?Bk_+mo znk@r!R!p5W_()TRb_@aR=3t}Z5cQP9#SFI%xTmEb8s zCKisz<4;!-ydp@WdD7gB>o*g8Q=rPk%T8QwCb%ic*v#NbJi3(NB|+euH{!-zg6C2~ zSH!`*cZcLR8ai7B^W{5)6nLkl-KJ(YNnh3#S_R0ofI_`=qHsqq(iy(?EEjWJ@RCWZ zfi7}wfeXHV7Q;2J@ikJh1xh#p0@75U9xM;SS9)AuPVn-Du(|ig!=3`m<*+Y=+5j`H zfY{Lsm!q8LwvWY@PU7Mo{6fArFQM@tA6$rtn|Jgoo6O2`9lA5U*hS-0ey~i9`T@CNidekCPV@KP~yU>JF?=4Ok(D7*0`!hZv&(T_YAO z5eosog}!eXEGkj;%aRC}`wuWHKZTD5`9$axs}%C?FUDGS(oNs7%IFnxs}haXjtTi_6*wAFZ`pIdD~Dc anmRP@JH!}oY6$m!Y8W@3Pd3N|H}?mKmUngl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98d3a45af57bbee007755e9925cacad345ec0091 GIT binary patch literal 1219 zcmaiz&rcIU6vt=wSGPd<5sGc)009p6KsSn!#1IcaA_s#;FfqMMmhMnC>@Q}fgc{>X z@4ZoPUX6c>7n@$pB*ud$ZzO;RPR{IfOE4NY>380I=5^kid2c=!3L`*#^w(|wVGe*F za*}=Kz&L*?j8otN4+bEFbqJ-c1zM=r_0-k_BQ)z~Xw@wUH1HUB##`W-7=F^#9`#&G zEkSeG8dAG$SMxumOBM3*=lH0FDSMhQKaQv%#uJ~is>VmRVP3xIVGRs_R_r>%)GF9m)RJU1ZbkYxY0Bx&cW zHlN&xTS*+rY@fNr4e6`dKgkBcF2mkyKVm%BP!nFjk>^KEw1@X&g1LoH5;yX=8Tg^k z_&8-QVRGHwXP9h@KsG{=8)Ag`2tr}(wE}66A#~Jo1GPeA)%XNLZWP7LO|Me;=#&v+ z$R%B*@DZE~6I?~kK^$VI8J#$rm>#k?akgTHgXQ%&J`|Cib+>USl5~!7bnFEFo|ClM zK^(2r?%s2#&+u|09NZ?Rj@aK%u#=?ccTgj}5fq3kL5kIqHnBy}RHQ+Xkayr~q5P%t zpjTM!8>?rUX4+>KD9&|hZ+fwBEM}xo?i$^l_xaw~Lf=@(=vb*kd!w^`V>Tl*^B?qH zaj9=CrG(665&zySyJGofvtT1Fxaq-R!83B*J{h@gpNyo9(>ALXFa4thxYlG`Z!*la zKo|kT+f|E<%RDEfOiGbOB-2u+q!gv3N4X`fawc=apj$%3HQLjijhMiJk^65~^Sq>rT0=y=Ocbl9N#tYW7HcP>M^sl$sR_a-3`bPHUv&mc zc&f6eN#8ukmA$5#_z{^Geo*}A9U*5rgz(Y=aOE2)eFyh1tRl2KZ!UlsE^3p|?)sNN I3~9E%0dEs5;Q#;t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d07f2bfcfeb4cc4cc829e68059148c319c3cc99 GIT binary patch literal 1119 zcmZWo%TE(Q7@yf!w=W)50h>UC3#kelCBOwd0Er&37}3iTGOnE|Y}gmGQ$me5HSy>T z{0}t#DPCxLA#>s2$y-gq11D#8TLU`D{^pzC_w9Vo`CcsMfLQVGvfI`H_#qGdCC%8IA>s;&B(ttDsG(|yA>{EVIPP1}S(0gnOJ-UF-?_)Sf(va<j&1lSM*TX_kHN;INlSXXWfjr@p#l_jxfr7lDCE4ydsN=_c@_%l%K`9Ap&0d~-sMaG;m}brm zau_)QepBvcyfr<&{Z^*96*GGOj(}}$`h+>yVGh><$0t?c-$Y1?2=N?3eux{MlnV&$ zHykh3(2NL{%HnWUT*C(ua)KaaPEvA&sOE-44R)**r?y7|Y#or`!1CPJR@7v>VK6uQ;Gq?ZX3a#xz}X?OC49LNv7)3X7OEwM zk}--(p_HACnpDnY0;Uk+Z2=#^>B!`%S@^hlQkp+0&bQ2kU#c={bb+E99YfL0jsc2e z$J+7c=WMGm)z+puO3DtFPs$6efyK7A*r)O%pK7gKxviBGhK}_8U7MZW%!2NiQ2#qS z7$*HzDk{wjHP1PI*a#R3>-B0yr$h3_VF@LvRo#HmoAP)|LgH^!O7hzG{36+6zgEb@3jHIba`}lCmAack^5X-kj4Plw~URE}( za}vV!urAG|bZ#Ee31J7t7vB@mQ6YpE27q&CVEha$x4`nbQG(|2#5oY#`CSc~U$PfK IY)OuP0D74kEdT%j literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_coupon_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88fb187be1a36df905b14fce533fce1ef5151fff GIT binary patch literal 638 zcmXw1y>AmS6o0<293^c*s)#^L6-$Q3g05ADf&>F9sK9cIb;M8UDR=hOcB0%4e?!Bc zfcR6G5DPk~6BApdP=-#}=hTwl`@K)U4}ag@-U55{zemM;0`S`jw?_7V&w}!$Owll_y8DUgz-bGbr%y(jx2A2Vc70Hm-AYR zQ#7i;1-{KyUgaG$aBd0u*pasyD2C2gpUYIhmS zg^(uiDrf8~tgQ`h6g`s_(y3U|7pP}O*7TJ$SRNcpIV;4J9_N!83QiX&7PKrr(z-Ec zQXGz+KBKxYcu-r1e2SXdXNnqW-IYt(q-%nyO&84TM|Gomt~5tdd-VfLKEtp6U=^+2 zeYx|azyCAZzY2mlRlB#2uIYi#Ke8FSB{1o?pxlVt#5A=n*LQs13k;VAg?6j*-}}ASzV^M>uccA}$dUdohaYVKzAL3S zq^?J2T`ore0}SgRfSkp5R%H8jo#*0_lI(+7{Xc(Yg||>Vah9}$gPB&u%Isbs+2z``;CwhEb{Bkgka@Z%MQ-a>M9*9 zg(E9nK4M0p{5gWs8V@z7qBn~#_<(gNv9I-F)W{<~K*VFDXnV;P2C`R2{3@y<{ zLgS4D2b??$SP-RR{C{q#!5E2a&DDg5G)~1ptxF)_p}u;L&hRT$m=G_~N%2rkCki!mrclOCCry@@VKwBWkZwtM z3(iKy&)nj>wUeQllhRDfo&9MVH=PbJY^UuQw%c|%uiMElk{pFML zZ0p+GsWsQ5`bOT@T7~kdRn`o<(TjJbce))4I-}D3Z|`8J>upp_rv8X11QBh-9MSFV zYQ<*#>cjyBgUV`#F=xX{y{DFb_ z1rmc9gUBH#ajLqAsc)H8SLH6tqz-a5@P#{{b;e_+B11XTyAs+agz%38;O%cJs YogwHRkDUX#oZqvc`zikm$VETlFJ@c>ng9R* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9779c5cdcd545ed0f97649508dae37aae5da63e GIT binary patch literal 3442 zcma)8&2Q936t~y2Uhj9Zn{PsZd=QKT+Y+HRkc848QK>YbgkBa=%h;1(v9=f6i?XO{ z543jaqVrFR^@y=E9+;-auJ;;M6x`dt;VG?MnMR{>_{5dvAX4z4^0P z%yIB@|Cus=p5(Z{=u7-dM}xyZVDKZSb2{JPOuo+Zbew9WOrb8AsE*jX&`6tNT{JWG zj49P6o=b7pIURk+>1oXWDujF0vkVmh&0wjA<`^mgnoXd2hUNgxC(r^z3xF0AXpx~M zK+6fV)E<(D|E8aoc~aWM4_nyvZZ26J^@=jy31IV@lVf#h&n=U3pFO(Lmx5TS>NI$Ia5 zP4{q!6U8E2jBp9|&m8IKNu6vDXDDdqdI-c9OWUc$j``kPY|xbAQPK5 zkxcBVy6UN;$DxFO&K-i}-n44>Z4=jatlio*>^|`9X6-XLj>fr9ZTkTjRQpub9$-ta zJ;K(bTEnSc?Or_G&OOYEn(Q*CiT!7|cq&m~l{K{;AW@BV{x^sPh ze%YVCsi(>B(+P!Pj18-h4H7}{`ANG__CkB6rf8no*#Rv`MIe8 zO~pugsx#kl_trbR&(8ZLIY4qeGdaJv?oXTv(3u!1P8>+(gTl>MLMoekC7_~s$f30O zGWR~0N|T+D{h1Yia@8-c1!yhaXynBHiFLnvEkM^8FIpz+3gX#Y)Ut*NR zN98L=bD5>PMo)6uH9WC?mELZnD1qh}-Js6fU09F?W`TdXX#i*m`SQlIi5NM6UT z1`ML4CBsq9D>SVYpqWV|;JW1*UiNvnv+Ea$Kmh0K(kqyo{YA9mWDc`aTFRpCW#EYV1%`nx*#&gM; zrQXd^F;4|eQD=dQ(^M={!E*Bq9kJs*OGhjyR9uI@`y9l;?5G^?Z27~d0(2^-%*5Q@ zl0Uu}pv4#g=Fa)0nE=hiNagr}bOp#+0bZtnmtx4vp=0~UF8Jl804>Fu`O1D}+0P|Y z1S9nx zRLZdZY{+8&dGsAc-zj_qraDwK;qOvidJ5$ypU3ejSDt(kk4Gm0G|pba2+(zdBT$E# z{s=^=)4OHptgAz}KT66tb$UsOGdfGlWNNlEvgFLb2S_<|S_%6OTz+bUBN+ClTWZ^c z4!DUmXn|478f}IkY(ddzC))mK+mlnyDtyOTqv8UH4d)^q_QjCe!VLNr2JRLJh~enT zy{bRD5TJ!Pdee&s(lT&z`fW}^3GZtNP?~r4XRi2TpZK|}0lJ!qIQ`V%h|}Ebk9d!B zaK{Td*A`^t&}v3XZ+lJ(q07pSW4D?ca=M>JERR`6_jyluV_W_J19u7pct0{8GX)x4 zbu2)m2`A`^!A?;3`khG9rk#=n=Oid4t`D@34WK@3?!h+t2?lNj1Q-o%H`$0o zj#JGIxlG2x&VL>#!fxe?9bU^F0ThS`^t;jJ;L#mJpfmZJg9i)1 EzZyVAuK)l5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_line_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_line_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e92330278283efadfb004956e711f0c76b012a83 GIT binary patch literal 765 zcmX|9y>HV%6u-02ZrUakNKp$#2(?`@v=$#iLaG=_B|wTI#K+?0E+)W198Gb7};HKxm( zfbkOqrz9pZO-M>ZN-cI0Cv`(NWg(-)AumYmek3si_T8=GLa*<&{6E%cQN!9o>6T;W zJDGk1hex7-*v!7`=Me9RuI^Sb)jml;#v$6L1V~6@5<2e*xWH~B2VP9K@SL@bUvU%O zx#DLgjC;jQW0_^FICJ+o$`BegL0d?8r6ILCUq?lhD$@WN3)$nlu$L8Jd^pJ?85=JV zsnF({(ov!9eYB^c=(K94#<`4A;M~k{o@Vh;VsV}G!=osvZVH?-F|N{uS>Qa9GSiV3 znN*w?wr}GKslSmiLUQ>b*w0c3dh#UL0d=6WJa~yxla1{xJHX1pcGNvUk-;&@;~){c zLEhK@@~4E+y!*~&uz literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_lines_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_lines_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d24f4739969c7d03196733dbedf693f6491afe19 GIT binary patch literal 801 zcmX|9y-yTD6rb6zJ3j9GI1C`h7@*k#HcCq<&_s(18ja01ljZgS6Lx2pnSpS<_I8{d zt+Dp6u)17hHlebzBRR34^3Bd2lkA({`@Mai^M1BkvjmU&_n80i2>ET4>G3CEyo2C^ zq$H&o$!Scf!A|DnZtT|B&Ai-?eM%hinxx(*lKMcuyVgGr`a#(EW0a6q?e}nU3QE5% zH7|rh#_MvW@t)f&v@voCY0tV^If+BYG3pltNK8`_J0A(S;4LEueoD9To-s^dxe4#w z@r?=N-Z4{O&oF&I465aqn44=X1WZv~EUyCLJ)kX1{ z{OUX%s9|Sq={&FsgL4f+nQf{EYRi3Sg4U525ZyMn n?GxIsT#mr{BY5W00m7OzP7H@Humm+c#ZSMB{D8T;1Q literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3da895fd6092d7a7dccde32a8a188fe5bc8f48de GIT binary patch literal 1327 zcmai!zi-qq6vyqv$>rK!p|quUEl|`VL54PhG6Cw)R)PT)#19GGVug!2qUKj)x9TA_ zVDHAUu_FEyghZ4DSwajg-IhR_$) zsUBnC96kW&CGwDm0~F#m#>&?ME!5k3;p+hjjkXb*Z4)C6T}K{yjy!|mw|Y58yH-#W zXpNaeYV|C;{#Aw8SdQOe+dGVlTZ!=Fhyx)veJ*TGj&8<64f-kbWc^+*Vcv${5uI}G z(he3vhx^cfi5O~Q54E-Xi0K|~0b|6|u0dM|!i)jY{~%;Y%ra^aX$*PwtvMvMK}>B( zsu)X=Ufmv%Q|pktFQ5{ps=Do_Zpfd^|BV831@oTzk&v}c*^yRfhl@C5scf*w^P?_( z$R5QhlP23s+{lwPKiZA`4wFXUhrW>GT)3%Ff$k&0(oNfv7NwCJGD_tLrD5#t1j-+y zbbH4Q%8^tZx;#dy8%42ji<5vDor^RjYDkBy-k?Kp(GTuChK!tUwC8Lvz9r(sxdHVB zOKWkw1uHviZf6U!b#_^_>jeHoC+UgDakR30@sh)R!IlyTaJ!5hYp-?q! z7KIcT4Pd)yIk24cQVUitjB@xhFfY)@M)O1KO4hiVldA`sW>^O%IyT#1%*M~;EC@-&&C#VvQW|SR(~>UoX*MVij2+d^K5i3Cvz2zQUS{}EpGuDm)Ah5er#!qUIKzDB{)%bDBBY(;_9v_YcL_Q zlt+>D?}hxZu9b>kO&1^z!^Tztnw!a~0 Hifn%Zi|R?< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91b04ecc1126e8c4f40632ff126543c63bc5e8f9 GIT binary patch literal 769 zcmYjPzi-qq6t)v5mtL=}3Q|v;V5wL#^epIFF(6H0jckH>?CgBVq~GGC?xMu=m7qreHsZ`h3mI|8R+9`^90T( zAl1uEMIx2HRgt4;s4DV2l1l5>kA*TOQ4ZnIyjcmk1Yj82PJJm-n5T$pA&4J(pB zA}TKd#Y3+6vF}wLV<}I7v8v5jBEm^*aEGz;36C31?rQ(J>1Sn2l~-Gg@iY~R*Yz`& zo5DV$rQXragr126=qR1iBamYyGWtxX6YmX#7)R-d4)|~kX-F?1y`XXQj%I~A6X|~c z(PJtj1$&t`;3JS!$BHtbSzQBV!@4%61A|FaSH~JvKPz%i$F4U6q#5}K^sUn^N%{I} zZPwYHlih`7Io`rW>pLHZvvzMzdMjqDS3WG|r^9l3)t_zpbK=*U{Lad$X;imKr_b_c z{7f|S&&?;PTvcScy1ErjtF{}4!Bjyi%};6iSZBIzJlF2;YINfrG@XBvcl8zPCGYEP cVPlN1U4-|4paD@RHmN zxvDnprEq)cDYtG;)v<1iqJKi}xrpFJm`e{m_2xj^1jwmxh8&7sD-gQCKF<8+&CL6L z^JT48mf+`qy=?#Zyd?dbO~kK|437T}gFi`@WXV0rkvp=J>*QoM&-L;S>L91kDL6_; zk)@n;PqOmAmn?*pzvbioogzmIfGQbOUrmt`F5+T0m*K9ZYvSB`iYQhi!#S1Wf^#}WRI8ccoDsM+ zo5(aLkXS#^XPzO$1#OYOvI)+x1Mm!fK=7W8e|_I}vCmxhz#xX>Q^jz+fg8}8$vO38 zTE*QiHUoPP>qY=RuO!PZoJ5i9xtNx*W7s`C07ugrb}if8)gR%mM=(|Je&28{TD09g z&o(hF^lZlt=-OH0FzFaG$Vicc9gnIG4h+i(4BGStf$nwnM{sf?riN(A8uWX%X@FSe zE-?nypoc-7sz)qLbn~&{?qWLMC!RGh1AXB7MqvA0!wft!qzb`?@42)_aCeZNO0S$H z<~C=i#dw=fUq5TZ&SSgZ2Lo+-KA751X1d9ybw4mjz^rF{2v=@~Q*TD-O@Y6> zx3)M!qn*!7VKuwIKK=B**i&8j%nvK)B6Kc;1cxhk!iCMSayLSE1zwr|%nZxR5n2{V zV|lbT@((sg`=4JA>so{~v9h#wuo*61jnGwr)E1A_#!>ZWU*&V9@>h9OQ;sE6P@b2+ zOYQp7X!daRC*jh)u(lPUEpgE7g~JQ)hcoR6wFNZy%0WJyU5n5fN67btsb468l=KQT4Fo|3Xu=>a>^X|f#;k^Lt0E^#H(dx;M#$xv@@BB zZei1Qj9&YhO4gX3ml?Uj2upXe&d60pG)7pSlh+vGj((kuxOo`ahQI#|$f?=YJU`kA zr!Pk6qKKWvO9wZ?h4l!n3k0J2QdnP&(5gV1=a1C)AaI)yvpI-aC63vtbBE{N2pcyd zbVG1fnupDeuzWK@HwE$IPWITfU8#l(brc8Qf!YLE}*Z`pkBfo*a&-}^!(Rlh(VU|Yo>HA_l zw-})XK8bC?_ML8v4y;VtB1xz8{bcdC2)qYQ5>=#Any9!Kr)sj7r|Yn&spJA&KpU~r zdfeyWS+{YPE#uDkz!*Bvg}1Q@Z8&L`bNv{E!x);J$yzXLy;_dkf*Z-ZjQkKtoBW6k zC#=b&;-dW#2L28ZuqIT!nQ-oMgf0s^uB;!an-HffFUBb}fr%yqrF{2r^;S6lZdkq@ zq1zeTv#U^HC0x>D2*lfjOP*XZ2VV( H57+R2@9lZS literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_lines_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_lines_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..926df283ac950c229ee183865a9da5d21d020be7 GIT binary patch literal 3639 zcma)9&2!vD7MEsvG@5UF{OveSNE{roBm=mpf&}tqZvi1|QZZ1}P${h<^*E}Gq@krT z9xAu6r@e4vxcRs#s#cI4w#4WfSo$B!j~rVeqYFNtWD|9JwvaY@F-noP0a)pf=+3e7E2zZN(|J zi;mh>Whp1UCt2ug$tqy^`+R&>yTnli&>~h-w9HWz&{77iaI_3)C4*KuS_QP0L2DeX z1KP--^}&QT`9Jn)O{VpG_=`UFgO7TF?YX{|qiDl61B&k0exT)P@s1r}VsvR`(+e1{ zO|V5v9}jxiVvJ_2LQGLIIsCiKY=fn?Y)S3hClbzMv;d2^V9D>myOc$8FCh68Q7pbM z*;`2QVuC0sqGFCEcrn3?@I^J{5i*ogM77FnN3yGu;^O>jij;5>7dyEOcP(8L=hjn1 zu^Ji9i4+%{lPRKF%?#(1z^&;-rWt|6`hh;P3>nO6^K@w)oM8vx8GM)E9UFgn$9A!Q z*C2-DQ^jz+z8lb*$+`4oTE(3XHUoPH>qY?nt|ZGYoI;W7xtNx*W7u6i04LKLb}if8 z)*s-GM=(|JZqINnTD09A&o(hFbZy5D=-HD*VNx+hkc}b-J04XX92k}n7_{m21KsQB z58%{9L=DlB)$es}(*Tjm9b)vYeiwr(RgYMh=;lMi-NtmbM?9-<272H1jllLhh8cKd zKox=w-*ah=;7&h1m7Y6E#Cx2T7UL~Gy?7Gy)o4s;+<0H@fi(DS}UF-Ub~Tx^B4O4A2M?QrC&Xm;8Vb zR(l9bvZvA^Q0ceFt%sh2Tifn#YXkd_0(q-_XdO&NlsK4 z_@6<}|3f;c&JFWnbtyti&vLnf`b?3g&kX%=>U@OG3uJ0}Xok&m5jrQ3$)(|Y`zvpU zOIN~)s}Z^?@E7;i=7(sw^<62fX7|@8pWG39s&n7?VdYeWPGyi_f9YB{cRj4!h|mpz zS7yI4!}4N;76sB+9Ig!gz4hVlcbCJu79mZnEUfIUhw~RBbWtF+`2)3aQ2prVe6Cdf zIge_}p@a&`v-0n$U0)bZ?=Rm97uLhtMuaxRLDOgU&wLP0-Hy<00nMD<%ZJk|5nAC0 zc~zMDxq6%Q59#pVu>6PhR!J(#QN0z&QN0!Q35lv>6_Q10w_c(~~hqYhOeQQW`|247uG+R^8$tM?zX z7WMf_dCKa}$HwkWUI*{fN?`0JCC2}1=7p0W1Mbrj;~`LYSSy?``+nd#N0N}&n7D`+ z#!BC{15s3`G85gxrtKKr&8I54z;t|>kyS=mmXnK&XpFqV2upAB7e=^~FR>9f4I^9d z_)mcxn_11%!>w@gr3k$w;%5H*-dZ@f8lhEzKt!Jp>&p>Z7D)5-f%;bn+9t$n4&qgb z<8|WH{;4;@##)5d1ZSnW-+VhPUy0Ba0loOi#S42|;X;}!u@+4B<3p8Ma6DAgOF;o6 z>nJ>t#RGGIv;x)sw4dXUQiUIB9Y)3jD7kU}+tieCuZ%fl%okTcV8X~_czoti=8MLY z4~0n@%_n~o3fkIzCIED4ovDxA3xp$o!>ORER!b%@WU=i?I!|5#&z^1Z#k zd_A1K5teU8=w`<5>?_CHeFav=?ViRTTvOxt8{{=at^+HrKd(8h#wzRE#OwDqwZeEX z@to$_J*GW7jUTxO1Ah?+Xg@tC;sqMz)NF)iGD@%=$1AZ6E8|LJgJ+P_^5h&aWo{>| zs2vmhyd?du(CiF;(DyL#n?OKlXy4g}9!EOk+|(L$F1|=yh7jR@EOamaXF>A7KouyR za4+GP7=E3hlQE*>-2l5jyYj>pk;}y{7V$NMS45UgJb<_zxm;s0_M7@ne8IX#ZUZx1 zNhDtf@+>dQ@-K=cul*#Q{z-Z_l-?aF@5{2fcWorG_vq8y%P<>^BzTSP$yHhXp)``< jHCk@U>c19761+yQsIvOw2O|kyqge#_;1>yA+ywszZ#;pl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_preview_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88476e2bac8e2ec7f8bbbefa5abdc16c0d3a3a39 GIT binary patch literal 3450 zcma)8&2QX96t~y2Uhj9Z`A*Z6HYuqqwF`{^HT|NrRY8=rYT&Y{vRr$TT3vrI_J%A% za46h+Kw>$OBNY;Y8~+2BSiVGa>46isqHHRWk3s98K5PODu5O<72Kz;Yd5%~5pSG6ITjS$?2Ov~bG`Fwxtzyy^yw*CN=Y z#gDrlHW{N4n-Ei!O!iKT%r{tQiKfuXeIj59BXFdE^QL$azQrt(dj*jOh-~tG$=>_` z2R|_^!Q}*3Kz?DL$IS8+2RKK8vot`!zgSt%Wh9mdYpLFq0V12#3}_u7ha_+q%`(0=OwE<1J5jOj@vVZxhZYR*(b?rV#O7u_>Et(y#Z5cY8TUsZ2$LzE*=v#4#iHT-B(47rTCq3et z9V5^>j;{xnzpfjBOS)7hSod9rRtaA345ZSdhiG?~bJ0S~?bC%r_|_g+o@Y55*IXYw z=O;7Gfa$7QqKc+Dx{WoBmNd-<#oBCK(X`JxdOKbr1-Kb1Szt+B({u;?3VK6=Xd01W ziLf$2B|jj91^p9Y52)~Bv-!ZaadX4jYF@|w!@%{L@57C>&%Ecl4?&^kd%E!uJ7#ke zJDbh6b-(F#g9om&eD=+AO&>Dtj0X(*2KJjE+VXJI<6+R$GWV-_afE2`+F7qlSh?av zfq{PlvhQ1Aw=&g}!pdBP=APwpdF7cbj34Xy;n+fi7E)wvzGsAu6A?O*BBOJ?n>&l= z!?~4ky~5|5=2RO3T81u_N!DXXTLV3XYtz9t*SLL#%wABp=A^M280lc zS~{BKy~Z+IgE+IP0>SPCR?z+8?WDwiy0mofOIG$jJtVDIarju@y2>lkJz5U*t)ve4 zUrf9r1OoUTEixVg#esE}5u@V=uD!1WIm0wXyhN2djuoWkZ7egVjstV#$j*^-VSPD5%PD8MvC}vomR2IP zl0vT@IeT(@Eu0zTL~I4q{op8l16GEkbkJk-7@7N#iA)}oU8Lse;{UngIFOX|3TX{S z`h6&taT8iq<>3n%x{IM}cn5SPjCk<(885qr`lAn1Z`2!)K1#pZ;C3A}T+f?+fth&o^M1jS5FYQ}E#Z=Ygg8J{5zQ4j3(`g@0umG`pdci)jkVm4F00%1ZfxIi+fczX z>b{I#?u*U^Qty^ zB{iJ{FLP~3-#n^}b><4Qv3u&|ng>>o$UXyvgk_L;ZvlM_FuYHvc4L&WebS9L^xJz+ zi6u8giN|PEj&ppSsT<~Y8r>3g;3yNLr9#+*fmlJ-Nj;AOyK1Vs{ zMgE@GjXA00-stfYu5*LCHC;$2s5ynnYvgs8E*Imj5J53fsC6mAIY)J)dNw~RV%qvH ziO=w>KUfCKH(zf2=Kcr6BcMZalpTGA#Kfm`rf8N~eAid=8e)z*e=$moY%ee-t zM;crpfdr0Fi~}57frX84MRrUA5<7u|k%gWhVZTL!fb+?2as#(;eD}L?e5)dd;aFAV zStynEHb$vBg0pFugQ(gsiwuN`kDJWKl51ymq`?IO6kve@>llFzy38HTnhmbN`}%Af zzGgLJ{bO3-fb+)s@3w7X1@WD#cc9CMO7{ZCncxbZ^PI=Ba$%P7L{ub(IIX-G6xUHc z^1aGqEa5RQR&^MQQ!$MU?lN{ZEBV z`U0PTq`Fp^0nO?eC>z(aFeRnI3cH&C literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_void_credit_note_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_credit_note_void_credit_note_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b425e9448eff46c298374cfb8c669ec6783e24e GIT binary patch literal 661 zcmY*Xy=xRf6o0c{cg9PiARdZX1e+^zLrfb|L_rIQqG+*2hV|xgS#Eb`vom+xRW|xJ zBzCsqpJF98vXIKkE^x*om2Y+u#DRJ5_r5=7zOJsW03Gw^ZhpW3emddm#Ft>XOW+tJ zNLE0}QpOw(il7YBu*G2!m2ny~2;d3G=sn07*_Y7Ar^zB2bbdKuz?!v}cr-<0pI0{5 z%8({{mK#g_`o6Z#nAa#rKGf68Jg|H~@-ZN!OhOvG1`IL6_zr2^#YD0l;)`GqHuoP< zmfTWGe4}&uPkNEnS!tRC=T)ZU{-D!zg-}_ELNqHvlv+*;hkHUCO|!yVYPX6yBGQD$ z*3G&QnNr$j?F>SEh9%kH;vGNKCGxSF^T%i=R#*Hfbx>^XX+6o+nD1qy2`b5FsAjy# z-|}i<54GAJZaw5Cx42o6LpDaksZ3rWuiAFG7`5XFs)=Go1O2D)PQz+ZcU+&2bm^Mg zL_WZeUjHOIdG+zyx8BD0XyYsh;%>cu<>)rh_r->y_HQG!f1KKFzDew&qTc=ZH@zTm zZc!Qcf_^t`;Wd}E&3uE4`MonY`EPzB4kr=^+C1e~rlS@N8Ei-coHSSRV z0_ZQ$_*2|?!^U*u!j(G`d?c(q)86VN^UXP5&z#3M{X9B4gkZ_v?dZLO(0A?B3;c4O zEy8hxD56G;5+g7YGcXP9o3WMHft@&klemFvAQL@6)OwAm&D>8`bvqu8Kd86YMQ_DT6(u9d65)&S>4MDgh zp^8$zEErMj2@xcbg-epO$5r8lJs}tm^J17X8Hy;=p@qv1GQ#Q0_F&e{>FKRkdbmxg z#O+%ETZNY}MJQ2Z4eELrbCNKOiy@4Yl=fn6k6^slBk|yi6+yuk#)R`!5nV?@j0MSr z3;hcl;3GN%MCWh)9hk!J@&kW`$z7FZ{=-zUcxEY0cO%~Qmq@tFIQ91#-}mEa+s|^f zlk$7BckcQU9%v?m0McdBhx}2-{Hz?@$KgOAyj>}T)qja_SZai;*x4)>P2HG=25h+w z@CJPyX&pW~HBHAmbx~{l@NsRA-#A|Hk4>D|6E!n>_1HdMf7k4fOrF@2HQQ=`Y2WW( zm^-oON=jU=t7s`*m1i)a(7#TpNikM2m>np_rPfX8|GZL7H&(TINn2&AD`1^_^VK^n liZ-|gYOcSh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b03e32e7dfbdda8522c9f65dfa814d964c571f76 GIT binary patch literal 780 zcmYLHJ#P~+7`E?x*Q8A-(4rP9A=GBc&{}*538`WTm0+kM1ZBC!a_-#plsn(mcB*7A zI}$^~#t7o4FhyCA7X~J_NTCd!u0UqYW4~X|`Fp*-49t>$@5LVx0KcrWSl%4W zo*HlgA`rm@q%eTcVkdD@H*ixFAP5}r5=8Dfh!8{H+%hikhF;VEZJj36=rES5>FAYq zrrxmAek@p|t4G6}MF(-H!ZN0`^8{cP82Bft`R9VVIizbwZ>_|{9X{h3i+kRhDK~t&gj7Kr=k`6o01k*kn zL(W02s!Q3q&yKuZJ=GLgkB|t za-Jz_%Su9oonN~#S6{)*KyY=APfU}z%Ln*?$)3t`{3=r{*==Q6&s4@O8um<+_>A#0 zoWvcR57kM=AMZVUgk`MQZf-8nE|b_4jB|$bVlqs^`TV3)3P99<1xR8fAmz=yd?=Po zD}}K@9vbr={8+m`lH;|V3EG)Dj#rubpuRamqqm=`8s=uOQi@xpL)btuF0Dv~dcr=?va8z`6$#c2x~lA#qCXcK h#)amS_AyLd2;rp<;O0;8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fa411b07f812312ce3d231e56573fe2b59733ba GIT binary patch literal 637 zcmYLHyKWRQ6uq8THeo}8ka(351ydvz52YcZSRz4zRw#sK8p|19ZALrenb_XdP7e}) zknjf}K7|U=plK+m=prqlNQJ%L2ur>`$G)#)`|JAp8rY%#-YcFGfM1SWjd%&>yB3^+ z06|KqNJfamK^atG7FJOf5eVP~i0~bV2%|5dkIUjVPLtn`q@;^p722dhcWqdk13Z}& z3Prbi*fuEki`?Ws#@l5AnBTYj6c92ZAPe3Ch8SUd*Y3KBi6DD+ZG$xI9z36DQ&*@4 zyyP;+L&c@$xhZOSfJPNK#n)W%N_Pp)8ZN~!UFmv^NnRmi-5O(6EheSIea22Ey!0n3 zvK5r;s0+1G-3DV^%Gz+3Su^$-=JpIOKhR@aosQ&;?xP-?x}h&?gXQ+1uE&KO(E-oL zCp~?$9E^rbU;%J%4-8)J;q6M*{6$=sYBZTqHp5{Ddcel8E#^wHIKQMd&}* CS*$_; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_balance_transaction_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e57a793ac1a6b6056d642eb523386be3ac5fbe4a GIT binary patch literal 793 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 m0}O18@r8%*tuJV$k5UWPy|GYw3b=?ra`u*Mte zR{+0(#t-7bi-e2mg@Y$=B!~x2zRv7wlfJ&+udnZ4-?zcRJ_JktX(nH52>mpmw*Z&x z{2?5NC`K_(QHDc|jc%n@W`}m>gieX=w3fM{n|Yy!k%b#J~Ujsfw z423vGq4f$en>jI_2eyt_4RoukyR3EtSYYgbj8}18-s$mi&(bwa$7}ie&SG1tJY!-} zFsj%BO(~DqOF_A$ktyOi6*QCDrCHwQO8Ze;2*#t1?vI&_L{e6&UAA9P9=~aJ3tXF= zTz_jyUz1AQy$xbr`x#R-ri!jWT%Qn5Ge(H+BP7e?c53tiLU!9U?cUf41Z)sOInNa> zI|?>7I1?V^FU(hdM&}^W<%eJ!stC6Dez3&kj>?PRajsZ8wUFmK3Ev79Xtcw49PBZ^ z7o^E%P;}IG&S$6Z%>)vDWvT!Jy2WGw{*!_QMOk=2qHcpoRCb7LRxKjxe~(CIJ6&`{ z-6Up&4_mH+c#nPzG!CAeSys(Ib5UdD;Au}E89Q1%9v(k&#(T`*^&{tK^<({bVB*A? z=&_CF_vZcMp}7-huB61ZUX+zqU5{1?PZLoMAIYof6K0mQt2zbLFC6p4bW9Id3}O3< zacSmMxaP9#X_^031Irkrpk4a&)dxKgHvwYU@)n3Q8)JOoB0PJF#!k`9Z}$rJKW$tf IILg<50VsI*xc~qF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_funding_instructions_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_funding_instructions_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19b1f02c0675e18bc61c9fd105b524f89e22e345 GIT binary patch literal 1635 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
l1VeOOC#b% zz4zAj)~ooZcroln0^-4ww}n~{JvozXiqL_1^LxK}^Jd=1e67_gKn(Wxwl{AA@JlM? z(8l0mM}RZn0vGxqfHs5@E4~t_wwhzrM}cN*fo|&%DBuxr(Ffpa1b$HqAGVR`E#tRT zS}>b>Mvi-g@uv~@XvhSEc0I;hN@nbOoWzcwP3}=Ht-P4H?ZQVP#}2{8snE{=0XB4j zt-J(8C5UKCf|Zl#F5DLDgyfAeqm+!Rju})k*EZS>M!#lq@4~ZjgE1wOOtdQ5%#*NB zy*Al*l6@z30+#9IByvJGGdeWxdVTU{dK~1dX7lx1#^cNg#JI3WCxx|z;sFK&~)mYJCthfY8+&MFuO)b05aS1~^BIexJd z>*9?u5+YOOt}MBTgghG3CTx-=Xx# z3%k~i(>@}hYxPOkw|wuwiW2dtaBJiKro}`R*CS!zbP2P>WnM(AC{Krly&^$a1S6(Q z(MFWSqWM5BBw+7__z1pN>jN}+{%Inut`5=aNKrI%q=TuY!CYEf8KRYuf&^0$%(ta` zX>DzY)=HyWcLp!g+5eB#SI-;iLUV|krOo`^b2Xi73{j(GYKsFktu7DIa?Zr{@>Md& z^&*fB92f12Y0uR!zk-6ar9e)=C}g8lyh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_payment_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_payment_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5967f84b17ae44201765d274135f8bbc2f316f87 GIT binary patch literal 1373 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 R1--vXMA}~lH(*&4{U3G`xY+;z literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1d016ffb3a2f93974eb8d03832261362b41e988 GIT binary patch literal 913 zcmX|9zfTlF6rR~%x4<2SpdN}L1Zb{+jiA^N3u2-s1PyAl&1AS8V8Z@lX6|y=8tv^k zJ4=m!ij9}EFq0SyD?1Xzg2MP__m)X^=6m0J^Y*>(&6h@F62X#xZ}Wc+LcferEq4sg zw*j1@2t_zX2@Wwf*ov*h4($Tlv6Hx=n|Pszk%bQnc$P|FoE)p4!cniQ|b0fS3=Y(Ork{k2Z6<-@O_7zjzb*>mca!u4Y(ldO&*7Ehz)3lrMHrr!q!~{IV40L-yH0CYbhEFQ;jw-Iym_>1nB`P{vOWpk3(Oqiw~zO#4){ zj{rp4gBaD3yR8ZB6Oz(|5uzsvNwTOD8(b&kq(kGT;K87xWE=#*X%=d%5 zua2^GW9{yGAYn?YIRwx{CIk2@&smTctp|jc@(@w!L)2Ix5`#jdj9bh5!iPeN%>YSY zdyBr$E)3*wc6sD1pIMgcpLwV;H*f|o-cJncOCx8gV(ZO!ayT_Va^@@M#^MKicztE$ ztW*r#tbJX)H=MgatZ#mEHbt}g<1P%cSr)zql@`yDWaWDl=8b7j^>fgnly9aq2GBII}Uv7aqbJKTz{0TL0tC;0GTUE)X2W F?f*(O_{jhO literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd244a9cc343008c1a58f943a67711d774ebd7b5 GIT binary patch literal 721 zcmXw1PiqrF6rb6DNo&$t1w+Mps37d2S+wA(^iTv9BudrG9vs%}BOS6kyPcVY zjo(1=qj)NMkcFN+c?-mP=*c%b$-ulnzj^QN@4dI*+wFCNNBz6Y&nO|kjk7xb(pVg# zaZXZ_(v0LZrqtL@=Hzbd*0!5@xgYzKIOG{gy)%;fK)<;*KMtlr*!W|dkX9SVa5@5| zUzM5{LLuV4Wrr^!}IkR|Hj^{U6Zm B#y9`~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_unarchive_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_rendering_template_unarchive_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68365ca49b488108652eb449a6f69c30f7f30614 GIT binary patch literal 678 zcmXw1&1)1f6n~ko9qYDL5EsQ$5o8bDPEteB zXH#B!i*hqjktI#2jcT?T<3dQoTQH1$g{8H@%_lmR71EKI(`TqBM%MI&G+6E)Njb6I z&?7#a*w*L_#f+B4ds;8dSc?6@-czazgS)kL;3L%3mMLnab=xjwg~!Fz8W=MxWNf;I z#=P^OUZ{@i*OAm-eczIg@T=Rqh%VlKzV)NK^E2AH3W7LQ+iOQRiJmVyuvOY+G3mFZ z+$x&HENY9vkKwLY7|sm}?N;h%)E3@yN!!eKtaOte_^BSMdsemI4fG>Ru0le{bpmAn T5_*@=|C>Z4{UWZxvNrlZEBU&` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a72c5b15b60b05b34d3f1a5cb4ed9497065b0120 GIT binary patch literal 640 zcmXw1KW`H;6o0;dIZE1s1VkXFisgpJg05AE3JH)|Ws>#&I3XkL&Iz8+P@8v+;ZkV( z620ZxSbldTjZ<=k<=DG=x`_kpXI8!dgq)O+2d97`Mi@V~ukK<}l0(avK^C?T--x;7 zV?05lIL`5Xp^93!2`-vKl%uTIri_WAM#kDL#%fv4Du?@wozIHOYm}RSiY#eEZB)C< zSRsToMOQjwUtw)^aHHv&tdUN{g1$sOHL{_vrNL_dSjs6E6M9^XrzlD~M=_@r|45sq zIg{dG`1}Rc+~9s=4T=eBYSZurY15TU8TVZWNUh?kH-1R6K1!?$u)zS}$Bt}R~;^yy-L z0^+AoS#HouuBhlNnNXx+_ReOcnfdnHxw(1lkKNrm0+D~)d}$-}%N(}iZov8!z!i#6 zgkzN89>xY+v6a|8yTo?vByP{e$U@IiYxSbTJrrb8|UH>l}WRZfTI)$VCpEk8G#)t)Lc z=&qX5o$5f@R52mV3#mp}7JAntEi>N(bmN~?LqE+Qz!8JWM_^Vq#`xMp_;`t0OBDR^ OZexGexklj1um1rx|HmBw literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_send_invoice_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_send_invoice_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cc3b17c13995cc631996c6d7382b43577922955 GIT binary patch literal 647 zcmX|9y>1jS5FYQ}E#Z<732}g^BAP35R!AGAh>!pY1w@2|wy~Dm(PeeJ_Gaxn?i#A_ z3^^VF@hDV?2CbBeiZ0R-id2l(7c6<^`#hc>&-mN=`Wn#Ee;?-W7{D(}ZdSMg%L4-E zkU_=@C|Sao#a`i+e&V;-FM={mLIxf@gDg0MEJXIzcm7EnMv3=5WukSba zU&yJ-hj@%KTfx_9otCR|bonL#4*K9Pz_+IHp?o6y=l` z`Fmc?&54qGgWV@w=LUBwx{!`gb4rs}$g8$oE^_w}p~?F{amGP4uRFFrD`MLE9*Ixz zv)fw)i{sC?zIV5O1lyOM7smDG%|-k2o=Y+iwVQ@eZXC7kbrYF+MK!x;Z#g1xW>9K7 zGuM+g@rDiBM!rMnI^K6(JgDyyrT+x_5s6EmF?JOJ+q;0?1@!+!0gD$OuYgqR{SRVw Bt;hfX literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_update_lines_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_update_lines_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f25c1099b45bd9398a438eebd68af0e6056042c GIT binary patch literal 5087 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%0Dd`gz2X&E?ptsM z95^YUBpD$N2SreZS=i#Rh{`yN2?X#IcytOpM)EcE{#i0l`kmj7^hvYv8jmNa&CALN zCAB??UI=ZhzImvOGm0Ad(7SrMiUZ3>mY)GaMmS`_Tfh(_jPKi1w=v;l&+2*551V_> z@)2rkpAi+(s!f+N;R|859R8np1gh5T3n1o8Tlw0xS?!MB^e}LE0!qgaic`6qM$g)sY)HC*SQ}cGs5OlV^x| z1jM6IAsTd2Dk{22CKRcdy>(XFnQwOfXZHK%<_6F)|DF~n4B)pD?oPZ0t3v{pkVDQ& zs94IF!$BETVH&nLETbw;V+H}dhCKQVd5r8^=>5}VkqkP2oG@U`)-j$>(b)I3EtE9$ z61^>qC4PUTtWy>m^HcBY={gRqo|AkD2r0`U4Nd?A{6r$M>qEh*^bhszP`7|rNM!N~I^?LOzyr{tC^+s+zx17R$XOr6z?O^P}u^f->hblrvrypLo5n zXG-o5U%cd|u((%~K{iIiDNRu$uiJ9DsC*YfuiFq_F{~H5<7#uHOV>Omasj`3{bjWL z_~qV@-tNz6_c{pTuHL>gbY1s-f+0n0*C3SNgLXr161%9WUf=SL7X;2NO5>L0=g}tK wazWe34+!0M5BvlV^+OWrBY}BFh&uSS)@Vq~EM6g!_#>@xfV@)?P|!V4OI3=DADdc}^1 zOzD@oP6SuLI4=^V;a=$qZJdc@anD3AWS$4j-T-ro7>aO=BI_+;HglMJ4_I@U7vo*H zmki&SGuE7O!E0Z8t2e+nhAG^@D<2-xB4b=X)tY5F)X@_%HiaEhNi$V?Y?M(Ll7FaQz+4AOKx`439*{!ag5`&zKr$k%!NPX6g365CiyfxKDcn#^dmW z@slu3-iLXij|AW8Jbn_YM6>N20%)J95WbbS1*+qE~g?{wQD z_=bc(0P!hQhz6~cii$4M5sFld*NG+1yzzKu{AT=peSHmRnSYP-V+Qcs8Mmu*16F$k z&LD$~6;QH-F^7X9D8nRdaacrUC+RQ<;1y)iN60$JzJ)$MiR*aO{o{-gYc`JXbdJWp zt!%EOp_AxMZY=4$2g*8Ut}&bVP%m%t!0H* zo)+GtT|0C{q6v-F&885kl**YKRhjakz71@@>W>up(kHvb{m+N?|sR8`SMMEG@DZdhyHg*erAOHcFB0u zMqu~^!5N83OcRpQh*F2W#7q6iPg%q$@yH7j`|n81fPM3;x~SHzwSqq`X;I7CQk#}% zr?)fn3XVInfY?sH>E;k`%007J)l_lRfD9wd&j^r+#w7CI67YfDMhzpf*0_S#$^E8V)iNg)fk2@l%Rtj{T zSYMmM&TuZ2%8W2FQ=0R_`Cxsi%vUl*NG?Bwhgk~YfjSL0K_8hc4_{^mlGTkYJHnI0 z4Y7BGBEu6x9_JPeKCqI81C zl@&ZeFF2N`h_u1Y&W^RbTTGy;GB}{y7~Yegvv+&CKf63&%jcd~tDgs?xzJ<1*PkZ) zjimuw8ncc0kGem-IADuo=GMJ0et&Ldz*b78m>sv@#(x!F~lT=jPwaH*h!tt?YlL0Q!n%TJ^=?_LhOBj*yrS%Yv1>SGUzsbo1jaomACwK z%$0sq=p+{k8SizXH2OP-xi*)Hgz5ivR!s literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ba0cdb977db8ee4b6ead695e73f14d0003e96b0 GIT binary patch literal 807 zcmYjPJ#Q2-5ViN~_Kr&;1R*4%ifFD#RwSZ}C;}27q7Z>-wy~VENmjROZ){(5+e5=2 zNa$!0KZOd>M3xW*72QQgC{i(AClZ!C`{sG}+4JnLb8|feL;qbVJ_HE;a>@0GufS{@ zzzJfA;SyCi$JpVZ45}~>TO5{A73Xo4FS(`!%4NSCCXfp_GXQwb+(bC@7mBv*SinF2D@bO9z&9)#vK^*0np*(nlc*rA$ zmw|PY$1HFaUB@T9^B*5NzKI60UEZTj#f5n;48+G&40*Xn6|M9jvR%4Q1(Sj^+hyar zEQZu@+k30%n2k%Qw~NZR!5P_a$Z)KUthlnbhOJOZU2{Zns->_ApVT0?J4kIxh@cfG z#P$fOq!R<&C*){MOTVHLIHGd?+XX_X5Yn`2nh+H^Hq=IaMl*oua*`dwzS)78WKXyr z8Chq~q~Yb-wv?kn9Aw*cIO2k3$6Op|WwD>tjX9KJbN#_aror#E8VcwE*BPi5HP7nS zgN)SP9#XXa5Z@QD&Y|_XQ7LTS1_$&*2=CF^^8K@P;jI7SJPf+M^DtUTW+;l2X)lP= zX@chNo<^syKX$+MSHDNA(*Rhtc&+2?S@MTi2j|*HLZp8s%H6z8OjAQo-i4b!A$$V& zr`=O(J@f9hhr8{RTlqVHF4HaV_an6eDTb-RTy0j+MyVknu@|w(ZDeg9>iGSdUvN6N#%tVK>erkuX#6N(x~Qc- zgf;_+o(>V=7$UY1N$*0gkTc!FSJ_a}!f{_Xb}gkE zNTfy8wrfUJ#e-1RbzKQqsHAV%s;SZ3x?!rdh<$r3Jef!H^N)XzNAbvU$+>ADkEvXT zWi-`Qw=c!HPTp)d6YaKO2d~`P?x5qUu8vv&$f**;b}d53lTgLkTwgb~=-kPxJtV5> ztn1_!?2zW%aHQadE2RvT6~$ERx}wl-MX6ibW)1sUMfq}5tpzir3r>d?6h$>n3$})~ z3p|2hx&&hf6+jPEd}3L(SKJ{0-0Md9sa4m@8|GH|mhL=rExUZja`oEz8`TF$ zIOmJ!A|yAmBkrvJDdS~leQ`EI2d8#iZ{UnCo{5mc*xuL`FMrh+uSQUDW?#PkFCkTw z4!KlXI*@`@$LDsd-q?aKE*zvp*he=vd;aCBH*?V!FGi2TW~Xj@19yD!&Ou5@%Va8g zrQ`tc5T@T005l{j0dRx0JN{)Ua)^EGj!;Z~MxBA?BgFMFm&gs=P{* zVO0AF64V{@0y2iZQ%KmMOk)p~#K_N~U!`(xBLn~gU;)@k#7{P+LRdzWoh{>PcE_navI)%-h9WWLiQCM!iN@Kth8u{ zAr(S1z={=IxHM}Mh;UU18 z4V>Dkdj0XpHBj`$q3EeX|JN%~$U$RU_A>GK*gNobV0aKKi!(<{LL3WB5%-mBivP!e zv;d3J+wXWlNj7p*B^nj0NGtD2+%J|wEP~Ve^OJ4sZ!}#(7q3muqzuf zP040$h0KFuJIxQ3O^|HE-}xPo=Nwo=PjO%V49u;k)7gdFGT$l(HA;R?yRx&t$v78O)a;k9_ApXh=+ z(ocjO>E{<94(hm^W^5QPln)!0r8!jAER$u;G;cp`I8b%8W}pDkH!RYiJyE6)3Zq?) zRnwFwjgu}736?qe(!fm+B!7dya}x;DC#D&Nz20jcOG`VFjpM4#kM0b3xk+D~jAb7v zHCd6ECLLEKnl*FEGIVIK3)MqSf$S>G8xxYOqx-PK4^RR@;=%tg2L!Id;;1ip-wl{)-{0{fIUz@mvSyYMHKbD4TW2*bWqT@(Ra5UevFeHqDFarU zn3d$AN{x+^BQxd$1PO(|gU15e$PVv~l)P+ETmX$IhonSd>F3d0Rh&nKvG2^c{rx zY(p%i>DiOF8_tAfIa!4TXn%FnaiNkWM?s7hETYAM4CQCrrT}&?H@G26tcoq$q6EMqR$|h|8?V;nf{9*82 z<2v~Q9)tJdoWB4$5O|*dQR4WeZ@I~DxoaMGttp-7<=szk~+g#`k2hcX>fbFlNO^!X14J1R;JO#iv X5uS(D8%++H=Bx<)&wu2gVSe!+jznZ3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_confirm_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_confirm_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73ee2dec731e965a9d2a22b8bc8750a9890da560 GIT binary patch literal 56082 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 Co0LZY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5321f9645aa8f039ea1be781d284e3baa072416 GIT binary patch literal 56697 zcmeIb3wT`TStl-OM$+gm%aUyQez)bs_r$r`i7)akwq++yn#O558O#~3k9l!pmk3vrG?TfkkrCk49o8C_nymq z=gb*<#_IAs|L6JZvEOs%_kG`czWeok-|sUW9j$fvE8JL?o-H)g{Uv|6e~r$|^`4Hp zy7$+m>QeQYy2<+U_4Ryj$TUnw&POJr=cDpFl4+c5I^Q(ee7<=yc0N{L*HCw?E){)y zU8>Qj|J8`i>wJr#O+cHCn1{9s8Uxy*p>2Y;0&UaKc0t>Lc4%mapq)UwG_+IDZlH@a zv`f$)po=xMThLyheHyw*(0-sxG_*(1r9cNXbg`hzfG*e2UO`s?U8$jcg02F(T0{E< zT?2HjhAt6w9nkd}x>V2&KsRdWfS{XzZr0Fcf^GpisG-XR-3s(B4P7DV-9Wc#=t@Di z1Kpvas|4K%beD#%7IZhzJsP@3(0hR1tD$QJ-3#qNK@Ht3=pmqoHFS%hLqLyc=%AoSfgaP)t%4p0dO}0*67*4^ zCpGkLK~Diat)bfl9R_+vL$?ch7U*LdxamFK7y=p`i~5Itp}5 zLmw1$9B5iY9}@I=pc5LpPtXj|Ne$gEXclNrLmw725A+2MeMC?Nw4k8}1T6xc($Ir~ zUI2PgLk|gh3Fx$j9u{;4=nrVFeRM58p{b3C~Cg_g`{dYirMMKXEdKKua8v2Z&{~qYC zYUo=8{V>q~prOwS`fEUcT|?h0=tqG5M-7b&`k#P)R70N=^f!QhOhXfb{%4>c*U%9` zUjzDIG&Cvbe+Bvp4NVF9{{a1O8fpmo{{sC@4ILHqlR*EwhK>pPTR?wXL&pXE6wu$% z(6peR2Ku`i`n;h31L*H*=!BrZ5A-t{ni2F5fc~L|P73-*KtHRYSwUxkni`rD^pAng zX=q;1KLPru8v25up9A`N4ON0(1NsFG#rz91CJX2nHMA(`p8@@nhE56k=Rm)#p%(=G z3!q=o(2Ih873g1T=p{k_3h37~bXw5A2Ksdkoe}gKK)

KOpG0fPPy;UljB^K>tQV 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 jX|Is=3y}7fK*8SQ@3J+~EBW;RlbT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_amount_details_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_amount_details_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40d8f5e3e63d47d398934bf0bef8ac7bebab3a7e GIT binary patch literal 844 zcmX|9J5L-j5VrSq$K%KYB1nj$2xzW=RYHr9f{+p@$BdM*=mgwT>9UW>_uw zHg8LlNuiMmwli&TpXf+qgPDSK&!sv$tV6C7^v?;9gr+3%J`nIBc#Ir`DP6;T%rcSV zhP-#jH-?OV$Bc3V%k;u_R4woDUID^v34_-5^{S9vVK%|=EZ5tafGq=s-rJ!Y1Pr5GQe-?Z#!#97?ge^5SKzGXu*d9^eO{W4tgcAuj7bi&^P}V0alS!E%&> z@mdR(Ix&zFz_3Q4@wC-rrR=E&wpE)Z0=_Yda7YD)OmFI=ctBADbE`p2q zpU3)>3xi-`#7@qh>Hft0AebL9kDh<=`!h>}V5w%*^r(EN-Kb_=&nry1kz&%#l(GX; zMW$Dx1WvRE&S7whzoYHo)jGR&AKIdIuL^Nil2Up=E|p(-b941UXs~M R(*7IWr_Jx38-iP%{U6qO=`;WU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40cd078792727583d4e23d457e78e36cf7a1be0e GIT binary patch literal 1294 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 Fe*qKrNz4EM literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4096b01edbbe0f634d787988da958fdc9d3261ae GIT binary patch literal 704 zcmXw1J8#rL5T5nxoRA|#5ehF+Bn?;ORuG9QN)aIe5(-fejhmG@k1kg1wd378ovGnB z2RZbJcVQSxT%>IH*uJ0Zz(TCI`Jv6AB^Y9EE6> zg~*F!lo`At#OWx`+Ly`w!L2zC#f9r{djPKGT~#CW1giScvu|Rn?Ot`4T>23~Jt8x68Dm!gu$@cTxP;!HAY|d!{uR(=qyGal%)Z0` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_search_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_search_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d010cfb180dee7aa7af60d5a0a1dbd0ac3bd2bef GIT binary patch literal 770 zcmX|9J8#=C5GM7q;y6iPs2itKHVrY+W(_g~MPDe~plKH^glZACV2M&lIQSl@%zR`6M@OUo#eNT&`+~jnY#pwLjV^j zMlnuNhC_@Ewo)szL%YIu>SS){Vq~FbD0V)g*k$+|)H4=(r57}Q85m%_`G%d2nN+U} zmE>FkFwjF%otZMxB`E|BGDfnML#UG9*7m>j9RAkTBf(!HZRA0>Q1j-vjE@tB-3en!&dJt;~x%=v!z(PJVL z#r6tFfF31*yOM&DqS8TVQA?z78EB-k5(%tP*)2-ZFkKqw!;(+IeL_E4?MvtK$Q?#ml573Q&P|yBQJb*2RB_D#D+Zf|( Y58?eQ)V@N&AMY0SzieJ32-VmB06%@qs{jB1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e596d0d435c08b78c905d5aa000175a5d1352b9 GIT binary patch literal 54809 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_verify_microdeposits_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_intent_verify_microdeposits_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..461af8550ae54623a35af907ab71ae89d0c55446 GIT binary patch literal 789 zcmYjPy>AmS6u0jy*OE|`0-=b7Rzk=M1+`x~2yl7z1w9#1 zsh;O5;Yk=$+8w@e87|} z*J3KWBFPmOqzhT4M@M%a7qP&uG|Vqwpb>eZ}+eF;_I*J>qcVi5NlwGOViS_wuqMy~&?du*H_84d4mp~6D=$P% z_pFrRVH1 zt3t)KWx;k(E1Rab77=DQ2sg_i^v{=`DsrG|Mz(GOLPyZH)Ei{xSv9z>i&m94z`OMK m%?})iCWIJ7-T^hUF~%1j!h7ead5(hLULE^i-drFs)$6}^o!Bt| literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1c7f1924550e6eac6ead6c0741517d46d96f2d0 GIT binary patch literal 18720 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_line_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_line_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..965923b1fe94b517f0c5f2815654828fd969e177 GIT binary patch literal 767 zcmX|9zi$&U6t?et*Q8A-kfIhU5Nf+*XixkQQ^inKf=W?T@ngBgy7pdED|f!D?NrIa z1RDce!`2n?r!YlXkQW9fwn(82ov`ncTJrPvKKnht@7X`<^+jZc{P%!;CJ6nu&U|MJ7|BrQ=Sd$i$s_E#Z zcBbCIS&s>bb@kmKhj^bItK%}Jw6g?g8XErs0Sa-9LgzgK7s!3XffwUlvsNwRm)wkZ zZuo^63nf5OqKX=0cW3kQd4VnwP?9Vw770)SONYlFIB^^*i}MESMq+ zV}WcL^9lWIJQ~VTV{=S4CywJ)CO)dK4axBB*XpRYF(w;xwzm33j+WNPWPQ%udwl7R zR<_1ut6)T9p1y6~!dHXbNGh9fr*tUv6>w?WQ}j*PKUr3F*PlPHcFRlv literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2ad6865c6e8fdbe1ff599c0396d076aae8c888d GIT binary patch literal 812 zcmX|9J5Ss|5Z?9c%;O-*5kW$PBA~eftb`U(ph!t1L{OqMF0wLsIIOeRW_J&rt29ZU zj!Q=yN-`Q!s!aM8`j&lK( z2mK=Aapk5-mZ)k@sz@m9kB$|H{kC8EjPWP~#;R$?vOMmk8qYFz+KW=-5qiv(EtRO| z8H+g2RaB3LF@Z0Fu7s;^G#`>YSEOq$%I)MmYbasdLb%Ll?8TeW^~^e4EhSV)QeS* z)s*`{C#^FtAiDLp%|q;nB{V61@(GG7n^Jn?5xR9r7B5NruXm677awj2syg~Vio4s( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd37f539a7da22ddefc10592cf5f5b91e68b85de GIT binary patch literal 842 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 F{tss=u73ak literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_link_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5a483f1ec71e761c979f0a753cf41884ab222e9 GIT binary patch literal 15082 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_attach_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_attach_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1c3e5eed9ec0010355ea8461244e1bfa4f9e21a GIT binary patch literal 683 zcmXw1J#W-N5S{hcIU#r93KW8S-o5Bt1HU1m zqec7${s9%DL6%Zc(VcXJA{DdtWu<-lX4W%1Z^qxd-A$mS|2;^)F@WFJxLy95tPY7> zKnyWUA!89^mOH7Fxsls&H}x_<@)9kR*%TO0ECFe5IJuFUG!phK;8{N9|LrEiQ7$n z$NDRG=+(QYvdU1IV>Ht|erk*yPfukjGhK({xi)!*WgXz6kSabIcIr?FB{LMF-V`Fs z<9TZNmJnxinXYeKZOVFE2&q(VWFtk0(sr!$2)@9I5N;NHO4<2DE%-CkGm{tmMQ$+N zJIeD}q9*)Ej%TQ1evay#r^!2BR8*weA3c7;bz*R@pbz8(HKzxY0(sFC&PCB`5?Lck z$VL@;t*lW|l^t7(g^;!$5PXDRz5e^-rQ`VFGJx*=OYic{r;Q(5gP-1@@s@XQgKQgi z+80NnY$qo2c4VcUM;(}|AOVfqy5AZC7Y3EKb8TDE6tQiSHktdxZo-4MrHAD`GU=ZK e{g7bkGRCe0VEb3Fa|Oe{LCC_-y=$POiT)2$c(;ZC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6603fe1f654b51f93f0747925d2afbf6e207432c GIT binary patch literal 27948 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66a1dfc2c39ed7afdcb209b73aeb0bbf0eeca377 GIT binary patch literal 27954 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 V&?R{3)etLX$rHyfFlKm1{Qn@B8p8kp literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_configuration_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f319fdc1a6abedb6638019325304d35a6ccba089 GIT binary patch literal 680 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..845130424221509308700e894978dffe30230fb3 GIT binary patch literal 17376 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 E{{Ta-D*ylh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3a407d748b1fb38695a2787d94f2ef8470d5040 GIT binary patch literal 751 zcmX|9zi-n(6u$GXxNTAth!l!Yk-BAQtx~a79YQ4-AXFfhET>EEDYatXx%Q=sCl>e{ z8a7tM#=pT-WkHrYF|kDoW$487IpHL~``-8bp5OPLe>57K1W)$&QTW{=|powjwLG`?kS$09p!*x(3yjO+#h7rY%r z$XNfG8rUVb;_Z^posL^PIpcW@Qoja$uEeQ|c_^Q!z%`ull*d`IB@D+TkD;i6wX;yPm&6CRaW=-HW0i+hZ5DV63%E@Npq)xsGl6{QZs zuVjgq+g(##$x8OQj*&?X=g#h$X*`@cvv;32uIqbqXV0+d{dJvQr&hG9UJh7VZJnuV?PyD5JH!TYLp!y5 zH?A9N)jy@v>6Xe8Q>Si7S2{4&PA+FD_In?{_u}`pf7a`h$PD@KaXj=8`fZ(R7{3_9 zU9()F2t_zSDQ;tIZ6|S3x9t|Tn~>CNdl)(BC5p&r6nTJuxMh0V@A}Q!AL}%+o_Pmn z=OESFOvQprL&)n`Dzi?tgtD7)4$+4)wVX$F(D0M-uMnU%j!@fqkH7`8Xc%}A-ZATh zCH{ywV^YPqV^S;gMv-L9gAwt@q{{Uz>DHQoesaLNDRA`$)QO1pMap7sJ2+rDOQoKQ z3PL$cLDzt@P6Cmx1CL^UOgnHSa?n0pW{gMLOX4(EdPXXiE4$B*6y&Yugbrv?fl@t5 zX)2=g1dKgR>Df6;Y;8(&dq3KhD%TGvWtw=^ZXti!(!4EN uRBjmSKG-QQY&TyrE;gTBHq)((F~0K=-o8PN8`S*kFW}(1b%)GSWd8?Ym-L4K literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dc45ec6ae70b2d315abf910eec546879cdc39df GIT binary patch literal 713 zcmXw0J#Q2-5ViN~HX%m{LL?v*q*QE?vmg>xlp>0Nf*cWuW*f^F50};L+MBg6x~*v7 zHzahlh@V0gr9msDqM|$L5{gvV>x-qGdGp3IJJ0j0+g(KFsDF>MR~|xtY;b$RIhgGj zaEdtMI7bCeF}B#ty~0oZ7W;WnglUM8hh8Hdd_g<}{L^>!X;eo^=dTSC+}wQ+$74|X zU8yrElwpFmnbOAJ=}T>sSq1#il{!1`gJv&He2M_2n4{GDh`@*7k>McZc-!~|%S6zz z+?@9;U;9bWJUw7_0YdMCK9YP-7AzC{l4qal16Hv@H60LakOOZbn3PQLeiAn^rGgbe zX|qUaA^AABc!|>EG0R=1vd`2611a-nnNlW%)U4G;X%*O9DOwX7pq?4?75(n6ojo}3u3rS}Q_lK`6WR_RZWV x_iWR)^L>ME;%)cJJJmxIV)Lmd#!P*T@pXjo)+JiKM9EbY1jS5FYQ}E#Yzj32_3^5Yb$bvqIV^MHC4N2vHEtHkOG;m(}gso3-zBTOz?T zB)kELN1;MAXr)wCbdiowq{3cbEO~xBp7DI&`1|_$8rY@(Jg`uX1gyzI&*Q3+6S76QAnkstzolS^pdmG9n-g-T{UfVf@IRx{Zk-yH+>BC~Th| z@uoy+UZXix;y{%=m&a)89Orn%YhLO$!9~TTI2`rblrhOmWUO6dtW;uFIJ?i-*^C!H zQad*4$ci@9rfxSF<5DWaI~a_8g{6(b%?Em_N~9CHpa-a@Mpg8sGFWWwD>cpKgzoc` zDM~@-DCe}u-_xqGEy|to_H(LpgIkroz$d7weI~DvR$aT4RUQ#5J4j4)m{`36Wy22D zxN7R2>(q(VZvD`TPw=ZhyofH|e!lagzxgxTyb6Litv7BjIu3^Zxv{O-4Tvc}q1w^k zCZ?%u_nv_J-eI^fD771-XQz93;EHyY?^)|6-SvF#)eo#|zZmEzR$PUIkn04<&Ls>l RVe~hNNcv@P4OVs8{{gXtwRHdh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_domain_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75bf0b3078df75cf2da19eb14848fe4edc1cbc81 GIT binary patch literal 670 zcmXw1zi-qq6t)v5mn%I%5lAgVkvfr~wfG^XilI6Q1~^qfmn@d={B*T0vD4UBT_zUz z8z>tq;!k0!x}Yo!Ol&8WGIYXDu9jkd@3Y@~-)HB?V6cYVF#jINtpK6lKDZgt3S2&S z;4>0P;2ae=!`R~>4~j4g3z89x0`wAz@FNlg$oH_z%c43;<3Bz~aYJ59W7D9yHPZGi zoXlkfqUpb{OAtdjv6C*Rn^y(UsxhDp3zP*%2tpuR?hHf%@4L0{nHYMWTk(PC>o6tF z!$V#dpzIs4$65?^!KFGX1-Ed>D_)qU2a1n#CnJVM$(0zTNs}<9cma$xYm60I%yW;| z89SNtyxXaW>(G#~)_HTAF|L%h+)AwsW0jZQgvM6i(4~Xu`U5@I1<@(a)g^tU zE#$igTF<1K(gQx3ffDo-)G5v7n3lEEtDf#XenO43uv@wVdJA15X z{V~xRWb@Xc+w>Oq%DU<~7477KdE}-~=;vVb?B4lc`+{sQgCI(lF>(w!d-tV(zP@uo zc3QUDxJezQaTD9Rbb3378(qL)VL=)1y}gyn|1w?2J07(K?mBdx?01*>qPp)w>^|ck aY#CyVuVREZf1zi8;{+#P1jS5FYQ}E#Yzj32_3^5Yb$bvqIV^MHC4N2oVU1Z7dUyF00$MH*4SNwnTzw zNO%Jfk3xlL&`PPO=pr4VNQJ$=Sn~XMJmdMk@%Q!hHLy$ndzfNX~V>{{Ifqp*E^ z#G4YOd5Pvki33&gT)yK)F1W!XUh`772`(xw#o?&eri@8mB4h0uW2F+a!r6VsPG`LE zk=n6QM^?0Cv=}5 zPf-dwM>(fO{+?EiZBg!wx1Um-8{Dew1wKJd?K63WwCdWWtn!Fh*+F8W!^Gw*P&VvP zjjN{axlWx(?bi3L_yoWD!}I9;&F5P``kOza&C4K&(|Y6PqT^ubpBuB<4~Qv0q1w^k zCZ?%u_nv^e-eI^fD771-XQz93;EHyY?^x?P-SvF#)%UDxzZmF8R$PXJkgEj9&IJrF RVDvYMNcv@P1y*(0{{d^hwLJg; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cbf3e37f6d9a6b67a6fa8886d0d34140231be4a GIT binary patch literal 1412 zcmY*Zzi%5i6z1uE=p*N^iSzzcnJs;9XfS$;HE>SKHf=2dyvTYzDIuVJ-$c&*6()_eCD6e*qt6i ze|ly8#Vg_J5QI0VL}kEH6%2#G%Proj!eLm;A&;tf7+1+K2~Z0?LuK?Dl`#!|4I7SO zdyx#J)$9v?gB>RGI#=W=f6nn8cCW}tCit3-d-WmHL_-luaUG&{HoQ;w#OIg zpyRe*l0`*@J)-tRmOho2M3c(6w3r$zE2>?eijs*j&gn>M>JmCvM3gS(tYX$}8cVeG zb~1we2m7u|3S)3dbFe04G-A4PH*2FJ3tVtYGzehg%+C?w6@g6^IgctXOk& zb0A#tfh-CsEGd9HXPh(YqMWk{Xp&PaT~rWVx^_X#2~o-=g9p>)rG;J(YZFYx16f8cv}o-jW((nekHBKt$`(7zy>XE;ch} zPF!qf41(C2n*T@DozdciG_2tnQ!cU#MUSC%Qj7(uD8{afaV5(s_wokDucm}I7M(z! zxzJecwlF3_NDHCBy}?*VwF!J`e_4M)S1_WFr`ZWKT{af;>?>*}R;ui|w3I(QlyU-H zmK~B}0u7m+QgNDbmS<`KohuIZ9_?oaZs0=&3&@z747@T$GgbF<=1;;mI=Dc_BBD%Lm?tJlccz*lAMf6~e^gel)Ze6w>^>4io4?5lV;p1L% zg&xPrB@e)xe!dRrc#yj7CYwF1oA(FH<^j_FQE>^>1P-S;)0>Tg>D*Fb{At%GT-Tz> z^OAwc)WBR12-cx-9Y5;$;1H)w)1i^;{1qZ*Q?LW}|-^o!Bq)YJu`MKWzFMglD AGXMYp literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_method_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..045ecc30d5e1e3305ce4a6d06afa202218ebeda4 GIT binary patch literal 3024 zcmb7G%Wo4$7~i$W>-C#}@-ieOPzaVFEb)y6YPR@oOjn~;rq zq<3zlH;%1(>9PMqFJA2h&4oixy`_rjfm6Sk^%|Sn2Q2xUZ+`wfkMH+A=Fd_oFTscY zTQwGrNzz|@l6*29<>(JkUP@TPvME_|LzcOoGE-K%k+x6+iFw-0SV}{&vW={zHdI+k zNjD{oo=Z4Gss(|Kt(1JkofEIetqCks)mU_^VK+AwudeCxk ztTysD-?}EV^7rKF4x#>cu5UOtt)&=RF`7O@cMa;-(ky$|@QJ6Jtgz1rUspzKZJk#L926at6U~@y)S~g76us2tTuNx+1mGyY8;SMl0^q*hr z9%iV?r9$>x-NyUXj?W*@%{}>%JNYs7y^Av-o-oyd6|wH??EKIrAJApp-oD;!Iy<({ zDmzqLhq+|+raj%!&G;8D3m)_o5UiqUx@|kYEawB7k*J_G4&b=_f1y9B}j;dTc$;Bxygrlap#*Zn)Sy1RY z2;i?Y@mgK^C!H!QM^Y-I94aw=#qrkog|JYIP%WW=(>E99FGT1<0u8VNM$=*ORD@3T z@Wgi>%+ntH($5n?ow_0?9CVQ`b6q6;KbtO>U7IeKT|{shWFa}{KawcaH2i>NMYekZ z%RnI_m*Zi96w)MokdFQGWDAGt5^bR81UT zo;)}amZl;!l_16O7c?xKjL^y9$nmLz`{BrJgl31>#KFS1AI#P={POW^_4l11193Y7 z3$Yy3V5l;-zr|Fp21NJRxuJ~k>b*w%XO6c`nQC{mAs%LF!}h&F9_Cw%{U3rtuYv#% zSE>hB!pi9golZOh$l0(w9ii#>NUM51EH6iBSwOL~_;Q1t#dEITS^Xs_NY{|}DH!c9 z^=5rnhd$*K(NCH>yaedn#hE!vr|?AJ9gNR*4XV#QVL8_$8^nX&xmL>zF9{z+8sAxL z&r2ocg+%z_wR#h(!Lgod5Z{xV556al)c$)8dw>8g%4sLTMXHK$7=_n%RYFmzpiKqGS90FUlxkZ}1-?1#!cVVQgm{@X?A#owP?7+C-XYjai z;7j>+!5@>Kyn5KWv=W~CCY-zxp&LmooR~h?Y@PoioW2$wUy9IDPeAY`)@l_t9(UJy zc+-eipXS8RJ}(UhP{RWk4(%bB#65l_Ml`bL6Pxk}VtiKdHsBpM?!Tgliz*=kS+FRM z-cRp4^;-Pa_|p3d{wu?mJ_d1^mSy>^BFR_YNKMurH lf}yy%h!MsQ$m%X8lI;+0f>GE$I>?$5 zm3@WwxRQrxb&fMU$aGekHo<-SjZgkJJ=t!Tg zxliO1{2C0;qw_bPZ~Yi-{ERj(gCOqf^_zzd{Lt4KQ^sy5qVh}8ZsKiXo0{78$nSbZ z;M}4zZgYMtUEwvCw99;lr0f2UALOpSM=Jd)Fpr5`hK#YR1laZk3@>2xH;GvP%lHb2 Hb-8fskLG1aAhcjC0WP2hsgO#fDU?@)N@V>S9{PXu;?-WzTsZX9TdKIN#HruRdW}u(1D5>FH^2RM9^dbK?C)b^MFoEB zpQ`z$q9}ieN&3rmmHl5qd7%)6sFq@@P1VjcGpd+ptgMZi$j&u$w${{CC8JzdNcNdR z5Y>LkChs@%63qds^`W{%^MLAoXhEU{K#P57QKBV4%YA4`qGN!L_o3ymQa|vg*t(wK zXxVH99NjiqP|x!GZ8M-gws>j94ZfmJHcg)rUidonC=rIOFK=1ArWj0M0+wu_)1lItQ`icpQ_``*o`IMKV7g&tDuA|-)@<@y+( zxr;-aI>8+pth?mCM{q#zVjtTKZl_`EDGnLWTc!>7B)qigFpsv($0kfF*s|QG23*)= zo`pkR8@bk!X<4STwoC(TT8vj#les~|8Tood(T4{NnY-wP){ zWPyL?IEY7Fw_!!N1LmhjE_t6VVQ1rNtL1Jw0k3Q_V-@BGPJorV&UM3ZuuTnv7Y)O9 z$)+XrvSB>g#8&de*T93mh-Y3g4D2{=fCJNYm|^%xpjkN2&&oci%A4)Rx@*(MnzP+l zrfef{y~dYrK&`V&uDbz#X)NK^26aedi#l5k%Uo@EA<*GmJa_&=gMsJIdSHOpC~Lr~ zrbio|q^Mzd33~=y8|X7OC4Ybl0?&D&Ux4kU$b-UmK>VP*nmGP)s$IVo&EJkD?!@TM zUM7>%_cUd4zCC|4nz$9CTPakUY)^g?6>(kV0eAyJ+{`kAEW~1`a7#;27N$fnFr)_vL$P-1~x}v5W^pGBN zJtX@-n;w@vn;w@vL~zCsC+n1|iSOZ1+Q+gF-~lC&L9^@>~{R%V@a-xB@kx zqd1cENTS~1=p^{V7veJfnFRtkDo#9aMa622s;T40XLb)qW3w@uO_B1{a~743#OTOq zru+DX%h7|k!+~T4~wnk{@;MYE`b0KSE{=gqsp-u9ZNj}$cNGRT#V-4 zBJJwcXnZL~OA<<)C6*iRtT}ix=&ZpK6lUwlZ-CLxVt>~6bm&t7mHniJ;Y)zk&K$4V zn87E4=wM>DWiniQ#0#EJA5$NC=Sn>{x+J_4X<}!&Jq3k{8Y2DhO1}=(;6PtBNbV`j zhu>4A;NU$+eSiQi%V{^kWva?>_yCrG&mqVw8@h7Hi>5=&Et5cpQ1Aq202=K?uM=!r^pIwelei6-F zi_x_-77owtuC-5Hj^?gJhZbYB*cT9Di52)5(%=+uEI$kLq>CR+5QA<9)M28(C#R8B zTlCbV!^$!(>wpYZ$&)OYws1%}QA0DgPW#miuGqocsknbW`qbQn5^bkHCCt-v6|;6JY|%4Prn literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_canceled_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_canceled_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..046147524c51b172fe8ca1937041971801a66151 GIT binary patch literal 842 zcmX|9&rcLF6mDl`XJ`2t!Wwm>iQz&v5t@ZWJP;F+s0V@s<7EhG>h=XD%(O$N5Y~9q zKfn|CCm1jOA6_JQFuic_lSr7+h?5B+^jKi!MH!qf`!y3dX3*${hHS7w2Ety~mx^yfE|spS zr&>dn>t{^#AqBp{6w3-T+OK2Ev3dNq5Ie95Hq;o4$?j>S}tg!wb2u=<`9FjD7OY(uk|KY`=2g#)ePu>>Rdg#eyW@;cW-+Ot#^5uP+U8UrNB+OfskwqG9guE zdaM+rnOdiD0&J5?n&#SvVMaOAjaP-0Q1!Z1b-mqg@4T_^+0K=`d&h_!9i*Trql)%B zfer}aGzCKR6d|c#hl#~aLJkgTQr^hA=}X#A(5^|KX9=O43q=dUjJF$e^$AUk1G@MS z?uit_T|NxgAm3La3!e%FNw+7&e$02n9v$ohXWqcDkIhS^B%3BJ5|e<{oj)!ocE z&|SzwQ!CCO%!)^bBr7=~vLMAAmX-fjTJl0F3d*3xY$O}Dc`E|5^Ls|TM?ahMC*H~P zkB!sj!gp_B>^QYx?4zr5Z~K>cw)L&`;B;o?hqofHU#94H8hXBLYtb}N%ncFc;7B_L z+E=5@yi$5Lq@e6tX(2FFz;iod(zlldsYP>hRxN7WFz6y!Ex+NBv~z*Y&Tknpb}`21 YKElgq==K>}`r|k7!!P}FWR4>GA3R&>r~m)} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_guaranteed_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_guaranteed_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea9a08ad291eeb2c554966e9f53103bf8ea738fd GIT binary patch literal 848 zcmYjPPfrvv6mMr{XJ?T=F`~qcCWedIM3?}HcpxScA|415jF%y#soR%j!c04Kx`Z_z z^%HmiKZ5ZK_#M1R@L+o3;K>^a;(?Q|GYhdvUw`jUU*G%neH$AaA-KxF?R3#2}6i=Cw?9zL8bdyBM*}>ZzfGjJhDne@ScbU&@XZdriQH02+7E>NbReF5%fC&_wJFu`m3gH*l6gqZ8V>4L-<0;&WZ4#U>O= zo1y8MF_0H#wa+z|20&~e$V(f-LBXZ4W4&t+Au z0J;1a@2DK&o;-+Gpxia8h+ilJ+03$1yQ%EO%e=b_QpEcp_v0*m6Bh%sqvXQu+8tRL)#Xz@Q15QM^%Q+Mu$j{NK zqu}V(r`GZ4^hq#%=6Q|iEF_atC&8U7WupDP{rGr%@kg+zC$Dm>cUpF;u5A{psD_BC zdWy802^*S0fvxJmU8#7xSz8z!7?7o#Hyt`>#cWmGEvHs*+(vX6E!BVVRJ$RexXXJe d&U{MgMM&tvDY<`2=Kq8(`sC~Q1;L}b{SOOE?&1Id literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_informational_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_informational_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fcc1f335b130d9d42392f45d38184aef43329e6 GIT binary patch literal 2348 zcmb_dNpBoQ6t13Lre}5RfR_nl*^Wds2)mU8B^=^NaV(Y)CQ)n-Ocb@6>B4T@TdK;D z$KptC9C9M&Cq(=K{sWhc=3><)2Tt6KJmHWNuc{a9u_GZvOa1EASFc{ZdRzTgtCbOa z^sk1uSV8D_G08qXWe$G?<~eeatN18TI*KCrf?o*Kjv8nkP0m$c4~&ix6g$Ph?3fBF zpihyj{eWB@E5E3Tu1-m!2B1Z3=4e@>CZMGwXhouBKr2VkYOmU={UOw~6kdOTA8%vI z?#0ZDLfR^DZPn{CuHE%0YpJ|=*JGGCKCiSRCS*N=U0z!6#n=^s-NdYfrZ%EOALh>y zMjgdPox)cLtFAHw7}ngv4H!!TQBy?A5UgWEU@5L=xGPcETg(wNl_?3NS8i4KNB5mx zfJ3mc8xi*bjw8ZS=oVu*h}q}iw-E^(aZks;?+_=T{PtOP-QK1w3NTs4%<+86&vjG4 zb`xZGEcM#MOP3yfPZ{AA7t=2Bq?5UUcVZ`WcN<5ggfkz4=!bJa9&s}ORj$LF-Fru+ z&SLJ`rWeOvxRIMnQy??9-70d^wnHbtw$0179YpT7FZil$Ki+oyWQ7#L*L=*joiL1; z^dq%xB9fe|VDt-g2rPQ@leG!nu{OdTYZcQi7RAMm18pHg#~Lpi*ZTGA1MPYSO)c!3UyrCHQ`zCC7tA^=A1@fJ$rRUJB}@7o z$xA3l)DtqYsCs(KAkdT$H?tJwIu0Odxh7)D^%(q)+b;|7H7FmE)c|*;=rkwugWGk|DWY&Q|)PwRGoyD9Br`OE9Ip=p+nz53Wd>K-v(# z(*h%7BBL`Bm^raikdNV~%Rppc>NET1I%H)1c#{9iSO|Tm$6^Ooj>jU;$p4VF;&I6J z*c!g;(N;GRL>OkqgNVEW>Rw3)@CB zTBwrxz5s@XK&0bNdZ<3LcfMb14z%W5@)zo0B%@_J*<0(6&kwZux9m!?URcp?)%aA> z_m-f;$;a7_lGmB2AixdQ6YZR6FiE=ac!Jn?hvATlcbphvQC6|&c1iD(WjiOP^18=! z=Z$$IY5O7dh%YC#wG^Q2v*PBBG!|>XKV(x3Tp$g;h TgLCNw#^L)7IeD$ZDDU?-GMrRR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_payment_attempt_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f149c8e9043d46b259a533696af431ee5543cc24 GIT binary patch literal 4086 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 C{@~&O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payment_record_report_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03699551d3dcaf6a2ae223b039367d541c580f02 GIT binary patch literal 2078 zcmbVNy>A>v6rbIl-P`-d#_`8F0m}lJl@c!`f>0!J2o^XfI97n>qG+|;49?28ADNxA ze1Jre(5H*(5LFNjCI16WPS-@!q@bcR@`WN5Z)SI+vpHmmlkUAYzj-tBoA)vMd%a#k z@Js)01shd_{*Z&>XXeJ?PhdPk1QD%^LanW7($>3rXta$Gx3L-O6+o+FXicFtK{BrJ_zGp#D(SOn(ifj zL_{r!0v`CB63^#fxAHLEURk;Gt&GdW!4SYw+~b`%q{2Pn z^eq;5Xqv`s9X1KNshCO%#3MPha>5?jbt&0&%EI=%$PcOKiHhfiG3j-sUGuzqJ-?gH zuoA>hG(FFcqL}-tE)+{N9F_S|)v?(jHqH)2k^ z=dQ)^P7rOo*Zj^7jflHTqg}TfeCZ~Aem9OTtiE&JO`*WfCE(z1)6|9igM_+?%8lzK zS@JxlvIk1050uOwOv(hVCVeIwQwbZ4^cxW0qo=jGC-ZBA+SMVxdZ6p3ePE&b{660Q z?1%E8wmihk1^Vi1`<=n`IMQrAX}vdSTpZ$yg;V3y!}g%QG{j2F@`za}=A@AQ z!RDoCNwFw}VsS=Vau+35z(}PVM5i%z|I>ndt$F_wWoL_||77ZK!^~0Y|LSX#=;IyT z$BxOSVVQXMgepB==^yq|9*4r}WEyjLawc3|7Hf8OS&_%DE>Bj+p9dp#K&ZlaYOnoe z=ymH5>85pHWyMjQe)!g)vN*(xW3iAMOpb+&|4VOa1a*c6`lx&VUWEsQyJpXJx-%kewEZ?qn;%u z8$4@wRn;oLDo~2jQJOF8OW6x|g`I_E8vN6nAPx*o)1F&MyYLL1d4?_z(B+YJTC;zQ qMhMjCimlm?ua6L@(QHMte+@- z(9t4(3KgP3E2W~Mi*$q{72|bc$@BC)z8QaCUta?{=HJ8O9Rv97l$#S@3#&a6P9cY! zl~A#iF((IQP=#sO$zd5)aT+rS;05H-N62Gj-$EasCQUNx{c*~OwHrrxGDl-y*S1j7 zkR^Im7)$*2fwIn7Xv`-*)YI!cuzEuJDIlaQhctK#7-EF+1G2h{NzQhOH^C@uA01{* zg_06Zl+KUP>H-&dnCYxCZGy`>llj4@*Y<^wS%pHhYeG~ipO;P^2yrscO7GEb4mu*z zhQ{i4Q;1ATWwQ=|5MN8~Q6sOrcDblM7NI*Z#5@|ZJ2>OI(LL9qBYnE& zK9NuGYcM>E&fa{!^<%L0GupZcg1E0YZyq}ELtkf18M~bb<(Hz}#M{I+HMQ-L-}Q>X zrA2An=KNT?!W%AWm-!A!SN&Z-$US|JRQgq59uv6;8Dp0Tu$^-lp2O&G60!c5@g)%J GqW=TND6mHW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbd740656014c33b63815ead51a828d4ade9ea32 GIT binary patch literal 634 zcmXw1y>1jS5FYQ}E#Z;?LYzQ|BBI$MXN9y;ihu+K3Q-WvHkP>^T~@biJ8NHb+ru;D zcm%|wP$3$$QYtFCNJl7AVXqTQp7}nHXFNatzP`Q&cIkgl%3}iX+mYK9-+F5(rp~$=^V9rr%Wk@ zwkOfsQX8x99!lekWrM}UyLx#O2UgE5KL>=I6p#lW07Hy0er!+O#-t#7R<}VGb`Oqt zE9d4V7Za?Gc*ASmCAd&r6o=WMOBoZqM#j1|#%fv2D~E@Soz8jXEsZO`iLB^CZJKVA zF)oBOyw97luduQeQF3w(;2+Gk3IRQ2gnruq`tq_4p;SHxJg&A=t*L~6HwWW{IrH5@IY z<@+ypehjyMMq8Ib5U0)N?L}Ae$VVTu#t(o=KY_-zw@XZ`Y_h)I`<^gd7!=x#$v2~a xc*6zlBj2;=I^FZ_+ixCPYQGTZr&e5sgpjKQ$nFJqs2%_S literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5930b9ea95a1a096b2a400c82af5759d703946a7 GIT binary patch literal 1184 zcmZ`&L2uMX6dv2NUT=0cQ36s!Xqp5{g^^gRAj$=CNTPyNnnpzkX)mL}GXyK^v6-1g zyXVl~z;fe+RP|4A=Mrl#)m%9A#4S>Q11H|t>lIRkCBJ#^d!OI)d~fD$x4VGgQJ>b5 z*DZwpvqAkdX3pua;JiQ#F=v2Mr|&q{cL#3j^}Q7LaT$AqM(X$dwApVu$VGP$!_N_G zaOWSds?!g~e%O3(gU~UHfAXh8uJj+dPBNiF*WleG)&}28l!mBzFVS4mfobn$+Hw=g zSzJ}BES?3Y$Kbp`9Q7TB`tAe7J&u`k3(ywg4e;HW@AJkvKmqaohu}HVtXMNOZ-LExAT5RDfW_ym;%#KCI-Eh&Y?9*{J)H{+>&G)IKsWLuI zv!T!?h=)>g5syuqaTUv?RIv%~LKkssALCd*Ol!2oW^p zgqQ_F(u@rU*6$GVbVvuYjF-T#ED=J5$e@fp2*B}_ma+*lNP7aMowM}8{Ebe*qR)Bs zBuja8AV$$HSBE;wqq~{rgR9$Fc9@8RXq(1|T(IaF7tf+W@+iv3utjmb_w%(#!LhoU z1A!iJ6+x#Y=TTm&8+P@zn!>lBRKKV(#p~A zwZF1HxnC@AP4U*Zk?!gQPwu~L6`c!He4*wotxbNMs8>6a(aT=37*26mXMo>4-n>z) z{!(;qPVvneKf5te#hHs!e6dEL`@`c)+r|1$vAjFQyET6Pr&n>Yc4dmMl!)AfO_W>O z3tQ&9N{1ei)ukj^bt|R4y2gh=gRIpc>`2UVg%Cc{TqrxXazNG4O0hO<`AuuKz#0s5jILTV`Xc;7U(@aw{@QcM$ZV$o{5o$zC|wi3AqNt zzw5;sy-H3^pcQ6Lsg+X;X!RXh9o9PaztxK!EN8xFPX;UzcVpp2VFHAF=Ov<}$$B>u zYSQD(mDT&hn7Lctj@T)7EOfFxI{FR9&k#dB?4q9b05RRgZD5SJ+BJAq711Yzl!O@* zVw@o6l$eFr#IrKxl?kz?q+G3fg47fl);kS(>Yg)<211?jp2M9WdAfR>+~nNbbNnqw zuphio$c9q@>H>MXblm+mXTaUuwX#zTWZi|FdZD9|Dw`~Hy|7OovPThT(q#Lw6S~sy zy}%Q4CJ_z?-#&F73C5)fV=+j&9ZOo2hEBjJl{HF($Q}5~ZczGU;P}N1S5+iGq0|Y( z2wqf|2tIluI45dKhaCw(mW(^RS%P2)VP)Q7Z!t@64V54i=K z=Aw+`7m%OPtGShzXTMJ8Ze--fp{5zup^0YNFWXu^H*J|20myvTNZL|)Ow7!&)rIMUpd#N8wCt+kR&>wW5@pYX{$U}$tqd7_-&sXnRoh1C0kNzDht7p(ij z0M yfAS^Bp^h=7Z(?RIr3j8`Qrfa%YxhE&xP4D zBb);YC`>^HV+gJ6q)z6>Zsx^ah27N8f;h+;aRUMeJO|YK1gOv8H@A)xhh-2oep?Vh zz4V%$j+j)h3YG9&MvnIOlfKg4K_Znwje|rnK~jCE$CZ7X2uAyLq?*seg4wpg=YWA2 zQV=_D0dtwh{Ch@gi3Jqyn!9QA)R}8st0}$6*Q)oVSG9wX>Ab=lTp}_ zYS#qN%NUb9=ZaMAWBe7&j1Alr=!9ns4e~MCXL6``fnIRM(v3aNhePIYnnI zKSOEq4i%+3;rUkg$tIF!W*dchKn6@AlO`z`DypUsE~-Xtd8Si?Y^&X(6ir*0WuYM% z8TJ|cY_%ue))yl>dl bg%Dl`0B&7@2UlS8ZxF(8^6(m%tMdL2UFpZR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..828e69ddc24e7df1b09a1534468a4dab1b751032 GIT binary patch literal 638 zcmXw1J8u**5FYRAmT*Zxia3F&BAP357D*dj5k-Omg@{M9jkRP)m(}gs8{2of?a6P* z@e>d~g$mK2l~PgBMLI%}it+Bnl4rj0cs|d=-#0fmfR_39EdRg&emmoSg=?@H6S#s5 zGFCvz62=_%3a|7Nzr}tLlwlGw@Zc3>!Dq-qWZ(QQK8fmR*!$y*A#1kY;l&J%eOuXF zNkb>Wo7`B^4^NbJ&Rk=5)`fO*%>%0!WM2V7!ZJv_kAOY~7(S&_w=v4tA?ey1`pwR1 zTB{lHS)Jn?Pg9+iripM-r7}Ai_L^7-nU*L-vmr#OvRUD9UxDd%z#^)&KyvRTC zsHLBr{pyh2{J>2guEMF_pFf^1jDsH%0(rRGFT+dLt03BUS- zWw3nz<-w2s?$2QN#`D5hZ{J^ZMGrdu5izzy5UQJkb}eoqTUV5BSMlS{5V)`?jT=?h zj`ra#N7^z!B6JrYb`2cs9Wv<~fq72i#%GM(M!*iPVQ>w@zfr*A<@gpzwbB0pjIOFg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_reverse_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_reverse_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45ab5d9802555b352907a65cfd9e06d2736f8e08 GIT binary patch literal 720 zcmYjOzi-qq6t?s0(sFGnNK{m?R4f@916?bGj!H0~Qh`{qSmyG$Mwi$*+jqL`@HaHw zSP_2;Q&kC}NQi-n?WCg&ov@Qu!jhlA&(D7EeeZo;TU$kDslVIVHwU3#mRv9Y3M>Z( zoS+n?I7bCeFt*sqox)Ar!b`lCySZNkNq~`qo}<+JfKngu7q^R%^r|50{k9~+&H8JY zOhM^arOpIbk<)kw*-$s$%S>tGzi}wEeUeE?hh2cqdRJum)PNHND8VU8oVN&E@W8)o zZtaF3#rx)5vG+aj!GG`k=X0#DawD&~eZ(p;HMwRW6&x|i3e^NKFBwmpumH_crrBW> zHX)^)6+mgTN@*d|X>M_!(#e$Noks>Hth7yQT%~2RK`G;0Xx56PRNCr4qouLvazc(p z0c6DIB?Du=iJ*_IF27K0<^JR zKd9BGXZ8FvK3k8@y{Prb&Fc`hC0kwM*raNwNkunKX=mO9x+;y1R&>{t&F+T6Tmx5j z@Lk8+x^CLYZTMRTU55KzkDtgphGMhTJ!2Lw#`q#Yc<(2={{uyTf)Iywe1Xi-{{9Ej C)V_)U literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_payout_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb71c13bef7b554d0fa19668534baed489c84768 GIT binary patch literal 702 zcmXw1%W4!s6s_vl^u&oF5tIxfl1*qZDWZ^Uk}N_%7hwo$HXTAyP8E}8`cdhw4%6aN zzair%h#%nxxN*ovYU9F{yMgfmS$V5_QgCnGbE@v+RQK1##RUYb_}h)XSP1HH~C?!as%&|0fD8R z!>F&ca}*USuyyMwQX*%uzSGOpOL0*~x!}6}x{`vMi~XiVOrt+2B++N^oPgN2o%*}^slrA?66(c3m z!U)aHU(~#XY1cGgHc?&b9z-|(Zu5lu`F(&Gtau1+YGaK5c?duHf%Yb7@3-e;f4uq! I!B%Jg2cf&UGXMYp literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a6faa6c070d345b7a9a58d6734885e0b96bef84 GIT binary patch literal 2978 zcmbVO%Wo4$7~i$W>s{M%65_m^kS1W7nnGL%4^bXc6DmqY)2M)|8llz3Gf7t27rW~a zBUDwQm3peuQ_U^cs((r^UhM_Vg#)MFA|>>|so(7GI3|fy2_L?h`T6_i@%_HX{@vG? z6X56lTh`x92*Mk-;J-{V+1rN69|9JzXb7fQ7ezKt87VVePn)QY%uGEKVQE7$v-PYg z*JV?wE25AR?g$wDEZ__g|4PUE)pHRl0h%RB7tKeg45-qB79unUXub#SYZa<}|FG?< zA}xMLo-~Q)f9v?VZF$u+MYr{aPtiTy^J(Ux1t@^od%90t&7k=u+h-=aOE6U)v>bw& zej~nJER(AWd#fUQIuYt37V4>o0!b4z4mu=*#Tzgx43QEf)kU%ilI|ihj_eXVli*p{ zN9yV*B(h6%vR$0-CMSrDl|(1k)!}!@a|9O>oj#7lyTggaBS=3-@IYcU$Pjp&f=@6c zL5H{=k#VU9ALck7Ni;_}()G?*7m@LJk8PRZt%>R+9auIrYtbc|PnI=TGd(J44PW0R zFq(GL@@X+1RZJSXsTtK2l^x=$O-uKwYfwBpaQsgtW!A^fxPD1F>?Cj&`EM^{g zzI$#O#A7O(#MiLqYp^8&dn#LcW5d!+@@(SpvzA>OHyi$QFr-;0UeMBEtq1TNnqiOf z;GN2vtKlYi22*L%Hk$CTT=bu6+L+L(Bi62Fd8@W-KJ>ITLi>HbR+|wp=)1aRsNg-_ z#wxgi9U>cggIFG%k&PY!lU$^(`j93|)f|;omAy$-X-;J)Hw`u~sOpoZX2k!vGVn>! ziftRTUsW~BvVAQ|P0&n(OKBP&?q)&DWhLfMVGpG6&Z@23CaJAiTeaK7+wg6t_Lc1u zCSR5Fb)wiA1E;R8J-0)mDNUhq~2fk2 z&27n5g^nIhs3d9K0^HUuF#-J&;+zFNEqM^)P;4w8N|V=s=<{tT0lu~cr32D4$10R+ zXe-26s><$JX8tJ?=a^st=$>a{j)~8hVBT>rFcEogp3N?Eu?!RMClJR*>@hJ_Zdcmg z&SHD(3Y8rVzw_PB_A5a5lpl?DHP1jo|+s-gL6(l~~C7QB1Ve8dXZ z=vj0%pj@reOw&<)d#S1%%Ucc3>fudd%c!;;B9GlEy4Vw#c+6cu9=P*pU`*mjky2aa_@o#v=71i8pLi|6velaAkM!QDuGaW zE!+%*oBPt2q9||wxG%7Ae>pWJ%58mLfMI_@EWzU1z5v7ioGi*aKfD!Sh?46+`GVbl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..965b493ff5508c0db4ae027f4d31cc2944829006 GIT binary patch literal 459 zcmXv~u}%U(5S`_K0D`g7#1AmJ0yau(EC`8KN-SwMCp&=)ce~5&LZq?c1MK($3*)Ew z1Lj&QI}^l$%H3O>V&=WsnaSJt-fA_#hWz zODo_3lDELm4NJ>%Sov}!B>CYz&gQ7ioiec$dgNz(CVR4JTCfI$A>m-xNm$B{21z9P zn4rNyltrn&4THSKn21tjEN?KDN3ZzDtaRg zCheY-(^!mYFB(lzaJoRTph^5d)zVC)=yuL8sE!S`l^ux2sHrwttdOcg24%_$W4utt ze6ORHnKP+KRSUFZEBGkaGG}YicluBKsSeA$DNK4-GH0DXQFo|VI a!}PID-vJ?HTLsensS;9ue%gX9#oizPP<8eI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cc17a6b029fc77ccc089bc9fe8d834f96eb78ea GIT binary patch literal 1306 zcmai!y>HV%7{<@`*|9?sTAGrCQc+PP$UrT=Hq-%-C=x0Nii9$7a^q`i)nA;iRfE`o zJzK-ZiuhAlu(F_&5CaoirM3)Ayl2OO3M4G$x%Yne=KS8>bN*PZmJvM3k2BtaiO@IM zDIR?s96W_!54p%yd=w}hMUk=UtAWgF9$rJ?JEJ+e+W zB1VNlcVj1Xh3;M@6iE-=%;UQMgg^Z;jVp$CR;p;?UjgA z|MIOU+Jg7nx18=4)NJq2aL4w&bvy3!%_zLKbmgj@c${92A;Ia<#D@93nA&l+DK?2= zlZX$yL~^ne_Zip{Wg>&*704U(xzZTov@$=!^ZTl*oBIZ;wLZ13r_~!He4{}1bHgN^ zSsdZTf>fJBJbe7tN-O6__c1_g49~WnY8-n^s@`^w6uOuC@&}C99m4a!QIk zYIa&mT}nerwh(D)Hdn|+2$B^L*l2TRa62`dBitb9*2hR=>G>6MmiaES@grLc){RO`4K)e6| literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d762a4dc85bd9c40c11228ea0a9c4283e2d375e GIT binary patch literal 939 zcmZWnzi$&U6!zUYcbAf+R18TYQlWN;BGH~`CAw4$RRs*CRG=T|0G zp-!-~HEgViKZS)T3-Z!|iLFv8LnrLJ1dy*tzILkV=f*Vm+D!3VCQX_9Ol2qVW-P+>P#72UWZc(YQKSg#+Y_ERV+Kx`B2MR){$t!fj6cru4Ab{J zWp#Ty#_Sm<(X0M87C6b2i@P#9p~|JFDQ4t#b9|%Sc6;xQx$ABw#r=EQ>?uE?5)&-3 z@>$gFF`Q84rGk@VEy;`&5spzxMZ^grxSwt5hCV_j3?VgzP@*Ga<5v(mI>vGFM|k>l z3hr|rt7(KVV_f1~ZiIw+UFGQR%88i#1g$4yFJQCa6;Kh5J&q#+Lwo%tt>rQ4l?~@i>VI42Q&+G=_sW^nyV3@RO@5TsRcp> zx0LopSvSp%ubu2jn|I(_r9ObeN^1mLm$qHy)n;XHo2~(RL+!?I_M`9!=JP+`VR zxw4;X6$CUXxq>qVgXpQGEHk4lT=UaNU)-*4yu61Qnj3$uc&taFrJ<$2?5;MKj%8Wb YF0fWEKAmS6o0<293^cjLPQ|MP_f+5SkSfVP$9v9N)^O%i*@v#(o^ni*LI?0r+-7k zpMdyNm=Fs(sS^`hrBH@W*yq%e-}}8!zYl-k+}r?r^uMRohyeU{!rh72V0CE0C6rK- z8XA%l;&4z0O_+xr4(q6i^O!&YZ=j4mLm4Ca7W()+StMESj}tP|ZjJDKirT!FrV?CR zP4uqP#`62e!Z>54usrplp04x2>V=gr0U;+P%Ai(CKVskqvCXeyreVaGg?=ls9cyc z!S{zRUr}8d+>_R!7^9~4nMxv+UAdG=+X7ST9+=k-c^H`z_0#b87)72 zx%Z>L`!m|T4uUvU+jowx<$=#Wv>CevFyS|#+<4o>ETk>g_q*c-hI4~lyEXY?bPsR2 vq+R9*7Tu-?etd`OkrnM10{zUA>yQv~lK|Pjg25GJf0Kx$%jY*>Sr`2u=(DIW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_plan_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a16de5a3a018837ff4e10f834f9efee896940d4e GIT binary patch literal 899 zcmZXTy>HYo6u_Ot$>qvjOU2OZiB_l`j+1C3s6>~xLsbces;Yo4sVd7oTUYB6Cv|*P zgAfz!Y&|ws#Gk^#=@#ULfr+hB`H(tcCwG8^r98j)^Lx*J&(6nseG2H2{cN(kE&yMR zF&Ww}#?_XdE&u_0IR&0m1Wo$cgVi>~M4c*uaJqy_25g^VhKp^!#IAwTP$=$a1 z%@}Q4!5!9-3huH@wjEX3Ws(XUsT+HVd_qtAOi-e#&+?QK_#1a7VH;syuq0Voshn$Hg7CT1PKTHHVoL_wHzMr2LpltYfkAIqUQ|j;X4o zA|ZXJ8?$RvKsaZ;cwCF~FQr#caFB*hOwwmUmsy8h} zMJw5<7O%nQ+S~vRYYQW|aB17Ff9ZjGV*m$F-&TjUr4d}3(3$3^=ELFi`UtN7MT6zx z^x_CEPRR89;MTDIZ?eYnyS3q5YXn<`k7!KJu-EpLC-YR-Da`9Cdo)`TM9(GVndzP| zze3SmVUArEF=wqh_p literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ed8e2b4a308e3c9040c8c4af3c0fe87323a6a29 GIT binary patch literal 4944 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 PPbtRpuihYd$lmZD;y!NC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26e6d32051bc4a920c434b557117b273b10de8d2 GIT binary patch literal 636 zcmXw1y>AmS6o0<293^c*AR-V`#gd`1plj8kLV^L6sujyE))7CYr`*{W+lg{J{0$9% z0^(0$LM-T{PE2f-LK!+?pHoYI@Ap3aKKy-qdkgH*|DF}+1mL$5?oPY`>mv&;fdeNc zR3szB;h+qvFbg{zmQfXFF@XTy0FOQakCA)}eSDTQ$*}jw2}9EEoZ)Pa+Ptq#A%(V@ z=v|?W<@ZmdamGR+ANx>GH+f+F!pfI`kP!}9@BuKy2;-+#>nrP~CTbuReHu-B%HiM&F_+AYQ^$>*iRea2?ohCt^uoqn;XB)3?%KxqmF>v=9?|oR6m{I9;Gv(6abQ>&9G2 zaWH!Mit57Per+A{32JJeDQcv3S1x6>>w&3F6U?heb)$N&GDlK-^%F}z!>|5e6|K&{ z-22hr`x)(B2SJ>w-8)Cu^T4Mc*^J!^nDjePZoq9~n%Y+D8-C~ohD(D&yG8kFbPw;i vq+R9*7TuyQv~lK?rmg25FG|0WShSEC!Stc(5+iKnR( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_search_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_search_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57651fc9d4732f490742a925cf92cfce115cbfc2 GIT binary patch literal 753 zcmX|9y>HV%6ug-31PGx}QCPg3OngeL*k||dQpGc{cWd|) z5Pu3&lmT>7CnmN?r3{^TXD2-Az4yD{JwLyX`@Xr^L?H5SH~C>B^vfL9;;z8;5r9h+ zqZp?s!y(27Td9@Vp@xff@)-%e(hC~D4Ggf}ddtoxOsY49 zN^&lNab71`?%PJ4Leh17YVkpEh3a$5u+00??BVdg(FUE)9Hw@oc zG1h;kih~$?#khbSgG)E?^v;P$2JDnYVlX<1M3hPGv1t+USi5PGB}zL*G-TR^;zijH zeC<=pql{6io0MjGJV_01Q+hUu()vc22?_^{wxtq!o6?B$Tt!vu5N#)1eMQ$0fNpa# z$}>iWd`g}%IaYZ=UgnCW`^R}cPWX@&CgNwnu*!{{T9N#XkT5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_price_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e934811383bcd4fba30e70f6cddf9c09cbbea2a GIT binary patch literal 2478 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_feature_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_feature_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1cd20e35fdfebdab4fb7b1414ae59d265277a04 GIT binary patch literal 480 zcmXv~u}%U(5Z%240tl9xP*|E=0UMQrv|JMLk!0#!DEb(hprLx zR*3n4Uwx+=dwC_OepwRW;_x0887O@xbi`9NaT*u#o@`nMtP!9wX2`VTz$-c<$yqkh zLx@4c6@)sIFbZXusN29V>XfEo0+bd_N)w}uEpAb|$imoFUeLzQ-{oY+6Cl&{i3~x_ zH5cTDYlyo8&gW4&C4+D>hm?^eq)QS<4@Bg8#?yZ9?3}1bLsu9!La`;oHX;Z)*tme`**vo=>*Oq_Xc1=A(Xy literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..320758b2bddb2ac3e85fc0c7cb61b580c00a15dc GIT binary patch literal 465 zcmXv~!A=4(5bdx)0KtoiCVqg)9@s{?8V`g-Pf9#;X;wOc4ZGXY79w~4K|ev`r}zVA zub#Y_ARai`Zn1}%_oi z15DB2FjjG%UWm~*`E($C#b15Dv?NKxdvs@@5Xq! z9P{N!u9UN?40Q{%V{7tJZ764MS$8L#_-PSS-Wn#nH_934M>HKOn+`16H7@<7SE^&F avrQk{@Eriawoah;QwL~1M_Xc3+4l#<6nJ9* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_feature_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..686b68f982b752e3e1774eef3e0e856b28036b1f GIT binary patch literal 654 zcmXw1zi-qq6n;*8>0RlmR50|aPG!o_8VX{n7)k{U=v47z$zp}`;~F(_QrlNucK91w zHde%6f|yVjIPABJ2R>ehF|}LA zsuYuvd4{Q(D154%$KzC`g|>H4n#|-_IM3g=7i@&nDwSdwuh=fUr&5+CHCZV&=Zd=a%8&j9=FY-R%}&Y!*;r255$aP@R_sM-FyB2a z%hODb*dP422cV=43~>aJReeE`;m(2TE;?pW+Xg zYpv`|5DO}IZ*hv5_jcZF-pqTu-9$F@Zzp-S_0y66sP4h$#DXTrwFr+J+E&MVru|93f=iVVnvFUbJ(%m_(t zg@Lr&7h;z13F*h<8E{4xz!xM<9*E4%RPc-5**VdPfv&WIcmkSeqY?>3mNp2L-XeYU z9w{qLQs3^$T)Cr_sb+z8Y=u55b>+@nzPnWpO)jks3QGfACxUC`j_8LQ4wdo)i+1%( hzw4E1Tk7tok8Ju5F~-{(!lyqqj2kbh)EmkN9^#{zMS^ZJg!t7GVBN zg9{X)2q!4TA;tzfiIcjao05=VkT3C^zSjd*6*4nvz z4QGRxL!_#2M+HQOaYuG+j`NnRsk-5O)H%c(r>Gj=@TRoKyqtEzn$U2LrG zHW=elHkRA6k%qA^Fn4=!@tz(vHPVrs(S0;y+bH^?u~=>GHO;t`Bf7_jW0ZnUQBG-9 zzNMd~UW rHHR*GyWzr~>Kl%_{{qH8#92%TInRLH{soWzW(nziesT`ZEmHpj%HN^1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_features_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_features_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0be9010550e207efb3bcb19358f59d67be5533ad GIT binary patch literal 800 zcmX|9J8u&~5Z=9)oy2wk2RR`Kp(Krq_ylRA6cGZ7$V4ETYgQNE*g5%L* zmljd;E2u0t=%iFsbe2pgQZajLXQi9@=9`<@nc4YSt*#P0;@^|-hegP5Wh{@q0P`aR zS0o?-jYv#AN)0Ux|=|`wFJ2%M;W%Nhx1Sy42BXCp_Zwbr!M!AN?K&zKy+6= n)Gu(vH_@c{iKi%LCZ+V&A@tyeG;T=quk(PGuWPpiRT2FkqmS0W literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69ecb2881793ab5aa415d30aaf9b185f719570bb GIT binary patch literal 1510 zcmai!&2Q936u`&!_-nJffC$-LLP$zD)KZC?rcyaT4}b&*lp+X~x~gP3>tSQXU(8IR zY}I3XPfu)by;l7XdhL-5#+PcOss~QoA|>>|i8uDz6>1|a`OTZ(Jo~*j^WHq~bXo`= z_Rq!ecN?Ksa#BC~Oga7*lxHYFffAuu87hj@)kuxCp;qczgkycE$Hvfz&7r9v72QPv z{s9F#QGU~^{|v2?8bD2AHq@S2j{RDiIEv^#Bv1DU<6mVwOcMqK-wzpgG-2KkIiY?e z<~CC0^WZ#X#Z8w|noiy24TmQ^uP(;@< zF!0BOx!@$sh?|xB=XzPSrCtPk>Q!(pn^0&AR0<0e_6LX`(Vy+!6zA=w0xun@s%{+_ zs5^Ku_#*FIFYxsm%`Z<`etxyUt2OELr+E74XFG3SDe#q=wk{lQO;>;VCbyRhyj;_E z?~vtliv?b+$=Su}=lPkH0R literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bde8dd305aedde11c1df452379bc39f9759c1df GIT binary patch literal 2051 zcmZvd&u`pB6vxN**z5h7WRuWj)1{#)jkYA~K!E~ksZ>S$QWC?%Y^z96|geNL*t1Qq84@p11`i<5QHt47PkVzwGKu$&41eqkiLVTSmSlsL{2f3F zg7Zv+R9m{su6a(h0g(lvc*pj@UJa8+Wf(&OY31XKAnu;L9 zI46cg%rz;%+l#?9N679*$ixFueWVs%ZsRHwTW|tXxT=4R@WtF zh@Cb%nHX&Q!{z0j?<0a~(MC}lJ871vhK@taw@+qARXkx2nRJJ0j%V$o=;XaikH+8i+aeZ)zU85lwNdSu8Mm$W z0gG?l@sJcl!W+kuT}q3b)ubgfN5krAdRz+f3qj|GpCoeML=&9H}g3rUU6oM@8O)Q{jv=}I5Q zrFsJEXR@s7XBwEf){o-pr35YsQmvoXoAH#9KtrJNTp#wo`6VBht|##NOL{tI#HF zoFcp^wrG4Gnq!Y&?L%1y>dCCREsZ&yuhs*uvN5(AD(0O6*SJ~W=5=oB++5>kk()QT zSrX<8=0qiCSk?;V$DfZx%r)a9=G|g^#A(lj_OM$bXe*-IFhA{?J+-0H8)H^=x#qME za`rofYA*8kNr!5WvU~NBW0TJ11ygm;4JaFRA7ZOfqF1sCX_`3uIGI8Ab;1f0P>u9LR&W@yo3upfR7Om6Oa?6lYy2TEaLkJ* zE2T6uX{`TG*$e${)*(K|O(te_2BHs`Ia4G_daeQK_ES)Q3hu?=-i3Bw()-N|z%Cc- YGL-b+8W(_FE-I7E|L{3rm-I0F2R#}LiU0rr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_feature_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_feature_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0be6d57e406c2da80a16ac7eec2ffef216ef7b65 GIT binary patch literal 655 zcmXw1J8u&~5T3o4O>h#B5Edv^MB^e}k+hME2mu8O5s2o5v^so)bIRTBWp{1aqJ`g( z(9t4(3KgP3C#9mIi)2EPirHIdrJea^=RLFE*Vos8j`{bnc*_8OJK^TUE3h09ID;H= zRzk&6#vBgHpbFEl#bFs$aT+rS;2Gr6N62Gj-$L)7CW~ay`QwBEYc^it=@gB9S=&NM zLod;b!dT+B50!PwLSsJmuAZ*q!158vXMm8h9Ma$oV2BaM59rlhOmenQd=U)7X6s0+ zd^)CpRu?$Kr3*O|-@2c4!Xgv=@wqFEE7BA?RXo)D+gtn?b~2B9M& zO=zrcHigKfR5oin5aKH=Ne9;-__3;xPvo3GL33hN&7Uia<<5apCxx8wgKT_)GUqdt zGhP<&c)hU4O70CG?{ZUE+^NYRo1o#8rl^tEZMj_3z8Rrc-H7+T9pMdz^+I=CjgEBb zn)^gP!LMHbJUV~<`PPr#_RnbhG6>?X-n=n%-S>T>Aw_PtB9vc?b~A4hyQryd-}+rI z2%KA##_i6}rA@ryg0_+G5W4Q}`$>-UJre0(f!QK*88XJM5@355(7%Ae-y~w)FQY3U H)_VU3j4`n~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2feb0b9addfe87beeb9ca19c736500dd72387fb0 GIT binary patch literal 640 zcmXw1y>1gh5T3n1o8TlM0TzfVqHz(gLfR-rgaidL5h%?ytHU>PPQKf{?5-`lhi8a+ z1jM6IAsTd2Dk{22CKRcdy>(XFnQwOfXZHK{_7>1F|DF|R4B)pD?oPY`>th0!kVDQ& zs94IF!$BETVH&nLETbw;V+H}dhCKQNd5r8^=>5}VnG8CAoG@U`&U?I=p|S63TPSJh zC3;&JOZ@&wS*I*C=40>b=_U@WUyytW2r0`U4bA{Vj4*ymukK=!vm@fmU=TKsPqoTt zV+v?>fpa{~bXJ)r!9|_Pd^G4ZT_I#vp%BfM5EU7h4)=t(m}RBcXg2{J5otnWb+ao( zCZ)1jTe=WmVNE)?HT+yv$R~2aU!j>=Rr5E>V!3~!)U=Qjev*x+D04nXIp<~Zk=ILm zuH@nH;3YSO#r>KLvI!baX^I+o-ImKm?Yj_q(}wVhVZGEHSDPbUy5fJj-*LB|~7*fP`4MO=nXgB00vCEq3^({a2g207EY232>Jle!N vE@&J10ioOOk)PnPencXDBrwm3T!)OYn*`Y574)xQ@HdHAcQv{JVy*Xo8tJPQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_search_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_search_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba1dac80a633dca70e1995eab635d8cba51f2b4d GIT binary patch literal 757 zcmX|9y>HV%6uv6JR+BjUy>yLNb*7rGk)B8`i#g}v7;OU zphijHTXD`vUiLv~UNuK$*&VIuPF{$bDbE-mRK5W71^sNcX3p&5>(0D+xNr_vmgV{@ z4>em?a^5&tI0sv%@$jlYueTRYd&@NUKD{on*xx4Z1~uKP%IQ#1?Ve`U@`c%~_EeEW zch!{cRR_wZig9WFkZOcwq4!PFGV=pKxBf{r^i%N&ju=!v0kg6(#y1|q$4k^&qTr8r N7yGl$4FXrb{s(Zi$3*}D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_product_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22455ddf7838e149c5f6d80ea2c275179f0c610f GIT binary patch literal 1988 zcmZvd%}*Og6u@WKv+ECRgZXH|2?+uemG@7vF;NBeIdLxX4qQil;VJMLer+&cjXYX-&=3o4SHj^aZkW-y<6n z{kL2;znM>|22>xSg_P!j7KUiCTWpm65)&IL$D2-zalGY3tdZmSEr$_mxqNIpU|*4= zjzfvfi{ErZVhh7o<}Qn?x<@ zgv<$iu9K6{^6k@^VJmT9Pr-DT>yBp~km&TzmDeL8cx=%_!W{qLb7HX$CA)mmlgQl9 zSaez+UP_$1@U*&+x+{2uS&)*&v2S_gbYs|dgvTALbqMioIv(*ONGIZxVTMfm4J$@% zCk(AUm+loyzFVzvUC@KVQjnCV)3#O1jTb+;P@UNB7&jA`b0O9tOc7Y@hKEav;8K925W8aGgCP?6P*?f4Khs2Sx-%wAN2DGGJ*ZBu1Ft z00T}uy%uICy%%PN*TXI?g5Ol+L5U`yrhY&#%kTDZT%J$x{JE-Xg>xNE-|R*4)KY?% zB$=E)n_rJ>MuH8ADziP@`}(J1TwYA@;v0H4YsBS^1aC+*xBRm3;P0F|r(Ymd)6ezH z$$0&&{&8Hro8Y_Ba_pTKt+-TAa9t8H_tUF$C$9BAipLicydVv)-TJu|*Ka5I_PMG- z5@jUTe=n}CCU{jE)vljiUyCQ!6TB`_Y36L^R$N?3@Jfp4O}Ry*`_L@Be!CB49jL29 zb6Xm5JKwGcT7xyV8yXdBQPD1FU5I%ht_yKPh%}G|p)E@B2$ZM{0#2<|dH!f9Vqr5n zV$m%|N1XOdY!A96!FEn|8_?69+0`04UmlUw)tb}W#5rg)uDirPU~R5H%bvAoj?LOv z6Xx2!8(3^)%F7Tm6=Dbe(FO={QESg1%X6ztj@H3uYiL`<65EXu*I74&lA_{!k`^Ja zWyB;Wtlu=K_)w-LOhtKQ#gguQ8qNO?<#pj+)&oAHt6&V3grYkj&U1>Q{Hr77#vkZ@ kjP76R50pZ$afx8K+*Gkr_yrzdxU5cq{>du@LweT#0g@8-#sB~S literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff35361c62f1ca3a4ce7d98ce3bdce5d8a1a9835 GIT binary patch literal 2118 zcma)7y>Ht_6hD%u6ZK^~wj;+MQXJQA!vZ#&I!l41L+qvr5U8os0)>VWjCgSfi=;wQ zhP1aphYs1IY#!bAAIQ{ypoE2)e%}0s0wJ|3|bOs5zx{ZwA?RimB09Pn#3k{=#wrD z!mm1^?YV&_GrVoLLWb|zL8vJ#f6or7Z?;*f;e}k+_Nm1R-}F1w;)<=rtc2opbMgY1 zXNaPvWTB?~Eusp=^MKKuCEb9vz!8!n@;it!Lh^}Ls)&#Razwj269zrUappy+K+e+-W6yKYb4romq5b@V%4NZaeTJa5l-clBFlYmd5? zzE9nKy=_0#JN@vn=WcFX`&190sMb56VD8dD=Qek!-VqVjjgi|1kFn7b;WrZLMyK!d zeiK9mCioS|kLYE2Zh)h5EylHDSx=;RX+|3~8xOG*n?G)`a9us;pQ7-@Okj^{EQ zLUT5>ykF&S&2e&x6P{>)k&^{Z2q!g8giV(@$L|s38Zf~skR-H9R9=elQsz}@`svlE zxESNbGfwfdV@{2x!S^6J?-ZW|XL^%Zr&Ay=+#}ZM6iB+ASf~A;OLav5_X#*V3y-kt z|Eo{7y1q}{RzID2Y^s$4hL<*K^^xrdp%L29JE3p70q=SU?Sx~yw$pVC)A71)$mYiP zMs`s{E4(-QJS1mQz@6}yI60RG?u_t=kEGx`AdrXZm6vMyrw2#VcaAD|BK7XyiabY7 zkenmOBq{mY)k7RDt;cvh%hbi?10|YWjqz%R)V0Hzs5a6`lF#28%iX9Td2O7}U0Qx( zlJ{jz@p+;69|37-UP9pL?By||6BD^o17`DFGA%Y>u!=vf zEN4D9nGvXc7(QZBC4=iif*72)i(8+|0M?jbwO!?ytiM z3BF(($gv_x(rbdG%~z=Q3f+v*%^~?vQV%AE2$tcFq)O`H{1Cx1tWE=ecZgsaevBpc M#b>V(EW*2g0Qz?O-T(jq literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..304417c09b92e16c0db22d7144f22759983253d8 GIT binary patch literal 1431 zcmai!!Ef9|6o<$5*zs<5Q`)56?4}7Q35Pv27L;Sjp{Ya8;&X7Gp%}$hiZW|tS=zT#J99=(?K>&X+>x7kBhNxM`Uu7NYZSZG z`oU>(jFxKZ0bQcrg8EZ`*!n|<3@x?tDSbMjLVi-ngyjMV{x}hGXshKzCiP&#X{=h0 zrUi}fC6SDp+>M=2gf4!B{xd|;$coX({tQuv;yy6y#?~EZTbg)tV!uWlLt^ulYslg& z?=`ZtAh0~0d!FB4aDPr(3u0<$YcgFPc2w^HXBpG0KVUJ{i+>REFcZoPBbl5~g(Kj~ zi`b-K`Ip=O5q`jFC~5pvl1sG|H67(g6Cqhfx$4q9PVzB1qK_GeZ1l7U^H{lQk|k2D z2pMvz$HT{x^21?E`Gn+QMhQ`ELNXRlQtfvLc{&NxW`t|4D15|Ns;&?c<~fsL{Tm_D z5t4JP0~{#ndvpOVdU+B&fpUUzej41P;#jgGxX&a_Z{20=80HV|hS4#U8l2GlBuJB^ zpqR=hEWf??-ur<_B)wHYKscr%fc!~8gQDK7fD~pIiQX=f!akB_Y_FJdP&ulNcEopJ zzCpiqdNW*hHY>b&ZriSZ?xE!yXHnT6RCr)WcYWrRotqWDX~;_d=l+LfcfZ2>23;A< zcFL8l3U3**_V!Gat2-6mF$5Cf*~4#JWoNs>+lF>}XQEu*sPKj%*WY>Wlxw>c-mM8A zn9BcM_>W-tjlwsg{zv$REQG%}F1Qw^JM`4n|0_+|W2v06q{>dgNhLiTdit;*Z*Uui7t$v03hP2k+5YtSe z^J^{l8m;UR-dr|>HMb4d_lNT2v;gTfV!hgQ2tAcF7y3$S*5E;8qoTU#R~PcqztfzM xef}=QS@4P>m~+RntQQ`#ZvTpUzo8EY!87`A7;-q~ccgpd;0Drt$*(veC=EmfmR&;w8!B)T9zE`yLY?3ggh%y{s4 zqfFIfEA=0c-Z-}EALxJRC9Az4UpVyCTdG}p;Kb{h*(gC&s-=DX`tfVe7 zeTzc!BMKWF|87@%`K=PAfHt{vh|ZL#18D0AI$O-Rvwxd~F4mnp{ON$_>Q<&Ak>;+Y z$+f7jG`Sh&%C&X#W~8_bVm;dv%G5@Zhq`sI$arW9`xSvI)@;z&hw(GSk&i>~^eux>-ZWT^TT?u=YlIvkjT)f_DVnaM&)$|I5r*{tFqVjL5SzTs*waA}S2Gd}fHZj|M66FR7Nn_ALAf1c(wITp@P*&d z7*h0l*Lxxo?ro*J-Zh?YE0KAdLh<;*6(P2xbj!OE^tX8$dOJMb@#5%_mlf)XNH4B` z_PLkCWnIXiAlTx$XLx7a%Sv55mQ5vNebCI11<_bFyPg%&IJOK9BzX_QPv}K^X^#xs z%OkRUU|9|4fTFoGdt~qKFRfvFbwpOD=!x!r_sd~tV?;Kl(5aREm2ZX%*GJ@f3CX4D z2acJB0BYL!69{jc#u(o5M-wOt)Z$L z=V3p2(u4&Q%%w@gO}=Nsq6w!>C{J<5WQIW*-iIV#g#dz`KKH_D|9p3UVRL_ObLiao z$F`Q}7+DQ^KtaH2xmkHkgu|D!0yA%mP`kf;IfdogvI|AJlSFBh3=$S3VvwqyOW$<_ zZAYnkCwsF=xzidXxj8eiU;N;?JzQKHk+maNW-5DbTQ60HT4%EQ&zPzw4SP*hk%2!e z%}QIJtPsX`6;E^Xek6s;N?K#G%5tTQC7a{=zIHBE59(`aw8iktHy|9?7~@wI;fpWP o@=J7ih%Qg)Ja(RUCJ4I8#}qri-k2chCJO{Re|+@{L02mO2Cb7}-T(jq literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_promotion_code_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f456be243dfba042a807fdd5a600024524c47b34 GIT binary patch literal 653 zcmXw1J8u**5FYRAmT*akggEi2BAP35R!AGA2uM(%5CzdJg|(bVm(}gs8{2ofqb9#0 zp`%6o6e>i6R!T)h7wHH^D(v;0CC_~0@yz&}@%Q!hHLy$ndsMt90Kc8FTJaJr4lK9; z4xE%wk&FAR`kf|aOym_Z)~qpBNj@nZ?lN{Z$xH81t`91* zq6xK8%_d{H5Ypr=0mi<bdH;CpwYZ ztshu%4!^p+%joj$=Q}^T+drf2>mZ0zwYj?J$oG7mfz8;?gh@XX4_q4Mg7(6J6StxSkT@}GCsm6;Vx@dL`|Zxo_?y{$tkp&kjPyr6>=1;$ z=*4i921f5O7_U%(0;7c@!!sh&GY!2qTULZU9F@FML_A_36Wu_8^&AD5k@r^N@0D}5 z1T5LW+BsVW*51HYvWheERXaMS!dJtlRQOhyO2<;=TcKpaZ>cQ}F7L1>?NG2lRqka8 z3-rNe5w5^NY}E5${R%PU83FRl`-oW#?*@*Q0^%aF%cc);!_fiKytFZ?J~#Ba)Qi7CRC6F&}~)(2lOcjU#Oy% zovr7(_}q}%KD9b^tuubTi?8RD*f|WascEzVdi0J0{Mj_RVIG?6Z9;;)O)|^Dq6Wv+ zng1%=m9`KpZf3WWqKae90YQ1eG@P;+h5N*qhHV;j(S&YjF`;3*h8-I6ub9-9&LD?6 z80jwKWRkFltBCk9a$l4Tt>g6Ohlydoz1c@F^~bSce>ndg!ITU88w~JGE&u=k literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_accept_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_accept_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e24f8f0fa1d70f61e3ff455322bb838c0e3b3d4a GIT binary patch literal 632 zcmXw1y>8S%5T5nlnQ*xf32_2ZMKmsQD@YqfB0_=!1p=aRvohz=#X5V}@$NVTq}N}D&#Y{Rj#~Dm5?Uj2~vxIm(=$p*-Vd@sZc9 zIZ<+N^7I+kg~8pL9%M7roZ1vM^17$Xi3`;cSwDhs&Pm-i1Ix>bn67?6;xqgjj#t6z z{g*pGhC4rlolDOP<7Vsjp`Cc_icdu2)-ROXe`A;1MW(HZs~dOQ83LCErM4f*?V@iy wvPJvK_Xu6b`)+#&&3!WI2Lk<=#HG&|yNZDAUBLJPlD|>F;??L1NcGwO0WY+tHvj+t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..565c0d4b17c91ed74aaa35d2e30e942c31af5cec GIT binary patch literal 632 zcmXw1y>8S%5T5nlnQ*xf32_2ZMKmsQD@Yrq2uM(%KtMEZR^~jqSZD7#-o5DD!!zV~ z1jM6IAsS>U6%}2iBNVBa^(HIr%r`STGvAE;eRFdI=;(isiem=w+ZwkgyaDS20_TuJ z&Pu3Q%9zDo=~aH}_t-CkDojHL9=wD+_yl=~?3?fM)2NM-!5?cRtQ)<<(*k>7D8qf3ejx{QK@`UT09iubdi-V(%9*nfJEnO({x)x zWKt@V^|Xcf3TukNwc;nLLOzpA{sQ&fsG7f`&gJf*Qu9L2_+d7kqs;jk$}?UTA9>xH z6D9X1PoHsJ7~HMtK{i9psZCKMuY0))71}1e1>1c@hVuo z|8nQYaOY>RbLn|u+-%)Gv=fhA@rh{M`h{})Z|rir$h0+ab>nV3L*UY&)b=B}UG$Ad vwrF4Z9--@a-)--pxlbnjK%gI!xbzugR}rwi3m9KO@;3@tyc%5rsXqHZ7wV@Y literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_computed_upfront_line_items_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_computed_upfront_line_items_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94ee77316172412fb7dfee58f2bda8ae0a955e4a GIT binary patch literal 788 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_line_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_line_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c93bee1cc69029bc45afc52fe6aff864efe792c GIT binary patch literal 754 zcmX|9J8#=C5GEyBu@k#5r*PT;MUiCjkO+OCQ_vv@&=xR^J{K*7VqF}<5~YZAYVU35 zZgID+MSn^s!%M-XL#J*A+;qs)qh*JH$nU=6-F;Wa)?aj?J$GrP;_*sh$;3(0x}EGJ|{o|8j-+xN5BPk2RSH3bRW-(WxRr0@Xi&# zvS8dRW*N&YW5t=qtA47XB_zDikXVT?!#qrssez1y?D8WxPIE9G46;y0rWA`rXmd^J zFxS=}9&5;c{Y1EG`u5y0b597j<0ySw6y4t}3=RVgQrWr82bSC4uuyf&qIrUKM3?3LV$M(V2AUKe?yzb761SM literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_computed_upfront_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_computed_upfront_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82b8df0dcbc3d60811682824a0db8e4a48835fc5 GIT binary patch literal 831 zcmX|9J8u**5VrSqm&b)if-Vq*P!b7Uk*pwXlp-JjQgpnOW*cjhol92PwKuje%Jopt z(dFnULHrC#s?#-SrBqaOCxuX?V!XbKr5%6sjb}Xjd44t;(*&3LcQ5_n5%SwOljV=W z#TJ4yl8}UEB&QLj20NLPyOCRAH}i5o@+oo1bCP)PN#XF24)i>`)bx9CX0^-jv+rG{L+j%A#yvH?6v z`2pL5j*w6Wa9YGXDg7+XQ(ev}9ZPNEaYut}x9Vk`F&^i@SUJsDE|P9$@GN7;-8i!m zY4k2#rDb`8v6yqA<4PmOBt8v>Qm(&|3xwqAV|XZX2oLya_zcvM7Df01ThG?Eg*d{S z!|izg2%8K~fS-g}x)&BbeJJ?G`r{{|N;Rw%cpyFi72<_y0bx=7S%?i`9hRX6Y=0~Q z>sl3%<-jmGSIiz?FM6_u{ZyuoK<%LUKz_|X=&Ql}%FtUGIgVc+1*Eaq_xkTXPYq_5 zhu-ppoo#+ngPEnFw=`kyJpAGg7FLJeYQ@O;N%?lGRyJ+3>rC1yV#1D*G&52Lx>w-8 zTeWUkhry`^uFR}e0^4?Po1#_a1w>c%P5UHUauHpMpSq7`N%Nev{suQ` M{VTsDxK-Kz0V%WOAOHXW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_list_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a839d3eaa4cc4d9185445a3e56eeb8c74e8a70e GIT binary patch literal 799 zcmX|9J5L-j5VrSq2i%dz5kW!}ML@F!tP)y8fg&Z55P2!hHrB!p$BJEhv3=;SNtN{J zxO8cwwD}jQPS->$QKd?UL`XrE@%j!+p84h*&v-nZpY8T6!KMB^$bNW){5HmP`4e!t zjo^%=B&9hiXiTZWPVN+L?AF-Ly~2-uN*wZ>q~1r8`ar+CHa-ppLD=|XjF49IZ{ef| zO1~;~Cb&Yz+s%|lJ+~*cab^1PBoDca(LN(UVw#fJc~8Iv?>=(ir*sSTj9~)H zO?c;qZ%i2XhMC5Ch8g%_P%XXb2@R&6-HgLa4TXB0$fQtJ8+e-WF58DgA)yMOUnV@Q z{5&f%UCk?A=q`lnW7Go#9B)1-E8eF+b%jyOS=ib};#(TK2Q0IRT~4zv;=A^J;QvYd>4fEEAZ?t+Nav6VV9 zm2~S`^-t+iD@%1!)uB^2BuWRSzO&<~C;9HZ&%OKl-h218(WoI9{O@A$#zN?qa>`+j zjhh`Xu8@y>Eku#l)ih=6p&l7sBe#tZM`qWItgfXY9ql3?zeT=DwJ%1Y(X9-uPUW|9 zI+|?0q-TA~#j{idNz8%ZgMf>UE-MFtpv(>B)L|l2RKTe36&l4n7DP86z`sHibu}M# z_1B0R6fXdyrmtaadXc)ZFU>HB0wJ4RxJ;;h_ZTYC!P0g; zkEVk9py9?I4Z$*f2HO%RDUGECM?{~?nt+lLFHF4NVW%o>LSi?fgvc5pQR4SQW!DKg z>$_pG!=U3x8eA|rO^6%E2`H(K5W;Z26~uz6XYd)_z>Mx9=M<7~PT~vaDdjzpq|P2B z8m{joNe^!A?6_VJ5_HaKeC~w7k&_O@X%cU3Jlb?P^maXk0QZD)2mTtQ)JgODIB+Y_ zAt6+Z6lfzIFdP1vPs-r$VS0zYHy4KOthqA6E7!Vi+SeAEeK_RV{q_jAOVXGh;^C{0 z)vUfc!mA~%&t39tYH5U*O7fuf$;f8cMtH3xaI*5PwVTcFW%d0L-Y@yg^6*J^uQkH0 zoUo7<~?RDa5eb2;@5_zX}1>Awtk?wpJ?-swXE5f@hyTSKm89fJO=*& literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49d6bcac2bda7d0a29bedb1bff7e3bd5feb8e9d3 GIT binary patch literal 5678 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 BKo$T1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_pdf_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_pdf_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd2cf60d3153733a283d97ce20110499dc782d40 GIT binary patch literal 626 zcmXw1J#Q2-5FPK=9pQ2T32_2ZMKo9BEJz!rh>)N_M*z`mfwjbw%j$OR&Ds~;_R!NM z`~<{Lp+YohrBqaOk&aNLV!Tc)dFIWGXXef9eqUc-13Kp4!+gpBemmpl#MfZ8OW+hF zNLE0}QpOw(il7YBu)|>ym2ny~2;e!$=p)D&*|*T=r%98Hdw-lUX6^6|9xu??SC!4R zGUSO~=Ejn~J=N9)^BU!WPxbP;4y+!NeF_LElaL1Q07Hy0en4J#F_CPCbQ6rjcKCXs zE$++1{jAPP(}ULmhKx}3OB9Z|_c;XRY8se6u;6MeeoK8a88YcM*C&fb2x z^<%L4Gupfeg1BFA+&pySj(p{bsQu!F_M5NWTHC}n6%qBb-t~sSrA1}j=kbf^8V_C3 uuJRp1SN$Eoy50I7ne^*`c|_tOWQ<)Vz_!m}bPnUcNyPe}-(Lc$F8e=b>7@z) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..765e43515dd892c73b2045b79194a892f657bfee GIT binary patch literal 636 zcmXw1y>1gh5T3n1o8TlwAS@77MB^e}LE0!qgaic&kcj4*)sY)HC*SR!ch{EPlV^x| z1jM6IAsTd2Dk{22CKRcdy>(XFnQvxx{`dRl<_6F)|DG174B)pD?oPZ0t3v{pkVDQ& zs94IF!$BETVH&nLETbw;V+H}dhCKQVd5r8^=>5}VkqkP2oG@U`)(K9gXzaV%7D^h@ zL~jdYiQhj~))@>@sgXu;$BS;vJo0iX^I+o-ImL#7K$VEx(VUc!+N1Rt};iubj@QT7x1gsUq;K* zFZX`*c7H~@*Fg|>_4eIE*K^;8A5z421w#29XgA;{v5T6j^$qWMLEzk?G;UFT8g1e& v7qpH1fY5FCz|ZecKO&Jn5twI0u0zJyO#*EH3i?+t_?twmyByvCvDW)P%%iDE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_quote_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..628bf6c2c6fe45e93891099f4242b0b7521e2752 GIT binary patch literal 5615 zcmb_g&2JmW6qu1zQYNMl?6l2S*BqolTjqB7jYiaV6HUhXop zOI0*_YkDl2Ta=rDTw=6`-uox?!o>oGF_)s~sW%r=Q^2RbH{4k-Kav1N3GnUgZ|2R+ zd-LXf>|Y9noB}`R+d1QR=M?21_#%JFpmBI1rYK)3x}wKSr4ieTHR48DLybLl4<(;CjJ(ctVJoj(2e*M{ZtX|35b zjhf~fwx!l7RkeoQvfQVo=)k&ZYc8MZAKIj>Mq!SHfpu=TT)P2t)*fp6yr9W9)z$XF zoF;3#8ry-TB(9leo97*B>8fGv*+z}>Qq49^S`*u9PeQIg#EGAt9hhf8l6AwWp+X+>tR6HSo}&9r&C+=e zo?!fr3ff84ZBRDjsa>k+@LU?0YNIRK1M0elwd3%yKvva}$m{^mJ;S0KE^Y9f2`v>a zUc=!TP>2SHs_{G=+BV(Q%(`mV`H2Dc2d(W;+I3_oIT1v~Ii6OcN*I{oA=50UPMP2? zxWSv?+^pnyMpZ4XK~$RsF1`ncW_i0(<16s;XI*?FvJ4RF$D?<_S0w zhAx69z!(|2+vmz5Q00|f-G#HR?pXWPb?Q8E?Pm3TP_TLKj%_~y{Z;R1wI^UP)jewM zRZU~N+H8ZFSQpQ~^>)<(MV)KH0BwglRanGm(rQy&fhueb=22VXTBu#{e6!86u&N+w zXgCdUSHD$W%%ASO`K~vA)hAb9#^cG%%apQM=~S+J3#&d^mC)qz&hZ=G#7&>vlu&u) zMP{@!cE!uQ^RGm_oH|tE$<)hKcZ$)ugB7p1=#$0Q!#gWiy_su1xhA3Uh0elxuT=F( zRYGIOI>+AkMmK!2A)!L~fE+ydD(mH!eX=ak()_`iH@4)HC5aTuopQy?pYh3=?}28P zJIm|d^m{&ePmY4A);lMzd-JQ_*bSfDkT}S2^1ykvcCi1|d9PUUNk#TdEOr*F-uMNd zT#!(CrL*!AZ|1H~?n(%C_JKF?p-(;(5c`qTe^2}fBCv9J2D-mgqVWSFM=bDuNnQ9& zKoY|HkxG&kfPtr}rEQxKo=y!|cGO4RGqi2PG~71NnzFfBNwGI@Pp6Qa#@WcWZJX>( zd`F{ZXOW0~L*k)`6$N<+Z_aTbU_ph_Z$6STcv`Co$MrnUF5x?Is9ER4g($uGJl!W*SDXrr>q>{0vtK%#l_62#e~6kv z>BJ zXz5S4OhFHKnu<@df1)S4<>hbtC%4TeaHedSXKhx7dlca+gq9SW&D>=3S3uD&K7`19`o(7+*x1f+b`@?2;pCTKi zc|6Nx6H3o4-LIJ~$JnDhYgn>5(z2W;tr>L#0(~Bh5_94`!-jOfWf^Wz)9{JNi>d=d zLo+uknf_S#It+>+FJj>^^F{H5jDLoPvjYUow-^cc(7q>ab4cnov3Ri4IrWjZxap05 z?30h>(D8+X2VUufPfkc=?u};;yxB0v>K-^QKm5Q4gT{b=f`bi?Gz_5ZK1^64JON>Y zCmXiq?sD=gN}q7jrW)fJ$j~X5< zSG??#%To5C0TY>fWDh?x`~rGYD$=TJ5$NBW!(D|l4&4M z&-MCZ@p0tQ>8{wGA)MY%cT zjteCUvqVkur1-)yRF@R`8Io_|@4N+MXr>2dn)D`5`Q(%|-0>-&Op2GTmT->E$^=hA z3J#7<6uaHpx70;cy6;lUfe#aosE)ho7FMI(+7#;qk${WDQ)F6f4KWc%MO+XrN!%=9 z0%GsIw(%-+y<4W=U?%WFm8&>k19_Q<#bW{ocz~ksD4E#opFGG9wNP)-E72y3-CEy+J Sj)BL~8JvIP-#EWe<9`7L87W%; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65bb4ca48e66c5e7befa1f29873c27cbd32c6e59 GIT binary patch literal 634 zcmXw1J8u**5FYRAmT*Y`AxcACFl^%Hr8?;F00$MowYBz?cq1% z_z8%gLWOA1N~x&QMLI%}3VWSc^2|3+&%-~~*Vn)v{qIRJCIEk&aC_n#u-doa3^;I7 zLPat{91hB$3bU}oVHs6%783~IHSp*&@EFPW(8p&=f)9WpMi@V~T6ZzwWY6*@7>4bGF@Bm0 z{xTO6EZ^mIUg#9SXmofD|##|q*Jk=uTam7RP>EBSZ*IkIV;4J9^{i53QkW^oYJ!RNL6Ew zrPv+qyr8-;xUH;1K1EIKGlfE`x^gM2yB64_>w$UgNHulO73N54uYP377x>*DETiT7 zuXld-w|+%imq8Gx_2#XkYkAgztq1~GNFuI2~ wT+%M{J&Uf>JwLwv`k@u=7Xtm%lFN_~a+LttJ%_EomSx8uX|Xn`kp^iRz%j5yXi}_~Vuz&IdML7?MK3N2f{|VvArhrh zbPyLkZhu3)TaFv{r|c5Jmx7lbb{KYZk#>ikMoN|upr`1$@d}t)oj+0deZ+o z!JP$!{?J;ij2NtXxR+S$m&}W?&Dmy!b)WK?Wo$X8puRHA|L;P z{0bO~7N~|vko|9_fH}kE` zdAXWh62CgLaY_P?U(;;H>vLZEF3gGJH?CMV=REgUF|@uQZB0gty=(INQ#cwjf1d*t z@H6E!N~KMsc*umby<^G;ARTYWIWTXerBuWbaB0I?LYXhG2P_qQ=;bva5YZrf-I-S`whAVVnY_vK*a%GuXVoU;2tY1!I0c>p5uCF0 z2>3y-E*(M`jernYCnSpX4oYqi@@h!K;tQ{;tVv6qO1251jKzW$aT95&=(z58Zfhfa z7{}os=u*k(bK)MWoVf#b=01Y-M8t{vI2I6Y?Zxp)zy|If^-h5K?kTWSHw+HlWF(Gb zw!3|A$4yliZzalr4j^^aEDpF#%C8C%7k35Mf4;QE zC{fwxSi9)b$!i56aHje$)wfDs&AjeKPVZ>je2=?I`s_R`I^}!bRjQ%hbVUtQ%P@>j ZHZpeKqucM%&PV&6;fz;5AvNXR{{t-WY6JiP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d0320bd9026d6d5aa165c9aba99059c1aa30f31 GIT binary patch literal 634 zcmXw1y>1jS5FYQ}E#Z;?LYzQ|BBI$MXN9y;iUsxNjCW7gp70>6LB&Z#=g?L?V8OT6aal$sY1H$inX4M0}h} z{$imq+}ollYSSfRp$o|mvq6_KCW~4y)~zvCD?YCr9x`?^FDh?oT>DLgqzjF0x=qFk zDU~hyx*7WlE40CtrpKxlbSfA0xiB-UG<~J4sJ0K3nw4@&4~nCiker?hc}lDD1J$iP zR&sZ|^NgC(ifxS#im5OZ)0A3J-Iq&Q)3?B|YV3h|?O3>&N6TpW z?#rzo!>ymu)GH`XAnU#V1L**$FaQ7m literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a63f18f9125dcce76573ab62371efc043c8434f GIT binary patch literal 1315 zcmai!y-yTD7{+HmZx8MeqxOlOvR zcZnE+H1p;FAKoOpjldBrdS+AGkGWpkvuT~YocybGM!1f8od;nuVbQ+$B z3m6|XY%gu0;>5WUGs#OC_xVm?x~ooSv`}uvox#bjI+>BNJ0FxzX|}7*UO{L%o7Ml#xDCzM znXzv@`I3FEuxC>pd& zVS4qcxXfH<%?NyyI&UPcU~&Zhj>Z2WU4sspsWp;G|Gkh4V<|QIGM$Dz3Eub~$cZ9J j(z%YLh3}~R13f&`rzE5G`V2vFwmd8uZTB2Ok<9iF8bU=? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c2935cf08775e4d0a1e00d6dfade025c53719af GIT binary patch literal 742 zcmXw1O-~dt7;a}~XJ&DMfQOA6HHHhBM79AExDXG7s0UmP#>)`WR9cqF&P<24OLmM$ z{SB-?!T3|WNVu3@ICwJgu*r%CPPQ{klfHeQr+vTseSUrpm?i&pl0Oarzbv?0jhQli zZj=i^0fi~ZU<{$voz%(P*v-7ytFW6kGC%gSAPyjKzzaaVPk=TU{N~nv;;{6i;I{=4 z)C&jfY{;Z~U8scTGIF%HmmDkY?I%(h6znI836ko2J+AEAL@;_>d#dHkEtqZ@d;u7U zAqBDX4ltK_tnt9Gb~B&C9dkAfPn{X#TBh`(hF(5kC&Qe+;xsua-w;7EseLvoNKQX= zW;qsksBU1v=#!L;ZY&_Lv+fUZ9s;v2<;h^FfmL(Jnb2u$-cE zmY<_Ed5?-xo$`FMyS{;>>DgLg9*{nh$b?A>hKi~vghf@TP0v({YqndIqG=PeA~ah@ zMtlZ8TkWwoe*2|)*;={sRwjZu+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..843044ed7d2530478118e1a47a9a1792992937a5 GIT binary patch literal 638 zcmXw1y>AmS6o0<293^e3R1txgDwZ1>3%XVrs!A}Rf&whJSV#RxPr0+Nwi6{g{0$9% z0^(0$LM-T{PE2f-LK!+?pIb|Q@Ap3aKKy-ia|7(r{~nj`2*7VA+@1IqtVb4H00&Mg zs7X$U!$B3)VIFoktfD&3V*&xZ03Lk;9wYe{`uIFqCRy)~6Ef0njq!Yj+PrQ|DTTJ0 z=vAqW<@ZmdamG?1KlP!W-sXYzQ!8HpLQXj3!F#|EBa9zet-F|Ta%lN7$ijAaj2~x$ zkI|?S=lG^jMXlQe7fm7fN!Dvq#zavgW9f1 zzuf!L-}@QuT?Ij$s_i>R*Yv>WAKHxF5}5Q`P;SI+VwR09*LS?*1%?ZQLc3M@adZ!F wxujj@2NvC=hkk$~wQEKDjX*!K1uQhmUYqp0YXfw2mk;8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_refund_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e77df7c6fb0edff06334a2e219e9633bd813bcde GIT binary patch literal 702 zcmXw1O=}b}7*6JEXY1C|3Q89d>7@+V1{K;%+e0bnp)6AEWl9Ng^ST{&CNs@s%dU9T z-_Z3Zh(E#~;KijE$;E>wZwu=O^kg!#4ZKg@_etK*rCi&GP5U zY|ki{h$D_ul;Id>PV8W7JE@y_v6uO=p9OJ%k%OKg?!HIdgW$7U`^Sxu9|gax5jomB zNV-aUhe@d-S2qq51(K!uRwq|Sa6U*RaNT@0DuCOI-8w{#^LS{sW$a4?D8?Mc&M^WP zJn&ZyYXt(1cg)^2Ja^`dYnhQ3`FiCD-V6jkE;v*0f=QN@I)Gup1b^F}mvgede)`Vl zKPi=b^w7Ym4l_{9_^?jY&>^LQWk9K3pft<*Ahmjn((?gJ>k}E6jM6ipT@yerQObnK z6;nwrN=iSWnK?t(1v$$zAU!c82T=A^UXbUxf^=g)&-;n!k$u+fgW%)>#05!{*Q6M! zvs^sgeEfuzW_%lkxxji*5|bt=fD~0zgvzQ>I;c9OHM?1iWYZRAp<$$q417S}TldD^ z_~pmuq_uYCtxX-r52pcIYJY2QO>S>rdD|5wS8jYeQK$noDolmaK1|)|a?MZ}DiEb@ zRN7xu&%&mwlP_DX3U$Y5*Wpe*!aaG{nAk{p-@w$x82<|pe((eBPSEb}AjIK#^$#*z G<^3O0skrw5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_review_approve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_review_approve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04ad20fcd3d5e7e509c905b636edc0621b6aa4e1 GIT binary patch literal 636 zcmXw1J8u**5FYRAmT*ZxAWk5vh~|o%71BnL5+Ol>0!l=)jkRP)m(}gsKHGQP_T)F@ z_z8%gLWOA1N~x&mA|0Vfg}qKJdFGp^=i%?`>uX?-{`agrAppOfaChQcu-doa0tzTd z1vSYCaX6@gI?TcjhgDR^Sxg{+*HA>Cp@@-u3w?Z+G|8~{#|cByZXDxuhT6Q7rW9OT zP4u?Z#`60|!Z>58usHRhp5Eqx)e9?M076Cz$bt`mAx0QKwOV&EDafAXO)w1GN5?oX z@za5nO3d+nuJT&92`*&Li=$z$O&Q~Pjf}NxjMbu;RSx$Vo6hpeTa@cxMV7RoHmcoZ zEazO9yepisuduQ4y%$Mi5ioggph9QmA9rNM1!9r7`1YM&`3QrVSDnd*9Axo?7b^+-0V=PGj~wO2o}naH1RBhflx}FC<{mAC+R=|YcfpP)+}5aY2=Syki1n=zAvKEWQ(@3a!^t@{nu zP-`pgI|Ao{=$`@%>d*sq?HRzj2P=YM!_!ton->I|eWDMDrC6UE1D@*>b3n3hElFCr zs?Eo@@Uf3y$Y`Is#0}}o=|9OD!7jtzD?eg9*H9f^z>()iO|*;mVuHDaPZBrsxEc7N z&-f^1E@5)q-D8++3P(0VksD%!_z*&2>>UNt9zp2v$PLs8ky+zo2)R)dGdDd-F-ND2 z5JL{>B7_g%T$tc0a`xj8JI(0CS;zE%#fh^KGaM|g#_@sh?5w(t0}-TijH6>G@OPc0 z#rET9sdo3CLw$x96EVSUV(N(X{RBHnx_<|e^h8h~jsz)IOIpMhPE(NvMMB9q2zWARx%86Wmvzq56mDHNZW_mMGtga@JmyKJjm53TqRW+eH2%j(hOIWn2Y)b0b&wiYnrVWLC_B;-zh#BA}kP9MB^e}LE6Yg6bT9xkb&l!)sY)HC*SQ}cGt%4$#01H z35cIUg=o-8si^28nNXx+_BL5*XTEvvJofwM<_6F)|DF`@8NhER+@1IqtVaYcAcvfl zP_dLThl4Vx!Zd7gSVmQx#tZ^@33>Dx@)+5-(8s6AG8uIKIAOq=tuda>(AYP%EtE8* ziC!1R62E_}tTPrG^AjKH>1`fZKO^}95K@*y8hii@F~ayUY2C#nX9vWW!60mQ#yBtV z(-^HTaE@;?omHkua8YM6KOS_Nt`IV-P>5zjh)U(N(&3&EXS1yI7VQS0BO*;`tZuf2 z$fQ&@YbzJxE3C-|H=3WS3i(7X_z{|^RW*O5ES7tRN=*wn;fLAD6lKomDCfK^KJt2L zPnFysK7YYYVR5e}hirm|(=$blyl%_oLbpv2^IZt9AJ$9VaiuxZrE4A$Ifq}p{wi9% z`*QC`Z}(@kdldw6S8v}rx~BU+|By1aOAyL$LAwz*iCxxIuJ8Dv7X&UWO5;}L$I(8# w<&w6U9}v3f9{2%{^bU#ijleu5auqVht`lJUm(ah2!QUie-PPzCh_%uG0c8lPBme*a literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_attempt_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_attempt_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48a288bab9c87e623f80d911de599f813324be54 GIT binary patch literal 1283 zcmah|y-yTD6rb6h-P;2WM7||PL1VlEHi{*fs3c-y&`#({!rkpUS0*<=`{6(_maYNkx#v91!w2;G$~C{?$Y%V~{alme-pp^Ou7Sv7uvY z*-eCw_h5g37^-0()r{wenLeHZj1k{hgtZI^v$}}cLu`$8ani#}UBv1l7R0f8)*?XxF#k;u3t8IG8(CqoAH;R~iftwtlQ!E+ zz1Wvl7({`P16*aGaDu_1K`y*ZC~t35uxz#JNQctcix{P{kJ2dd8==w%DBWpzp|)h| zZRHT9UK}UF%Nq_pCKp*ol*xqfAJ8$V=ugAlN+Rag<2`qo@okZ$?n)w9ICnouwjr~7 z-`m)RlHFYv@48{|%1xVMD~T88Z{2ozAlO_A4qlyc7vcvgbJM&hF4Z^jbhBs(-J;qw zpEffGa_2%RJOuF$eXUG>nObaBmfB>gV-U;f^r6u!hrBg%txc|V34@zF_C{8gBR z3H{vjG}Dt!6Fu6Q8dhnGW(w@ld>hsq%JzWOT+P3}gAJaV33<_HFY?D()bzfa&43?< qpWg)0F)_x!Y=jrSp^5M4&WSyZox_(W2$qw@3)ne&^b5g~SNj(-vqHoG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd203dbbadb4991332df807dd8fe2fae0c69eca9 GIT binary patch literal 789 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 DD`44B literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4a16db15fba0abb19170fa244032d39daf7b2d7 GIT binary patch literal 700 zcmXw0J#W-N5S{hcIU$!2MJNOzilpI++zKL5MJXaAKtcf#(YRTe^XOuoy>`5Nr*jX# zAxB4x_$gFT8e}OI72QckC{i)IzO3Y#H*Y*U`(}Q2yQ@G){d<!~~{+#P=j7Dogw zAc2Hskh6#}gPqLD-N?1r&Ai-?dBa{iBpq%h5{lv>!pB3_;|Li$esmA@1eu#&tIQ2?PSf1XyXJ&GyT>>QH-YLIUb3nJ@5b>&Z-AZtY!pdvnL}!+8MRhcj<>`gP@UZTHIC zwQP0&uG9=;yY1Vj9(IMIXm?nd1vP=LOOjzVH=AuBa7yD=X3=&`?Nc_)rS|4cLbu^z mJJ_S@0fme{^_a}uWsKbfzz(iq`x<(GgOG*a)^C8Et^N-X$h;8% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_setup_intent_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6932f9537472ef520b7dbc8d9e0ed7b69e43067 GIT binary patch literal 28840 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab65ba12dc53c946762b635a7e7806e4a03b940e GIT binary patch literal 2623 zcmb_ey>Ht_6hDd-MSaIMYR74#22PNcEi5)k(V<9+ICh;PiIpO07oi0~ix-=)NGeCl zk(MrLfsWmxY#ln(=u&jb|IkH*mf)5QowB)*(jimdJBo%R*hq&G(2wta_wM+XH!)b(Ex#I+(F7wPCC#1}3@_fw?QP*MA z=Gm{hEo!4;BX%K1Wjq-E0m2hPNnNr@J@qxAvMntGM-@AD72a7w(;&-ZS*9vYKMHHLb4cSuW)&?X)b<=I2k^ za?|Nhd(HLRUdRg%a9~>TNONgu*;Z&B$UI9sjb=N5kMpeKC1Sqq1ufce9ypMvLTGi& zZMtjiJ3iwYjvBsAxe`MDYI>GyrZCAgdCoLl-)=W4$OY4U*tVKztZA|g1c#SR)ABq& zv_zSJjvR!H;bCByb*2IwkRc#>{m9t$U25!j9bZQv@0QI)o0tIV_1_pe@X;Gska$uOjI6EeTK${JbA2Xh; zwz>>YtpE*#;1_@&$n&L@{`swFsWwn*hpALrJ5w0Uv@8Tm*oG6;Jn< zZ$-u11LbxSw$k!66>ov7j}O@gF!P3x9rd5C0tTX4eUMF9ez;dOxN zxI^!j#$6X9o^*c|`?xJn^>NYlMd_Ad8?GiTuhC|VdW|l>d{Qw_^vm_J^7uaEr;^pC zAK!2_U7Jl99w@6A0x~oECST@ z%*hT5Uq!*r9A#|X_531PzAX%}8=SK|xqGlm5y!7um*;82z% z>6J>PD=)~|7vx$*u8q`llGgifMBp{rlr%~EwL2p48Z83+?i?eRKt~@Dc#T#-=h^Zr I)EEB$3!e*XwEzGB literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..baaf7134e430c6810d91f0c96a99750cb682edf1 GIT binary patch literal 1340 zcmai!zi-qq6vv&!Npt0{P+EFDO8L=Nf*aZh%2*g^B|t(2QIOCLSn0*RM$Ip5U)4iw zz}}5xV@3QaEJRt5CB(qQR;h)7iRa{U2!S9{o}WMO>G|3D#_wyjQ3MbFe%e1{BlJa0 z%EufyhmXK{g*@bG0SdL2rYT;3*?zpduJ3iS|d5N zfR0dWNbR28tbA1|O-+v7r%$?+i@S;ND3 z-DQkM?VhaB$b*_>lWxU~N{j9#ZsbWb@Izn7F)mytRNUPXl&v=_(k3KwLrRDoB_xc! zZlL@sAy2w)P(+ye?hD-*l3m*p8#+rOQ_w?hCq@K!V$$+=2Rj zLY*W(9f$D2sSyUpKms^7QiPV09s|Lm+$e`X2lEnrtk(NDtmpBj>SM@XY1sMG^+ z0zucC7CWK39arY0GV0s2DP<;=sVkFjNJ*T{l;$Eh{1zBEaC>5ZHMOTRJYAm1=&AjU zw9?3Mqa>Bd|Kt>lsQOB!^+E+pgcVl;iHkddslQxWqNjeOLWbkTgwQ=fBd#uvVhx^diA0HtYj;^23>^HZ+ JAsF&*e*#|*PYeJ6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_shipping_rate_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7a6a291f90349121a3a5ad8d57b7910265b3281 GIT binary patch literal 1586 zcma)6Pj4GV6rbH4uh)*auEi8e|(v<_~iRdH?!-IM5@%4_BU^S^Jm}tz4!LddcBI^ z$^LBwdk#W>smc5)6~?p&#xq0_H9`~_EyGZ@8JdyRvLf8VdTxcK$ZpwDxmAvwmSZ3j zJwO!yglLHwzgziTt%_!CV9U%oVXK;TfUTTj7Y0>#;cs=&HROfI>}i)}VkZ?r5@)U{ z@mA0l59yCrc^NYoM8?Ct|{fv|98Cey z>+ih7Bx2q{-1oLvb|jM2`zjGEym2o{jzA^vp5H!VG4*;Z?s;Lb@1+BAn8dd>KELT@ zkog-aZ14|Q=E2oL%Dhyo>5;6^nQ#zVISfjZd~qWka8>;pp!iYN0r(lcs4WfgxVAFE zE61i;a*l0Ozc$3f-Crx?+S&xK&DqPVqt*N4#jOe6no}1WqsHy=h0O`xoKu%qhXs-7|+~b&5x^-XCyf3&D*eYUV@^(PW2}JUyu^Dbbn#D z#FZb=O1dBTC7AFl0B;CRT0t!GxKvS|4^G{sFH}j%J_X2Y#2VL@CwTcS@~m!Xx;43! z7v~1y`Oj=FI#)qUTMX16A(vYB$vZhiSYNO>Q~y2PHF-u<#pd;^)z@C0P0MTNPTrwk z@O9X1z?*FX99xEAyt0vT>m^!wiSCZk-I;yGaE3q55Dc>o+i-q!X9$MbqGLFJTz`dN H&AmS6o0<293^c*LPS)Ep<>C?2qyOy`83Fk1gu4^3!Rp9@3*f*> z2^Gl*aX2W0D$K$Thhz+)ueLhqj?O)~8Lal(+aTVp(*qc(4AQ%Irh zOZ2AD#`60o(l}+Ike_*1PuFo^_1wxAfRGUmS@0e(#0cXj_SIcXI61Vu35H?2b2=^R zx)76bZg7l76}Z56xymcuCb+C~!B2+0Hf2oY6*AUtFjh%EFCFePc0SKbuTgFcDzc;v zwNdRhW4RF0W zKEbd4;4->A{e167fA?p!dmRLEs*W@ICF8)4F~M7epliD}&UeB%$jz;J0$ zXty^%l`ip?3))3~V9{-Q=;wH(9$C@;DbP{nmufB?IB^TI0jVe6%&tQcsZvMU-@NymKX2b}-urESeh$GX z{;5Y-9fbZ+&TQC~G5H#dXDCFW5u?Ot8;RLA4dt7$mEbl`?6#edHZhQi?xWE99)*~Z zU##+cyQWziSaO1OG+P7KIl;Ppw>kHxI@mNN-iSIv;s;S7nwG3Rhy>$7EYGzv@sK_3 zMx2Gx{i>g{P;Km#;YzGxqX`H98Dgkygs5#kLd;_LGH}cejoUE0iXp6~xQaJtd}vh+ zK4$ESAv1(3lB}Bw>Fp|q2HN|!UTN`oZSBc-D*4BS;2*vN@I*QZ69I$^o?Fsoy-wUMR5UkA zXXd$XTI8$~?M5J=CxRZ`Vf(>hl<`*6l@6t8kT6Q+9HmJXc4K9Gls@eSak;_?WGV4Z zmc?>`(jZMU5r`;D3raawYZm+pR|WJOO#so$Z~Xl%Vg6p)^EX&=AhO*5JQFOwemBbw zKqdcf&^cgf=pVB5(2t`XKktkEEd6->qZ@t!FMmCU4Z$8Oe7HKwnV)MleOgpHQw|c- zu2!0si|cuxyAWMN4UA$J;0N@=yEMQf@5&foIWkS#IU;C&d4LDoKe;1sb&OYM>{4Uc zxHnqd7~_o@wNM|{Z;sx$HO9AQ)KX)xH+=7lQKL0l+#2I8&GWZsfln2tQb&!+`v7MP zQx)Z|d0dJl)TP+BnwWdAUEX+&O1anNoTZ)qR<0jJp6^ry%}S=#tnmwQ8-Gi|MFr|P zxoR1%V)JDMbp<+y6=kXT8X8~}s{kP5#dlvg-jCbE#m(XT=E%AKmt|fe6J*-th=8o+ zadq;P1joI36IRYjQ1#b|-VFa2#11XpU$|*=^&ikmx*zxgID84<70F2}N=2EMD$29T zsk`)rYhV-~0F*Uijl7jHUU`joRyVYu>xt;Ao-f7Jo$zMKP}UPHEmV)_z9=r?>Y2jZwx62;jb4UOH literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a5cc531203366104c45b08cac09bad18b5f4388 GIT binary patch literal 6060 zcmbVQ&2tmU6`zq>(&)?ImTlQ+fn6XXyLNy8f#u5|KuEw&U^kmMwKWWyHcTPSXnRJ+ zN~My+=HtpGwcZ;?s9d)4FXWb7G&Osmx>B`=oKm@vLYu>$@?Ot}#*$2&xXQ0vzkbvG z=Jk8O*FAqN7IPB(+5avZA5|sk@AxD9O9h?RcV$WXOwuJ?u1gJhQH{;pDbqJJlr5 z+%_D_v^vkPTMp_PjOsl5LAyzHRICLXB^na^czr|c8kII>UD`~1DA6P(b1+C#x_k-R zEF$RuNem##2+8ZS)+F2Znt)B~Z^?dMjAwr4) zG7=%90WuaL;{h@eBGH>o4j@wl$aI7#dI@I=W}890JzJgQ6ZfnZtI<_PHHZF4V_L)J zX{}+kOouDA7Gu<`wXtVAR)aF0raMi|)T@M#*DRf?+msnwMoq&F=ESs2$`wXy)PMo( z>9D1^<6Cv>37;EW><&x@EAvbv=qL^9XaH$^)MCa%!_?}kEo|g7gO6`KF=3sQC7SZ! z_}#!1HV!Y$hbs6MvI$f;G&qBgY%m?xDcHgg)e^s^YzHiFP}5O$YS)<2bS$vNu^v-! zg#$qh0S_){+1i6Tbub6inXQ)^IFnd+hGj(jHOXvj=YdwgOt8$E!pv^cEi8Cs;Z-7$QeLH{(em!w?nuQW zmHm<8>@L~8_j%SW9QDZ2P%mG4sf>2UR$XQ7U&%y1{aQ+-(y!9~v?Ft!x$nBgvmQAc z>cdL!?Ap&(cXvKtbVsTlslJ>({A|*lKIV~Qp;BR{GxHrcf661LLTI$yDW7vk&U@ti z8=%Qbr*heyxZ;s3q1OEIXEnEc(jzBBq%iZ;cJuQdnGcbC>1oZ)l|51p5zu+kdF#A8 z^F23z;Y)IXeLHmI9s&$Xjr5wq@Mlt-0Cia;Hqj%x(~|+xqcuTll<2956wlZ!QnaBNb)E+5fMj7~ zXkEdNRn;Gwgj|W}Nd;zkWa;bG40{JHIELal3QREeEfjE62vX@J_QXcKi#>dGA#Os) zZh(N;9-HqhEW2YX9$5+ZvN+qBt-6JH2n>z)6P=^i-SQ20eaCO>(A(An79svA&6GFH&39^@fYJd?IW3&lzC;}2pf(*%wKy5ku}w}5*A zVRRcfTIXpb@D?0P*k!PjT}5#iEzW@+Q-S(SXZ?jTG+Iue@|!~jUtW0NK6LEggMg69 zP4{PicIqh*+N?)r!!ST5yY3cmc;rS1VOXuYg*A_?MbK1d>Z)6~=8wPD4{lswxEFU|WUm*8FlBh3h{|cC)AMVn)AMVH^a^Z< z2sUkJstUUe%X3mQoHozY@RZHkJcZh)0g>^OU~@Xv6R=!0Ow-1%4<8i7edS zPF4vkgDOxCMjXS;@{9Z|Qn{(Cnga*Z2Q7!%QEeaYC~-I*Mn*WlSme*pu`z1EQI+cR z6P?pPbWh%PD|b9{C&o*tKm4We*}<0*l@LjD9)@|2QK!XBwZ-b|45Oa)v^@D$t(;Es6g zjhgo!8Odstq^UEGt4g(Mm?91** zbP)3+5T_XKssBa-u?xKLS?sqUfY|RhrGF-NzE0`leBD;6S@to$TXYKM`SALPcjz?S zr{LVd6}SMJ4)6q?W^}{$$>Kgd375XdEuM6=9dTM&XE$)VzDN>Fp!gg7+dl;X?(5yf zUP9^zm#~*mhJt*KDfB!W>V=4Z$XIbpt8Q-XOS0zs8kZXG>-#Vgk4jyp$>^R!f?|}^ zLt^bAp=WzYNUS}iN31F=!{0qnR0ai&-N8pPHH|TYGPVxC*akwQ4uhL7gs*D08V@KN z61yT|MU4|2+~<6>g`xN-{M#Rb0OuFq_sIL969<`h=(R9j*x=?|IU$p78SeSP zdty|^dLPQd5*2a-_%_;$-iNhtFM3G07d@o67Y3NbevINSihC&V^uo{;>?a`B*+hXc8#tCP51aLJo~e* x1WorGC_W4I<9!A2TU`m7ZmA$&m!FG?uFKuZ6s!g#&~z7JiZ3pFjWdY|{twBrP*MN@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_detach_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_detach_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14ba607bcd5e70569df3d69a1e8139728b1db71e GIT binary patch literal 591 zcmXw1yKWRQ6uq8THeo|}NI)nfD5glP07?~6L@PmoR)|0|jWvv~c1Js7J7aIO(}!=! z@(GAfp+Yoh8VV}9NJ}VEVUH6_zCOqHeVl85+uYm$JM_QDLi+mV|QUxU?w1?Rwl zlL~5*5#n%A1$CH(b(BQ}0(b>HJOdtK^fmN;S=`2H^2d>sbkUnqn>6Tdjiq^qC-bsF z-mSlH74lJ8n8N#bdmR8)Pb@zNgp6>=f)9WpMi_6~T{kh|xdM9HGgJ z>D#=?YuzQdP`TjabgdgOCh{5?>oypxC7)Lg4;ed|=aoNcA{(o5xw}xCrrTmH7eboc zlu~HMzQD?!!Ih#@StFf@1s$QD8L8-NX|UQol5$px2|db-846BMQJm7M{76-6rcylL z+kZxNX>eEB3;6^!wP{L)RQ2Ujrh5sD_Zpbr-BWF|<_dGhP5r={Pw;d2a2YL+Kd*lu z?)->$E`lH)G+Q?p$7#|frd75aujsBP3>OB4c7nWI_r^Z{ZHM{*cPzRZ9QrQ3Z0=iX ezXoX6^NWxWa+v^m^b216O(HT_ZeN03de{F$7MOeh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_list_source_transactions_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_list_source_transactions_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5c55dda68fea36b49209e6dec85481d0b0c2668 GIT binary patch literal 819 zcmYjPzi$&U6t?eIu5Ho+DN3QJLTQ&9niF)bI#ft7Q~^;~Zn4~)o1SuKUu~yKRs=g+ z!^Q~Wf8ZZrin5@SIx(?D3T5boeNHMY`T2X_^Lu{p`TeNXmVsL0@5AJ~1Hdn>ES5V5 zvjYV#K@4J;f(%9wYHX!eW=D33?bONK$c4ZH&q3_G2eC`wH{19}-p~swzqJy;V)ZpS z?-L+*jw4 zW<0~qdFz(1%o+QZS@=4d8M=X2G>=)IcZg2Npf?;-fjecYuQ11%C~Abp3GJd2a>_U< zJTk~JjSDwTvP2fELSinp9iK|V+ks#B2vM97goXkNB~*R|GX=rTyYP%732WO?|4Ns{g!GS*WshljY+Q%Qyw zgkFScauVi4dB*5o>&eqlB$Djr>H_W(5vm81oP>E5$L9w{-kA%xc+fO}V;fbrQ?g%Z^){?$pV&l_y1EVr5}O0`vk> z#Z0G{rqio#QBLtOZZEm^Z^(rhh~=G5+W%_Q_k?)#c$u={`R*Y z@J*qRmEh<6w`h+1M3Vl65793bX5L(oCFyg?kPNvd)#XiD#(bids3$j*b+SpsbF!AI zE1OC^y_v47o2o1&q_Be7@*@ZbVQ&NfS!t>qXL}-bSj3933M9JnHW0WES6^f zjSDTweCXHo`7U+bM-A7sEvJ;=WZkT~oIEfcx0K}R2c}DzUgNon?P6V%QG;hbYBs2W z6|151MG|^Xdh=&^{9K~arff)?iH{|kq+|v#nlj`MAk846&@^Hpo``TG86u>Eq(VgL zAfhGorgo4_SSO1}Ggr#n9pn4^Ig3bl&~}`l_yPD&#ZMtR$=)ABQGzr0SJ9oKG@KeSz1yRvHAJErxlysB4ssAZJ*sI^zF znNQ1&rn_xh*A|zqmK`9$l?GJMpHZg_y_yYLZU~o_wQ%MzNAR;2po@(r!xJlv3K_=* z^H=Fre(Esk<>!1d_d1bCsjn5OFnvf4AAgbY@@IW=HbRGHS~EZM3h(;l-3S^kwu;xi zp&LHA5kdK>*3>&*ZpkN05j4KgTDawnE&F6yKx{Ue#$c*4C_YM6Ll#sbMlU6a(V-*_ zC`pV|L_n$-3bqT|renAo!!v@O*;0-bpfW$#&x(+LE7dA(xVlxPJgax|pAN^#2s_Vm z*o|7hNb(J2g!}%K+;7s<^LDkC^eNv2eJu`8z=Bd*@ znT`_&t~^5NOXkeDg2%5U{1Kt1Gfb`8oct4pycSv`_;dr^CbRBBblr2*d9GoDFx9lGZGeAKqiE&jVE-O_ z#&8rd)Mt=!YG4LZa%kpo+$+rcWIl3lk24|U=|{%q4cWIrcAPj^c`utmKKHfGP4ZIyxC(Ip3WsFe+ zz3-ti&PPn@OUO7s1p}@Imb$IE+uqb2FSp{8mB>*T7Or?horodu6m~J#Q$I#ld^3sr zEcPsj8hd^lP1CV(FlC5vu&I_Z?3cJU4BFUfFg#~arwZXTMpImY;2G{mu0o7&xxi<< zb`8@BNL|7DNoQx5CtZD?-GIjmy9u^8uo6R{`8)ib-+}@6bp!8LK+!OIdIfSB@-9}P z>)EJYganu2syDgjW!JwY>w&LvsKLJe1C+#BX~;C$iIqqwtjXX40b%VTk!QO|BmiBc zD*z8+7=HOgtPF*h-Nq*As?L~68M^~dYz3iVm%(ce&{wl|>re4jtWPGUv9i!&p%p#c z#knvv|AfEuF&LEL_kHqyDNXRH;9X}?W5H(;%?`ecuq0IA3PiF%4MyN0c*7nI5RLA;)N=3(O7N;9 z=z;IO!CP zS^i#;YVg|-Aq`}(A;zR0vCNZMEDWc903TY{v$Ol0-znYIK; zdngZir~^rRVFcQmZ3&Y01?b?#@4|jm$lq^EkhCZB@`n7CXs{u-7bc)rD1oHC2ra(8 K`8|#-==ndGK4sGY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dacdc524c6eb2712cc64074d1a60d18b3c8369f4 GIT binary patch literal 689 zcmXw1y>1gh5T3n1UqVcX0!l!LB580DuRAD@Yl?BgkFnd2Bgq%tj4-R>7Ta?KR>CF(lDNtN>KxYMd*#&}vHWA!RyrN~Bw z#cPaRjMAdG(Hu_NtJIO6R%QSSNhuyes literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdb0e93e45294f2250dd77be2bafbd8fd0d2d0ec GIT binary patch literal 761 zcmYLHJ#P~+7`E?x*Q8DON>K}u5Nf+*Xe~a(R54VQV5lNQ%W{k5=G^p@JNs%oRl*Dl z6I;X974cJ;qAbV@0~1@MP=-#}cS*5y_VYgPy&unOf3Me{oe0TH$Obv(u?f;7 zOSHMAG?m)<>4|2t-Kv-hA)IE65VK53CgOhTaE*|&K21xHv_l5QS6Z6egiy|frmn0a zL^|2VPq_XHW)_0$_xMy~40rhe?=#iYBFC?VX6g2x5ItKN@6k@rHi^#}KgVfujPs#B z75v%Glc!iEnr-Ly2ij!{+k#2Xa9$|GL>01${;!*)RyZmBJNZy9*#?Tu0d-)vkKjk+ z(MXLOn-jD-^}L`m4MBZX8611p!UD`1Zz^dENq$qoPj literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_source_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b01bd103144a7b2b8e52687b9a51337293cbde9 GIT binary patch literal 4983 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ada2b7bf7301217eba9637cef07a7e70efede1d5 GIT binary patch literal 1315 zcmah}OK%)S5bk-;I@v6?Li|9nP$aaP7<+(-Tf!k&fF!;7 zqlgpv0Xb#)35W~-f&&*;zC)m2~BbUnL&>UI|hF8SwL z{-a08Z(2B8D7Wk60d6k{Bg`sDX(g7WdAqPnCvjTdDcsUaywXqnGDrf8*yIz!+;0f; z!1~@X$0T8k`iKS)oTHsl7;@-)nikv36lPeHu(OlT! zN?YXuSkt*Ts)23inaYe4LuVezNrLhV0wl2*N$jr(ILul_3|wa4#Jz(Ec;IVnhCAnY zFhksbAf84>eiSq-cL%#N6L}l&$7z*8@p&rJQZ^g^r7>1Tsx#aMmF9(PE@$np2Bd6; z`fyaI6>Bc!)sW{I(25^6K`ppQ73@S|6H;2GB~aQdP+D>}C^UbO(#M0eFdE@ws7;U3 zw5qsjok~iDt5HWP(YU*u7vGT+1jy@Qyw6LB_o}0K8{~oFb^Iw;P;B1j{2;IP;@fF< z02PaePz~cE-;L{$+UM1ct@l5OC3a}DMuT(@WQ=F$HN0I#H7?HM*^OBs%E4 zB_T5M3nb6T%e8l2h9Can*l+nK#Px*Nyt##tMBYg3za9@yBn-dx+vN&1kTXrWm)v#~{m zx$Tsj>n`-YZG1JVF>^Dbi$=gyluiZT1ficL6KJ5hc68eC{vPt{@TR#DABlCev+$D} rNT!ZuS+9Iz-S~wp|4MF6$gNX<$qL6`pAy_ouP<2P578@vTO0LXn{!;_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef494e66751b91aecfb719e5173227cdd9e3a77a GIT binary patch literal 17633 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 qMZ+LFw4>3ce(L^xmbW!Ej>0ym@v2(xVu!KAS literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbea19ce1e9a0e405ecf99b9f236b29553d1b462 GIT binary patch literal 3065 zcmaJ@&2JM&6yNpEuGfy^I0^X<5rhP~l@hlEkdT0)Bq~J$g9trfgjO5xBw1y@m|cgM z_C|Z>R&$GbYSl~sj`ot3FVS2$^we8WOb?v;W_H&&P83U?ee;_)^FHUj`MbYAFTgMO zZ_@hfydeC;Ch1R3h@)SD_(d=UQ?vy~tcoI|Gj_(2s*;1Mh|eWkc9g2(WUE<6t*WAs z5$*{l`bjWlEdC+IXH|0?RRGOmwS(q4ssftpLi;$H2ehvXEpW5|Xnz;l-zaJW|1u$( zNQ+PK%Q_CiM}BB|ZlGl-TD58+MGveX)FhgHV1<|%Htnl;A>*|OHfio@!^b9Lti{U4 zBT6Pm1(A6H3sun+s+sQvEScg2EMjD4ZoxOl5Gg@WieMQl3`=migJ-dVm5of-n$lTQ z&1@I0c5r?Y$jhBT@+o5WC6Wp$f>pD>>$GAA&n27#Cy-KtC?IPvT{VXi{$YkR&S@ib zdab@5)QH9Xd_Tm_3c*H*9~;DQg4Z__H$T5}<;9O@aV}f7ZMmCIw+IflJlhQD(0UB% zVF!DCqx(1($>(RCxoQP9ukMB~XwFQ?fGT*`H(Zmd4h{{|2n`LPVvQMlUrt@d1 z{g|<=f@U<&xpl6kM2m*~%4h^2eaB;m4A!`(bsw}cc$QP-dM+s6K|YHwe#YQ9Ox2fl z!ws#lK?^}w0AG)s@Nf_kaA0Wc>L3LN6)jIyU3U!!>pIQry5pI3o6!YbhePdng=8T? z=zy*puIq)ddb&g)mwldyWxd-< z9T*)wbsuL~^c#egK|ZKJ1Y>a5e-;kLFCC~WAEeBLawKGAY*Z(rViA*0GE!# z{o_s4Tzi*`3bQRVdzgut2PT_y&0ue(x%+N0DrzmHr7L5z2kO9KM(UscAj!G>2Pr!S z2WCM|Nd-AWLf`1yT9lt`p~-YhVeD-X^-Z!#o=dSO^ z0z^=N0fIR&^rq5f0pmH{f@N6gwSbpCIktlpdW;gJQ~EoI#BD{IOy|zBH7!t7fjZ@T zE>+VyMcI9IJa((~nrDLLO0VVYf{{5koM!$4TVTU8_y;#&0P_oDO(`l&x6pJN*^`0q zNsic~?4Z*fWy4CZqq<#`_C*uiWu_ew`k^T^=Wz!jGwpgZ<~J!X%LMfp+l9G^w&d{X%6~8LiW|& zz{fRf!-B^_fz`lHJ%=SL)D4F<7&_cF(M{Ok7etu|KjazFh+E|8)7$LuT9?9cn2h`mBfvO z7bJcyd3d?1$JPI&-in*)9r7(~gZ?7~ta=?vq9}e;1aaxTaQ?k;I}&cUm3yM7?%in% r?Av~tL8AKS{k8y~cCjF;zujyL@M+JC0}VKQ+Ba0-dG=9&4-fYL=Z6yu literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..018e9fceb605ac65d8f5d3ddf1373036232fb486 GIT binary patch literal 806 zcmYjPzi$&U6t?eIj+UkbwVQZ@OU}6gjW$1)`mliDD^Y=c#_wM=g`?|8Sgv^qE9wgL5=!bQ#m%jk> zM+Tgt7{xe68SY|iv6DKP+jTRq>tW=erzmzmpx6Wa#Vzx?{={zvKdsZmy7~%^M1Ry!K)h%{21?<{g!2d z*s1fR(b99I8XH|A(Sz$%3l#8%qt=7CQN-sa|6-U`{;;g5DnN#bO3Uwcpe>c z1?kp4=fi{zqJ7#Q0*j+DuyK?oy(pikBhGeP+dGjoZ?Kh{0CQOxNo7QVC@+MFi2P3` zVgfS~7ebLTpp{QV#dJ^@3*-}HKB9}-#-}&a+UB{pIddF8oCT=fxCmFj-FZ9>+rM0= z9?X&B2eY6&Tz`1xPS+aeUZV&X>(@0q=B@6RJ++7^=ZElefP@_mT~m|XT#>+u0w(QX z75Wqcmc6anVnxM!23>`FrQ~g4rvjT#S}=1l#+L!YyWi2y@1Tmqv-Tx2Tao$~cvRtP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..967053278ce7e3a8ec1b5904e4aa559b8f9916f0 GIT binary patch literal 841 zcmYjPy>AmS6u0kumus68p(F%SRH3#@hUNras}2a!z~7ebsiVWQU!t zVe5+cQ<$PG=%h|eY>`44I`MqYRkh^z@q2#HKR>^pmC8DTCH^&oriIXNvz zu@!FI;iVN~-XTRUSs?`KSjtv>v*yXDC;B|ddA^Y>QZ(Ot+>1n3VX+^?r?kfg31^wj z#;F(knH2_6AhS&&JuX$;8%V~pvba~N({eJ0(%6d_rP(^AQR0t6WtS;EA9~N;%0xK`g(cC79@T;+`cDb5G;3`;v*FOj7rCB3Zb9oFqfw;U0Va zAy9TNSbX7zLC;Mm@+^rD+RtCOB9Lr9g#+Fx6E0jBq|8n8ce?aGa|#C|8bTMS4!6?@ zFTwq}aKI3sKzu>Js@qdBtM1Op?!quEXJMnt<0+Y*d|R89cjjcLK+BDCRLo@k;6imPeKY&l8c;ks21wL{rhvRJ68 z%e$+&S5?uxaviK&=TQI05m)1aVT-3A7AD5{#zy$y8a1v_>#tqI&eiq}0+na~2jpqt A;Q#;t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0524b2dfe30cac9bc847be448c692e422e8741c9 GIT binary patch literal 3087 zcmaJ@%}*Og6yNpEuGb&f20{QsP(mQ-sts;KLlh}VBZ5RDB~BFRA&#Qe;vHbcer0D( zFzqevJ-5@39D3@F2q%Y}`exSa7=y6nH*bIQ=FPm1d2jw17|06n zBOlAw$0=iNf>-}5y%UwIyf{;BQ$8v zTVK}+CIk{lL$qYrw)aZ6+`8xZHV!czGV!|6u)|(#7zcqD=+=5KIO1d11PlA%l5aE} z?1uUp-ZZu?FQCY`4VTJ(VAV05JZhngn*=_L!2vdVq}( z>pq;y;8%en*K^_UUF7rjh0hqM!&H6QFx=1zo4X^u9^=mE&dP+wjt+V;scKoO>bh$< zSl4M**B#Gn*o@EXI;gSZnIH|hLyNj@xULt*2h#O`l^H65N{ZGz&khv+ZMor}!V$2- zrynbuo`WkJ?oMS1ldaJ6E8lw|wy!OE-WGVavS`$|z{!~2?VYpvop!%fefpZn%| zg}_z6=7WH-fk_2+v3y+dd6HIi(v!kE2s-TKki>c{Fy}V|RvtM~fgvMM1AY+>#x5VI z_uosYapg!z$;zRUlGQ^+C`}xw_W&*(hX=;?(B8^#nJ7QqLeqz-Sh!f;FE2!en=N!R zfrc*Ztww{rLZj0MYVj~74a~lmzM$l&DuRGq1V+O3z*F57A(R{zXiM~%CQ}+{A1KXx(%U= zNZeMW$#mu{Ta(g76{ujo=TbGPV3b`@$79!6uX`p~uJl{Z?pH9w$Z6)!u?a?=!JjMu z0rT^tds392Y@x{{vL|ERmk+T=nWEDjWy4Irqk3JGbW0Q5WhQ+Rx}+&H=Wz!jQ|WXb zx!V#cU-M5}FAT7IHF! zcj|V7SlgIppzwFtT*D2j+xhfBe+@Io1AXE_)Oq|spu71W+<;}!QYF)9 zQrYp`aFe1}7;jP3#700>sQftChSymk;UM3^rByB6?>+7=p6lFu{O0#Lj_t;`d<_hl z1;QLRvVZ>DsBoi&ZX~v!n&fP8RV&cZxNpqqLHw}Pz4&DrNFYF!u<1kg1PDIjZZ;Sr zI^GGf%bpN~cQxJs1J+35w!#Y%zm`0_{HVu||4F?a_tLw;GAx7cBM?@-4kb|(KPZAY z|4z8@PPh{ZciPIbD5`Jowgon}S5rt-|9;RGU}zWeqWZ_Jwg5wWY7BV5VQ4R?AoJ{l I00R&9|34BPoB#j- literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ada077f26c8f6796c405e16624c316438acdd216 GIT binary patch literal 659 zcmYjPy=xRf6o0c{cg9PiARdZX1e+_8LDPm5K~O=WB-m_`VRQSqEVnzenVCE83OoH9 z5<6S*Pq7jkSx9AN7dT^)$~QX~aA4m1y?Nj7&9~Ln6`*7OJ}izHz%M7=dR-Vx{Pw=GPFZNohu+oGWgJ*MA^8jtQkFv+yaNm|!uSEbx{FE9c8Je|LD)P# zoE)2>F4`=wELI0-b%9fSo9V1FO@gyJlllIj({zQ9S%pG0D?(H%pOg;wggBjKrPpXT z3LOz?LSuEaE<`4!vRT`M5MN+HI=Ft%PgI3`Bxn3Nnz2H?9 z=TnqZUKYo^p4$^8x3``?w9nGN3?Mn1aVid-x#|7`##kcMQk@ClwXZ@b8iwmuc>n1 z{9P{yoLQ8{?axo9O}yrUwvq1;y6*1yS?=n4B+}mk^N7f0$QZjyfNftu{{jYol8ALb KA6)^l*83kVt+Orw literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_item_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af82d3ebd14b24ead7c5136587cd0549b57aefa5 GIT binary patch literal 3024 zcmaJ@OK;mo5GKVXMM|e0TLyR9iUYZ5VW|q3G)?_ zaxAx}roHFXy0;u#^wM9@KhTQ_U5vf-&{J;??6yEoon2}bS~e^|!{N8HGdqu+;U9f{ zIRSp*zh&$9DM9#)zVM&iVfKFj=10L4Owkq`u`W89dPb!08C!Bt9XWDcc9gmz3K`+9 zU`pQ!Cc?_EQnJ6EWvC3Ol0sF6W&u@GsK!tY&|C`5F*FZoA%*5!eU;+h)JP>m(1O*7 z2)b{DQAHxz`&NVl!zTHf7d^($n^u5LqAj(2Y*N8SaL7?CSjGy)I=IYnlcBIT%MqOI$f#XJHMP{ni^GA>ZN6fyC zwjxKcYWAnJmAW{y0Vf$af(&xR9O`I0MUmEUWrR#FHkZRjVEK{dx%VRMJn>ByWPle2$$Kj+dWgdioU0&GGHly>p<8al zb9@^|m<*bD#c0}58XLkv;03z1k_Lx;?3&l+?bGSCPxq(t}OR0d5`NRaEfaQH6r&V2D5 zM)OG2=S{8Jjxj#bK?IBdV^uhJ$sTxS!kQF0(%4-iEqP)X3T=h*>mEJU*0=oeuhSmEv0)iuw-)m3-1x`4y=$n&e8 zdl9zhZhPK3M7Da{Xskn!s~gzesM^+Y)o(>>o_p!SCl{+BT=h901dLT2R>6wp*Z=}q)vM*$0Wlzb->YgH$ zCU(_Z0GAHKePi2bd+{eNE=;%4^j;`LIM3sBeDfTG z<-^Sr8ji@CNd_u+?xb=*+9I@O2A9C^q zFkt}*q_ThTWi90al{wyn+pyB>0c(nK;s zha{p@(eZ(@VWl@v=@9X0X+pS6J||&HnsRD7DV@n9cc&tslQQNrmd(kQR>=h;V3Mef zW)NVv(IQ!hl-Y!Vf8nH1cf06gOm{*fAzHv$s7VcPHtc3-ZD687LGJ;6_{`t2qdpK z@bUpq8}RozU%Dl>(Wm@vXli?P=iGyMsumAEY@>%9hiB8MeVll}w{WWXE%(HG*DXyiQOH8v#+F^W$Ix zzRrrAgL;RM)+*WF=&^9IT4&K?H@_!v)EYDSEifUKpn)6S8Mz!6ue8w>?)$MtPB+&o z1)@YPAL=8Js4_OM1`$sQz~EK!C?Vu^_5H!wNhO WrpAB=93BVrD#(2Gj{pyr%l`rG5eKXQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf5fa3a05c019ef40e6137c70767cda32e710667 GIT binary patch literal 2742 zcmchZ&2Q936u`%y>;3TNldzjmpoFF@1y%(LRYj_nq$*WuiU_ULRojtc55bDpHsjeS zi@4F=b8C93ID-18^ulT{(MVMfJ@popr3X%ZGhS~#Q8^JQ&(FVk^X9#oH_!WrZ5I&y zCI3$P562MtTfAg{Mqkn9W=xryv!5 zjy(M*WBc z1T_>7HPmkq(LALJHbnQ-Yw*kiA%>?3*5`W0J)=*|0m=1=H6ZyuDP)A0eNsF?N&}Kh zt@@VsfLnc19+1r2&;c@hfQ$@?;f)GUeQ#p}o_QM=qbTnhx{bJI)%no$L)WXRW64ard4>mkAzlCkWcSl#tNFez+R>F5x3?6a>T- z$BUbU-HW^jZy&za93>7T-a|iRJm;n_56-^AwnZrk*)2l-$onizCylx(#j(T~!gz4* zHRdlehcdbB_&yJb7~z)NN?;oZc!YI|H21oN0ZG(zlvid#PlKOJER-Y%y3X9_U zjfj!p{PieWfuQQw9d`v%tFMx9wI29O^|%eEA6~lf{>6F%cl&${2F@}`>fqmxNj;X8 zSjWk(3dI4GC{9N%#BG{~rKPYyNoL@-|BN=rjz2pw*BP7d>hoKwYFJw)s!VTML(hh< zbgZk-HML@HBh@gs%yh6^eOA5Jv1hybY-V3Qy=h$r%j#asshLgd3gD@|cxZBCx>G*h z)sJWM$4_h|ow4bzKAjP}vY~G*{+jQUPIdKD87&=MPdde^u0EBK;>5b!DNJ_t$&4Jd zIdbx`))_zD)lX+Ob_Md=QuFr2bFG*!JlAX+LbM^rV`+{f$2R6V!za7?NjZg{%Qo)t zzFC3cy?qlprXstBTGOcb>hK&1oh7K)g_=R%5$?Z3g(hZ7 z@hvDx2?QLNJ@V+QU115E!^64*Bm2XWP0mPzlkHsZlbr^i5pB>2Ga{RP+o+lRtyeUL zwC`|rnQ?6y?xGri5-_sx)ZCY~yfgGHgm`G?7sY@OKfwR?4G@sIHMTz2u_|4?lAUDX z$ogU@U+wDEjO54v$0prg;rfm5+RQ6*a`LTHY{6qy(Asz{3CqID}YBoQbHops)ray#ml>QQ;8W?bswPWa| zY4;sTU*LzMC^q1DP^egZ&{RE~#6Gh2w5L=p} zC@)N;T>29o{R_=@&}`5AQc?YK1bivlr9Ec<|(n1n|Jgccu$jjV3gix6eHD^*-;%m!6&?f{*_i_BJp=Kg8tx z%eBEV1F(l&iP z9oRh0U$6zq8o(Ah*kYq-cKs9wO(iWoquX`LlP7WFMIi?UuXsE$wKTutC6qaS+O-xX zVwcCLn--ooV(Kn<)ufs|o!Pb@==cuI_Yg(4;v!q!09{mb)mdN*h+>+fdKs`7z-xkU zU^ADN*XtEtWuEk6)vGZlp-&y=1Uw!4@6x>I`(9XEja-^`SF#BS#7w8Vu@ky$WXQ%ux!diydtdF0bwuj13xczKR+0@br->a0ij zRuZOH7#Z&?0*S_8eZolhuL&fcltxf|91O@Wl@EuPnx*9yUOo>(SKqr^&EiN4k8}h; z9R7Cz#$cthRH;UB76K_6#LM#3Ow0ygtEr}j7gqhc3vFOPHUsZ9p#GReP_58B#PxVJ zs)q^xpF$~4%KS^AxL-bU9RME!0}9Jy2QLmM9yZ4pn&rh7UhEJh_OF>;>0nkzlZ0hm zOrorfndrw&tfe@pNH*PmC0C3cm8zo%$UuZ=K;F`n-v)R vKA0m-QIu01DO2Cj;CD3FL~|#)p%@3H69m7L0WcqC+88Uw=b2LkKbhU%2-QG4 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16b3e88b874f9f9cbd8309a3faaf038c891c997e GIT binary patch literal 17543 zcmcIrYm6JoaVD3uTyh`W_iCSdtX8X|UaQARx`(8bR&VLVlTW%kpUw(zmNV3jm*mhr zq$F;P0Kxf;AP9^L;v{kqCyMh&LIT7;9VY?&CoqBl3CH}iXe96t|8RmJfzDbR@g+#| zRnPQrI6J)CSn@(@&V19|(_K|vT~%H4_kDfc5&T&{n>6g-ibQ@yH}bF3y?FYySS0fM z5iO!c3z1^{hI(+)~7Stk7AE--;KzZgmwCw-V7vN91BeQ@#?>I`!zE zp$GcAl@w?kXqTSw&~AYyfF^xtk3hSD_W00Vf%XFJ^PznLO#$uqp(%k503Gz9{Q?~V zI_yIS1UdqA)Q1iVbPVVgA37w^ai9}EbXcI1K&O1@h(M=-&iK$#fo=u5&4-Q&bUV-; zK6HyfXMyhYq2mIb1G>wHP6%`!=x!f6DbN>yrhVv?K=%OM>qDmnx)11nA37t@13(vi z=vILq1bWDaZWHKXphtY@c7eVK^r#QrA<$z$kNePBfxZOvWgogzpsxUZ)rZar^aRk8 zK6IBrPXT?+ht3Q1G|)3Xbhkhkfu8lDF9`G;(DObtEzk=eI4jEAG%+l8K7_Y&;tU!4)k+AbfNZU`o_P~a!N;e>P`JiRo$w*QLY$f$x3%{ z<(!eLaOHKws-$DQ>vf}|Gqu2bGG>M98cf%C@@B29Yg92u{m4Iel}4Uw9kk;0$gQXr zxz+JjM33o;7M(yn`mc9t9VhUc1g^zgMDdVL7l}(mk854Nwh4)ANw;RVhxE8euS9gw z5^wC2h?a8e^h*T&5BT~Y^zejRbI3#F8;2#LjktA2J!H&9ws?rFGwvZ1Zki7ug{ZZ|<`a@kYDTL+0F8yCec?%=`M^EphDyw`STy z_PEGiiJF7$k(o`Of6b`zTJ~Ens&K#*EDka<%(Y9gQ})w4F||V+Kblepeyz7?cRO+%lU$- zR`?dRTrLe&T@LG!spt)rdlzJsGqy3-sgR)yvtV9`&eeNl6j9OtEJqs zTDpTJHL_$B3P$NpHdo6P^sI^pCR;t~A4t0wEjlf4E;HR)HVc}?hh%3J4_kfJ-<46S zeA&A%s`qI&hN)%slD2!__T5FJBsm93U4Mj@+J zbv~x)d9_-oWXo!;2o`0XdY|-rGX__!3PVG;qGeXW%uh!B6-WWThg!G!psWVYWtm#h zE#9N)p3tox-q5TaG0quQ&cr}LP|dxxcwE0D(^A#`K+Z|7UZ1wLe`h`Wwnscn)%fu{tnu` z@w!^I^s^q1_&}L}Y?Etgg%5zQ<~^`9XBNu^y`u9WNn#&1tTSe^tdaLu94$i_XqmLa zc#Feo8tq-fWbLVW-Kp86rfe#yxq50-^K{1HQzVy5*eUN~tDN!1=u;|~g!34iYDz8K zBawCa2$^OƤ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 Rn!X?lk*M}lx)$o}{{VANlg9u6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_resume_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_resume_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71ce66ff6a03830e064b4aa2d188381b738920d2 GIT binary patch literal 930 zcmYjP%}*3D6mREiXORyf7+_mRKtEKI7 zjobP-L?H@sj1uf)TbTs8nHGbnKcbn+l(?0G*-8^cvifM1cX7wQOQd}G=8V;Lj=gjA@Yqk z2u!d-yrj`$gB=>{`m7hY1GO8td5v44bpyArarctJDUiI@bk*Wczas+?l>u*q>?iP= z3YthAv&s0rs`pvYqpS;|n(st$9I-A5@*oC6^#vEofrFH?uxYAk8t>Cwl86m>6o8ry z1kemfD!8C!L6pTf12uPzkPh_dAks9`|FKYi+G^I7O9-P05TYgsNqE@TPKlZ%WUo)- z>P9#^5mEG0%@7?C<5}g25MdRlDKnwWh-F{USlj4g;PrR{UY8ws&q3~HJoR4k4C0kG z=es&NuT6tpV4*hvHt^!8uBdweK`5x)Ov7* zE-jzAGbgv74Bd_2rm^IVkzqR{r}}c|{;@fnUp}>#%jcr#bm?zPcX^=-wWY%<=acYi zKt(Zh%E|InXI>R-wlWADWWZ!G#btS`LYGM_7R)7mLu(iAdexc@aZj6AZ+TaXk%=)r ZcMx9tjuw8P)j!T0c8}hlBYl*={{e600{8#` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..679e1ab069f213c42eda4232bbdf239e7b75463b GIT binary patch literal 650 zcmYjPy=xRf6o0c{x5i7NARY#>2sT&bhL|>_2!a+8CBbH!VRQ4iEVnzenVCCod;J>{ zJ6rKju@W0uNM&UgIAf8@nVkzbFz@}|yzlqs+xq$%*rWe$6&V5e<%GKvufX!af(zil zNeLCn2yr+lgDT9z4u@q_#aT=sfLFky55Qw2UqkPoB~3Ey{dU5Tv>V5GK0|HZ)~1j` z+n4A~p^fGDkEC(RLLnb}S5H@QVENq27l4ov4q5OXFvJMsC-&7{OgP!Mya|S3yLB=< z)niq3S&q@D0_XTHS9zt|1Q&HK_|dS}ri_WaLdM!P#wy8YrNe#3&S!b)HOh@aMV7Ro zHmcoZEEhtWysMwFFR-*axLwdQSs|T>1$~KnYGh4cOM~Ukp_J1?Oz2@go}%D%j$%&B z;*{2nIg?^{uTk;Wp z_6L{I<;kae-}~D?qV4M-h*PzBXXsiV_$(tEv0Dg}ek00_yG=|}+oFBn552%}VNhtd zHb0au@rDc9MSft>ZMyHrc%U9x(S9k=Pc69)2_ZKLki9DyT*2^95|Q-tvm3Ci^Zo~` CF|R}b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b8fd3ed0a996765a8a02d49eca69faea11937af GIT binary patch literal 763 zcmZWnJ#Q015Z%2mUlKdW0m%x22&HoouR=N$r3gr*Kn7uGu34S$M)t{fyO-Uyu^VXM zH^g+bh@V0gr9mg9qN1~8LJ?80d*?`zSZQWw-pA#yZkR{<)w0wGjGgoSWmW zjOCFw&QOeEoT3Z|7#rJ4t;`PW(za74a|0J63q41%^AW`^;BR)7A9ypbUHfI6HZC?_ z!|52LdYP+)GpP~hMIx2HH@aMz$3#FJRjHL;)j`V>?Vlk)0gh2%y+vSy1Map)jer;9 zLw&CqytYED{}9_CGpFqqk9y<2j6_m)(u;-=k5hOWvIx>wp$IcscreXF78e@{oA4w8 z%J{pYmJ2RI1>Lq^_>{6R14@f^N;7T>XuD47={QWQ7h%RI9IXmlDpA~_G-Qmcu;j0! zoj&L3SG3d-==uX0@(jp;P02HmBgJ!a!WE=@$DEH6HXz4gGy)cr39t!ClRn93YRK6^ zXa6ygiGsac2ZRHVM1L&Ff#f9>Lgg*8RIb?4sH97)piVv$HPfw8z83jJt54`hy)}2{ zz0Ygs_1z0+cVStszwpr3!}*)@=51tidw%b{v2)?S^xk5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d7998429ddc33b6c53d70ef49891101a2c0d6e3 GIT binary patch literal 12811 zcmb_jOKcoRdY<9*yvX73ExxJYL!`$miIQl`mi4eLQL-dcW38oK?{Zh^ZA}-&iRR_% zrmSI{-DICgkb?sxF*jH&xO+&XWDyuaf;c$@8z2Y*BnLL;LUe%aA*Y<;fU`O1l>h&` ztEXnBX$}Pw(BIWxSN&b}*I)muNB`E{-5G#ClUpoSUj{|x@ z59R}f;A$|4?T&m$A+#DQD60zHhw|Yg9VK)g&;7bo_m%YEi4D+3`nJX2Ibcd}h=dz})tmF(c9kQbWp^rn1>6Vae?TaZl5lJu&ADpcyk8w(5fKEw_FhGFvKDIoXkSb>?Eu9=#B?4TLn zUdNY5%6Kt0`*TI}LyvK>^ufYCyVEc=ZmPhJWzsP_rm97)z*N=lR8c-4XlN%?_5BSk z?>ymA*cZD;RkdQVWNM_Z&?f|Q;}Lko(NsST>;Vlt`_AGz$ae8T@$up^Gaj0y^5XT9 z$?_*Imr4&oh>MrC>_ZUB;v-gkw3yG`Uo2P5^-^)^AfsSzGvxw7iU~22Z&iqZQnL+o+ma=u{$8jq$Q&naJ zlabl&C2M%0sw@bkXKZKetd)GFs=Oi~9J({PY>iyC64$EAHG%g{>`a`pdQVrC(**Hp zu^9j3ehMBRaNNUs$UR;P9j|aY!nyT&Nhj!9o;}Xp&%@bSb6a4qqS?G=7`ZGz zhU^p*EK>%UkK>dlkW3;$-QiP6NL5nUqE*dc3ui*)G&GDCfxu=ZM|WcvVIO)L_o1tQ zr+>lfe4(nmAPEOK_zPzao-_&vtRPuK5=hvwh?P)U;n)>c6w4K}`3)WHYz!2!klTdT zK$({~>Ab4vjBIJ6Xd3%1lU7J;O#wq`naH1BatRv72oPB2=-l>uJ14GK$CjtQC(Vm;mlO01YKMz>1|G~gnRplX%)DddSy-; za*>3Gbh}8>Lqs1k?dW{;Ubjyl_Nnxz2Y3=1_OMni=W|&{&})pTWyZ6tXxirwQqv|I z{pJSPc3_jet39^6HF2k!+T*7kcH9H(F0zp-SwnkJc!+Ez3kDD@`g)0Pu6U*sZ1N%J z;hvtm>zoZa5RD`#*O^p8vBGFeP+v`8Bn) zw)vL)_CvnwF4v028sp38=ekYz4*iq{e#+0R*x|K&Ni!wuauigFr;yZ545}CD*i~p4 z{{aNf-sB5UhOEiOsvWXNaI6zX~>#5UR90@F5s3XPg;HQJkSYUhp{bAXlH8C>OWOg zPKm)d<1aVO*jYC&+24Gig>5z;x-cAI5$SL$IvI|Nk`D8eFu;zoq6XGqx0esOr}AN3 z$!Tx^a%RPj=S4H~wAo+S%KcI)?`$c#jucEl+D)7fO==Sw#w-xn&F;SM-4asi9p8;* zKq|eG?49vA)L$yCZj?C@aoCeh#FY)WQ!-pAn=8Q3j%rzQ3Qs%ub-Y&$mS5uw(9ArI z`e`jECEeE}B2(i0BWUa)pC1GuT1k#>4OrciRb^5v6y4#h)j3yH<_K~YiNl|Jks(Gw zKllSm7SJ`?Zya*VTkT$_RzR<*J}{X*2G)?7s<4EzwcSTtb_ilvM<1@CXi`Y(r#pkU zNd5@^8S_9$TzwN;SFGMtRY?hPO&@=f6wl5bqAf3ngbV+)U}GCg0OOVRo`HTK5tF-`i5a_K$;WD(Y5ukNx|8>FwJJ! z;?!yWKZAyWp$p0O$n?(itJcuDs&Y;UcPO1byuuagJek%P~Z*{xW~gWB49U z6VD#MfrO48e;b=ABz0Y(j!6Cn@fGhOLjE)IGna1sB8+CF;j|n!T4`{4N%x?L&<9;N z;cwt@aT5f8l0~x^J4q@hpNh;WJGX8gFqAj z@Ne%)u=!Z{#ne<~5T?WnLftAuSogwDs0h@n3{nv4grFc;Dg1Qm39j(#H3bS*p{Eyw zGJ!PL7sC2JK`4c#{VwMLR8K+%U1UfgEbbyl1fmbS$cT$5`lySHi9W28#aL{OJgfU` z+Zw8UdYT^tb=|cdHz4(~ z`!wB)KUGYI41NNcoj%ANILt&a3qd$vgmE0tHeUj=d0DoFZE=#g8a_M^Wb<`-4rGtpn#i)70N%6XUM^^#Xm99-lSJAv z-D_cpk7XG9rM6f!8FzjWmzi#FC~j%k*~Vd%0vdBDGA6bB2k3F!upSZ(x0)hyUW51H zTl(usuvg1!PZMMV$6rTYVW{drSu;)-6=aY}Cw${1tSULC?G0>Ea!p2#d=;7`?iUfD z&XeL}s%-oV7%Z@P7*!{Bx-VO?E3I+)RN5~YINuangH!vwWMBolA0`=SEkCuU2P3mP zv#(jh=c~$j&s4W&3>fj=Xo`4YvRHPyVI}3HrS+XCmrF3VDceZ&?)09wx-L|e3*yBv zc5chqzOwcB$0x01x~inb6R3}6t$w)%hRG3RK^HCJ-6R!ETYO}j82-q#x+bd1gy7pd zzO`ia9IYxx32_`b?ykRU`crt)7_sf|npl)Y8%*-&Iw{xmMuef&MJ=RW{uYMZb69Tq zJFJtdswC3g{60+Z;BtnKF&1WrKL8FK&#!&1tz+M4({D4LgUUe!!VA2H%N%P97oLX` zj-))jlbBGFZpWZv43Vo@aSU+WGrXB}{D1>ahq->XQ@GB0+=hZ9=`F!wHhuzkaH4z0 z=tSSNVsHED{(j1eaVeSrIWC360@`O-UE@_{Txeh4#BS^wbnKG?SUOeBRpZ|Ao$)hP z&r(%clJpek+@Pl+0Pt_GHM3|*HbWj#|7ar;(t7&20o>s0LusR2DuP>aeUqI8TU{to zttbnhJNAqEN!k=RrhtzmZDh-ld<~?%cNQ8T?Zog_$V$kkv(=U~B>@ggWaKXgtZ~Zc zRS!aS&|R+{f_A-L{Rp}~pQ4hgUxhC&A#gMYm%n@tpL1&N;5QRHOvSp4@S?*l{dw7CK#5?Y}Q9)F;aD^fg% z1y(Qv=z#5b89x_clm8x!_}uCRIbT{YIph@fuOC%>At!>1#t#E@R2vLAoFc4UylHh_ zt}2(M<>R<7booET+2D#`;X?(?u^|o;3#Yy0XG9k_Z~OziPa&xE9^h~v~hxpl|to31L;0vS8Dea9O0VijjQ@HPJ1;g{`u+u>In)p0#& z&+XUR^P*B(_vfq{CBaLLQ-GxHr^unXIL@+F5b~Y zg#1_2s%R}GRIqEKFdi&jJ*-&=;HhGVpcHC{3#FpDZYv)!_Rv-;Oyl^C7Je7=2r|f| zXsJ|y_o z;ZXVbA!B zC~I|&Rh2PeEBuqm3&8X_lS!O^gVKfoz`s2#hcqg!h#)H+5cIYemiTIg9p5nES6KMf zE(6~>n-U(9GFjFX%s{dte~q_D;OCM7BLNK%bx;5IG9(`wl*0m?knzf4eMF}pRJxWx*pGU+FYHG>+^1Sp zC7$l&pWq}h+~*$wX|v*lqVSI2y9^8J@MAqY&P9{|A#(g;~ z`kJXDlDnuFf8jku$bUwD$p&q=^qT|u(;|N#nchS48$dE##bydgeHzpUiHg(smiG{$ zOnSi{c79TMQsvH%kJXa%>th~*4t4~7!Uvnq$(V)_>2na3JvLdTH(-&m^9zOjh5;R#<&7&d{RY;tQ0p`h0uBu~;@`#^eYa7Wr z5{glNfh{~&WM}9&Iy#TScEpszmM4~Hu?x-*TQBi{ga<+RXZ#50XQ5y)`0Gd@xb&;Q z9gTdI78#Va94se$V%{cFbOYLSb;q-$`Z3@T4 zYXKUA?Q?Fsf$^a804}wY@ZeJz0GHYr4j8Qu{`Bi^8#sRg?-nn>HoYJTW8npGsm;h^ oK}MedPe)WB7i3D}0S@>wVl)D6z~NFmi-XhBi{rn>7tluiKjT`%82|tP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79ad0a1a44961eca4ab5e16b2f1e1b688b070f6a GIT binary patch literal 2456 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 I`e?lW0o@qL-2eap literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..572eb1f5f6b185f0164556cabcb06e6e55777fed GIT binary patch literal 667 zcmYjP&1(}u6o0c{S!>!Vh(Qq#!AlO!PKI|pN5U~O!0^PbK`iFC?W^aZN978QLZG!}cuLdc5eg+RVh{W+>*|hE**) zwo^-DbJasbKEls#?;^MueY*3#+y4>tuRJe|AEuA zI{@xGh2csgS9XsMowo3fP1(BXL`9~jmAF;Gtox$+4i*Ab9|OXyv~;7=5g M`18|iFszOK2L-&gJ^%m! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_schedule_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22c028eb632258e1aba3ade601ab6d68b7d09c76 GIT binary patch literal 12035 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_search_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_search_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8cf6334b9df1ace9257d62f75528a8818c4524a GIT binary patch literal 767 zcmYjPJ8u&~5Z=9)FSbK?2?vKN-4*dEq>WNU2oORBVQ8*dU3@Eh<$Gm!ZTT7+pidX` z6A(Xz%5sBNN=1c4VabFd6|;9XVx*n<=9{^>nc4ley{9%?*e~?c7Csd4Nmix~$N#ldlEE}41}@3(UsyR-M#2u%6)Uyb<7_5c6? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_subscription_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cb483ecd25ed4ceaf2c611b80a9fadc8cc19057 GIT binary patch literal 17480 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 W2edg1deHO*S%^fHpHf~(tN#O@-g+ni literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..952b7029a30ba023434f7f8f3854d7d7fb7b9f28 GIT binary patch literal 784 zcmX|9J8u&~5Z=9)oy0Z-2RRUgP?F|~_ylRA6afi}$RHlgHLHzpHXZ@#&iotd4V_4+D;BmX^&e>e#J*2eO<3ot(f zaET%m;RK~P#8_i1u~IvV_^x7J7*y=Oc<-hQHe;KJ-SOU-_dA9~X_c?0mqa zdY!A7XA&6aIF<_ZT8As`j0KCjCe+A99yAZZzC;X#I6|TI0Wq674}fECgbzTkXvQ<# zg12t@%7U?PnPse_nUU*z#rk_Xe9j}LD|$l(O=VGMSrlhIa>7ozV1>tqInAQNP2x0G zMMEkol=jn8#YD%i7F9wrnleI)RYFo84HAuOgq#m(Vmv}mwy>oV#T`OumT^VPX%Hgd z5x^B^>KmE^L^pYG##0vbvSILo$-d%w@QN#z>>Y95hns^V+U-M;!3E1Mf+Ri(@{u~@ z*?#-!vp~j*?d9+T?J*g^g>lY;yzDF>iVjH^x+Mv;OAOo2N1_7PmZAzk9)tLVel;JD z<)pbYb#`W!)@M0c+nPFCOXmKQul8hPck1kxjA$;? zcl=7xGBve{Fl#}$*$bf`z3|j1hZfCH){Q~fP_azv53!2*k|B7+-q`?_Z(T74rXjcX4&xxJIDL=>Olh&#(Xh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_code_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bfaec5788c6c759bfbff63549722f6883d01ba2 GIT binary patch literal 641 zcmXw1KW`H;6o0;d2_yaASkOtGnAj?XGIYW|r_I&)+vUH^3e9?@4h=0DgPn_M~gDI&$Cw1PD?> zMRGzsj>@Qt^SH%vnN(?>5{Tdxh~yK96v?+Z_~+Ro8+877VL+O#6Fi@yv2SZzC~4eF z@}@A>@w-E1y|U0KM!_}EbsShdbMgfsdnpdXDa9(pMhJ#MiWlZu48EZBetCX0Q9`_hKpYk$jw4Z=Z9BE=>b+gSF zmr_~Ymd@B$SUDZsSbC-^q+>a!FVRe_s_AQGvD`gYYEsBCJ?5hcNUDU4N(DVHuFq~VI#&0VO zq)oi#gSL_HIds!K3?n?!51ikP=jCG;<0@Hb0HcR9QU$6D|IZG5XE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e25e19f8ffd446db250ac734454afc3b52d36f5a GIT binary patch literal 2065 zcmZuyOK%)S5boJ|?Zb|VkuXF`B*JMA@dR?&$z=@lY9S%8B{jhniwDnb0S65Y6b=Um3y4pqX6MtOF zUVaXtUzKq7^DT4oAux|oic%*>g)?v*#kcZS;SOBQySZ2R1HT9cK@ko@2er_fDD@tp z)Tho5uJJQyYi$79kcQ{l&b;04{H9F$PIKWt-LI*T_bQo{On}C_n+e%>oA7QXDJOZ; z+bN~8$~aA%&hEUT>2{XL!~`+aMnosOAU{SF4V)AWTJIz3QjhvCfmZ!#kUBR3JD^Wn zR^wVtn0i*@Ta6F)f#T<3zujEiC9}8FH#jAdzDqbML=(_iMOfOr@Sml72aNK@FBSAz z6Oa@$E&(Z)T**0>nZm+isWBuRCv~O_YfNHg0H`+{Si^ zSpqo5Qv&|tJ*&5YVhF^lJy-yy8UhOIXs*#u2!{AwfRT`REM(IGz5+f@&e)17yXQ7Q|v|QTc>SQnW-a9gPIGD<+h@lcgSsAfWH(%wY5XG$Y& zv*m%wL@o^0HbQNWQVUF#pL%XGt?df{)TNuk3DhN++RL=C`xo|UEzHaDButLRpOU<$ zJMf&_7&B5(jGHdTMVZ#Q;#V-5opwWoUqHQWBvaF)FN=fr;TV*-P*eKc}$%L{rno>56@+^+3xg3}5#^$T9MFM8s zwF(T#h>8eeWfhGoJ!B#*$qd7_O!VY|E~?S9SN@4L=& z z0YeAsYlzHD55qTmtCVN8t7ow{fQOlOiZp+0{mQJs7U=BC3s(SIiYtbNnm*xUSD xuyf!qHh~6rOH-D@Ea)-T|M$#P}$_ zfVtMn&IGZba`zUenEAf>%gp!QY}S!A{d*F>*!bzlzm@l3b85jFal~iHElhl-&Ci+0ru|LCP^ dTIw{@N7j9Z7~^dP;qFfbc literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_id_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbf36a98d4eb5a584bfa3616193569e83e3d8641 GIT binary patch literal 1218 zcmah|y=xRf6ra7F{kU8%(cI~2f>9EiMRJQ;h>$3RfC?cIKbk`rHn)?wWWSu5)4N{# zbU8a)@ei@Eak)kY#KOuhki^2uH@mm-1Hpy;&70r6dGF2p_)xD;Ao%$A+2Fm2&{wr7 zKVvK$J^^7L`N-Eo6lonzQ*tG&M0!WhWj(}^(J>;kV@6iT(ohB6K|X$oe1mH5^ukWZ z&RG*!i&`gabznQyZ%W0{jr}0rAzO4iVN{y5pL($`jWCD;A)9}xZ@!2r zlSYy+Q(SmVsLS3qynX}B+l0hkL68I#9OptAmS6o0<2gp#&YAR-V`#gd`1O4q7GRSA$#K`kt|Sf+kTPr0+Nwi6{g{0$9% z0^(0$LM-T{PE2f-LK!+?pHoYI@Ap3aKKy-seGS|(|DG171mL$9?oPS_%L4~4L4Y77 zR3sFCYU~PT7NMUWZ&_5G>Dsr@A>St zI6sKd1aamXEm4Nc+hFOj7eT0W6c_4l@gQE;~rxd6J7?3_WkR`ktQ})H=B%c zDV61I;f#HSrL)1Urst|cI+8Pbgl242O^Y! z$-Uw33u+3BJGFD*BQ(@KQ`AW7wp_|ApRqzPz3PGm{ji?vjxWuVuDj;3BcI_{ufIqZ zr(f><=xzT@wy&co?dr`tN8fZm?GBgrn!6$FMei_-W_g>keG xZ}_Bb<_8YlcK5>o5A-7^x?cq5nIqRRA><|lvUdgjD;WIE64G4^Z@{rO`adeSsbK&B literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..964b4e532aa89b0b81d25965fb769a4186e52440 GIT binary patch literal 1300 zcmZWpy^qvJ6d&7Tue~3)+1rE*M=lbGW&^AfXdwllBn3JmNSbX%gZ=K#oWE{ncC}k4 z>C<64Dx@fXN~+aL5t@b~Rk}qNQc&gDUawAyB|pFSdtdWDJb(0hZGw;dcRzaV5%O0l zG>^Su&c8wC1qn%L#3V5$hEeinY$n#kO6Y`EvK8BjGjWpEq-7A3d`m+5GYM@lez)p4 z6L;Z^T7Q?q$k01a;A{#~JrE+9y`Y;NVrjH`2P-;Dj6bK&c&S9oX+eknd)RAgR zH^TX!$h;sxCPqjm=8ps{pqCK?J2dX%*DDccgP8wAtPSFzJ>622*A&-NB+hn)*v-4b8)Mmu`=1D`+P3LXeR`aKssk=o&b zie{i&K{id5Sm;g&G7wSKOWh44na6y=Ql5ZzV4m|d)LxVZ@l=*>-RDyg$q?I(t=Db> ziiccr-OfP-kScx*+Lj9Q;Q@L)nMz0yW{S`CZjdF(G>rmY&8@<$W2v-tf`mpD`y2=9 z#lR)h`n=SiAsGtH6~!!s7!M*A>M$VCv55hmm67Y}Hx&IL4smgNyyG%iR>wcDdQtJ}WBy}gyA0d`UPm@CS`&#SrlWqC|sUs+I%lhyb*UkLp9NJU&^u_R~wt*r4{|85qh5%w0Qc`TXwIl=(Ps@ z=;NOrH~jGPB3SNT)b{s_>xF#vpqRfLFLy>OI%;eO7ejaVewEA4l@-0xsQdeG-2U3^ z^@i`PzSn+d4f@VG8Q9MHIv!u#Xlgthd3vvI&6tV$B4Am46NvJ<&<;);J6(;a8kQc^ z2!pwTRF<=>W>$^5?%o$=_$tRu*e@be2Jogulx+j+A<8|y+e#UZ^^-1a{C|W Np5Yeb_XIzc_kR-iXgUA@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a6902b1d0346985f5fedf71c6f85c4b564114bf GIT binary patch literal 1321 zcmai!zi-n(6vxl@*>T#Wv`|PwK~xk8GEj>j5*-jjTZs;+ASe>ba&qG%SoJUNu2q8A zfW2G8#)|kmm{_p9ppy^-6I-RW3{1SU;~)eGOMdt6b5HNyz5Ci9>h%c(5C4AJe_ui9 ztD2OLIdTpjfwPA^`_c*Ov-GwB7PYuo=7wBaZddp_^x2s|mR1;rQ17`P30dhD6IrK` z=SMxVNgv0IN{jXrH-dinQ8(D;kVu+=ANoR0ap5wdLfyxLvh{XV+Jr=INC}Y>goLrT z9Vov>$kS~%C{~!dZizSJIFQE(aib^}ZhjLGX>h?9Rsjao^cEd}i+&`|lQ^VKFX}t1 zly8YRan@o%gUictyaoF^%WiiIs&;m0wBrQ+rjrcBlQ_Dzc;%|YeL*iL5a9MGcObu? zP$$Vd;}GHY34<1p0NO$++0TWG5Fv2`P@ zFJ*YCM6>6HJUy|H;f0dan?pQ&@Vc7T&S&_1NvG$A*VAM38J;gmt+C6~$+-;AmE`37 z8zY^)kl_nCVa>9tzbkSBmj9>7u}1Z=hDx3N(r8I?jSkGVC7b_}j?{ZX8a+X!9)J@F zy56?fv?_E)nd8c+8)v7KnN_BtOnw%nXEs-wi{S7zFwkrJ#O_LJH#6KUn=x^6_d!~1 zWw=$6>g<1FicM60rOifh_ltxT-#>|q9{^LIw6w$^0Vx&Yn<*xQ_63c&`b!jNupqL~ zMqc#q2l-*&EEIo>EkK+GFTVt4-_SJe$U@q+VQT|czWX!daG5W#SGYa0B)5rQGF F_9w3DN0R^m literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e8cc54514760b9b89a75a493623bdcf99d26fcf GIT binary patch literal 1238 zcmZWozmFS56rTOz_4;g|b?4%U!yytO9hSITkqFX66j1~eA)o{rN6~1q^Kv)2{dF^A z%Zn(Xr;GU$5IqI|0u7d%XqpsMbdHWtq~gu4_Y~o4Bbr@lt={SFxA0(qIy#?Md4qF8P9R|3|`G z;QZ#*btYjMjNAX%VC|#Qlzd2mTerpv9fr`0ZFE*dXpD#Jhy}7f8F#+vK(`@TOYO zAiTZdgbi}BW9I@1`IcpEm|csPy>Z_Rzh(0WOv6_>7f;J?m}IFk0gJVmfoaG2G}E#) zT@EUiqMDcKaiNNYl{8~1m;mMl%ed)1n@XWL&Jkz&{b)17M+XOwf3U-Sq_q6#eKe0v zn1W`UX=YkVk9dA=AT7r9H$lK=Ug(M@!zw=p;`e zI?m?NT~MbwFQPAV4awo1JU;on`NB^fGTS`fK#*a{JcG zztyDn_I_5&?$wolwLu1>7vW&-_WQ$E-k`Jf%G((P=VYf9tUthilpi*YSbg^D{*S1v zuQJW+yDaU^Gy%$pAkNK~Wd9|(@o(^n6E2Qk6Z}-!{{uB|Sxf)` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fc9a28fc608fb1e210d7f61919b52dc56b84b67 GIT binary patch literal 641 zcmXw1KW`H;6o0;d2_TY zC`n3)!$A?0VH$QgETS?_V*&xZf-L$3S&Zac=>5~ANk+XtP8gAPXNuGE${J`re zH#kM3a$Mp&u6U{21nY{6Y%=P#eZ~YYk+F7*u~KG>!r=j9=L=qVjdBxEktJ=YjcRup z<3dQoyV4o^3Tvx_8$-`ziF77v`V#fr$cny}28;b;Dd)ME(PMr(N0HGbiX|=bkF;vc znG^@(=P#(v4enRgfX`4li*EXdeuPKrffemf0{zsItB??Kod7wwgyAKO{w5LWuO`=ES?B#9m+7lT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_tax_rate_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c37d68145643e55e1fde171a3351172a2181214 GIT binary patch literal 1198 zcmZWoJCEB&5MGi?iabdt+^KLZ=Zx40a3)}zh>gUJ?ZPmS6viR&qmf}O*4)kA`uMut zl^_KvlRll5pAe)^k-v~8f{Ga1q)3%c#^nLH$}A}!3>*OtXTJSrcITVrul@cOf=B&3 z62FHC{b_^t@i)%teQ;hQhM1F~+!;H$J9Zr#yP22cG0y$5p9kZ>K`#0nG4ET%Fb{t6 zn*4ER?#IDjHi%t=ABt2P{75Jrd#3Y9XfA1Hx(B6x%ugmla%Q5Z^NKS|Oq&vo-PA*; zzd-yNaWr-q8oSRB_c*=?826cT7rv22f(_!HL%eecK0`W9-X_;S!`o^>i?Ggy6Sm0N zj?ozsvMtNnFuN9?_u{@8KBcqARP$#Q1N$YFG*>2|sTNaiI%zp6w49qR<0_S+(xNO( zj|o*}bWRGIa})4cMGIznuO?C`21)_v>(NHd=llCFzOnK>S6W{G2+Ru;=3Gi&pM!J>CEIVy9W92T?WAy>z` ztdcKE&9fU1%JNtghsgt)9`k}FQ(jDyOuS60xjrh3+c!VCl_W{cs(i?Td@yvj0A^ zySI3<+_|#CS6a^S@*-XCUR~j(!-V@ZN=Yo8jJ<*CBM^RUd*`dyeD$7a-^IAL!l^-TOQE N)Cm{yKL|c`_Wx66OUD2J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5569c5641ee993c38287ab82eb40c8abc9dc622d GIT binary patch literal 20305 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 ORJnBcZK|2S+W!X;emr^r literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_token_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a40c7b36d458a2482be4bd5ff67753ecf5a4480 GIT binary patch literal 636 zcmXw1J8u&~5T3o4O>hz-5Eh6kqHz(gAZ?T)LV^MXlt6RM>d1|plkaxVyKBqt$#01H z35cIUg=o-8si^28nNXx+_SRWxXTEvvJofwM<_6F)|DG174B)pD?oPZ0t3v{pkVDQ& zs94IF!$BETVH&nLETbw;V+H}dhCKQVd5r8^=;PC5kqkP2oG@U`)(K9gXzaV%7D^h@ zL~jdYiQhj~))@GewQOZp-Dux*mjHHzB-wSTA(PRpv;Su6a!40)F-S%V>G} z<=&6p?$2oVItb#f-oA5mJ@b;uaINr3HNLH`N{f0KxHm%|$%)<*vatWl{i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e27a55f8ceae289d7b9f5174f8e1b8ca9475869 GIT binary patch literal 632 zcmXw1y>1jS5FYQ}E#Yz@65<4+ifFFLS&%kL5s;uj;lJ6&T5d;|)$Q7j?Tv1Gc!nI0 zfOr%tM1xjJMMW3s2t_LFbz;fid^6)2&y4+jb8`di(*GWmZwSC|r`)Xgnye2jIfDWU zQbA2JLL3jOpboRJ=V2AqaTXH@;5ii0Cn#bh-$EasC2cYp{Bg>JbfdR;(x5i4q$vg0 z))KuewXyQ{kuc6#DlBF`)Z=v?SUK_ z3%)mf{DkV#;I6a>@;Pd1uPG%`*_TV1P1Q&?>sw&nIF+p$xVjvqcI$f%E3Fj%KI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c6d46b126c175ed9def38f72e53fbeb5908d439 GIT binary patch literal 1014 zcmZXS&rcLF6vsP1c6Jt)-GCTz1p|agmIxCekqhyFL`_6AB9|eg8E5J;VWu704q=Tq z^x!`r>y4}NPx0brFQyj`p1hGD9yr;~>~Nt;-@Nzf>ucxR_hV>i0La1qHNqQZ0Dh~W z7^S{*{zN**AOL|Dfmm}jP5FAH$A)XfrfX)g5tU-gwc@f{)_@M4g24O;f)dic8+jeq zZd=Xr9~Cq;QG1Q{Q^feogogyPrY_92(C5Nj4;hzHc|GKadXX61AYA2!6a{`>DYyNy z;QWh>j{yR%764b@0?0sSpsh$+0jMN>z3*G7bX!tMj4M*kS)ZE)4~k5yAXj_K*NAiHC#tjlKfg zv$H!Nls4Op)BBUs>DON=CCM6sHk!3VfGGD*rFs&Hk!7u zA;eycAQS@-#w1813YdNvp{|1=tbd= zOmsH8!&5zTsvtvS9ka9fwbHFl_sr>n)*C+?54*MHp1E8gnP_yY<2`e{Ab0Ma_}#`_ z&zvjB&B+s^J37-dXEH)n8)bLfXja6n{C^f8&08Ikyw|DfTw(EcBITi`+M)y%!#RQI zkR!~L=+sh+ndI4DkEt*_qanRZdnJFrNA#`?H96V1G-rmUX%`mImQKOMDOmh#O=@{LH}W}I;_UJ#%7N=PE5uPA7%p&Ds@t+2I_MtWb5jJ^?>eN!PS`GolN z8{+Fs`AI9+>01RgfSSylQ@fxRQ2TGRHm-H+f8fNfBA32kPe&{h4^t5&aR!9$2ASw; z(%cOM<6bE1y+oi_z?m=Yy>ZI?`@ujA%B@SC#X-)#hyDw~NMG?uU;UCW%~v|W81>a# z(Ar3}8KD(n`i$svVw7ygjX5`G#GI3At~Do?Z==`Dvxa6MQy(Ar_c)rg)?nT-2 z&I0&2N=C8xI*5fdyuyCIy5Mq;GfyzT@G%EvM>bjP2l3E-%=Qz`q`?kTFZQJ#22mj7 zQYJhuaNOI6ly<4K23|a1A>`B8_X2Fqv|K{k*=R6e%*Qd9Cq`MXYfH;@V=rQ^D{HPB zCH^QxyWzS|M_yQta08Ah&$+G_#|cct>jWPy6P!~V(%@Je3-2X410}B`=SdPVXBZzk z_gQuzlGJ&S2o_$wnVHC-r2r(-N~RjuBPDN4O!;E zCPB)av`DMt!cwEu4I$BPiMG=*w_(phEHJX~K)xlvG+HO^oxE{lLT{X^s&1VcWT|t~ z`5xmibh9GO_Axzv^n;x@HYRkVqK(#3mepyDw^45fI zRRm_5C+oX;`?I{!o6ugt`Nb-@e=qAj7=E*?87<07_mz3sRb*c1b06&=K1Jz|^{ydT z77DDaL8%Uf)P{mdH3TCRtoPF3D;VVklokr!IA29+qpYD62YCmrOO;#(Dh2}z5 zFc}=>BQ)MaDN=^0*R9J|S<2fkFF%ZKQhpgZe&VDd#womv@)f7c}We{cOSJL{8+|J4Esc})Uj^ZhS YW_sr>#XA0UN}!p(kM>uu&@PVg7XTNG82|tP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93306b9761d64f2fb62998d749c839096d80edb3 GIT binary patch literal 789 zcmXw1Pfrvv6mMr{XJ>(hteS`$OoR*B1a=}Ma*%i+L^&WD(aR9h)NNfR%uI*2OLmP% z{S2%h!T3?UNcLiS;o!*|$%+R~zRv8vq_4mCYu}%~z904a3<6RAnz3>b`fZJ=R3>2j z9KZ!)h~WgKIKtRsCvj3Ya#Jtz3foO8sUP`iHL7CdpcjaFpAoBY{2k(2iGqROs{XOC zh0XjMe%9kkzshwiGSza7w;Ok~@%Ce-!K&`ZnoF9P*#n{N-B@zgvCdPOghk^$U@j0x z5oRcI-XZRC?*VYU!tgfiHOu%VH{qQr&)f;)S!Pga`KIw!ZtoLi1sdk$lEF?d3PG^pj9*X%L>{=mXkn4ISSH#tnu|AhX+Z|y4V(&M#&J~*E~~pXryls zZR^T9?^smixCiJq*e;v>OfG_nVW}lh*Dl8R#z%Pb3O&3+8-M*d91Q1g5Nw6_e+=N$ AApigX literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f535ae491e11e717b005cd6cbfc5852d44383c3 GIT binary patch literal 636 zcmXw1y>1jS5FYQ}9pRD?fjEJvBAP977Nm_*L`YDefD&l7v6k%UvbtT{XZudKJ$Z&4 zkAQd-Dnx@;N<~E%=?FzC?DfTxXTF*7e4g?6`{w2b*roqHEl&x+Z)e=CcnwyE7F>NtxD1n?S)=ra^Cl5e5U&yprddw-mfl6LC^r!&;%oiwH3 z+Iph5r8ZXIKNiLXONGUmPxW%m1FPrOz66Af6p#fU0Yi*1eqz0DV^WX7 zoXHb3s>C_I&sARQHo=9=d2yWf+CF1EuaU8KgRxo^v&!KCW7An)`G|7;tH_Er)JC=2 zjOCmQlXrzP_7zq(2DejsE^4G>zM!vAPmGZCjWAg49SJch`IsK%XA|TFog<&qs{BM{ zW6lNNAH8@}p!{oe y7jHSzj`@K_xBUbEeuwIjHSH$?{mhE%kPvc{0NKBS;T5ERlZf<}qZ_cQ%l;4LO{rY~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_topup_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bca0c94b97ff8e7f7a3e029bdeb678dbaddb5d4 GIT binary patch literal 749 zcmXw1&ubGw6rS1LY&LCTi3(~cVtXk8+eHO?u|i|*&ox{*^-Dy z{Tmwp1o2PtV#r12;=z-*K>Ptc`DQnHuy4Ni&Aj)%H?v3!B$NvqNC65k~=LD6mcu zx4H8GI9_3R2iBTl+>)E~)`DmDoN)|elQ zpC`<};>ndCg>QW^R2OOTZ0pHWKZDEN6mWp{c;-W|P;g%q6Z!;7<$~nJ)TAW0#8B3t zYvHN@vKQb!qVLVs(eb#sHgVRbmR0elE^6E#IiurGwQ+rY;;b*&mDab`^YN|iiL+f$ z^3I}Kr|oH14FyP+<{gV6b+cp$A1Iz=W_)RWy5e%A5m3sxZBS9_E}$E4r@YfWc@IJi gU$zQvYGaK5xd=b}fp*7e_qSWe-l+Bm!BS-Z2YQG$2I?eopwZxpIM8a_fw5_9n$(MB5>uk)7q*Mq^R~Z% za^s5j5A1)~WmPYeFC2E-4T-S>+F^FmR7A@2_rCY}`T5!YK0RFq@?(Ej{eKn!zm$`I zg)z8$A;AUkfTsl@)LNRRupa24(K15Vf~ju=h0tu7VX;-zfDT>)4}Jz-foNZiEKkeo zn|ATHa%@e^yd!5_!uXqn`*FloqaW~?^a=Vn0$nA?M zk1&_|X}?m3`w>>n6DH{;IP!!Q5{^C0v6yFZm%0RTl^VNBWgDV$jH3?1uA63tE~cI^ zPLiIO%H{oph?#VftOvDe+)WPcvak?}a7YjmWrV`m>jnx}5IXDPAdAqV+>bDPS@JAG zIErGP7RRK}V4PBQo2WW7YD#kr?xY0|)H#hq;qvNSM;m9-IEyVdoAb!&pz`A@HNJYO9g4d>QJaDBooj^IM>OfL`M z;OMe6tZa%$p)1noSsQoCvlmp4anGiT%iAAdaCA66T~x#kEq zbAIvZl`&kXjbJThXf?0>&@PFkY|C{-v$ure>@iXG;)KcjiR@t3bJcw@mobR+IEk2g zcIjE9N0)VFO{GuQcp}k*wVNIG9^H_xCV!?Bw}z%^_a@MGZb0=0Z2vK9nl;$F2XaVf F{|7FkDd_+J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_create_reversal_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_create_reversal_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0094ce7ad999e015b2a7cb22515a3f1942bff49 GIT binary patch literal 927 zcmX|AJx>%t7@pmo+uMT!f-!)XBM}c>=!e0gi}lX z4V;~&#-C#28k?aRS)LVP4`;R&RwCQ8qpDXmkcnO(AAdl81&nW29>;U~cB}eZ z8!bal?!s9QxOkO{Ac=X)lz1!X2#L1?E|gW>4g@e7%JH2zt>hOa535tlZNl3pz2xDUL;f~-Sn!$nGC|81ja>|kl>@V##NfD88cq1q0m z6M>*U6;#eJ==Nft&@>H$4%HfwF2GK!CLKaz8UZ14jF2etd!fd4Le6?L%)hXzDpXp5 zs$q%{8pnyqLU841sZ2~?t;9!35`IND3ZuJs?nx4XdmLZ5Tfk36lDaPw0bzSHNlt_K z*xjU^Q;2={9O82~436BiFHVwpb@|DP%hg@AQ{_O9fx9X}kb;|LVz@*UQjt!k6=8)~ zBzIU&`>dua$Tmj-PSo}h{jARptYN)5!p&>btT@*;x;H=A8%{5b@IuK<%nk5h?^A79 zUmW4ZlAUV&XgnQGu8r_oNzFg{f``ra2)8qa&6XLpqO*C$%c`_&CP|VHCDS7&ZP8Da z01WFRnQ+rNL*PO{%=P#(_3xle^}LrEZDu*<6uNWP^LyH0O=TMD;Tl|9hGE>=$XLBX U^H*r)kA2^8K5yJ2^~z5F123HX*8l(j literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cb557e4fccd65f3b19ddf7421e49bfc00b89143 GIT binary patch literal 1328 zcmai!&rcIU6vt=wS9c3Veo70X@*~k6V54}Dgm3^7Ihbk$6VuCNVTZC|e=#!7^UW)kDUlQ$B;11D#8yCnvRoAk|_&%C^O^XA+6QYhqs_~`F3?{f}- zpK_9YddE3^C7dJR0vGxqfK>>kulP!!R@KB;eJ#+ddSFxy2o&%HxY|45>KJ}f(;U@Y zLJdK4*yvKTZkDZIGNcT7-wV9Ak12Z=GcO9MAlg%pva-T^DiM>59>FfRHtI2USG_H^ zmF7-uXCrXh5c4B|K^3~7s=NePbzw;`thvgf7%f4t-XZE0qIHRpMs*_fF3)v{(Ir{7 z+!bONAI47Ta^3d=kMTar93o_PgjV%dVT{TCk!K&>`O(AN*N)VTvA1SAHk_`!9{HEL;<#I;i0{X=`M?6 zdo5zvpIwfkT~Ud>>}>6dqU{459@xIOX~%W86NU404<6doV|X?e0Zt85Tjcj*Y{yA^ zY}BpY7d=BMor~+l6x$|7I`pkD@4>f1@oVXEtFX}47ETmJH%|;OIMG~h4NSJR$&3u& zY0}ovbX%LwNTJx&n(H5|R_|0>o62bKXoI$T#@pI>Mn>))tF7Ugwl;GOA){GU|JLP( zSpHj=SWA?oyRfU9j9e-;BbQ3eNTSrbUN(5?S{-qv#<*Hzm@B?;e1*|JhC?bJi}VbJh)l(i6#e%>F3iPL x>`P=y#6j_+_k}r8A%y1!fb-wM=nwGd%(w;3=It{ehO?!9XdYYVKnzK>e*ijzO6mXr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_reversals_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_list_reversals_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e68e5e4632a39132686dc027e203222ee199177d GIT binary patch literal 804 zcmX|9J8#rL5Z?9coW~_Vf)WTqC`scYXF=L1MT7)Jbf5r@o7Ejx*1pS1p84h*&+N?X{A@O72_E(Daq`0<;nC6*YS}z@Pfu4V+6EZIDnH= zQ2I@wlUyidoc%;;)N}1z8)qURKB_}&ImtuD5!&YjNJL{2Ssw`4;5ID9xode%{d_+ks#Dj0v6rW92MkSstIJ2G28ga>~=%Bh8FUTWMJ?GRB3- zHLvEvn8fEmS0eN`GDb*lKZeJ724Pq9!Iw>EOtrp&`Yx15ViL^ZPF@Gi4qlw_EJTnS$qAcPF zzoFqLAbtuLqF#_MJ#gX{DU?G`*t^L{9>00^*l))EQL8NgW&B?w9GC$7*1_ED8JNCM z;0h2xU<6_qK&Y`18L=6du@zWFY({qM1WxP*E(8X635fL>5Szm9>RfGsmpe`OkA_Vs zm)_FLKIP(dCc-q~O+#9TVMj>oIOIY_?r|t6!;xHUr$X-y86_Q^Jh$1gV0xsOD?mX2 z2?&h$fSS~Ls5oj9xTofdW}K3n@y47d=8Um4liN*4uDoM7;pddSN=bO0zrhU0TrLvI zJ1i{JN{0?JoRE)=naI=4&9hHh{wWvi$z$ctq!&|x2^P5Bbft$-f@6x1TtFyJNk7uK ziqK^rN9780l>lj~T)B)8PLfpMqBRIH{Sx26RC#d6{EIZEem5EVhm`k3n)yempwZSr zn)bq^>mT4wk0!()&}868;Rip<#YLLzw4QGJTs3toQyXxXa$nsQX4KD$3VkGIb!&mD za8&ZGEN2yUap61#_;cmHfM4~s(aE^Jer>H!48!&&4ydh;tkKEW%DB35ZEeii<;Ks( zv+>gIwY6JN?Ed_;cC#WMlpy<%eMUd8H%rOx46Joua!S>m`HeP|$?yufrU@ zsJmC{yr)rd$BIIC-d@@7eYUDXs0LqCZel_RZyf-4Zos1(u>IGmLT|Kx3)EC({|5$b B)wBQr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_modify_reversal_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_modify_reversal_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..347cec7c2868024978e8dae8def670cbc1ab0d26 GIT binary patch literal 763 zcmXw1y-yTD6rb7M+ug$hf)*Dqm>3$eiQGm=pdl25s0E$|wOK+YA?>;yHn{Fc*990Pxuv-o&?07Kw{Ca)={sZcJA z3YxJGtywpRtE)$!OrM8B@+XfqJ5qiMk}@i3C-9U{NJdj2M9mSB=4_A{xk1S3fF_lN zd%89^%T=~cpcVmucQle~IxZk|uMa$M+9xMM=fl`K^n0wW2TFkgea##k<`>}tutvc>}~-TK?r mns<0pL##M*j!THPDIx literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aed9831ee55d195280d98d8d5900db12f62f9cde GIT binary patch literal 642 zcmXw1J8u**5FYRAmT*akgmMB=MKo9BEJz!rh>)N_0fk4g1(wMUm(}gs8{2of?a6P* z@e>d~g$mK2l~PgBMLI%}3VVIA3>q)CRoKTa5ucH1nNLfH`;47UdFeIEjX*_~w4pYt z-DHdlAr0?pXY4C1tqyJsJ(U&Gv6$0ms3%6&^o2B7?jA}xDa4o_@{@l&s$z#I5#M?TbCb5 zmw3Yk?IPc^=qBCwBRo*|t!Tdz=tq`Zg@lmn1jybc3@%~#H;G8P_;3xDb>9C0w(6_! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_reversal_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_retrieve_reversal_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35fdf33082604078af452084267a41455197f932 GIT binary patch literal 659 zcmXw1J8u&~5T3o4O>h#B5EckgL^Lkq6{L+)L`YDefDANOWOd{Q=j6NH%kJ8;3p)4> z2^}rsr%)jpbW$oRx=1DzshGWWR+^b_cHXo5eSLim=$L=^i$ezR+bP#4UV-Hvfm6sK zXC+iDWz6BA45}~e}eS|zl_AT`BX|hNLoj*<)ux4X~CsQ=`Wo-*3 z4c$a93S&v$JW$pd3yt}a5A}SN2bPaWKLv!8<&Xw%0Yi*1zDKu?Fv;02$we>-n}=_7 zCe3@)Bec4}8IFjw$;wxm&MMO+IIlCA9}GH8R|uI^C`7X+M5Xd+>2ObolWA6Zi*~Ef z5wRvTRyUhMWKt@dwKE9u6_#X!s}KBGRmjJ3&Yz;0SXJ}q%3`^_uhgWFW4@mqO;F~1 zhH}Qs;vKIS_E^cC;o~RV6c)E@a>&MLIF%`CfqBQRP{ASw18!l;^`4*w8?yleEp1wmW{VgyLh+Tw?vC9P5&N=kYVemJJSoh1} JC6H*N{{s-avlsvX literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4664829f4f7b6c726d4d2b6b5c90bc84953ca437 GIT binary patch literal 887 zcmX|9%}*3D6z|M*XJ=uNU<}~87~uk&xJ=YUVgekHL=S`*z{?QQlz9d%F{Fq1)9{yUgnpz>IVuIX zTG!wLF~p1jg@$K@re_+dZw6L~JseiNN@#nwflTxaG3za280^nhe%`D0D=qtH>a4|dXCOM z=Fsg$jL;+r{0>bskS@S>tEL=6A{qiAYK)LDX1yTAbwW;iG{|?j?j2H=uWOhjgho*; zvlK!HTKXoA(|vpx$H6Cbr7^mG?HGeR&*5kCq=ibcJqPJJA932!yLI@Dp&8ObnOELMp-wtw<*mi{t^zNuSqr z1(~U8Ac!{a(6{=`z#7(@Biy_+&5CnrqnmSs-Qm>y2+xCma00XH2om6Yrd5c%DAy2p3qk49q|nI->iMxO~nzpb%Yl{uKb zGT;h@D8w;JaDcJJPV6LZ;3gy>7&+(-3f+$=BtX8qWn56nD=qJjHCkAc<4CHOqgUFg zI)Tf6Bp}qa(>#OlDC($A8B^}_1ZWl*`w9UHaEJou0|FPwhT)(R;sbNmEaR2joOkZ{ zr8(o?F^gDY8QYxRJQa+~E{GEtfRHS%gXV6UrXb*-NZSA4g|?maB`D zzu15F+?SDpz0CZ;&O!R7V3dKM70P_7=BlZf%cil>O-uKFmWw4*zt}90$7cJ4em0+s z6B)xV}9h+Y7e7_C=0YwkBk2!90F??T%M>CuFx^M01h8 zZSKHRd1lm<`X81Cg`om2?PQ9P3Huhyt{z!bBv>`*wt7%b`n6ayCN`h6_dazo#y1|q U>%Y*;zup5}z23M%<|sn{19y(d9{>OV literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_transfer_reversal_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..582777fda28587405a230f43b65ecd7c1825e534 GIT binary patch literal 616 zcmXw1J#Q2-5FPLCZ7$(LKuCNQ6cNo9iIsq;B8n&y6zCKkpk+K3^<(<~@66JkR#`_4PGy!~A<#>=1x+Pp(I23Fgln zI0XTMlu(hJ5RaoWs^UDZk~|?0!3z-aM-T}n-{O#$cbZO?{_!LuZStxxHjCODePsuD zGAT5QcJ-*KQ5+OQI}AC&E(^f?vE!$JkP`uU^ae1-1UnDhs-Kt&vgdpgWpVrHNONi4 zqaNTCwc+Ietu7ostIpDf-z;+ht7h3K?tH7^{?+lpgmOJDKn@?C8YR)xM85 zHdePAjBzQI<+f1LF!mMZZV#?L&|_609myFzKr^&6}{`DA-%mzu)jR_y}#2n}_|6gAR%(Jp0nDTnE$9tVOT7DBe`Mz8oTz46oB zb>fJj_&R&0B{n6X}nQUG}QKzdnt^@m7+NQRtU2j3&?LZjLEK1|m1?~RvL;af` tEehOn=&HLHuI#zK#e*kr3+n@NvU_LJP}Nmm*Xyg9uk-VBNFVXH9e=S9`e~f& zM;qseA%+u_;s~c!WMSi5iJdx;le&?cdXa~bg`Og2zeCIc@3URyM~%`AykEu%EamLQ zU8$V?SjfOujr~{xr-{1J$>jl@4Pp*VH4n=ImiIpCdpKW+<|b5ZK^= zdrzZAz+-qz-%X7(t43^tluqEPr9)0L@e23>41o)p92Ja8cuqM@h4Nrj(2Tuq*Ml9e ztem_xlN<}lA3o6PMENO5s&i;3XeghMjHW<{nj<95*&s1?i;%McO{y2}>E7JYO4+)A zS|EgGSuUxJ^Gp!(2~G7Ix_T3y<|%}|Y!vQ+=*zqapXCyg)!jVr$5}7jrQJScEF3~M z43qd}Sd{WK&mOO>KMI9j7G{94soOuMT2qOoSBZfonx->SB`!|!MpYY|IYO>B(uKM&#iKhX9V RZU6Rs?0aJ%*`pm zY)^x0Kmmmjh+zO@E3ly1Tag{30L4z=#BSh1V1XBa+8+Q#%>APC84D^yr{(@Kuw^N9 z5O$1{TUCxi$vBDBVmpF%Fk{qQ?3k#zmHEKzP&3znfdEnvSf_y5 z4Bgipb12-=Yt=Ar!Iiu<=c!#X$S_8kT0Y?<5pNkk%_x!V72zZnYLPP0;bA7jG*K=a zWF(>Qnx)>e_4V`jM&Ox{eB+^Z=gNzjBsu|Uw<^lRI3Y2^SS?^2r?ej#T*LUXPom<4 zyIO#ldiu{ zIz5(9|B5A7eiXj(v!T35lP6n`9{WPicQex$NS6s;*9tS{XL*M{mSx|#pEr&Rek&XD zsxF+niU#7jb|1m_#>(h;+*qBU)v0AU-qZ#4dm}VD{!|^;)+T6e&Mq~-HJ^@eZBNj4 zPVqbQZ0(k(Tsh3NYHnUL?^87j2D5==i7*r3=GV*T!;OGK&TWJ8RLdIOcss>d_xN4C ih58dK+D&Z;;XfC^2S32>80`LbYtS1#`vdfnNB;*Uz{fEF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35f11987788323cdf47b912d658227fdbfb746fd GIT binary patch literal 9609 zcma)C&2JmW6(>bnl5J749DUo8tTaw6BV3A%@NOP%szxh&`jf1*=4taPe}RoSli z*E*Ajlbxx@YxC^?7I7n9pl{}zqya&Pum{L_pl=`W(x3xi~P zqE~&-bJAY*120L@n)<*?dCdIY%@4y=V7-{Tj*_H4wb;_Dzo7kjiI)z`Zs~C1*Ck%z zRkyqfuK35VxfAc;|LcN3sW}zmxK+)$ra4m>D^Z$1MMyryrv*>*r-|=g*PI)gGmRN< z3i@JZyVkq&8{R$%!_%JzZWMY!`jeQml>d^&tdneK-5af)X0yH{{u2GT-s-0hh=0(B zc~Wma(tHeW?n}B=-)YrbyF~BSTM7gI<9buck#x(@`}LhCgnv?R?P85Bk7ih>)bAdjnH(PS7q6s5ps=0OnsP8ELp0Isa$pnoq!-xJ#Pw*ern`$g* z*kUlCm2Tkg*IQ~{MJxS5!*9wiNw;>SZlIr_OViLz+qee<$rec)ywKU;;Rl)*d_C_Y zVT<;Uq_q!01Fz;)w9-w{N+xL7tMmjdOpv;PhKj+X0zT>c+l{n@(*bEN8v#~qIC`$qLi;d!*-$(BRy7ZBC;1WY*83RE18nk{sayA z$|s<)#*{vw5BlW5w`Q!_M^Ipg);4IYE9G;5p^uWOXl1Vm5a|gTZdWovW4N*%wD>E1 zh$Mh`kxbz?r5pHW4TGk5wE%|yUIeol+{MK8a{60zJ-c6S$PVC9kaQlC~^26>1bDS^> zQj0~A?>S7IlNQU;lQ8zW-0j{Q)$j6A2>ujjX~2A&hB)#R>XR{qaJkRZ{#k|)S>)m* zbGvgSlo-o>3fo7VTQu87u_NY3S>ReUaAkBq=9q6Yp9K!L*ctPD*7kXKMYHULr>Pel zCq~S2+w*;JEavk#wbIx-KIW(%x^L(XI|}2J`4)n4Mm-A>m^Z^qQegpu$PK#9m~xE zU&)WT7bK|+)W%4_xtE@}F*^^21e2+=dK`Zmi6X39)9oXK0!`|Uc;Le8M(sjy$vnlz zxLaCGk~t3NZl5HY_`Y+(ozpN&E%Gi)E&|7n*hPm2sjU@wa0M)%U~LHLgq=t&^p&AL zvUkbxy$(ERg|W+H#0Lve7`|BG>o^qH*huUG=;c8)*dDS1I<^KoqBwLjC$*EToupoh z!1s;Soo1D7(pc(B*=TFRcL5}1av{z(X=wK+PdklSkT6G{i4^Y!a)Ouo zT;zrXWkQM#2K@~WTdLDxah{K7j*!5Nw)c;`09#vFu1{%kF@>DLMY?@C3O*73a?e&G2LXr0tt6;88LbcatXWEk39)}SzG9pKdO($Ez!6_UAR2N*TU`Q)3PH`Ig7q(b1 zaOwIGV4x0PEq3Smd85!}60J%^-IYRroXts#NTIM_M;-xCodWZXBkE(||dM6}J=P*;!&}kJfZs=gOP9sdBPzU^#@SI($!^ z3HgPDgwbrXY9ARNP@57PwFy5H;mT~#szq4UB4kb68uCI&Hwmko1fHX-29;fgK?4kf zhAd%7CzL0S6T10CMLywYKh4DT1Cts6V}k@=cGa z&pdukF96gGapi`&i+BOaBGfE0As8<$46^l-ygR@x?!(oAUe(YhEDd&_o|~hK8P$LD#E>r@@;RrbS$eiRx~bEjxR088vb&`_RRnBo^VnW$Ie#^;-3`pqlD82RL>G4jp* zbWDGY_Xr#@$k3zbC+ik)LBm^0;l1pZxVGUDEZ>+pheodB0TD$T9?h_hM5UrDNFAxDez$Af;6XkbKl&OtMsVv*<{{u%%~hh zF1wdvx+KGe77h@PHVP{qHnkp`V-Zo9i1oZ>04{G2NH8llmr;c1N$|j`)hGbGz!UX@ zt+hKw#WXl)e#bPIZ1u$Xx)C`7qNitcYS_i*Mo*nPeh8vN{sW`j5F!tIt__L^r4DKW@p_RjtX!L6jMiq~%ryi--jKzx&Egnu z622`;N#l*&jG=*MTT^I<5PAV!Vnd8mDHi8b9;qQISmw^DxQtP8Olv!Lpc!Mfgvque zCeK0II|swwF__EUGs5*|r1sBc5bdDL3^5+sy+ldOIod^e_~eb^3`eipX(P6O5ux?Z z9ase9t2E#L1|#>mndKpU-J-OrH%=My<5P_oNz@iEr~@Miz>V?Rjv-Q`|pZ{ zF02T1l1Q)RGTL0H|;&&<^<2$>z@8RQ<-Zb<&06XSM15&++H*mqjuTUEHx%!EUc#cADnis}l|_j9tO8L# zo>l{ED_>N<_~^^)&t_hKUVWX$&aHj5_W0TC{`2ZSv2N7<_`alL@!K4!xQNTLvfGkn zqB!3}_2Z*h{FJCSiIN*`jH_aZ^!~i!*y5|tKzzHG$cU-fNtdh$tej&F)OXYGsA&Hv q-axaAe~BPoRLbS@x09vv?l-0NZ%VEIOnx+3p8l)#ZAttu$NwL$=0gnt literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4ac168ec9206ddee698a943b0d287f251cf98e3 GIT binary patch literal 482 zcmXv~zfS@&6mIW;0D_|?x|`g)z!H8fA|lW zTbJ@ufD76dGk_G{<0*%`Tjjjrl9n#)Un`d;A))5JF;#VutI=(m?6`S11~>*fc{8` z@g-+c#9VhF0S$Li7NzPY@bfCAJW7GmyiRE<*fg=YLFr@~B`))V*7k$#f{a88WXPXL z7t~k_Nv?&4q}4I=V?HFEXfOuO$PD<5Bypd}xgH7L4o}aBiZ!&PDTs!kh|*asfyiPF zLLc3Z)HD}MQdVq9T|Sia%xYJ-iUG>9CHg2;Gply-Zf`ksV?&xbt*CHfWmZu)qGnOi mv}e$^dhSlX$eM;)9o2zx-#*58Q$e`>Q^C0Q9Bz;aMc*GD6Mta< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce29c28b42ff5bdfb0cdaae34e7b52f9fa0cd108 GIT binary patch literal 800 zcmX|9J8u&~5Z=9)oy0Z|2RR`Kp(Krq_ylRA6cGrD$RH3xx@L9GZS0fpb}zf@VE53| z#dK*AHNS$&a)VAvMMY=Hgd!EQw{}*#nQy+inVp%PpVjIrf+PPujDI)?{np0vxC<~p z1aN^O6yXG=IKWtAE3r~LunTM_PU;3OMizRBBIgr|T#CQjCO+^+UbFN^8%>TCi>-3T9mUeSza zxCL+B@}&i1-!jWsM>8Y0>E)XrXs5?{{{@RO9y6sYdlQN17(g4|Q13|ckAxn~SQhl(<(m#LViDfhlkT4Y`a qbW=VsFK{R}z{K#$M<8Z4#`xMpc>fADu2A!@cNdp0Yu5-=5&a)=1lFJc literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_webhook_endpoint_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fddf63ebe244b4246b558b1dbe92c6fdc9df4e01 GIT binary patch literal 8054 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, `\\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + unit_label: NotRequired[str] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. + """ + + +class PlanCreateParamsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ + + +class PlanCreateParamsTransformUsage(TypedDict): + divide_by: int + """ + Divide usage by this number. + """ + round: Literal["down", "up"] + """ + After division, either round the result `up` or `down`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_delete_params.py new file mode 100644 index 00000000..7980a799 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class PlanDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_list_params.py new file mode 100644 index 00000000..e33e7ce1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class PlanListParams(RequestOptions): + active: NotRequired[bool] + """ + Only return plans that are active or inactive (e.g., pass `false` to list all inactive plans). + """ + created: NotRequired["PlanListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + product: NotRequired[str] + """ + Only return plans for the given product. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class PlanListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_modify_params.py new file mode 100644 index 00000000..c9efc214 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_modify_params.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class PlanModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the plan is currently available for new subscriptions. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired[str] + """ + A brief description of the plan, hidden from customers. + """ + product: NotRequired[str] + """ + The product the plan belongs to. This cannot be changed once it has been used in a subscription or subscription schedule. + """ + trial_period_days: NotRequired[int] + """ + Default number of trial days when subscribing a customer to this plan using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_retrieve_params.py new file mode 100644 index 00000000..f1d5ea9e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class PlanRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_update_params.py new file mode 100644 index 00000000..7c2ef5cf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_plan_update_params.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PlanUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Whether the plan is currently available for new subscriptions. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired[str] + """ + A brief description of the plan, hidden from customers. + """ + product: NotRequired[str] + """ + The product the plan belongs to. This cannot be changed once it has been used in a subscription or subscription schedule. + """ + trial_period_days: NotRequired[int] + """ + Default number of trial days when subscribing a customer to this plan using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_create_params.py new file mode 100644 index 00000000..decaa2d7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_create_params.py @@ -0,0 +1,262 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class PriceCreateParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the price can be used for new purchases. Defaults to `true`. + """ + billing_scheme: NotRequired[Literal["per_unit", "tiered"]] + """ + Describes how to compute the price per period. Either `per_unit` or `tiered`. `per_unit` indicates that the fixed amount (specified in `unit_amount` or `unit_amount_decimal`) will be charged per unit in `quantity` (for prices with `usage_type=licensed`), or per unit of total usage (for prices with `usage_type=metered`). `tiered` indicates that the unit pricing will be computed using a tiering strategy as defined using the `tiers` and `tiers_mode` attributes. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[str, "PriceCreateParamsCurrencyOptions"] + ] + """ + Prices defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + custom_unit_amount: NotRequired["PriceCreateParamsCustomUnitAmount"] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + lookup_key: NotRequired[str] + """ + A lookup key used to retrieve prices dynamically from a static string. This may be up to 200 characters. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired[str] + """ + A brief description of the price, hidden from customers. + """ + product: NotRequired[str] + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + product_data: NotRequired["PriceCreateParamsProductData"] + """ + These fields can be used to create a new product that this price will belong to. + """ + recurring: NotRequired["PriceCreateParamsRecurring"] + """ + The recurring components of a price such as `interval` and `usage_type`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: NotRequired[List["PriceCreateParamsTier"]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + tiers_mode: NotRequired[Literal["graduated", "volume"]] + """ + Defines if the tiering price should be `graduated` or `volume` based. In `volume`-based tiering, the maximum quantity within a period determines the per unit price, in `graduated` tiering pricing can successively change as the quantity grows. + """ + transfer_lookup_key: NotRequired[bool] + """ + If set to true, will atomically remove the lookup key from the existing price, and assign it to this price. + """ + transform_quantity: NotRequired["PriceCreateParamsTransformQuantity"] + """ + Apply a transformation to the reported usage or set quantity before computing the billed price. Cannot be combined with `tiers`. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. One of `unit_amount`, `unit_amount_decimal`, or `custom_unit_amount` is required, unless `billing_scheme=tiered`. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class PriceCreateParamsCurrencyOptions(TypedDict): + custom_unit_amount: NotRequired[ + "PriceCreateParamsCurrencyOptionsCustomUnitAmount" + ] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: NotRequired[List["PriceCreateParamsCurrencyOptionsTier"]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class PriceCreateParamsCurrencyOptionsCustomUnitAmount(TypedDict): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class PriceCreateParamsCurrencyOptionsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ + + +class PriceCreateParamsCustomUnitAmount(TypedDict): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class PriceCreateParamsProductData(TypedDict): + active: NotRequired[bool] + """ + Whether the product is currently available for purchase. Defaults to `true`. + """ + id: NotRequired[str] + """ + The identifier for the product. Must be unique. If not provided, an identifier will be randomly generated. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: str + """ + The product's name, meant to be displayable to the customer. + """ + statement_descriptor: NotRequired[str] + """ + An arbitrary string to be displayed on your customer's credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all. + + This may be up to 22 characters. The statement description may not include `<`, `>`, `\\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + unit_label: NotRequired[str] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. + """ + + +class PriceCreateParamsRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + meter: NotRequired[str] + """ + The meter tracking the usage of a metered price + """ + trial_period_days: NotRequired[int] + """ + Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan). + """ + usage_type: NotRequired[Literal["licensed", "metered"]] + """ + Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`. + """ + + +class PriceCreateParamsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ + + +class PriceCreateParamsTransformQuantity(TypedDict): + divide_by: int + """ + Divide usage by this number. + """ + round: Literal["down", "up"] + """ + After division, either round the result `up` or `down`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_list_params.py new file mode 100644 index 00000000..e1df106d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_list_params.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PriceListParams(RequestOptions): + active: NotRequired[bool] + """ + Only return prices that are active or inactive (e.g., pass `false` to list all inactive prices). + """ + created: NotRequired["PriceListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + currency: NotRequired[str] + """ + Only return prices for the given currency. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + lookup_keys: NotRequired[List[str]] + """ + Only return the price with these lookup_keys, if any exist. You can specify up to 10 lookup_keys. + """ + product: NotRequired[str] + """ + Only return prices for the given product. + """ + recurring: NotRequired["PriceListParamsRecurring"] + """ + Only return prices with these recurring fields. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + type: NotRequired[Literal["one_time", "recurring"]] + """ + Only return prices of type `recurring` or `one_time`. + """ + + +class PriceListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class PriceListParamsRecurring(TypedDict): + interval: NotRequired[Literal["day", "month", "week", "year"]] + """ + Filter by billing frequency. Either `day`, `week`, `month` or `year`. + """ + meter: NotRequired[str] + """ + Filter by the price's meter. + """ + usage_type: NotRequired[Literal["licensed", "metered"]] + """ + Filter by the usage type for this price. Can be either `metered` or `licensed`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_modify_params.py new file mode 100644 index 00000000..1f8983ae --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_modify_params.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class PriceModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the price can be used for new purchases. Defaults to `true`. + """ + currency_options: NotRequired[ + "Literal['']|Dict[str, PriceModifyParamsCurrencyOptions]" + ] + """ + Prices defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + lookup_key: NotRequired[str] + """ + A lookup key used to retrieve prices dynamically from a static string. This may be up to 200 characters. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired[str] + """ + A brief description of the price, hidden from customers. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + transfer_lookup_key: NotRequired[bool] + """ + If set to true, will atomically remove the lookup key from the existing price, and assign it to this price. + """ + + +class PriceModifyParamsCurrencyOptions(TypedDict): + custom_unit_amount: NotRequired[ + "PriceModifyParamsCurrencyOptionsCustomUnitAmount" + ] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: NotRequired[List["PriceModifyParamsCurrencyOptionsTier"]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class PriceModifyParamsCurrencyOptionsCustomUnitAmount(TypedDict): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class PriceModifyParamsCurrencyOptionsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_retrieve_params.py new file mode 100644 index 00000000..e8138021 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class PriceRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_search_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_search_params.py new file mode 100644 index 00000000..f10b84c3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_search_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class PriceSearchParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + page: NotRequired[str] + """ + A cursor for pagination across multiple pages of results. Don't include this parameter on the first call. Use the next_page value returned in a previous response to request subsequent results. + """ + query: str + """ + The search query string. See [search query language](https://stripe.com/docs/search#search-query-language) and the list of supported [query fields for prices](https://stripe.com/docs/search#query-fields-for-prices). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_update_params.py new file mode 100644 index 00000000..35b48361 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_price_update_params.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class PriceUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Whether the price can be used for new purchases. Defaults to `true`. + """ + currency_options: NotRequired[ + "Literal['']|Dict[str, PriceUpdateParamsCurrencyOptions]" + ] + """ + Prices defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + lookup_key: NotRequired[str] + """ + A lookup key used to retrieve prices dynamically from a static string. This may be up to 200 characters. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired[str] + """ + A brief description of the price, hidden from customers. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + transfer_lookup_key: NotRequired[bool] + """ + If set to true, will atomically remove the lookup key from the existing price, and assign it to this price. + """ + + +class PriceUpdateParamsCurrencyOptions(TypedDict): + custom_unit_amount: NotRequired[ + "PriceUpdateParamsCurrencyOptionsCustomUnitAmount" + ] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: NotRequired[List["PriceUpdateParamsCurrencyOptionsTier"]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class PriceUpdateParamsCurrencyOptionsCustomUnitAmount(TypedDict): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class PriceUpdateParamsCurrencyOptionsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_feature_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_feature_params.py new file mode 100644 index 00000000..4ec04f54 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_feature_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductCreateFeatureParams(RequestOptions): + entitlement_feature: str + """ + The ID of the [Feature](https://stripe.com/docs/api/entitlements/feature) object attached to this product. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_params.py new file mode 100644 index 00000000..761f0fd6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_create_params.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class ProductCreateParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the product is currently available for purchase. Defaults to `true`. + """ + default_price_data: NotRequired["ProductCreateParamsDefaultPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object. This Price will be set as the default price for this product. + """ + description: NotRequired[str] + """ + The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + id: NotRequired[str] + """ + An identifier will be randomly generated by Stripe. You can optionally override this ID, but the ID must be unique across all products in your Stripe account. + """ + images: NotRequired[List[str]] + """ + A list of up to 8 URLs of images for this product, meant to be displayable to the customer. + """ + marketing_features: NotRequired[ + List["ProductCreateParamsMarketingFeature"] + ] + """ + A list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: str + """ + The product's name, meant to be displayable to the customer. + """ + package_dimensions: NotRequired["ProductCreateParamsPackageDimensions"] + """ + The dimensions of this product for shipping purposes. + """ + shippable: NotRequired[bool] + """ + Whether this product is shipped (i.e., physical goods). + """ + statement_descriptor: NotRequired[str] + """ + An arbitrary string to be displayed on your customer's credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all. + + This may be up to 22 characters. The statement description may not include `<`, `>`, `\\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped. + It must contain at least one letter. Only used for subscription payments. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + type: NotRequired[Literal["good", "service"]] + """ + The type of the product. Defaults to `service` if not explicitly specified, enabling use of this product with Subscriptions and Plans. Set this parameter to `good` to use this product with Orders and SKUs. On API versions before `2018-02-05`, this field defaults to `good` for compatibility reasons. + """ + unit_label: NotRequired[str] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. + """ + url: NotRequired[str] + """ + A URL of a publicly-accessible webpage for this product. + """ + + +class ProductCreateParamsDefaultPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[str, "ProductCreateParamsDefaultPriceDataCurrencyOptions"] + ] + """ + Prices defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + custom_unit_amount: NotRequired[ + "ProductCreateParamsDefaultPriceDataCustomUnitAmount" + ] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + recurring: NotRequired["ProductCreateParamsDefaultPriceDataRecurring"] + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. One of `unit_amount`, `unit_amount_decimal`, or `custom_unit_amount` is required. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class ProductCreateParamsDefaultPriceDataCurrencyOptions(TypedDict): + custom_unit_amount: NotRequired[ + "ProductCreateParamsDefaultPriceDataCurrencyOptionsCustomUnitAmount" + ] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: NotRequired[ + List["ProductCreateParamsDefaultPriceDataCurrencyOptionsTier"] + ] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class ProductCreateParamsDefaultPriceDataCurrencyOptionsCustomUnitAmount( + TypedDict, +): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class ProductCreateParamsDefaultPriceDataCurrencyOptionsTier(TypedDict): + flat_amount: NotRequired[int] + """ + The flat billing amount for an entire tier, regardless of the number of units in the tier. + """ + flat_amount_decimal: NotRequired[str] + """ + Same as `flat_amount`, but accepts a decimal value representing an integer in the minor units of the currency. Only one of `flat_amount` and `flat_amount_decimal` can be set. + """ + unit_amount: NotRequired[int] + """ + The per unit billing amount for each individual unit for which this tier applies. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + up_to: Union[Literal["inf"], int] + """ + Specifies the upper bound of this tier. The lower bound of a tier is the upper bound of the previous tier adding one. Use `inf` to define a fallback tier. + """ + + +class ProductCreateParamsDefaultPriceDataCustomUnitAmount(TypedDict): + enabled: bool + """ + Pass in `true` to enable `custom_unit_amount`, otherwise omit `custom_unit_amount`. + """ + maximum: NotRequired[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: NotRequired[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: NotRequired[int] + """ + The starting unit amount which can be updated by the customer. + """ + + +class ProductCreateParamsDefaultPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class ProductCreateParamsMarketingFeature(TypedDict): + name: str + """ + The marketing feature name. Up to 80 characters long. + """ + + +class ProductCreateParamsPackageDimensions(TypedDict): + height: float + """ + Height, in inches. Maximum precision is 2 decimal places. + """ + length: float + """ + Length, in inches. Maximum precision is 2 decimal places. + """ + weight: float + """ + Weight, in ounces. Maximum precision is 2 decimal places. + """ + width: float + """ + Width, in inches. Maximum precision is 2 decimal places. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_feature_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_feature_params.py new file mode 100644 index 00000000..354bb60a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_feature_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ProductDeleteFeatureParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_params.py new file mode 100644 index 00000000..b758f6bf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ProductDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_create_params.py new file mode 100644 index 00000000..b52580ed --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_create_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ProductFeatureCreateParams(TypedDict): + entitlement_feature: str + """ + The ID of the [Feature](https://stripe.com/docs/api/entitlements/feature) object attached to this product. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_delete_params.py new file mode 100644 index 00000000..8cee6f28 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing_extensions import TypedDict + + +class ProductFeatureDeleteParams(TypedDict): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_list_params.py new file mode 100644 index 00000000..6e35305b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ProductFeatureListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_retrieve_params.py new file mode 100644 index 00000000..d3419641 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_feature_retrieve_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ProductFeatureRetrieveParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_features_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_features_params.py new file mode 100644 index 00000000..23b45565 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_features_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductListFeaturesParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_params.py new file mode 100644 index 00000000..c52f65b8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_list_params.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ProductListParams(RequestOptions): + active: NotRequired[bool] + """ + Only return products that are active or inactive (e.g., pass `false` to list all inactive products). + """ + created: NotRequired["ProductListParamsCreated|int"] + """ + Only return products that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + ids: NotRequired[List[str]] + """ + Only return products with the given IDs. Cannot be used with [starting_after](https://stripe.com/docs/api#list_products-starting_after) or [ending_before](https://stripe.com/docs/api#list_products-ending_before). + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + shippable: NotRequired[bool] + """ + Only return products that can be shipped (i.e., physical, not digital products). + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + type: NotRequired[Literal["good", "service"]] + """ + Only return products of this type. + """ + url: NotRequired[str] + """ + Only return products with the given url. + """ + + +class ProductListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_modify_params.py new file mode 100644 index 00000000..1a738195 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_modify_params.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ProductModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the product is available for purchase. + """ + default_price: NotRequired[str] + """ + The ID of the [Price](https://stripe.com/docs/api/prices) object that is the default price for this product. + """ + description: NotRequired["Literal['']|str"] + """ + The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + images: NotRequired["Literal['']|List[str]"] + """ + A list of up to 8 URLs of images for this product, meant to be displayable to the customer. + """ + marketing_features: NotRequired[ + "Literal['']|List[ProductModifyParamsMarketingFeature]" + ] + """ + A list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: NotRequired[str] + """ + The product's name, meant to be displayable to the customer. + """ + package_dimensions: NotRequired[ + "Literal['']|ProductModifyParamsPackageDimensions" + ] + """ + The dimensions of this product for shipping purposes. + """ + shippable: NotRequired[bool] + """ + Whether this product is shipped (i.e., physical goods). + """ + statement_descriptor: NotRequired[str] + """ + An arbitrary string to be displayed on your customer's credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all. + + This may be up to 22 characters. The statement description may not include `<`, `>`, `\\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped. + It must contain at least one letter. May only be set if `type=service`. Only used for subscription payments. + """ + tax_code: NotRequired["Literal['']|str"] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + unit_label: NotRequired["Literal['']|str"] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. May only be set if `type=service`. + """ + url: NotRequired["Literal['']|str"] + """ + A URL of a publicly-accessible webpage for this product. + """ + + +class ProductModifyParamsMarketingFeature(TypedDict): + name: str + """ + The marketing feature name. Up to 80 characters long. + """ + + +class ProductModifyParamsPackageDimensions(TypedDict): + height: float + """ + Height, in inches. Maximum precision is 2 decimal places. + """ + length: float + """ + Length, in inches. Maximum precision is 2 decimal places. + """ + weight: float + """ + Weight, in ounces. Maximum precision is 2 decimal places. + """ + width: float + """ + Width, in inches. Maximum precision is 2 decimal places. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_feature_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_feature_params.py new file mode 100644 index 00000000..7d3f8f20 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_feature_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductRetrieveFeatureParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_params.py new file mode 100644 index 00000000..c9cc1bd6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_search_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_search_params.py new file mode 100644 index 00000000..e9ac3e56 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_search_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductSearchParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + page: NotRequired[str] + """ + A cursor for pagination across multiple pages of results. Don't include this parameter on the first call. Use the next_page value returned in a previous response to request subsequent results. + """ + query: str + """ + The search query string. See [search query language](https://stripe.com/docs/search#search-query-language) and the list of supported [query fields for products](https://stripe.com/docs/search#query-fields-for-products). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_update_params.py new file mode 100644 index 00000000..685966a0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_product_update_params.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ProductUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Whether the product is available for purchase. + """ + default_price: NotRequired[str] + """ + The ID of the [Price](https://stripe.com/docs/api/prices) object that is the default price for this product. + """ + description: NotRequired["Literal['']|str"] + """ + The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + images: NotRequired["Literal['']|List[str]"] + """ + A list of up to 8 URLs of images for this product, meant to be displayable to the customer. + """ + marketing_features: NotRequired[ + "Literal['']|List[ProductUpdateParamsMarketingFeature]" + ] + """ + A list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: NotRequired[str] + """ + The product's name, meant to be displayable to the customer. + """ + package_dimensions: NotRequired[ + "Literal['']|ProductUpdateParamsPackageDimensions" + ] + """ + The dimensions of this product for shipping purposes. + """ + shippable: NotRequired[bool] + """ + Whether this product is shipped (i.e., physical goods). + """ + statement_descriptor: NotRequired[str] + """ + An arbitrary string to be displayed on your customer's credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all. + + This may be up to 22 characters. The statement description may not include `<`, `>`, `\\`, `"`, `'` characters, and will appear on your customer's statement in capital letters. Non-ASCII characters are automatically stripped. + It must contain at least one letter. May only be set if `type=service`. Only used for subscription payments. + """ + tax_code: NotRequired["Literal['']|str"] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + unit_label: NotRequired["Literal['']|str"] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. May only be set if `type=service`. + """ + url: NotRequired["Literal['']|str"] + """ + A URL of a publicly-accessible webpage for this product. + """ + + +class ProductUpdateParamsMarketingFeature(TypedDict): + name: str + """ + The marketing feature name. Up to 80 characters long. + """ + + +class ProductUpdateParamsPackageDimensions(TypedDict): + height: float + """ + Height, in inches. Maximum precision is 2 decimal places. + """ + length: float + """ + Length, in inches. Maximum precision is 2 decimal places. + """ + weight: float + """ + Weight, in ounces. Maximum precision is 2 decimal places. + """ + width: float + """ + Width, in inches. Maximum precision is 2 decimal places. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_create_params.py new file mode 100644 index 00000000..684750d8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_create_params.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PromotionCodeCreateParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the promotion code is currently active. + """ + code: NotRequired[str] + """ + The customer-facing code. Regardless of case, this code must be unique across all active promotion codes for a specific customer. Valid characters are lower case letters (a-z), upper case letters (A-Z), and digits (0-9). + + If left blank, we will generate one automatically. + """ + customer: NotRequired[str] + """ + The customer that this promotion code can be used by. If not set, the promotion code can be used by all customers. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + The timestamp at which this promotion code will expire. If the coupon has specified a `redeems_by`, then this value cannot be after the coupon's `redeems_by`. + """ + max_redemptions: NotRequired[int] + """ + A positive integer specifying the number of times the promotion code can be redeemed. If the coupon has specified a `max_redemptions`, then this value cannot be greater than the coupon's `max_redemptions`. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + promotion: "PromotionCodeCreateParamsPromotion" + """ + The promotion referenced by this promotion code. + """ + restrictions: NotRequired["PromotionCodeCreateParamsRestrictions"] + """ + Settings that restrict the redemption of the promotion code. + """ + + +class PromotionCodeCreateParamsPromotion(TypedDict): + coupon: NotRequired[str] + """ + If promotion `type` is `coupon`, the coupon for this promotion code. + """ + type: Literal["coupon"] + """ + Specifies the type of promotion. + """ + + +class PromotionCodeCreateParamsRestrictions(TypedDict): + currency_options: NotRequired[ + Dict[str, "PromotionCodeCreateParamsRestrictionsCurrencyOptions"] + ] + """ + Promotion codes defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + first_time_transaction: NotRequired[bool] + """ + A Boolean indicating if the Promotion Code should only be redeemed for Customers without any successful payments or invoices + """ + minimum_amount: NotRequired[int] + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ + minimum_amount_currency: NotRequired[str] + """ + Three-letter [ISO code](https://stripe.com/docs/currencies) for minimum_amount + """ + + +class PromotionCodeCreateParamsRestrictionsCurrencyOptions(TypedDict): + minimum_amount: NotRequired[int] + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_list_params.py new file mode 100644 index 00000000..693f319a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_list_params.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class PromotionCodeListParams(RequestOptions): + active: NotRequired[bool] + """ + Filter promotion codes by whether they are active. + """ + code: NotRequired[str] + """ + Only return promotion codes that have this case-insensitive code. + """ + coupon: NotRequired[str] + """ + Only return promotion codes for this coupon. + """ + created: NotRequired["PromotionCodeListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + customer: NotRequired[str] + """ + Only return promotion codes that are restricted to this customer. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class PromotionCodeListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_modify_params.py new file mode 100644 index 00000000..671f7047 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_modify_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PromotionCodeModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the promotion code is currently active. A promotion code can only be reactivated when the coupon is still valid and the promotion code is otherwise redeemable. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + restrictions: NotRequired["PromotionCodeModifyParamsRestrictions"] + """ + Settings that restrict the redemption of the promotion code. + """ + + +class PromotionCodeModifyParamsRestrictions(TypedDict): + currency_options: NotRequired[ + Dict[str, "PromotionCodeModifyParamsRestrictionsCurrencyOptions"] + ] + """ + Promotion codes defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class PromotionCodeModifyParamsRestrictionsCurrencyOptions(TypedDict): + minimum_amount: NotRequired[int] + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_retrieve_params.py new file mode 100644 index 00000000..5129081a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class PromotionCodeRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_update_params.py new file mode 100644 index 00000000..9f05b1a7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_promotion_code_update_params.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PromotionCodeUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Whether the promotion code is currently active. A promotion code can only be reactivated when the coupon is still valid and the promotion code is otherwise redeemable. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + restrictions: NotRequired["PromotionCodeUpdateParamsRestrictions"] + """ + Settings that restrict the redemption of the promotion code. + """ + + +class PromotionCodeUpdateParamsRestrictions(TypedDict): + currency_options: NotRequired[ + Dict[str, "PromotionCodeUpdateParamsRestrictionsCurrencyOptions"] + ] + """ + Promotion codes defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class PromotionCodeUpdateParamsRestrictionsCurrencyOptions(TypedDict): + minimum_amount: NotRequired[int] + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_accept_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_accept_params.py new file mode 100644 index 00000000..5199188c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_accept_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteAcceptParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_cancel_params.py new file mode 100644 index 00000000..1797e465 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_computed_upfront_line_items_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_computed_upfront_line_items_list_params.py new file mode 100644 index 00000000..6106ebe9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_computed_upfront_line_items_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class QuoteComputedUpfrontLineItemsListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_create_params.py new file mode 100644 index 00000000..13b910fa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_create_params.py @@ -0,0 +1,298 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class QuoteCreateParams(RequestOptions): + application_fee_amount: NotRequired["Literal['']|int"] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. There cannot be any line items with recurring prices when using this field. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. There must be at least 1 line item with a recurring price to use this field. + """ + automatic_tax: NotRequired["QuoteCreateParamsAutomaticTax"] + """ + Settings for automatic tax lookup for this quote and resulting invoices and subscriptions. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay invoices at the end of the subscription cycle or at invoice finalization using the default payment method attached to the subscription or customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + customer: NotRequired[str] + """ + The customer for which this quote belongs to. A customer is required before finalizing the quote. Once specified, it cannot be changed. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any line item that does not have `tax_rates` set. + """ + description: NotRequired["Literal['']|str"] + """ + A description that will be displayed on the quote PDF. If no value is passed, the default description configured in your [quote template settings](https://dashboard.stripe.com/settings/billing/quote) will be used. + """ + discounts: NotRequired["Literal['']|List[QuoteCreateParamsDiscount]"] + """ + The discounts applied to the quote. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + A future timestamp on which the quote will be canceled if in `open` or `draft` status. Measured in seconds since the Unix epoch. If no value is passed, the default expiration date configured in your [quote template settings](https://dashboard.stripe.com/settings/billing/quote) will be used. + """ + footer: NotRequired["Literal['']|str"] + """ + A footer that will be displayed on the quote PDF. If no value is passed, the default footer configured in your [quote template settings](https://dashboard.stripe.com/settings/billing/quote) will be used. + """ + from_quote: NotRequired["QuoteCreateParamsFromQuote"] + """ + Clone an existing quote. The new quote will be created in `status=draft`. When using this parameter, you cannot specify any other parameters except for `expires_at`. + """ + header: NotRequired["Literal['']|str"] + """ + A header that will be displayed on the quote PDF. If no value is passed, the default header configured in your [quote template settings](https://dashboard.stripe.com/settings/billing/quote) will be used. + """ + invoice_settings: NotRequired["QuoteCreateParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + line_items: NotRequired[List["QuoteCreateParamsLineItem"]] + """ + A list of line items the customer is being quoted for. Each line item includes information about the product, the quantity, and the resulting cost. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge. + """ + subscription_data: NotRequired["QuoteCreateParamsSubscriptionData"] + """ + When creating a subscription or subscription schedule, the specified configuration data will be used. There must be at least one line item with a recurring price for a subscription or subscription schedule to be created. A subscription schedule is created if `subscription_data[effective_date]` is present and in the future, otherwise a subscription is created. + """ + test_clock: NotRequired[str] + """ + ID of the test clock to attach to the quote. + """ + transfer_data: NotRequired["Literal['']|QuoteCreateParamsTransferData"] + """ + The data with which to automatically create a Transfer for each of the invoices. + """ + + +class QuoteCreateParamsAutomaticTax(TypedDict): + enabled: bool + """ + Controls whether Stripe will automatically compute tax on the resulting invoices or subscriptions as well as the quote itself. + """ + liability: NotRequired["QuoteCreateParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class QuoteCreateParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteCreateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteCreateParamsFromQuote(TypedDict): + is_revision: NotRequired[bool] + """ + Whether this quote is a revision of the previous quote. + """ + quote: str + """ + The `id` of the quote that will be cloned. + """ + + +class QuoteCreateParamsInvoiceSettings(TypedDict): + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay the invoice generated by this quote. This value will be `null` for quotes where `collection_method=charge_automatically`. + """ + issuer: NotRequired["QuoteCreateParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class QuoteCreateParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteCreateParamsLineItem(TypedDict): + discounts: NotRequired[ + "Literal['']|List[QuoteCreateParamsLineItemDiscount]" + ] + """ + The discounts applied to this line item. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["QuoteCreateParamsLineItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + The quantity of the line item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the line item. When set, the `default_tax_rates` on the quote do not apply to this line item. + """ + + +class QuoteCreateParamsLineItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteCreateParamsLineItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: NotRequired["QuoteCreateParamsLineItemPriceDataRecurring"] + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class QuoteCreateParamsLineItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class QuoteCreateParamsSubscriptionData(TypedDict): + billing_mode: NotRequired["QuoteCreateParamsSubscriptionDataBillingMode"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + description: NotRequired[str] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + effective_date: NotRequired[ + "Literal['']|Literal['current_period_end']|int" + ] + """ + When creating a new subscription, the date of which the subscription schedule will start after the quote is accepted. The `effective_date` is ignored if it is in the past when the quote is accepted. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on the subscription or subscription schedule when the quote is accepted. If a recurring price is included in `line_items`, this field will be passed to the resulting subscription's `metadata` field. If `subscription_data.effective_date` is used, this field will be passed to the resulting subscription schedule's `phases.metadata` field. Unlike object-level metadata, this field is declarative. Updates will clear prior values. + """ + trial_period_days: NotRequired["Literal['']|int"] + """ + Integer representing the number of trial period days before the customer is charged for the first time. + """ + + +class QuoteCreateParamsSubscriptionDataBillingMode(TypedDict): + flexible: NotRequired[ + "QuoteCreateParamsSubscriptionDataBillingModeFlexible" + ] + """ + Configure behavior for flexible billing mode. + """ + type: Literal["classic", "flexible"] + """ + Controls the calculation and orchestration of prorations and invoices for subscriptions. If no value is passed, the default is `flexible`. + """ + + +class QuoteCreateParamsSubscriptionDataBillingModeFlexible(TypedDict): + proration_discounts: NotRequired[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + +class QuoteCreateParamsTransferData(TypedDict): + amount: NotRequired[int] + """ + The amount that will be transferred automatically when the invoice is paid. If no amount is set, the full amount is transferred. There cannot be any line items with recurring prices when using this field. + """ + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. There must be at least 1 line item with a recurring price to use this field. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_finalize_quote_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_finalize_quote_params.py new file mode 100644 index 00000000..e07b0558 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_finalize_quote_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteFinalizeQuoteParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + A future timestamp on which the quote will be canceled if in `open` or `draft` status. Measured in seconds since the Unix epoch. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_line_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_line_item_list_params.py new file mode 100644 index 00000000..b08ec8ec --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_line_item_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class QuoteLineItemListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_computed_upfront_line_items_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_computed_upfront_line_items_params.py new file mode 100644 index 00000000..4f38ee12 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_computed_upfront_line_items_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteListComputedUpfrontLineItemsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_line_items_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_line_items_params.py new file mode 100644 index 00000000..1cbaa9e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_line_items_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteListLineItemsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_params.py new file mode 100644 index 00000000..cb888202 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_list_params.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class QuoteListParams(RequestOptions): + customer: NotRequired[str] + """ + The ID of the customer whose quotes will be retrieved. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["accepted", "canceled", "draft", "open"]] + """ + The status of the quote. + """ + test_clock: NotRequired[str] + """ + Provides a list of quotes that are associated with the specified test clock. The response will not include quotes with test clocks if this and the customer parameter is not set. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_modify_params.py new file mode 100644 index 00000000..9a66752a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_modify_params.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class QuoteModifyParams(RequestOptions): + application_fee_amount: NotRequired["Literal['']|int"] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. There cannot be any line items with recurring prices when using this field. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. There must be at least 1 line item with a recurring price to use this field. + """ + automatic_tax: NotRequired["QuoteModifyParamsAutomaticTax"] + """ + Settings for automatic tax lookup for this quote and resulting invoices and subscriptions. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay invoices at the end of the subscription cycle or at invoice finalization using the default payment method attached to the subscription or customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + customer: NotRequired[str] + """ + The customer for which this quote belongs to. A customer is required before finalizing the quote. Once specified, it cannot be changed. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any line item that does not have `tax_rates` set. + """ + description: NotRequired["Literal['']|str"] + """ + A description that will be displayed on the quote PDF. + """ + discounts: NotRequired["Literal['']|List[QuoteModifyParamsDiscount]"] + """ + The discounts applied to the quote. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + A future timestamp on which the quote will be canceled if in `open` or `draft` status. Measured in seconds since the Unix epoch. + """ + footer: NotRequired["Literal['']|str"] + """ + A footer that will be displayed on the quote PDF. + """ + header: NotRequired["Literal['']|str"] + """ + A header that will be displayed on the quote PDF. + """ + invoice_settings: NotRequired["QuoteModifyParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + line_items: NotRequired[List["QuoteModifyParamsLineItem"]] + """ + A list of line items the customer is being quoted for. Each line item includes information about the product, the quantity, and the resulting cost. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge. + """ + subscription_data: NotRequired["QuoteModifyParamsSubscriptionData"] + """ + When creating a subscription or subscription schedule, the specified configuration data will be used. There must be at least one line item with a recurring price for a subscription or subscription schedule to be created. A subscription schedule is created if `subscription_data[effective_date]` is present and in the future, otherwise a subscription is created. + """ + transfer_data: NotRequired["Literal['']|QuoteModifyParamsTransferData"] + """ + The data with which to automatically create a Transfer for each of the invoices. + """ + + +class QuoteModifyParamsAutomaticTax(TypedDict): + enabled: bool + """ + Controls whether Stripe will automatically compute tax on the resulting invoices or subscriptions as well as the quote itself. + """ + liability: NotRequired["QuoteModifyParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class QuoteModifyParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteModifyParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteModifyParamsInvoiceSettings(TypedDict): + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay the invoice generated by this quote. This value will be `null` for quotes where `collection_method=charge_automatically`. + """ + issuer: NotRequired["QuoteModifyParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class QuoteModifyParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteModifyParamsLineItem(TypedDict): + discounts: NotRequired[ + "Literal['']|List[QuoteModifyParamsLineItemDiscount]" + ] + """ + The discounts applied to this line item. + """ + id: NotRequired[str] + """ + The ID of an existing line item on the quote. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["QuoteModifyParamsLineItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + The quantity of the line item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the line item. When set, the `default_tax_rates` on the quote do not apply to this line item. + """ + + +class QuoteModifyParamsLineItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteModifyParamsLineItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: NotRequired["QuoteModifyParamsLineItemPriceDataRecurring"] + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class QuoteModifyParamsLineItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class QuoteModifyParamsSubscriptionData(TypedDict): + description: NotRequired["Literal['']|str"] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + effective_date: NotRequired[ + "Literal['']|Literal['current_period_end']|int" + ] + """ + When creating a new subscription, the date of which the subscription schedule will start after the quote is accepted. The `effective_date` is ignored if it is in the past when the quote is accepted. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on the subscription or subscription schedule when the quote is accepted. If a recurring price is included in `line_items`, this field will be passed to the resulting subscription's `metadata` field. If `subscription_data.effective_date` is used, this field will be passed to the resulting subscription schedule's `phases.metadata` field. Unlike object-level metadata, this field is declarative. Updates will clear prior values. + """ + trial_period_days: NotRequired["Literal['']|int"] + """ + Integer representing the number of trial period days before the customer is charged for the first time. + """ + + +class QuoteModifyParamsTransferData(TypedDict): + amount: NotRequired[int] + """ + The amount that will be transferred automatically when the invoice is paid. If no amount is set, the full amount is transferred. There cannot be any line items with recurring prices when using this field. + """ + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. There must be at least 1 line item with a recurring price to use this field. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_pdf_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_pdf_params.py new file mode 100644 index 00000000..2ac05dbf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_pdf_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuotePdfParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_retrieve_params.py new file mode 100644 index 00000000..744ea9ed --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class QuoteRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_update_params.py new file mode 100644 index 00000000..630d474e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_quote_update_params.py @@ -0,0 +1,258 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class QuoteUpdateParams(TypedDict): + application_fee_amount: NotRequired["Literal['']|int"] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. There cannot be any line items with recurring prices when using this field. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. There must be at least 1 line item with a recurring price to use this field. + """ + automatic_tax: NotRequired["QuoteUpdateParamsAutomaticTax"] + """ + Settings for automatic tax lookup for this quote and resulting invoices and subscriptions. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay invoices at the end of the subscription cycle or at invoice finalization using the default payment method attached to the subscription or customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + customer: NotRequired[str] + """ + The customer for which this quote belongs to. A customer is required before finalizing the quote. Once specified, it cannot be changed. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any line item that does not have `tax_rates` set. + """ + description: NotRequired["Literal['']|str"] + """ + A description that will be displayed on the quote PDF. + """ + discounts: NotRequired["Literal['']|List[QuoteUpdateParamsDiscount]"] + """ + The discounts applied to the quote. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + A future timestamp on which the quote will be canceled if in `open` or `draft` status. Measured in seconds since the Unix epoch. + """ + footer: NotRequired["Literal['']|str"] + """ + A footer that will be displayed on the quote PDF. + """ + header: NotRequired["Literal['']|str"] + """ + A header that will be displayed on the quote PDF. + """ + invoice_settings: NotRequired["QuoteUpdateParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + line_items: NotRequired[List["QuoteUpdateParamsLineItem"]] + """ + A list of line items the customer is being quoted for. Each line item includes information about the product, the quantity, and the resulting cost. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge. + """ + subscription_data: NotRequired["QuoteUpdateParamsSubscriptionData"] + """ + When creating a subscription or subscription schedule, the specified configuration data will be used. There must be at least one line item with a recurring price for a subscription or subscription schedule to be created. A subscription schedule is created if `subscription_data[effective_date]` is present and in the future, otherwise a subscription is created. + """ + transfer_data: NotRequired["Literal['']|QuoteUpdateParamsTransferData"] + """ + The data with which to automatically create a Transfer for each of the invoices. + """ + + +class QuoteUpdateParamsAutomaticTax(TypedDict): + enabled: bool + """ + Controls whether Stripe will automatically compute tax on the resulting invoices or subscriptions as well as the quote itself. + """ + liability: NotRequired["QuoteUpdateParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class QuoteUpdateParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteUpdateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteUpdateParamsInvoiceSettings(TypedDict): + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay the invoice generated by this quote. This value will be `null` for quotes where `collection_method=charge_automatically`. + """ + issuer: NotRequired["QuoteUpdateParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class QuoteUpdateParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class QuoteUpdateParamsLineItem(TypedDict): + discounts: NotRequired[ + "Literal['']|List[QuoteUpdateParamsLineItemDiscount]" + ] + """ + The discounts applied to this line item. + """ + id: NotRequired[str] + """ + The ID of an existing line item on the quote. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["QuoteUpdateParamsLineItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + The quantity of the line item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the line item. When set, the `default_tax_rates` on the quote do not apply to this line item. + """ + + +class QuoteUpdateParamsLineItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class QuoteUpdateParamsLineItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: NotRequired["QuoteUpdateParamsLineItemPriceDataRecurring"] + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class QuoteUpdateParamsLineItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class QuoteUpdateParamsSubscriptionData(TypedDict): + description: NotRequired["Literal['']|str"] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + effective_date: NotRequired[ + "Literal['']|Literal['current_period_end']|int" + ] + """ + When creating a new subscription, the date of which the subscription schedule will start after the quote is accepted. The `effective_date` is ignored if it is in the past when the quote is accepted. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on the subscription or subscription schedule when the quote is accepted. If a recurring price is included in `line_items`, this field will be passed to the resulting subscription's `metadata` field. If `subscription_data.effective_date` is used, this field will be passed to the resulting subscription schedule's `phases.metadata` field. Unlike object-level metadata, this field is declarative. Updates will clear prior values. + """ + trial_period_days: NotRequired["Literal['']|int"] + """ + Integer representing the number of trial period days before the customer is charged for the first time. + """ + + +class QuoteUpdateParamsTransferData(TypedDict): + amount: NotRequired[int] + """ + The amount that will be transferred automatically when the invoice is paid. If no amount is set, the full amount is transferred. There cannot be any line items with recurring prices when using this field. + """ + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. There must be at least 1 line item with a recurring price to use this field. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_cancel_params.py new file mode 100644 index 00000000..277b3294 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class RefundCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_create_params.py new file mode 100644 index 00000000..c8d7eac1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_create_params.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class RefundCreateParams(RequestOptions): + amount: NotRequired[int] + charge: NotRequired[str] + """ + The identifier of the charge to refund. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: NotRequired[str] + """ + Customer whose customer balance to refund from. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + instructions_email: NotRequired[str] + """ + For payment methods without native refund support (e.g., Konbini, PromptPay), use this email from the customer to receive refund instructions. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + origin: NotRequired[Literal["customer_balance"]] + """ + Origin of the refund + """ + payment_intent: NotRequired[str] + """ + The identifier of the PaymentIntent to refund. + """ + reason: NotRequired[ + Literal["duplicate", "fraudulent", "requested_by_customer"] + ] + """ + String indicating the reason for the refund. If set, possible values are `duplicate`, `fraudulent`, and `requested_by_customer`. If you believe the charge to be fraudulent, specifying `fraudulent` as the reason will add the associated card and email to your [block lists](https://stripe.com/docs/radar/lists), and will also help us improve our fraud detection algorithms. + """ + refund_application_fee: NotRequired[bool] + """ + Boolean indicating whether the application fee should be refunded when refunding this charge. If a full charge refund is given, the full application fee will be refunded. Otherwise, the application fee will be refunded in an amount proportional to the amount of the charge refunded. An application fee can be refunded only by the application that created the charge. + """ + reverse_transfer: NotRequired[bool] + """ + Boolean indicating whether the transfer should be reversed when refunding this charge. The transfer will be reversed proportionally to the amount being refunded (either the entire or partial amount). + + A transfer can be reversed only by the application that created the charge. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_expire_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_expire_params.py new file mode 100644 index 00000000..ae2ce2cc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_expire_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class RefundExpireParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_list_params.py new file mode 100644 index 00000000..e1d8aa2b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class RefundListParams(RequestOptions): + charge: NotRequired[str] + """ + Only return refunds for the charge specified by this charge ID. + """ + created: NotRequired["RefundListParamsCreated|int"] + """ + Only return refunds that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + payment_intent: NotRequired[str] + """ + Only return refunds for the PaymentIntent specified by this ID. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class RefundListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_modify_params.py new file mode 100644 index 00000000..86df6e4f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_modify_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class RefundModifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_retrieve_params.py new file mode 100644 index 00000000..56741a7d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class RefundRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_update_params.py new file mode 100644 index 00000000..615d175a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_refund_update_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class RefundUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_approve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_approve_params.py new file mode 100644 index 00000000..c26e9f5b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_approve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReviewApproveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_list_params.py new file mode 100644 index 00000000..8590693d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_list_params.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ReviewListParams(RequestOptions): + created: NotRequired["ReviewListParamsCreated|int"] + """ + Only return reviews that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class ReviewListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_retrieve_params.py new file mode 100644 index 00000000..7a1a3cab --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_review_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReviewRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_attempt_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_attempt_list_params.py new file mode 100644 index 00000000..afd60a4c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_attempt_list_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SetupAttemptListParams(RequestOptions): + created: NotRequired["SetupAttemptListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value + can be a string with an integer Unix timestamp or a + dictionary with a number of different query options. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + setup_intent: str + """ + Only return SetupAttempts created by the SetupIntent specified by + this ID. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class SetupAttemptListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_cancel_params.py new file mode 100644 index 00000000..76c79689 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_cancel_params.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class SetupIntentCancelParams(RequestOptions): + cancellation_reason: NotRequired[ + Literal["abandoned", "duplicate", "requested_by_customer"] + ] + """ + Reason for canceling this SetupIntent. Possible values are: `abandoned`, `requested_by_customer`, or `duplicate` + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_confirm_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_confirm_params.py new file mode 100644 index 00000000..bb3a5b02 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_confirm_params.py @@ -0,0 +1,1418 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SetupIntentConfirmParams(RequestOptions): + confirmation_token: NotRequired[str] + """ + ID of the ConfirmationToken used to confirm this SetupIntent. + + If the provided ConfirmationToken contains properties that are also being provided in this request, such as `payment_method`, then the values in this request will take precedence. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + mandate_data: NotRequired[ + "Literal['']|SetupIntentConfirmParamsMandateData" + ] + payment_method: NotRequired[str] + """ + ID of the payment method (a PaymentMethod, Card, or saved Source object) to attach to this SetupIntent. + """ + payment_method_data: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodData" + ] + """ + When included, this hash creates a PaymentMethod that is set as the [`payment_method`](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-payment_method) + value in the SetupIntent. + """ + payment_method_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptions" + ] + """ + Payment method-specific configuration for this SetupIntent. + """ + return_url: NotRequired[str] + """ + The URL to redirect your customer back to after they authenticate on the payment method's app or site. + If you'd prefer to redirect to a mobile application, you can alternatively supply an application URI scheme. + This parameter is only used for cards and other redirect-based payment methods. + """ + use_stripe_sdk: NotRequired[bool] + """ + Set to `true` when confirming server-side and using Stripe.js, iOS, or Android client-side SDKs to handle the next actions. + """ + + +class SetupIntentConfirmParamsMandateData(TypedDict): + customer_acceptance: NotRequired[ + "SetupIntentConfirmParamsMandateDataCustomerAcceptance" + ] + """ + This hash contains details about the customer acceptance of the Mandate. + """ + + +class SetupIntentConfirmParamsMandateDataCustomerAcceptance(TypedDict): + accepted_at: NotRequired[int] + """ + The time at which the customer accepted the Mandate. + """ + offline: NotRequired[ + "SetupIntentConfirmParamsMandateDataCustomerAcceptanceOffline" + ] + """ + If this is a Mandate accepted offline, this hash contains details about the offline acceptance. + """ + online: NotRequired[ + "SetupIntentConfirmParamsMandateDataCustomerAcceptanceOnline" + ] + """ + If this is a Mandate accepted online, this hash contains details about the online acceptance. + """ + type: Literal["offline", "online"] + """ + The type of customer acceptance information included with the Mandate. One of `online` or `offline`. + """ + + +class SetupIntentConfirmParamsMandateDataCustomerAcceptanceOffline(TypedDict): + pass + + +class SetupIntentConfirmParamsMandateDataCustomerAcceptanceOnline(TypedDict): + ip_address: NotRequired[str] + """ + The IP address from which the Mandate was accepted by the customer. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the Mandate was accepted by the customer. + """ + + +class SetupIntentConfirmParamsPaymentMethodData(TypedDict): + acss_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataAcssDebit" + ] + """ + If this is an `acss_debit` PaymentMethod, this hash contains details about the ACSS Debit payment method. + """ + affirm: NotRequired["SetupIntentConfirmParamsPaymentMethodDataAffirm"] + """ + If this is an `affirm` PaymentMethod, this hash contains details about the Affirm payment method. + """ + afterpay_clearpay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataAfterpayClearpay" + ] + """ + If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method. + """ + alipay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataAlipay"] + """ + If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method. + """ + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to `unspecified`. + """ + alma: NotRequired["SetupIntentConfirmParamsPaymentMethodDataAlma"] + """ + If this is a Alma PaymentMethod, this hash contains details about the Alma payment method. + """ + amazon_pay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataAmazonPay" + ] + """ + If this is a AmazonPay PaymentMethod, this hash contains details about the AmazonPay payment method. + """ + au_becs_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataAuBecsDebit" + ] + """ + If this is an `au_becs_debit` PaymentMethod, this hash contains details about the bank account. + """ + bacs_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataBacsDebit" + ] + """ + If this is a `bacs_debit` PaymentMethod, this hash contains details about the Bacs Direct Debit bank account. + """ + bancontact: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataBancontact" + ] + """ + If this is a `bancontact` PaymentMethod, this hash contains details about the Bancontact payment method. + """ + billie: NotRequired["SetupIntentConfirmParamsPaymentMethodDataBillie"] + """ + If this is a `billie` PaymentMethod, this hash contains details about the Billie payment method. + """ + billing_details: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataBillingDetails" + ] + """ + Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. + """ + blik: NotRequired["SetupIntentConfirmParamsPaymentMethodDataBlik"] + """ + If this is a `blik` PaymentMethod, this hash contains details about the BLIK payment method. + """ + boleto: NotRequired["SetupIntentConfirmParamsPaymentMethodDataBoleto"] + """ + If this is a `boleto` PaymentMethod, this hash contains details about the Boleto payment method. + """ + cashapp: NotRequired["SetupIntentConfirmParamsPaymentMethodDataCashapp"] + """ + If this is a `cashapp` PaymentMethod, this hash contains details about the Cash App Pay payment method. + """ + crypto: NotRequired["SetupIntentConfirmParamsPaymentMethodDataCrypto"] + """ + If this is a Crypto PaymentMethod, this hash contains details about the Crypto payment method. + """ + customer_balance: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataCustomerBalance" + ] + """ + If this is a `customer_balance` PaymentMethod, this hash contains details about the CustomerBalance payment method. + """ + eps: NotRequired["SetupIntentConfirmParamsPaymentMethodDataEps"] + """ + If this is an `eps` PaymentMethod, this hash contains details about the EPS payment method. + """ + fpx: NotRequired["SetupIntentConfirmParamsPaymentMethodDataFpx"] + """ + If this is an `fpx` PaymentMethod, this hash contains details about the FPX payment method. + """ + giropay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataGiropay"] + """ + If this is a `giropay` PaymentMethod, this hash contains details about the Giropay payment method. + """ + grabpay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataGrabpay"] + """ + If this is a `grabpay` PaymentMethod, this hash contains details about the GrabPay payment method. + """ + ideal: NotRequired["SetupIntentConfirmParamsPaymentMethodDataIdeal"] + """ + If this is an `ideal` PaymentMethod, this hash contains details about the iDEAL payment method. + """ + interac_present: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataInteracPresent" + ] + """ + If this is an `interac_present` PaymentMethod, this hash contains details about the Interac Present payment method. + """ + kakao_pay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataKakaoPay"] + """ + If this is a `kakao_pay` PaymentMethod, this hash contains details about the Kakao Pay payment method. + """ + klarna: NotRequired["SetupIntentConfirmParamsPaymentMethodDataKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method. + """ + konbini: NotRequired["SetupIntentConfirmParamsPaymentMethodDataKonbini"] + """ + If this is a `konbini` PaymentMethod, this hash contains details about the Konbini payment method. + """ + kr_card: NotRequired["SetupIntentConfirmParamsPaymentMethodDataKrCard"] + """ + If this is a `kr_card` PaymentMethod, this hash contains details about the Korean Card payment method. + """ + link: NotRequired["SetupIntentConfirmParamsPaymentMethodDataLink"] + """ + If this is an `Link` PaymentMethod, this hash contains details about the Link payment method. + """ + mb_way: NotRequired["SetupIntentConfirmParamsPaymentMethodDataMbWay"] + """ + If this is a MB WAY PaymentMethod, this hash contains details about the MB WAY payment method. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mobilepay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataMobilepay" + ] + """ + If this is a `mobilepay` PaymentMethod, this hash contains details about the MobilePay payment method. + """ + multibanco: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataMultibanco" + ] + """ + If this is a `multibanco` PaymentMethod, this hash contains details about the Multibanco payment method. + """ + naver_pay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataNaverPay"] + """ + If this is a `naver_pay` PaymentMethod, this hash contains details about the Naver Pay payment method. + """ + nz_bank_account: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataNzBankAccount" + ] + """ + If this is an nz_bank_account PaymentMethod, this hash contains details about the nz_bank_account payment method. + """ + oxxo: NotRequired["SetupIntentConfirmParamsPaymentMethodDataOxxo"] + """ + If this is an `oxxo` PaymentMethod, this hash contains details about the OXXO payment method. + """ + p24: NotRequired["SetupIntentConfirmParamsPaymentMethodDataP24"] + """ + If this is a `p24` PaymentMethod, this hash contains details about the P24 payment method. + """ + pay_by_bank: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataPayByBank" + ] + """ + If this is a `pay_by_bank` PaymentMethod, this hash contains details about the PayByBank payment method. + """ + payco: NotRequired["SetupIntentConfirmParamsPaymentMethodDataPayco"] + """ + If this is a `payco` PaymentMethod, this hash contains details about the PAYCO payment method. + """ + paynow: NotRequired["SetupIntentConfirmParamsPaymentMethodDataPaynow"] + """ + If this is a `paynow` PaymentMethod, this hash contains details about the PayNow payment method. + """ + paypal: NotRequired["SetupIntentConfirmParamsPaymentMethodDataPaypal"] + """ + If this is a `paypal` PaymentMethod, this hash contains details about the PayPal payment method. + """ + pix: NotRequired["SetupIntentConfirmParamsPaymentMethodDataPix"] + """ + If this is a `pix` PaymentMethod, this hash contains details about the Pix payment method. + """ + promptpay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataPromptpay" + ] + """ + If this is a `promptpay` PaymentMethod, this hash contains details about the PromptPay payment method. + """ + radar_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataRadarOptions" + ] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + revolut_pay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataRevolutPay" + ] + """ + If this is a `revolut_pay` PaymentMethod, this hash contains details about the Revolut Pay payment method. + """ + samsung_pay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataSamsungPay" + ] + """ + If this is a `samsung_pay` PaymentMethod, this hash contains details about the SamsungPay payment method. + """ + satispay: NotRequired["SetupIntentConfirmParamsPaymentMethodDataSatispay"] + """ + If this is a `satispay` PaymentMethod, this hash contains details about the Satispay payment method. + """ + sepa_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataSepaDebit" + ] + """ + If this is a `sepa_debit` PaymentMethod, this hash contains details about the SEPA debit bank account. + """ + sofort: NotRequired["SetupIntentConfirmParamsPaymentMethodDataSofort"] + """ + If this is a `sofort` PaymentMethod, this hash contains details about the SOFORT payment method. + """ + swish: NotRequired["SetupIntentConfirmParamsPaymentMethodDataSwish"] + """ + If this is a `swish` PaymentMethod, this hash contains details about the Swish payment method. + """ + twint: NotRequired["SetupIntentConfirmParamsPaymentMethodDataTwint"] + """ + If this is a TWINT PaymentMethod, this hash contains details about the TWINT payment method. + """ + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataUsBankAccount" + ] + """ + If this is an `us_bank_account` PaymentMethod, this hash contains details about the US bank account payment method. + """ + wechat_pay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodDataWechatPay" + ] + """ + If this is an `wechat_pay` PaymentMethod, this hash contains details about the wechat_pay payment method. + """ + zip: NotRequired["SetupIntentConfirmParamsPaymentMethodDataZip"] + """ + If this is a `zip` PaymentMethod, this hash contains details about the Zip payment method. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataAcssDebit(TypedDict): + account_number: str + """ + Customer's bank account number. + """ + institution_number: str + """ + Institution number of the customer's bank. + """ + transit_number: str + """ + Transit number of the customer's bank. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataAffirm(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataAfterpayClearpay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataAlipay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataAlma(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataAmazonPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataAuBecsDebit(TypedDict): + account_number: str + """ + The account number for the bank account. + """ + bsb_number: str + """ + Bank-State-Branch number of the bank account. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataBacsDebit(TypedDict): + account_number: NotRequired[str] + """ + Account number of the bank account that the funds will be debited from. + """ + sort_code: NotRequired[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + +class SetupIntentConfirmParamsPaymentMethodDataBancontact(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataBillie(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataBillingDetails(TypedDict): + address: NotRequired[ + "Literal['']|SetupIntentConfirmParamsPaymentMethodDataBillingDetailsAddress" + ] + """ + Billing address. + """ + email: NotRequired["Literal['']|str"] + """ + Email address. + """ + name: NotRequired["Literal['']|str"] + """ + Full name. + """ + phone: NotRequired["Literal['']|str"] + """ + Billing phone number (including extension). + """ + tax_id: NotRequired[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataBillingDetailsAddress( + TypedDict +): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataBlik(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataBoleto(TypedDict): + tax_id: str + """ + The tax ID of the customer (CPF for individual consumers or CNPJ for businesses consumers) + """ + + +class SetupIntentConfirmParamsPaymentMethodDataCashapp(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataCrypto(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataCustomerBalance(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataEps(TypedDict): + bank: NotRequired[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataFpx(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type for FPX transaction + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataGiropay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataGrabpay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataIdeal(TypedDict): + bank: NotRequired[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Only use this parameter for existing customers. Don't use it for new customers. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataInteracPresent(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataKakaoPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataKlarna(TypedDict): + dob: NotRequired["SetupIntentConfirmParamsPaymentMethodDataKlarnaDob"] + """ + Customer's date of birth + """ + + +class SetupIntentConfirmParamsPaymentMethodDataKlarnaDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataKonbini(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataKrCard(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataLink(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataMbWay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataMobilepay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataMultibanco(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataNaverPay(TypedDict): + funding: NotRequired[Literal["card", "points"]] + """ + Whether to use Naver Pay points or a card to fund this transaction. If not provided, this defaults to `card`. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataNzBankAccount(TypedDict): + account_holder_name: NotRequired[str] + """ + The name on the bank account. Only required if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + account_number: str + """ + The account number for the bank account. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + reference: NotRequired[str] + suffix: str + """ + The suffix of the bank account number. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataOxxo(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataP24(TypedDict): + bank: NotRequired[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataPayByBank(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataPayco(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataPaynow(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataPaypal(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataPix(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataPromptpay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataRadarOptions(TypedDict): + session: NotRequired[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataRevolutPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataSamsungPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataSatispay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataSepaDebit(TypedDict): + iban: str + """ + IBAN of the bank account. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataSofort(TypedDict): + country: Literal["AT", "BE", "DE", "ES", "IT", "NL"] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataSwish(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataTwint(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataUsBankAccount(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_number: NotRequired[str] + """ + Account number of the bank account. + """ + account_type: NotRequired[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + financial_connections_account: NotRequired[str] + """ + The ID of a Financial Connections Account to use as a payment method. + """ + routing_number: NotRequired[str] + """ + Routing number of the bank account. + """ + + +class SetupIntentConfirmParamsPaymentMethodDataWechatPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodDataZip(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsAcssDebit" + ] + """ + If this is a `acss_debit` SetupIntent, this sub-hash contains details about the ACSS Debit payment method options. + """ + amazon_pay: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsAmazonPay" + ] + """ + If this is a `amazon_pay` SetupIntent, this sub-hash contains details about the AmazonPay payment method options. + """ + bacs_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsBacsDebit" + ] + """ + If this is a `bacs_debit` SetupIntent, this sub-hash contains details about the Bacs Debit payment method options. + """ + card: NotRequired["SetupIntentConfirmParamsPaymentMethodOptionsCard"] + """ + Configuration for any card setup attempted on this SetupIntent. + """ + card_present: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsCardPresent" + ] + """ + If this is a `card_present` PaymentMethod, this sub-hash contains details about the card-present payment method options. + """ + klarna: NotRequired["SetupIntentConfirmParamsPaymentMethodOptionsKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method options. + """ + link: NotRequired["SetupIntentConfirmParamsPaymentMethodOptionsLink"] + """ + If this is a `link` PaymentMethod, this sub-hash contains details about the Link payment method options. + """ + paypal: NotRequired["SetupIntentConfirmParamsPaymentMethodOptionsPaypal"] + """ + If this is a `paypal` PaymentMethod, this sub-hash contains details about the PayPal payment method options. + """ + sepa_debit: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsSepaDebit" + ] + """ + If this is a `sepa_debit` SetupIntent, this sub-hash contains details about the SEPA Debit payment method options. + """ + us_bank_account: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccount" + ] + """ + If this is a `us_bank_account` SetupIntent, this sub-hash contains details about the US bank account payment method options. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsAcssDebit(TypedDict): + currency: NotRequired[Literal["cad", "usd"]] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + mandate_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + custom_mandate_url: NotRequired["Literal['']|str"] + """ + A URL for custom mandate text to render during confirmation step. + The URL will be rendered with additional GET parameters `payment_intent` and `payment_intent_client_secret` when confirming a Payment Intent, + or `setup_intent` and `setup_intent_client_secret` when confirming a Setup Intent. + """ + default_for: NotRequired[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: NotRequired[str] + """ + Description of the mandate interval. Only required if 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: NotRequired[Literal["combined", "interval", "sporadic"]] + """ + Payment schedule for the mandate. + """ + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsAmazonPay(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodOptionsBacsDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCard(TypedDict): + mandate_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + moto: NotRequired[bool] + """ + When specified, this parameter signals that a card has been collected + as MOTO (Mail Order Telephone Order) and thus out of scope for SCA. This + parameter can only be provided during confirmation. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this SetupIntent on. Depends on the available networks of the card attached to the SetupIntent. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + three_d_secure: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure" + ] + """ + If 3D Secure authentication was performed with a third-party provider, + the authentication details to use for this setup. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCardMandateOptions( + TypedDict +): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + currency: str + """ + Currency in which future payments will be charged. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: NotRequired[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: NotRequired[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure(TypedDict): + ares_trans_status: NotRequired[Literal["A", "C", "I", "N", "R", "U", "Y"]] + """ + The `transStatus` returned from the card Issuer's ACS in the ARes. + """ + cryptogram: NotRequired[str] + """ + The cryptogram, also known as the "authentication value" (AAV, CAVV or + AEVV). This value is 20 bytes, base64-encoded into a 28-character string. + (Most 3D Secure providers will return the base64-encoded version, which + is what you should specify here.) + """ + electronic_commerce_indicator: NotRequired[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI) is returned by your 3D Secure + provider and indicates what degree of authentication was performed. + """ + network_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions" + ] + """ + Network specific 3DS fields. Network specific arguments require an + explicit card brand choice. The parameter `payment_method_options.card.network`` + must be populated accordingly + """ + requestor_challenge_indicator: NotRequired[str] + """ + The challenge indicator (`threeDSRequestorChallengeInd`) which was requested in the + AReq sent to the card Issuer's ACS. A string containing 2 digits from 01-99. + """ + transaction_id: NotRequired[str] + """ + For 3D Secure 1, the XID. For 3D Secure 2, the Directory Server + Transaction ID (dsTransID). + """ + version: NotRequired[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was performed. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions( + TypedDict, +): + cartes_bancaires: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires" + ] + """ + Cartes Bancaires-specific 3DS fields. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires( + TypedDict, +): + cb_avalgo: Literal["0", "1", "2", "3", "4", "A"] + """ + The cryptogram calculation algorithm used by the card Issuer's ACS + to calculate the Authentication cryptogram. Also known as `cavvAlgorithm`. + messageExtension: CB-AVALGO + """ + cb_exemption: NotRequired[str] + """ + The exemption indicator returned from Cartes Bancaires in the ARes. + message extension: CB-EXEMPTION; string (4 characters) + This is a 3 byte bitmap (low significant byte first and most significant + bit first) that has been Base64 encoded + """ + cb_score: NotRequired[int] + """ + The risk score returned from Cartes Bancaires in the ARes. + message extension: CB-SCORE; numeric value 0-99 + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsCardPresent(TypedDict): + pass + + +class SetupIntentConfirmParamsPaymentMethodOptionsKlarna(TypedDict): + currency: NotRequired[str] + """ + The currency of the SetupIntent. Three letter ISO currency code. + """ + on_demand: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand" + ] + """ + On-demand details if setting up a payment method for on-demand payments. + """ + preferred_locale: NotRequired[ + Literal[ + "cs-CZ", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AT", + "en-AU", + "en-BE", + "en-CA", + "en-CH", + "en-CZ", + "en-DE", + "en-DK", + "en-ES", + "en-FI", + "en-FR", + "en-GB", + "en-GR", + "en-IE", + "en-IT", + "en-NL", + "en-NO", + "en-NZ", + "en-PL", + "en-PT", + "en-RO", + "en-SE", + "en-US", + "es-ES", + "es-US", + "fi-FI", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "it-CH", + "it-IT", + "nb-NO", + "nl-BE", + "nl-NL", + "pl-PL", + "pt-PT", + "ro-RO", + "sv-FI", + "sv-SE", + ] + ] + """ + Preferred language of the Klarna authorization page that the customer is redirected to + """ + subscriptions: NotRequired[ + "Literal['']|List[SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription]" + ] + """ + Subscription details if setting up or charging a subscription + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand(TypedDict): + average_amount: NotRequired[int] + """ + Your average amount value. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + maximum_amount: NotRequired[int] + """ + The maximum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + minimum_amount: NotRequired[int] + """ + The lowest or minimum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + purchase_interval: NotRequired[Literal["day", "month", "week", "year"]] + """ + Interval at which the customer is making purchases + """ + purchase_interval_count: NotRequired[int] + """ + The number of `purchase_interval` between charges + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription( + TypedDict +): + interval: Literal["day", "month", "week", "year"] + """ + Unit of time between subscription charges. + """ + interval_count: NotRequired[int] + """ + The number of intervals (specified in the `interval` attribute) between subscription charges. For example, `interval=month` and `interval_count=3` charges every 3 months. + """ + name: NotRequired[str] + """ + Name for subscription. + """ + next_billing: "SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling" + """ + Describes the upcoming charge for this subscription. + """ + reference: str + """ + A non-customer-facing reference to correlate subscription charges in the Klarna app. Use a value that persists across subscription charges. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling( + TypedDict, +): + amount: int + """ + The amount of the next charge for the subscription. + """ + date: str + """ + The date of the next charge for the subscription in YYYY-MM-DD format. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsLink(TypedDict): + persistent_token: NotRequired[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsPaypal(TypedDict): + billing_agreement_id: NotRequired[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsSepaDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccount(TypedDict): + financial_connections: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + mandate_options: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + networks: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks" + ] + """ + Additional fields for network related functions + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + return_url: NotRequired[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions( + TypedDict, +): + collection_method: NotRequired["Literal['']|Literal['paper']"] + """ + The method used to collect offline mandate customer acceptance. + """ + + +class SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks( + TypedDict, +): + requested: NotRequired[List[Literal["ach", "us_domestic_wire"]]] + """ + Triggers validations to run across the selected networks + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_create_params.py new file mode 100644 index 00000000..5ea3189f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_create_params.py @@ -0,0 +1,1544 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SetupIntentCreateParams(RequestOptions): + attach_to_self: NotRequired[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + automatic_payment_methods: NotRequired[ + "SetupIntentCreateParamsAutomaticPaymentMethods" + ] + """ + When you enable this parameter, this SetupIntent accepts payment methods that you enable in the Dashboard and that are compatible with its other parameters. + """ + confirm: NotRequired[bool] + """ + Set to `true` to attempt to confirm this SetupIntent immediately. This parameter defaults to `false`. If a card is the attached payment method, you can provide a `return_url` in case further authentication is necessary. + """ + confirmation_token: NotRequired[str] + """ + ID of the ConfirmationToken used to confirm this SetupIntent. + + If the provided ConfirmationToken contains properties that are also being provided in this request, such as `payment_method`, then the values in this request will take precedence. + """ + customer: NotRequired[str] + """ + ID of the Customer this SetupIntent belongs to, if one exists. + + If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + excluded_payment_method_types: NotRequired[ + List[ + Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + The list of payment method types to exclude from use with this SetupIntent. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + flow_directions: NotRequired[List[Literal["inbound", "outbound"]]] + """ + Indicates the directions of money movement for which this payment method is intended to be used. + + Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes. + """ + mandate_data: NotRequired["Literal['']|SetupIntentCreateParamsMandateData"] + """ + This hash contains details about the mandate to create. This parameter can only be used with [`confirm=true`](https://stripe.com/docs/api/setup_intents/create#create_setup_intent-confirm). + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The Stripe account ID created for this SetupIntent. + """ + payment_method: NotRequired[str] + """ + ID of the payment method (a PaymentMethod, Card, or saved Source object) to attach to this SetupIntent. + """ + payment_method_configuration: NotRequired[str] + """ + The ID of the [payment method configuration](https://stripe.com/docs/api/payment_method_configurations) to use with this SetupIntent. + """ + payment_method_data: NotRequired[ + "SetupIntentCreateParamsPaymentMethodData" + ] + """ + When included, this hash creates a PaymentMethod that is set as the [`payment_method`](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-payment_method) + value in the SetupIntent. + """ + payment_method_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptions" + ] + """ + Payment method-specific configuration for this SetupIntent. + """ + payment_method_types: NotRequired[List[str]] + """ + The list of payment method types (for example, card) that this SetupIntent can use. If you don't provide this, Stripe will dynamically show relevant payment methods from your [payment method settings](https://dashboard.stripe.com/settings/payment_methods). A list of valid payment method types can be found [here](https://docs.stripe.com/api/payment_methods/object#payment_method_object-type). + """ + return_url: NotRequired[str] + """ + The URL to redirect your customer back to after they authenticate or cancel their payment on the payment method's app or site. To redirect to a mobile application, you can alternatively supply an application URI scheme. This parameter can only be used with [`confirm=true`](https://stripe.com/docs/api/setup_intents/create#create_setup_intent-confirm). + """ + single_use: NotRequired["SetupIntentCreateParamsSingleUse"] + """ + If you populate this hash, this SetupIntent generates a `single_use` mandate after successful completion. + + Single-use mandates are only valid for the following payment methods: `acss_debit`, `alipay`, `au_becs_debit`, `bacs_debit`, `bancontact`, `boleto`, `ideal`, `link`, `sepa_debit`, and `us_bank_account`. + """ + usage: NotRequired[Literal["off_session", "on_session"]] + """ + Indicates how the payment method is intended to be used in the future. If not provided, this value defaults to `off_session`. + """ + use_stripe_sdk: NotRequired[bool] + """ + Set to `true` when confirming server-side and using Stripe.js, iOS, or Android client-side SDKs to handle the next actions. + """ + + +class SetupIntentCreateParamsAutomaticPaymentMethods(TypedDict): + allow_redirects: NotRequired[Literal["always", "never"]] + """ + Controls whether this SetupIntent will accept redirect-based payment methods. + + Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/setup_intents/confirm) this SetupIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the setup. + """ + enabled: bool + """ + Whether this feature is enabled. + """ + + +class SetupIntentCreateParamsMandateData(TypedDict): + customer_acceptance: "SetupIntentCreateParamsMandateDataCustomerAcceptance" + """ + This hash contains details about the customer acceptance of the Mandate. + """ + + +class SetupIntentCreateParamsMandateDataCustomerAcceptance(TypedDict): + accepted_at: NotRequired[int] + """ + The time at which the customer accepted the Mandate. + """ + offline: NotRequired[ + "SetupIntentCreateParamsMandateDataCustomerAcceptanceOffline" + ] + """ + If this is a Mandate accepted offline, this hash contains details about the offline acceptance. + """ + online: NotRequired[ + "SetupIntentCreateParamsMandateDataCustomerAcceptanceOnline" + ] + """ + If this is a Mandate accepted online, this hash contains details about the online acceptance. + """ + type: Literal["offline", "online"] + """ + The type of customer acceptance information included with the Mandate. One of `online` or `offline`. + """ + + +class SetupIntentCreateParamsMandateDataCustomerAcceptanceOffline(TypedDict): + pass + + +class SetupIntentCreateParamsMandateDataCustomerAcceptanceOnline(TypedDict): + ip_address: str + """ + The IP address from which the Mandate was accepted by the customer. + """ + user_agent: str + """ + The user agent of the browser from which the Mandate was accepted by the customer. + """ + + +class SetupIntentCreateParamsPaymentMethodData(TypedDict): + acss_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataAcssDebit" + ] + """ + If this is an `acss_debit` PaymentMethod, this hash contains details about the ACSS Debit payment method. + """ + affirm: NotRequired["SetupIntentCreateParamsPaymentMethodDataAffirm"] + """ + If this is an `affirm` PaymentMethod, this hash contains details about the Affirm payment method. + """ + afterpay_clearpay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataAfterpayClearpay" + ] + """ + If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method. + """ + alipay: NotRequired["SetupIntentCreateParamsPaymentMethodDataAlipay"] + """ + If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method. + """ + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to `unspecified`. + """ + alma: NotRequired["SetupIntentCreateParamsPaymentMethodDataAlma"] + """ + If this is a Alma PaymentMethod, this hash contains details about the Alma payment method. + """ + amazon_pay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataAmazonPay" + ] + """ + If this is a AmazonPay PaymentMethod, this hash contains details about the AmazonPay payment method. + """ + au_becs_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataAuBecsDebit" + ] + """ + If this is an `au_becs_debit` PaymentMethod, this hash contains details about the bank account. + """ + bacs_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataBacsDebit" + ] + """ + If this is a `bacs_debit` PaymentMethod, this hash contains details about the Bacs Direct Debit bank account. + """ + bancontact: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataBancontact" + ] + """ + If this is a `bancontact` PaymentMethod, this hash contains details about the Bancontact payment method. + """ + billie: NotRequired["SetupIntentCreateParamsPaymentMethodDataBillie"] + """ + If this is a `billie` PaymentMethod, this hash contains details about the Billie payment method. + """ + billing_details: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataBillingDetails" + ] + """ + Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. + """ + blik: NotRequired["SetupIntentCreateParamsPaymentMethodDataBlik"] + """ + If this is a `blik` PaymentMethod, this hash contains details about the BLIK payment method. + """ + boleto: NotRequired["SetupIntentCreateParamsPaymentMethodDataBoleto"] + """ + If this is a `boleto` PaymentMethod, this hash contains details about the Boleto payment method. + """ + cashapp: NotRequired["SetupIntentCreateParamsPaymentMethodDataCashapp"] + """ + If this is a `cashapp` PaymentMethod, this hash contains details about the Cash App Pay payment method. + """ + crypto: NotRequired["SetupIntentCreateParamsPaymentMethodDataCrypto"] + """ + If this is a Crypto PaymentMethod, this hash contains details about the Crypto payment method. + """ + customer_balance: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataCustomerBalance" + ] + """ + If this is a `customer_balance` PaymentMethod, this hash contains details about the CustomerBalance payment method. + """ + eps: NotRequired["SetupIntentCreateParamsPaymentMethodDataEps"] + """ + If this is an `eps` PaymentMethod, this hash contains details about the EPS payment method. + """ + fpx: NotRequired["SetupIntentCreateParamsPaymentMethodDataFpx"] + """ + If this is an `fpx` PaymentMethod, this hash contains details about the FPX payment method. + """ + giropay: NotRequired["SetupIntentCreateParamsPaymentMethodDataGiropay"] + """ + If this is a `giropay` PaymentMethod, this hash contains details about the Giropay payment method. + """ + grabpay: NotRequired["SetupIntentCreateParamsPaymentMethodDataGrabpay"] + """ + If this is a `grabpay` PaymentMethod, this hash contains details about the GrabPay payment method. + """ + ideal: NotRequired["SetupIntentCreateParamsPaymentMethodDataIdeal"] + """ + If this is an `ideal` PaymentMethod, this hash contains details about the iDEAL payment method. + """ + interac_present: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataInteracPresent" + ] + """ + If this is an `interac_present` PaymentMethod, this hash contains details about the Interac Present payment method. + """ + kakao_pay: NotRequired["SetupIntentCreateParamsPaymentMethodDataKakaoPay"] + """ + If this is a `kakao_pay` PaymentMethod, this hash contains details about the Kakao Pay payment method. + """ + klarna: NotRequired["SetupIntentCreateParamsPaymentMethodDataKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method. + """ + konbini: NotRequired["SetupIntentCreateParamsPaymentMethodDataKonbini"] + """ + If this is a `konbini` PaymentMethod, this hash contains details about the Konbini payment method. + """ + kr_card: NotRequired["SetupIntentCreateParamsPaymentMethodDataKrCard"] + """ + If this is a `kr_card` PaymentMethod, this hash contains details about the Korean Card payment method. + """ + link: NotRequired["SetupIntentCreateParamsPaymentMethodDataLink"] + """ + If this is an `Link` PaymentMethod, this hash contains details about the Link payment method. + """ + mb_way: NotRequired["SetupIntentCreateParamsPaymentMethodDataMbWay"] + """ + If this is a MB WAY PaymentMethod, this hash contains details about the MB WAY payment method. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mobilepay: NotRequired["SetupIntentCreateParamsPaymentMethodDataMobilepay"] + """ + If this is a `mobilepay` PaymentMethod, this hash contains details about the MobilePay payment method. + """ + multibanco: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataMultibanco" + ] + """ + If this is a `multibanco` PaymentMethod, this hash contains details about the Multibanco payment method. + """ + naver_pay: NotRequired["SetupIntentCreateParamsPaymentMethodDataNaverPay"] + """ + If this is a `naver_pay` PaymentMethod, this hash contains details about the Naver Pay payment method. + """ + nz_bank_account: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataNzBankAccount" + ] + """ + If this is an nz_bank_account PaymentMethod, this hash contains details about the nz_bank_account payment method. + """ + oxxo: NotRequired["SetupIntentCreateParamsPaymentMethodDataOxxo"] + """ + If this is an `oxxo` PaymentMethod, this hash contains details about the OXXO payment method. + """ + p24: NotRequired["SetupIntentCreateParamsPaymentMethodDataP24"] + """ + If this is a `p24` PaymentMethod, this hash contains details about the P24 payment method. + """ + pay_by_bank: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataPayByBank" + ] + """ + If this is a `pay_by_bank` PaymentMethod, this hash contains details about the PayByBank payment method. + """ + payco: NotRequired["SetupIntentCreateParamsPaymentMethodDataPayco"] + """ + If this is a `payco` PaymentMethod, this hash contains details about the PAYCO payment method. + """ + paynow: NotRequired["SetupIntentCreateParamsPaymentMethodDataPaynow"] + """ + If this is a `paynow` PaymentMethod, this hash contains details about the PayNow payment method. + """ + paypal: NotRequired["SetupIntentCreateParamsPaymentMethodDataPaypal"] + """ + If this is a `paypal` PaymentMethod, this hash contains details about the PayPal payment method. + """ + pix: NotRequired["SetupIntentCreateParamsPaymentMethodDataPix"] + """ + If this is a `pix` PaymentMethod, this hash contains details about the Pix payment method. + """ + promptpay: NotRequired["SetupIntentCreateParamsPaymentMethodDataPromptpay"] + """ + If this is a `promptpay` PaymentMethod, this hash contains details about the PromptPay payment method. + """ + radar_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataRadarOptions" + ] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + revolut_pay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataRevolutPay" + ] + """ + If this is a `revolut_pay` PaymentMethod, this hash contains details about the Revolut Pay payment method. + """ + samsung_pay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataSamsungPay" + ] + """ + If this is a `samsung_pay` PaymentMethod, this hash contains details about the SamsungPay payment method. + """ + satispay: NotRequired["SetupIntentCreateParamsPaymentMethodDataSatispay"] + """ + If this is a `satispay` PaymentMethod, this hash contains details about the Satispay payment method. + """ + sepa_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataSepaDebit" + ] + """ + If this is a `sepa_debit` PaymentMethod, this hash contains details about the SEPA debit bank account. + """ + sofort: NotRequired["SetupIntentCreateParamsPaymentMethodDataSofort"] + """ + If this is a `sofort` PaymentMethod, this hash contains details about the SOFORT payment method. + """ + swish: NotRequired["SetupIntentCreateParamsPaymentMethodDataSwish"] + """ + If this is a `swish` PaymentMethod, this hash contains details about the Swish payment method. + """ + twint: NotRequired["SetupIntentCreateParamsPaymentMethodDataTwint"] + """ + If this is a TWINT PaymentMethod, this hash contains details about the TWINT payment method. + """ + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataUsBankAccount" + ] + """ + If this is an `us_bank_account` PaymentMethod, this hash contains details about the US bank account payment method. + """ + wechat_pay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodDataWechatPay" + ] + """ + If this is an `wechat_pay` PaymentMethod, this hash contains details about the wechat_pay payment method. + """ + zip: NotRequired["SetupIntentCreateParamsPaymentMethodDataZip"] + """ + If this is a `zip` PaymentMethod, this hash contains details about the Zip payment method. + """ + + +class SetupIntentCreateParamsPaymentMethodDataAcssDebit(TypedDict): + account_number: str + """ + Customer's bank account number. + """ + institution_number: str + """ + Institution number of the customer's bank. + """ + transit_number: str + """ + Transit number of the customer's bank. + """ + + +class SetupIntentCreateParamsPaymentMethodDataAffirm(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataAfterpayClearpay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataAlipay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataAlma(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataAmazonPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataAuBecsDebit(TypedDict): + account_number: str + """ + The account number for the bank account. + """ + bsb_number: str + """ + Bank-State-Branch number of the bank account. + """ + + +class SetupIntentCreateParamsPaymentMethodDataBacsDebit(TypedDict): + account_number: NotRequired[str] + """ + Account number of the bank account that the funds will be debited from. + """ + sort_code: NotRequired[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + +class SetupIntentCreateParamsPaymentMethodDataBancontact(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataBillie(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataBillingDetails(TypedDict): + address: NotRequired[ + "Literal['']|SetupIntentCreateParamsPaymentMethodDataBillingDetailsAddress" + ] + """ + Billing address. + """ + email: NotRequired["Literal['']|str"] + """ + Email address. + """ + name: NotRequired["Literal['']|str"] + """ + Full name. + """ + phone: NotRequired["Literal['']|str"] + """ + Billing phone number (including extension). + """ + tax_id: NotRequired[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + + +class SetupIntentCreateParamsPaymentMethodDataBillingDetailsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SetupIntentCreateParamsPaymentMethodDataBlik(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataBoleto(TypedDict): + tax_id: str + """ + The tax ID of the customer (CPF for individual consumers or CNPJ for businesses consumers) + """ + + +class SetupIntentCreateParamsPaymentMethodDataCashapp(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataCrypto(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataCustomerBalance(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataEps(TypedDict): + bank: NotRequired[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentCreateParamsPaymentMethodDataFpx(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type for FPX transaction + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. + """ + + +class SetupIntentCreateParamsPaymentMethodDataGiropay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataGrabpay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataIdeal(TypedDict): + bank: NotRequired[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Only use this parameter for existing customers. Don't use it for new customers. + """ + + +class SetupIntentCreateParamsPaymentMethodDataInteracPresent(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataKakaoPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataKlarna(TypedDict): + dob: NotRequired["SetupIntentCreateParamsPaymentMethodDataKlarnaDob"] + """ + Customer's date of birth + """ + + +class SetupIntentCreateParamsPaymentMethodDataKlarnaDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class SetupIntentCreateParamsPaymentMethodDataKonbini(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataKrCard(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataLink(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataMbWay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataMobilepay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataMultibanco(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataNaverPay(TypedDict): + funding: NotRequired[Literal["card", "points"]] + """ + Whether to use Naver Pay points or a card to fund this transaction. If not provided, this defaults to `card`. + """ + + +class SetupIntentCreateParamsPaymentMethodDataNzBankAccount(TypedDict): + account_holder_name: NotRequired[str] + """ + The name on the bank account. Only required if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + account_number: str + """ + The account number for the bank account. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + reference: NotRequired[str] + suffix: str + """ + The suffix of the bank account number. + """ + + +class SetupIntentCreateParamsPaymentMethodDataOxxo(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataP24(TypedDict): + bank: NotRequired[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentCreateParamsPaymentMethodDataPayByBank(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataPayco(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataPaynow(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataPaypal(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataPix(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataPromptpay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataRadarOptions(TypedDict): + session: NotRequired[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + +class SetupIntentCreateParamsPaymentMethodDataRevolutPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataSamsungPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataSatispay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataSepaDebit(TypedDict): + iban: str + """ + IBAN of the bank account. + """ + + +class SetupIntentCreateParamsPaymentMethodDataSofort(TypedDict): + country: Literal["AT", "BE", "DE", "ES", "IT", "NL"] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + +class SetupIntentCreateParamsPaymentMethodDataSwish(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataTwint(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataUsBankAccount(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_number: NotRequired[str] + """ + Account number of the bank account. + """ + account_type: NotRequired[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + financial_connections_account: NotRequired[str] + """ + The ID of a Financial Connections Account to use as a payment method. + """ + routing_number: NotRequired[str] + """ + Routing number of the bank account. + """ + + +class SetupIntentCreateParamsPaymentMethodDataWechatPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodDataZip(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsAcssDebit" + ] + """ + If this is a `acss_debit` SetupIntent, this sub-hash contains details about the ACSS Debit payment method options. + """ + amazon_pay: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsAmazonPay" + ] + """ + If this is a `amazon_pay` SetupIntent, this sub-hash contains details about the AmazonPay payment method options. + """ + bacs_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsBacsDebit" + ] + """ + If this is a `bacs_debit` SetupIntent, this sub-hash contains details about the Bacs Debit payment method options. + """ + card: NotRequired["SetupIntentCreateParamsPaymentMethodOptionsCard"] + """ + Configuration for any card setup attempted on this SetupIntent. + """ + card_present: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsCardPresent" + ] + """ + If this is a `card_present` PaymentMethod, this sub-hash contains details about the card-present payment method options. + """ + klarna: NotRequired["SetupIntentCreateParamsPaymentMethodOptionsKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method options. + """ + link: NotRequired["SetupIntentCreateParamsPaymentMethodOptionsLink"] + """ + If this is a `link` PaymentMethod, this sub-hash contains details about the Link payment method options. + """ + paypal: NotRequired["SetupIntentCreateParamsPaymentMethodOptionsPaypal"] + """ + If this is a `paypal` PaymentMethod, this sub-hash contains details about the PayPal payment method options. + """ + sepa_debit: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsSepaDebit" + ] + """ + If this is a `sepa_debit` SetupIntent, this sub-hash contains details about the SEPA Debit payment method options. + """ + us_bank_account: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccount" + ] + """ + If this is a `us_bank_account` SetupIntent, this sub-hash contains details about the US bank account payment method options. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsAcssDebit(TypedDict): + currency: NotRequired[Literal["cad", "usd"]] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + mandate_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + custom_mandate_url: NotRequired["Literal['']|str"] + """ + A URL for custom mandate text to render during confirmation step. + The URL will be rendered with additional GET parameters `payment_intent` and `payment_intent_client_secret` when confirming a Payment Intent, + or `setup_intent` and `setup_intent_client_secret` when confirming a Setup Intent. + """ + default_for: NotRequired[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: NotRequired[str] + """ + Description of the mandate interval. Only required if 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: NotRequired[Literal["combined", "interval", "sporadic"]] + """ + Payment schedule for the mandate. + """ + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsAmazonPay(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodOptionsBacsDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCard(TypedDict): + mandate_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + moto: NotRequired[bool] + """ + When specified, this parameter signals that a card has been collected + as MOTO (Mail Order Telephone Order) and thus out of scope for SCA. This + parameter can only be provided during confirmation. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this SetupIntent on. Depends on the available networks of the card attached to the SetupIntent. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + three_d_secure: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecure" + ] + """ + If 3D Secure authentication was performed with a third-party provider, + the authentication details to use for this setup. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCardMandateOptions(TypedDict): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + currency: str + """ + Currency in which future payments will be charged. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: NotRequired[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: NotRequired[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecure(TypedDict): + ares_trans_status: NotRequired[Literal["A", "C", "I", "N", "R", "U", "Y"]] + """ + The `transStatus` returned from the card Issuer's ACS in the ARes. + """ + cryptogram: NotRequired[str] + """ + The cryptogram, also known as the "authentication value" (AAV, CAVV or + AEVV). This value is 20 bytes, base64-encoded into a 28-character string. + (Most 3D Secure providers will return the base64-encoded version, which + is what you should specify here.) + """ + electronic_commerce_indicator: NotRequired[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI) is returned by your 3D Secure + provider and indicates what degree of authentication was performed. + """ + network_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions" + ] + """ + Network specific 3DS fields. Network specific arguments require an + explicit card brand choice. The parameter `payment_method_options.card.network`` + must be populated accordingly + """ + requestor_challenge_indicator: NotRequired[str] + """ + The challenge indicator (`threeDSRequestorChallengeInd`) which was requested in the + AReq sent to the card Issuer's ACS. A string containing 2 digits from 01-99. + """ + transaction_id: NotRequired[str] + """ + For 3D Secure 1, the XID. For 3D Secure 2, the Directory Server + Transaction ID (dsTransID). + """ + version: NotRequired[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was performed. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions( + TypedDict, +): + cartes_bancaires: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires" + ] + """ + Cartes Bancaires-specific 3DS fields. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires( + TypedDict, +): + cb_avalgo: Literal["0", "1", "2", "3", "4", "A"] + """ + The cryptogram calculation algorithm used by the card Issuer's ACS + to calculate the Authentication cryptogram. Also known as `cavvAlgorithm`. + messageExtension: CB-AVALGO + """ + cb_exemption: NotRequired[str] + """ + The exemption indicator returned from Cartes Bancaires in the ARes. + message extension: CB-EXEMPTION; string (4 characters) + This is a 3 byte bitmap (low significant byte first and most significant + bit first) that has been Base64 encoded + """ + cb_score: NotRequired[int] + """ + The risk score returned from Cartes Bancaires in the ARes. + message extension: CB-SCORE; numeric value 0-99 + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsCardPresent(TypedDict): + pass + + +class SetupIntentCreateParamsPaymentMethodOptionsKlarna(TypedDict): + currency: NotRequired[str] + """ + The currency of the SetupIntent. Three letter ISO currency code. + """ + on_demand: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand" + ] + """ + On-demand details if setting up a payment method for on-demand payments. + """ + preferred_locale: NotRequired[ + Literal[ + "cs-CZ", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AT", + "en-AU", + "en-BE", + "en-CA", + "en-CH", + "en-CZ", + "en-DE", + "en-DK", + "en-ES", + "en-FI", + "en-FR", + "en-GB", + "en-GR", + "en-IE", + "en-IT", + "en-NL", + "en-NO", + "en-NZ", + "en-PL", + "en-PT", + "en-RO", + "en-SE", + "en-US", + "es-ES", + "es-US", + "fi-FI", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "it-CH", + "it-IT", + "nb-NO", + "nl-BE", + "nl-NL", + "pl-PL", + "pt-PT", + "ro-RO", + "sv-FI", + "sv-SE", + ] + ] + """ + Preferred language of the Klarna authorization page that the customer is redirected to + """ + subscriptions: NotRequired[ + "Literal['']|List[SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscription]" + ] + """ + Subscription details if setting up or charging a subscription + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand(TypedDict): + average_amount: NotRequired[int] + """ + Your average amount value. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + maximum_amount: NotRequired[int] + """ + The maximum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + minimum_amount: NotRequired[int] + """ + The lowest or minimum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + purchase_interval: NotRequired[Literal["day", "month", "week", "year"]] + """ + Interval at which the customer is making purchases + """ + purchase_interval_count: NotRequired[int] + """ + The number of `purchase_interval` between charges + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscription(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Unit of time between subscription charges. + """ + interval_count: NotRequired[int] + """ + The number of intervals (specified in the `interval` attribute) between subscription charges. For example, `interval=month` and `interval_count=3` charges every 3 months. + """ + name: NotRequired[str] + """ + Name for subscription. + """ + next_billing: "SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling" + """ + Describes the upcoming charge for this subscription. + """ + reference: str + """ + A non-customer-facing reference to correlate subscription charges in the Klarna app. Use a value that persists across subscription charges. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling( + TypedDict, +): + amount: int + """ + The amount of the next charge for the subscription. + """ + date: str + """ + The date of the next charge for the subscription in YYYY-MM-DD format. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsLink(TypedDict): + persistent_token: NotRequired[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsPaypal(TypedDict): + billing_agreement_id: NotRequired[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsSepaDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsUsBankAccount(TypedDict): + financial_connections: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + mandate_options: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + networks: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks" + ] + """ + Additional fields for network related functions + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + return_url: NotRequired[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions( + TypedDict, +): + collection_method: NotRequired["Literal['']|Literal['paper']"] + """ + The method used to collect offline mandate customer acceptance. + """ + + +class SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks( + TypedDict, +): + requested: NotRequired[List[Literal["ach", "us_domestic_wire"]]] + """ + Triggers validations to run across the selected networks + """ + + +class SetupIntentCreateParamsSingleUse(TypedDict): + amount: int + """ + Amount the customer is granting permission to collect later. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_list_params.py new file mode 100644 index 00000000..4363dd60 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_list_params.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SetupIntentListParams(RequestOptions): + attach_to_self: NotRequired[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + created: NotRequired["SetupIntentListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + customer: NotRequired[str] + """ + Only return SetupIntents for the customer specified by this customer ID. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + payment_method: NotRequired[str] + """ + Only return SetupIntents that associate with the specified payment method. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class SetupIntentListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_modify_params.py new file mode 100644 index 00000000..06f7a78c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_modify_params.py @@ -0,0 +1,1382 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SetupIntentModifyParams(RequestOptions): + attach_to_self: NotRequired[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + customer: NotRequired[str] + """ + ID of the Customer this SetupIntent belongs to, if one exists. + + If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + excluded_payment_method_types: NotRequired[ + "Literal['']|List[Literal['acss_debit', 'affirm', 'afterpay_clearpay', 'alipay', 'alma', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'billie', 'blik', 'boleto', 'card', 'cashapp', 'crypto', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'mb_way', 'mobilepay', 'multibanco', 'naver_pay', 'nz_bank_account', 'oxxo', 'p24', 'pay_by_bank', 'payco', 'paynow', 'paypal', 'pix', 'promptpay', 'revolut_pay', 'samsung_pay', 'satispay', 'sepa_debit', 'sofort', 'swish', 'twint', 'us_bank_account', 'wechat_pay', 'zip']]" + ] + """ + The list of payment method types to exclude from use with this SetupIntent. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + flow_directions: NotRequired[List[Literal["inbound", "outbound"]]] + """ + Indicates the directions of money movement for which this payment method is intended to be used. + + Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + payment_method: NotRequired[str] + """ + ID of the payment method (a PaymentMethod, Card, or saved Source object) to attach to this SetupIntent. To unset this field to null, pass in an empty string. + """ + payment_method_configuration: NotRequired[str] + """ + The ID of the [payment method configuration](https://stripe.com/docs/api/payment_method_configurations) to use with this SetupIntent. + """ + payment_method_data: NotRequired[ + "SetupIntentModifyParamsPaymentMethodData" + ] + """ + When included, this hash creates a PaymentMethod that is set as the [`payment_method`](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-payment_method) + value in the SetupIntent. + """ + payment_method_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptions" + ] + """ + Payment method-specific configuration for this SetupIntent. + """ + payment_method_types: NotRequired[List[str]] + """ + The list of payment method types (for example, card) that this SetupIntent can set up. If you don't provide this, Stripe will dynamically show relevant payment methods from your [payment method settings](https://dashboard.stripe.com/settings/payment_methods). A list of valid payment method types can be found [here](https://docs.stripe.com/api/payment_methods/object#payment_method_object-type). + """ + + +class SetupIntentModifyParamsPaymentMethodData(TypedDict): + acss_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataAcssDebit" + ] + """ + If this is an `acss_debit` PaymentMethod, this hash contains details about the ACSS Debit payment method. + """ + affirm: NotRequired["SetupIntentModifyParamsPaymentMethodDataAffirm"] + """ + If this is an `affirm` PaymentMethod, this hash contains details about the Affirm payment method. + """ + afterpay_clearpay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataAfterpayClearpay" + ] + """ + If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method. + """ + alipay: NotRequired["SetupIntentModifyParamsPaymentMethodDataAlipay"] + """ + If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method. + """ + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to `unspecified`. + """ + alma: NotRequired["SetupIntentModifyParamsPaymentMethodDataAlma"] + """ + If this is a Alma PaymentMethod, this hash contains details about the Alma payment method. + """ + amazon_pay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataAmazonPay" + ] + """ + If this is a AmazonPay PaymentMethod, this hash contains details about the AmazonPay payment method. + """ + au_becs_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataAuBecsDebit" + ] + """ + If this is an `au_becs_debit` PaymentMethod, this hash contains details about the bank account. + """ + bacs_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataBacsDebit" + ] + """ + If this is a `bacs_debit` PaymentMethod, this hash contains details about the Bacs Direct Debit bank account. + """ + bancontact: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataBancontact" + ] + """ + If this is a `bancontact` PaymentMethod, this hash contains details about the Bancontact payment method. + """ + billie: NotRequired["SetupIntentModifyParamsPaymentMethodDataBillie"] + """ + If this is a `billie` PaymentMethod, this hash contains details about the Billie payment method. + """ + billing_details: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataBillingDetails" + ] + """ + Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. + """ + blik: NotRequired["SetupIntentModifyParamsPaymentMethodDataBlik"] + """ + If this is a `blik` PaymentMethod, this hash contains details about the BLIK payment method. + """ + boleto: NotRequired["SetupIntentModifyParamsPaymentMethodDataBoleto"] + """ + If this is a `boleto` PaymentMethod, this hash contains details about the Boleto payment method. + """ + cashapp: NotRequired["SetupIntentModifyParamsPaymentMethodDataCashapp"] + """ + If this is a `cashapp` PaymentMethod, this hash contains details about the Cash App Pay payment method. + """ + crypto: NotRequired["SetupIntentModifyParamsPaymentMethodDataCrypto"] + """ + If this is a Crypto PaymentMethod, this hash contains details about the Crypto payment method. + """ + customer_balance: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataCustomerBalance" + ] + """ + If this is a `customer_balance` PaymentMethod, this hash contains details about the CustomerBalance payment method. + """ + eps: NotRequired["SetupIntentModifyParamsPaymentMethodDataEps"] + """ + If this is an `eps` PaymentMethod, this hash contains details about the EPS payment method. + """ + fpx: NotRequired["SetupIntentModifyParamsPaymentMethodDataFpx"] + """ + If this is an `fpx` PaymentMethod, this hash contains details about the FPX payment method. + """ + giropay: NotRequired["SetupIntentModifyParamsPaymentMethodDataGiropay"] + """ + If this is a `giropay` PaymentMethod, this hash contains details about the Giropay payment method. + """ + grabpay: NotRequired["SetupIntentModifyParamsPaymentMethodDataGrabpay"] + """ + If this is a `grabpay` PaymentMethod, this hash contains details about the GrabPay payment method. + """ + ideal: NotRequired["SetupIntentModifyParamsPaymentMethodDataIdeal"] + """ + If this is an `ideal` PaymentMethod, this hash contains details about the iDEAL payment method. + """ + interac_present: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataInteracPresent" + ] + """ + If this is an `interac_present` PaymentMethod, this hash contains details about the Interac Present payment method. + """ + kakao_pay: NotRequired["SetupIntentModifyParamsPaymentMethodDataKakaoPay"] + """ + If this is a `kakao_pay` PaymentMethod, this hash contains details about the Kakao Pay payment method. + """ + klarna: NotRequired["SetupIntentModifyParamsPaymentMethodDataKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method. + """ + konbini: NotRequired["SetupIntentModifyParamsPaymentMethodDataKonbini"] + """ + If this is a `konbini` PaymentMethod, this hash contains details about the Konbini payment method. + """ + kr_card: NotRequired["SetupIntentModifyParamsPaymentMethodDataKrCard"] + """ + If this is a `kr_card` PaymentMethod, this hash contains details about the Korean Card payment method. + """ + link: NotRequired["SetupIntentModifyParamsPaymentMethodDataLink"] + """ + If this is an `Link` PaymentMethod, this hash contains details about the Link payment method. + """ + mb_way: NotRequired["SetupIntentModifyParamsPaymentMethodDataMbWay"] + """ + If this is a MB WAY PaymentMethod, this hash contains details about the MB WAY payment method. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mobilepay: NotRequired["SetupIntentModifyParamsPaymentMethodDataMobilepay"] + """ + If this is a `mobilepay` PaymentMethod, this hash contains details about the MobilePay payment method. + """ + multibanco: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataMultibanco" + ] + """ + If this is a `multibanco` PaymentMethod, this hash contains details about the Multibanco payment method. + """ + naver_pay: NotRequired["SetupIntentModifyParamsPaymentMethodDataNaverPay"] + """ + If this is a `naver_pay` PaymentMethod, this hash contains details about the Naver Pay payment method. + """ + nz_bank_account: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataNzBankAccount" + ] + """ + If this is an nz_bank_account PaymentMethod, this hash contains details about the nz_bank_account payment method. + """ + oxxo: NotRequired["SetupIntentModifyParamsPaymentMethodDataOxxo"] + """ + If this is an `oxxo` PaymentMethod, this hash contains details about the OXXO payment method. + """ + p24: NotRequired["SetupIntentModifyParamsPaymentMethodDataP24"] + """ + If this is a `p24` PaymentMethod, this hash contains details about the P24 payment method. + """ + pay_by_bank: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataPayByBank" + ] + """ + If this is a `pay_by_bank` PaymentMethod, this hash contains details about the PayByBank payment method. + """ + payco: NotRequired["SetupIntentModifyParamsPaymentMethodDataPayco"] + """ + If this is a `payco` PaymentMethod, this hash contains details about the PAYCO payment method. + """ + paynow: NotRequired["SetupIntentModifyParamsPaymentMethodDataPaynow"] + """ + If this is a `paynow` PaymentMethod, this hash contains details about the PayNow payment method. + """ + paypal: NotRequired["SetupIntentModifyParamsPaymentMethodDataPaypal"] + """ + If this is a `paypal` PaymentMethod, this hash contains details about the PayPal payment method. + """ + pix: NotRequired["SetupIntentModifyParamsPaymentMethodDataPix"] + """ + If this is a `pix` PaymentMethod, this hash contains details about the Pix payment method. + """ + promptpay: NotRequired["SetupIntentModifyParamsPaymentMethodDataPromptpay"] + """ + If this is a `promptpay` PaymentMethod, this hash contains details about the PromptPay payment method. + """ + radar_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataRadarOptions" + ] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + revolut_pay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataRevolutPay" + ] + """ + If this is a `revolut_pay` PaymentMethod, this hash contains details about the Revolut Pay payment method. + """ + samsung_pay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataSamsungPay" + ] + """ + If this is a `samsung_pay` PaymentMethod, this hash contains details about the SamsungPay payment method. + """ + satispay: NotRequired["SetupIntentModifyParamsPaymentMethodDataSatispay"] + """ + If this is a `satispay` PaymentMethod, this hash contains details about the Satispay payment method. + """ + sepa_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataSepaDebit" + ] + """ + If this is a `sepa_debit` PaymentMethod, this hash contains details about the SEPA debit bank account. + """ + sofort: NotRequired["SetupIntentModifyParamsPaymentMethodDataSofort"] + """ + If this is a `sofort` PaymentMethod, this hash contains details about the SOFORT payment method. + """ + swish: NotRequired["SetupIntentModifyParamsPaymentMethodDataSwish"] + """ + If this is a `swish` PaymentMethod, this hash contains details about the Swish payment method. + """ + twint: NotRequired["SetupIntentModifyParamsPaymentMethodDataTwint"] + """ + If this is a TWINT PaymentMethod, this hash contains details about the TWINT payment method. + """ + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataUsBankAccount" + ] + """ + If this is an `us_bank_account` PaymentMethod, this hash contains details about the US bank account payment method. + """ + wechat_pay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodDataWechatPay" + ] + """ + If this is an `wechat_pay` PaymentMethod, this hash contains details about the wechat_pay payment method. + """ + zip: NotRequired["SetupIntentModifyParamsPaymentMethodDataZip"] + """ + If this is a `zip` PaymentMethod, this hash contains details about the Zip payment method. + """ + + +class SetupIntentModifyParamsPaymentMethodDataAcssDebit(TypedDict): + account_number: str + """ + Customer's bank account number. + """ + institution_number: str + """ + Institution number of the customer's bank. + """ + transit_number: str + """ + Transit number of the customer's bank. + """ + + +class SetupIntentModifyParamsPaymentMethodDataAffirm(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataAfterpayClearpay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataAlipay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataAlma(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataAmazonPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataAuBecsDebit(TypedDict): + account_number: str + """ + The account number for the bank account. + """ + bsb_number: str + """ + Bank-State-Branch number of the bank account. + """ + + +class SetupIntentModifyParamsPaymentMethodDataBacsDebit(TypedDict): + account_number: NotRequired[str] + """ + Account number of the bank account that the funds will be debited from. + """ + sort_code: NotRequired[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + +class SetupIntentModifyParamsPaymentMethodDataBancontact(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataBillie(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataBillingDetails(TypedDict): + address: NotRequired[ + "Literal['']|SetupIntentModifyParamsPaymentMethodDataBillingDetailsAddress" + ] + """ + Billing address. + """ + email: NotRequired["Literal['']|str"] + """ + Email address. + """ + name: NotRequired["Literal['']|str"] + """ + Full name. + """ + phone: NotRequired["Literal['']|str"] + """ + Billing phone number (including extension). + """ + tax_id: NotRequired[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + + +class SetupIntentModifyParamsPaymentMethodDataBillingDetailsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SetupIntentModifyParamsPaymentMethodDataBlik(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataBoleto(TypedDict): + tax_id: str + """ + The tax ID of the customer (CPF for individual consumers or CNPJ for businesses consumers) + """ + + +class SetupIntentModifyParamsPaymentMethodDataCashapp(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataCrypto(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataCustomerBalance(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataEps(TypedDict): + bank: NotRequired[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentModifyParamsPaymentMethodDataFpx(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type for FPX transaction + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. + """ + + +class SetupIntentModifyParamsPaymentMethodDataGiropay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataGrabpay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataIdeal(TypedDict): + bank: NotRequired[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Only use this parameter for existing customers. Don't use it for new customers. + """ + + +class SetupIntentModifyParamsPaymentMethodDataInteracPresent(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataKakaoPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataKlarna(TypedDict): + dob: NotRequired["SetupIntentModifyParamsPaymentMethodDataKlarnaDob"] + """ + Customer's date of birth + """ + + +class SetupIntentModifyParamsPaymentMethodDataKlarnaDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class SetupIntentModifyParamsPaymentMethodDataKonbini(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataKrCard(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataLink(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataMbWay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataMobilepay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataMultibanco(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataNaverPay(TypedDict): + funding: NotRequired[Literal["card", "points"]] + """ + Whether to use Naver Pay points or a card to fund this transaction. If not provided, this defaults to `card`. + """ + + +class SetupIntentModifyParamsPaymentMethodDataNzBankAccount(TypedDict): + account_holder_name: NotRequired[str] + """ + The name on the bank account. Only required if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + account_number: str + """ + The account number for the bank account. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + reference: NotRequired[str] + suffix: str + """ + The suffix of the bank account number. + """ + + +class SetupIntentModifyParamsPaymentMethodDataOxxo(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataP24(TypedDict): + bank: NotRequired[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentModifyParamsPaymentMethodDataPayByBank(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataPayco(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataPaynow(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataPaypal(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataPix(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataPromptpay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataRadarOptions(TypedDict): + session: NotRequired[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + +class SetupIntentModifyParamsPaymentMethodDataRevolutPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataSamsungPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataSatispay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataSepaDebit(TypedDict): + iban: str + """ + IBAN of the bank account. + """ + + +class SetupIntentModifyParamsPaymentMethodDataSofort(TypedDict): + country: Literal["AT", "BE", "DE", "ES", "IT", "NL"] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + +class SetupIntentModifyParamsPaymentMethodDataSwish(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataTwint(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataUsBankAccount(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_number: NotRequired[str] + """ + Account number of the bank account. + """ + account_type: NotRequired[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + financial_connections_account: NotRequired[str] + """ + The ID of a Financial Connections Account to use as a payment method. + """ + routing_number: NotRequired[str] + """ + Routing number of the bank account. + """ + + +class SetupIntentModifyParamsPaymentMethodDataWechatPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodDataZip(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsAcssDebit" + ] + """ + If this is a `acss_debit` SetupIntent, this sub-hash contains details about the ACSS Debit payment method options. + """ + amazon_pay: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsAmazonPay" + ] + """ + If this is a `amazon_pay` SetupIntent, this sub-hash contains details about the AmazonPay payment method options. + """ + bacs_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsBacsDebit" + ] + """ + If this is a `bacs_debit` SetupIntent, this sub-hash contains details about the Bacs Debit payment method options. + """ + card: NotRequired["SetupIntentModifyParamsPaymentMethodOptionsCard"] + """ + Configuration for any card setup attempted on this SetupIntent. + """ + card_present: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsCardPresent" + ] + """ + If this is a `card_present` PaymentMethod, this sub-hash contains details about the card-present payment method options. + """ + klarna: NotRequired["SetupIntentModifyParamsPaymentMethodOptionsKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method options. + """ + link: NotRequired["SetupIntentModifyParamsPaymentMethodOptionsLink"] + """ + If this is a `link` PaymentMethod, this sub-hash contains details about the Link payment method options. + """ + paypal: NotRequired["SetupIntentModifyParamsPaymentMethodOptionsPaypal"] + """ + If this is a `paypal` PaymentMethod, this sub-hash contains details about the PayPal payment method options. + """ + sepa_debit: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsSepaDebit" + ] + """ + If this is a `sepa_debit` SetupIntent, this sub-hash contains details about the SEPA Debit payment method options. + """ + us_bank_account: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccount" + ] + """ + If this is a `us_bank_account` SetupIntent, this sub-hash contains details about the US bank account payment method options. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsAcssDebit(TypedDict): + currency: NotRequired[Literal["cad", "usd"]] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + mandate_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + custom_mandate_url: NotRequired["Literal['']|str"] + """ + A URL for custom mandate text to render during confirmation step. + The URL will be rendered with additional GET parameters `payment_intent` and `payment_intent_client_secret` when confirming a Payment Intent, + or `setup_intent` and `setup_intent_client_secret` when confirming a Setup Intent. + """ + default_for: NotRequired[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: NotRequired[str] + """ + Description of the mandate interval. Only required if 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: NotRequired[Literal["combined", "interval", "sporadic"]] + """ + Payment schedule for the mandate. + """ + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsAmazonPay(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodOptionsBacsDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCard(TypedDict): + mandate_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + moto: NotRequired[bool] + """ + When specified, this parameter signals that a card has been collected + as MOTO (Mail Order Telephone Order) and thus out of scope for SCA. This + parameter can only be provided during confirmation. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this SetupIntent on. Depends on the available networks of the card attached to the SetupIntent. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + three_d_secure: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecure" + ] + """ + If 3D Secure authentication was performed with a third-party provider, + the authentication details to use for this setup. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCardMandateOptions(TypedDict): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + currency: str + """ + Currency in which future payments will be charged. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: NotRequired[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: NotRequired[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecure(TypedDict): + ares_trans_status: NotRequired[Literal["A", "C", "I", "N", "R", "U", "Y"]] + """ + The `transStatus` returned from the card Issuer's ACS in the ARes. + """ + cryptogram: NotRequired[str] + """ + The cryptogram, also known as the "authentication value" (AAV, CAVV or + AEVV). This value is 20 bytes, base64-encoded into a 28-character string. + (Most 3D Secure providers will return the base64-encoded version, which + is what you should specify here.) + """ + electronic_commerce_indicator: NotRequired[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI) is returned by your 3D Secure + provider and indicates what degree of authentication was performed. + """ + network_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions" + ] + """ + Network specific 3DS fields. Network specific arguments require an + explicit card brand choice. The parameter `payment_method_options.card.network`` + must be populated accordingly + """ + requestor_challenge_indicator: NotRequired[str] + """ + The challenge indicator (`threeDSRequestorChallengeInd`) which was requested in the + AReq sent to the card Issuer's ACS. A string containing 2 digits from 01-99. + """ + transaction_id: NotRequired[str] + """ + For 3D Secure 1, the XID. For 3D Secure 2, the Directory Server + Transaction ID (dsTransID). + """ + version: NotRequired[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was performed. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions( + TypedDict, +): + cartes_bancaires: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires" + ] + """ + Cartes Bancaires-specific 3DS fields. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires( + TypedDict, +): + cb_avalgo: Literal["0", "1", "2", "3", "4", "A"] + """ + The cryptogram calculation algorithm used by the card Issuer's ACS + to calculate the Authentication cryptogram. Also known as `cavvAlgorithm`. + messageExtension: CB-AVALGO + """ + cb_exemption: NotRequired[str] + """ + The exemption indicator returned from Cartes Bancaires in the ARes. + message extension: CB-EXEMPTION; string (4 characters) + This is a 3 byte bitmap (low significant byte first and most significant + bit first) that has been Base64 encoded + """ + cb_score: NotRequired[int] + """ + The risk score returned from Cartes Bancaires in the ARes. + message extension: CB-SCORE; numeric value 0-99 + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsCardPresent(TypedDict): + pass + + +class SetupIntentModifyParamsPaymentMethodOptionsKlarna(TypedDict): + currency: NotRequired[str] + """ + The currency of the SetupIntent. Three letter ISO currency code. + """ + on_demand: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand" + ] + """ + On-demand details if setting up a payment method for on-demand payments. + """ + preferred_locale: NotRequired[ + Literal[ + "cs-CZ", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AT", + "en-AU", + "en-BE", + "en-CA", + "en-CH", + "en-CZ", + "en-DE", + "en-DK", + "en-ES", + "en-FI", + "en-FR", + "en-GB", + "en-GR", + "en-IE", + "en-IT", + "en-NL", + "en-NO", + "en-NZ", + "en-PL", + "en-PT", + "en-RO", + "en-SE", + "en-US", + "es-ES", + "es-US", + "fi-FI", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "it-CH", + "it-IT", + "nb-NO", + "nl-BE", + "nl-NL", + "pl-PL", + "pt-PT", + "ro-RO", + "sv-FI", + "sv-SE", + ] + ] + """ + Preferred language of the Klarna authorization page that the customer is redirected to + """ + subscriptions: NotRequired[ + "Literal['']|List[SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscription]" + ] + """ + Subscription details if setting up or charging a subscription + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand(TypedDict): + average_amount: NotRequired[int] + """ + Your average amount value. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + maximum_amount: NotRequired[int] + """ + The maximum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + minimum_amount: NotRequired[int] + """ + The lowest or minimum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + purchase_interval: NotRequired[Literal["day", "month", "week", "year"]] + """ + Interval at which the customer is making purchases + """ + purchase_interval_count: NotRequired[int] + """ + The number of `purchase_interval` between charges + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscription(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Unit of time between subscription charges. + """ + interval_count: NotRequired[int] + """ + The number of intervals (specified in the `interval` attribute) between subscription charges. For example, `interval=month` and `interval_count=3` charges every 3 months. + """ + name: NotRequired[str] + """ + Name for subscription. + """ + next_billing: "SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling" + """ + Describes the upcoming charge for this subscription. + """ + reference: str + """ + A non-customer-facing reference to correlate subscription charges in the Klarna app. Use a value that persists across subscription charges. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling( + TypedDict, +): + amount: int + """ + The amount of the next charge for the subscription. + """ + date: str + """ + The date of the next charge for the subscription in YYYY-MM-DD format. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsLink(TypedDict): + persistent_token: NotRequired[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsPaypal(TypedDict): + billing_agreement_id: NotRequired[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsSepaDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsUsBankAccount(TypedDict): + financial_connections: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + mandate_options: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + networks: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks" + ] + """ + Additional fields for network related functions + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + return_url: NotRequired[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions( + TypedDict, +): + collection_method: NotRequired["Literal['']|Literal['paper']"] + """ + The method used to collect offline mandate customer acceptance. + """ + + +class SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks( + TypedDict, +): + requested: NotRequired[List[Literal["ach", "us_domestic_wire"]]] + """ + Triggers validations to run across the selected networks + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_retrieve_params.py new file mode 100644 index 00000000..88c235d7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_retrieve_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SetupIntentRetrieveParams(RequestOptions): + client_secret: NotRequired[str] + """ + The client secret of the SetupIntent. We require this string if you use a publishable key to retrieve the SetupIntent. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_update_params.py new file mode 100644 index 00000000..d64ac8ab --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_update_params.py @@ -0,0 +1,1381 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SetupIntentUpdateParams(TypedDict): + attach_to_self: NotRequired[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + customer: NotRequired[str] + """ + ID of the Customer this SetupIntent belongs to, if one exists. + + If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + excluded_payment_method_types: NotRequired[ + "Literal['']|List[Literal['acss_debit', 'affirm', 'afterpay_clearpay', 'alipay', 'alma', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'billie', 'blik', 'boleto', 'card', 'cashapp', 'crypto', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'mb_way', 'mobilepay', 'multibanco', 'naver_pay', 'nz_bank_account', 'oxxo', 'p24', 'pay_by_bank', 'payco', 'paynow', 'paypal', 'pix', 'promptpay', 'revolut_pay', 'samsung_pay', 'satispay', 'sepa_debit', 'sofort', 'swish', 'twint', 'us_bank_account', 'wechat_pay', 'zip']]" + ] + """ + The list of payment method types to exclude from use with this SetupIntent. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + flow_directions: NotRequired[List[Literal["inbound", "outbound"]]] + """ + Indicates the directions of money movement for which this payment method is intended to be used. + + Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + payment_method: NotRequired[str] + """ + ID of the payment method (a PaymentMethod, Card, or saved Source object) to attach to this SetupIntent. To unset this field to null, pass in an empty string. + """ + payment_method_configuration: NotRequired[str] + """ + The ID of the [payment method configuration](https://stripe.com/docs/api/payment_method_configurations) to use with this SetupIntent. + """ + payment_method_data: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodData" + ] + """ + When included, this hash creates a PaymentMethod that is set as the [`payment_method`](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-payment_method) + value in the SetupIntent. + """ + payment_method_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptions" + ] + """ + Payment method-specific configuration for this SetupIntent. + """ + payment_method_types: NotRequired[List[str]] + """ + The list of payment method types (for example, card) that this SetupIntent can set up. If you don't provide this, Stripe will dynamically show relevant payment methods from your [payment method settings](https://dashboard.stripe.com/settings/payment_methods). A list of valid payment method types can be found [here](https://docs.stripe.com/api/payment_methods/object#payment_method_object-type). + """ + + +class SetupIntentUpdateParamsPaymentMethodData(TypedDict): + acss_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataAcssDebit" + ] + """ + If this is an `acss_debit` PaymentMethod, this hash contains details about the ACSS Debit payment method. + """ + affirm: NotRequired["SetupIntentUpdateParamsPaymentMethodDataAffirm"] + """ + If this is an `affirm` PaymentMethod, this hash contains details about the Affirm payment method. + """ + afterpay_clearpay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataAfterpayClearpay" + ] + """ + If this is an `AfterpayClearpay` PaymentMethod, this hash contains details about the AfterpayClearpay payment method. + """ + alipay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataAlipay"] + """ + If this is an `Alipay` PaymentMethod, this hash contains details about the Alipay payment method. + """ + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to `unspecified`. + """ + alma: NotRequired["SetupIntentUpdateParamsPaymentMethodDataAlma"] + """ + If this is a Alma PaymentMethod, this hash contains details about the Alma payment method. + """ + amazon_pay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataAmazonPay" + ] + """ + If this is a AmazonPay PaymentMethod, this hash contains details about the AmazonPay payment method. + """ + au_becs_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataAuBecsDebit" + ] + """ + If this is an `au_becs_debit` PaymentMethod, this hash contains details about the bank account. + """ + bacs_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataBacsDebit" + ] + """ + If this is a `bacs_debit` PaymentMethod, this hash contains details about the Bacs Direct Debit bank account. + """ + bancontact: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataBancontact" + ] + """ + If this is a `bancontact` PaymentMethod, this hash contains details about the Bancontact payment method. + """ + billie: NotRequired["SetupIntentUpdateParamsPaymentMethodDataBillie"] + """ + If this is a `billie` PaymentMethod, this hash contains details about the Billie payment method. + """ + billing_details: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataBillingDetails" + ] + """ + Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. + """ + blik: NotRequired["SetupIntentUpdateParamsPaymentMethodDataBlik"] + """ + If this is a `blik` PaymentMethod, this hash contains details about the BLIK payment method. + """ + boleto: NotRequired["SetupIntentUpdateParamsPaymentMethodDataBoleto"] + """ + If this is a `boleto` PaymentMethod, this hash contains details about the Boleto payment method. + """ + cashapp: NotRequired["SetupIntentUpdateParamsPaymentMethodDataCashapp"] + """ + If this is a `cashapp` PaymentMethod, this hash contains details about the Cash App Pay payment method. + """ + crypto: NotRequired["SetupIntentUpdateParamsPaymentMethodDataCrypto"] + """ + If this is a Crypto PaymentMethod, this hash contains details about the Crypto payment method. + """ + customer_balance: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataCustomerBalance" + ] + """ + If this is a `customer_balance` PaymentMethod, this hash contains details about the CustomerBalance payment method. + """ + eps: NotRequired["SetupIntentUpdateParamsPaymentMethodDataEps"] + """ + If this is an `eps` PaymentMethod, this hash contains details about the EPS payment method. + """ + fpx: NotRequired["SetupIntentUpdateParamsPaymentMethodDataFpx"] + """ + If this is an `fpx` PaymentMethod, this hash contains details about the FPX payment method. + """ + giropay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataGiropay"] + """ + If this is a `giropay` PaymentMethod, this hash contains details about the Giropay payment method. + """ + grabpay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataGrabpay"] + """ + If this is a `grabpay` PaymentMethod, this hash contains details about the GrabPay payment method. + """ + ideal: NotRequired["SetupIntentUpdateParamsPaymentMethodDataIdeal"] + """ + If this is an `ideal` PaymentMethod, this hash contains details about the iDEAL payment method. + """ + interac_present: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataInteracPresent" + ] + """ + If this is an `interac_present` PaymentMethod, this hash contains details about the Interac Present payment method. + """ + kakao_pay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataKakaoPay"] + """ + If this is a `kakao_pay` PaymentMethod, this hash contains details about the Kakao Pay payment method. + """ + klarna: NotRequired["SetupIntentUpdateParamsPaymentMethodDataKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method. + """ + konbini: NotRequired["SetupIntentUpdateParamsPaymentMethodDataKonbini"] + """ + If this is a `konbini` PaymentMethod, this hash contains details about the Konbini payment method. + """ + kr_card: NotRequired["SetupIntentUpdateParamsPaymentMethodDataKrCard"] + """ + If this is a `kr_card` PaymentMethod, this hash contains details about the Korean Card payment method. + """ + link: NotRequired["SetupIntentUpdateParamsPaymentMethodDataLink"] + """ + If this is an `Link` PaymentMethod, this hash contains details about the Link payment method. + """ + mb_way: NotRequired["SetupIntentUpdateParamsPaymentMethodDataMbWay"] + """ + If this is a MB WAY PaymentMethod, this hash contains details about the MB WAY payment method. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mobilepay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataMobilepay"] + """ + If this is a `mobilepay` PaymentMethod, this hash contains details about the MobilePay payment method. + """ + multibanco: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataMultibanco" + ] + """ + If this is a `multibanco` PaymentMethod, this hash contains details about the Multibanco payment method. + """ + naver_pay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataNaverPay"] + """ + If this is a `naver_pay` PaymentMethod, this hash contains details about the Naver Pay payment method. + """ + nz_bank_account: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataNzBankAccount" + ] + """ + If this is an nz_bank_account PaymentMethod, this hash contains details about the nz_bank_account payment method. + """ + oxxo: NotRequired["SetupIntentUpdateParamsPaymentMethodDataOxxo"] + """ + If this is an `oxxo` PaymentMethod, this hash contains details about the OXXO payment method. + """ + p24: NotRequired["SetupIntentUpdateParamsPaymentMethodDataP24"] + """ + If this is a `p24` PaymentMethod, this hash contains details about the P24 payment method. + """ + pay_by_bank: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataPayByBank" + ] + """ + If this is a `pay_by_bank` PaymentMethod, this hash contains details about the PayByBank payment method. + """ + payco: NotRequired["SetupIntentUpdateParamsPaymentMethodDataPayco"] + """ + If this is a `payco` PaymentMethod, this hash contains details about the PAYCO payment method. + """ + paynow: NotRequired["SetupIntentUpdateParamsPaymentMethodDataPaynow"] + """ + If this is a `paynow` PaymentMethod, this hash contains details about the PayNow payment method. + """ + paypal: NotRequired["SetupIntentUpdateParamsPaymentMethodDataPaypal"] + """ + If this is a `paypal` PaymentMethod, this hash contains details about the PayPal payment method. + """ + pix: NotRequired["SetupIntentUpdateParamsPaymentMethodDataPix"] + """ + If this is a `pix` PaymentMethod, this hash contains details about the Pix payment method. + """ + promptpay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataPromptpay"] + """ + If this is a `promptpay` PaymentMethod, this hash contains details about the PromptPay payment method. + """ + radar_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataRadarOptions" + ] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + revolut_pay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataRevolutPay" + ] + """ + If this is a `revolut_pay` PaymentMethod, this hash contains details about the Revolut Pay payment method. + """ + samsung_pay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataSamsungPay" + ] + """ + If this is a `samsung_pay` PaymentMethod, this hash contains details about the SamsungPay payment method. + """ + satispay: NotRequired["SetupIntentUpdateParamsPaymentMethodDataSatispay"] + """ + If this is a `satispay` PaymentMethod, this hash contains details about the Satispay payment method. + """ + sepa_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataSepaDebit" + ] + """ + If this is a `sepa_debit` PaymentMethod, this hash contains details about the SEPA debit bank account. + """ + sofort: NotRequired["SetupIntentUpdateParamsPaymentMethodDataSofort"] + """ + If this is a `sofort` PaymentMethod, this hash contains details about the SOFORT payment method. + """ + swish: NotRequired["SetupIntentUpdateParamsPaymentMethodDataSwish"] + """ + If this is a `swish` PaymentMethod, this hash contains details about the Swish payment method. + """ + twint: NotRequired["SetupIntentUpdateParamsPaymentMethodDataTwint"] + """ + If this is a TWINT PaymentMethod, this hash contains details about the TWINT payment method. + """ + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataUsBankAccount" + ] + """ + If this is an `us_bank_account` PaymentMethod, this hash contains details about the US bank account payment method. + """ + wechat_pay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodDataWechatPay" + ] + """ + If this is an `wechat_pay` PaymentMethod, this hash contains details about the wechat_pay payment method. + """ + zip: NotRequired["SetupIntentUpdateParamsPaymentMethodDataZip"] + """ + If this is a `zip` PaymentMethod, this hash contains details about the Zip payment method. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataAcssDebit(TypedDict): + account_number: str + """ + Customer's bank account number. + """ + institution_number: str + """ + Institution number of the customer's bank. + """ + transit_number: str + """ + Transit number of the customer's bank. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataAffirm(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataAfterpayClearpay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataAlipay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataAlma(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataAmazonPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataAuBecsDebit(TypedDict): + account_number: str + """ + The account number for the bank account. + """ + bsb_number: str + """ + Bank-State-Branch number of the bank account. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataBacsDebit(TypedDict): + account_number: NotRequired[str] + """ + Account number of the bank account that the funds will be debited from. + """ + sort_code: NotRequired[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + +class SetupIntentUpdateParamsPaymentMethodDataBancontact(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataBillie(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataBillingDetails(TypedDict): + address: NotRequired[ + "Literal['']|SetupIntentUpdateParamsPaymentMethodDataBillingDetailsAddress" + ] + """ + Billing address. + """ + email: NotRequired["Literal['']|str"] + """ + Email address. + """ + name: NotRequired["Literal['']|str"] + """ + Full name. + """ + phone: NotRequired["Literal['']|str"] + """ + Billing phone number (including extension). + """ + tax_id: NotRequired[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataBillingDetailsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataBlik(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataBoleto(TypedDict): + tax_id: str + """ + The tax ID of the customer (CPF for individual consumers or CNPJ for businesses consumers) + """ + + +class SetupIntentUpdateParamsPaymentMethodDataCashapp(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataCrypto(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataCustomerBalance(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataEps(TypedDict): + bank: NotRequired[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataFpx(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type for FPX transaction + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataGiropay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataGrabpay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataIdeal(TypedDict): + bank: NotRequired[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Only use this parameter for existing customers. Don't use it for new customers. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataInteracPresent(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataKakaoPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataKlarna(TypedDict): + dob: NotRequired["SetupIntentUpdateParamsPaymentMethodDataKlarnaDob"] + """ + Customer's date of birth + """ + + +class SetupIntentUpdateParamsPaymentMethodDataKlarnaDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataKonbini(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataKrCard(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataLink(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataMbWay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataMobilepay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataMultibanco(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataNaverPay(TypedDict): + funding: NotRequired[Literal["card", "points"]] + """ + Whether to use Naver Pay points or a card to fund this transaction. If not provided, this defaults to `card`. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataNzBankAccount(TypedDict): + account_holder_name: NotRequired[str] + """ + The name on the bank account. Only required if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + account_number: str + """ + The account number for the bank account. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + reference: NotRequired[str] + suffix: str + """ + The suffix of the bank account number. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataOxxo(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataP24(TypedDict): + bank: NotRequired[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataPayByBank(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataPayco(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataPaynow(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataPaypal(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataPix(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataPromptpay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataRadarOptions(TypedDict): + session: NotRequired[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataRevolutPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataSamsungPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataSatispay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataSepaDebit(TypedDict): + iban: str + """ + IBAN of the bank account. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataSofort(TypedDict): + country: Literal["AT", "BE", "DE", "ES", "IT", "NL"] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataSwish(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataTwint(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataUsBankAccount(TypedDict): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_number: NotRequired[str] + """ + Account number of the bank account. + """ + account_type: NotRequired[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + financial_connections_account: NotRequired[str] + """ + The ID of a Financial Connections Account to use as a payment method. + """ + routing_number: NotRequired[str] + """ + Routing number of the bank account. + """ + + +class SetupIntentUpdateParamsPaymentMethodDataWechatPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodDataZip(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsAcssDebit" + ] + """ + If this is a `acss_debit` SetupIntent, this sub-hash contains details about the ACSS Debit payment method options. + """ + amazon_pay: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsAmazonPay" + ] + """ + If this is a `amazon_pay` SetupIntent, this sub-hash contains details about the AmazonPay payment method options. + """ + bacs_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsBacsDebit" + ] + """ + If this is a `bacs_debit` SetupIntent, this sub-hash contains details about the Bacs Debit payment method options. + """ + card: NotRequired["SetupIntentUpdateParamsPaymentMethodOptionsCard"] + """ + Configuration for any card setup attempted on this SetupIntent. + """ + card_present: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsCardPresent" + ] + """ + If this is a `card_present` PaymentMethod, this sub-hash contains details about the card-present payment method options. + """ + klarna: NotRequired["SetupIntentUpdateParamsPaymentMethodOptionsKlarna"] + """ + If this is a `klarna` PaymentMethod, this hash contains details about the Klarna payment method options. + """ + link: NotRequired["SetupIntentUpdateParamsPaymentMethodOptionsLink"] + """ + If this is a `link` PaymentMethod, this sub-hash contains details about the Link payment method options. + """ + paypal: NotRequired["SetupIntentUpdateParamsPaymentMethodOptionsPaypal"] + """ + If this is a `paypal` PaymentMethod, this sub-hash contains details about the PayPal payment method options. + """ + sepa_debit: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsSepaDebit" + ] + """ + If this is a `sepa_debit` SetupIntent, this sub-hash contains details about the SEPA Debit payment method options. + """ + us_bank_account: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccount" + ] + """ + If this is a `us_bank_account` SetupIntent, this sub-hash contains details about the US bank account payment method options. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsAcssDebit(TypedDict): + currency: NotRequired[Literal["cad", "usd"]] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + mandate_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + custom_mandate_url: NotRequired["Literal['']|str"] + """ + A URL for custom mandate text to render during confirmation step. + The URL will be rendered with additional GET parameters `payment_intent` and `payment_intent_client_secret` when confirming a Payment Intent, + or `setup_intent` and `setup_intent_client_secret` when confirming a Setup Intent. + """ + default_for: NotRequired[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: NotRequired[str] + """ + Description of the mandate interval. Only required if 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: NotRequired[Literal["combined", "interval", "sporadic"]] + """ + Payment schedule for the mandate. + """ + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsAmazonPay(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodOptionsBacsDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCard(TypedDict): + mandate_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + moto: NotRequired[bool] + """ + When specified, this parameter signals that a card has been collected + as MOTO (Mail Order Telephone Order) and thus out of scope for SCA. This + parameter can only be provided during confirmation. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this SetupIntent on. Depends on the available networks of the card attached to the SetupIntent. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + three_d_secure: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure" + ] + """ + If 3D Secure authentication was performed with a third-party provider, + the authentication details to use for this setup. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCardMandateOptions(TypedDict): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + currency: str + """ + Currency in which future payments will be charged. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: NotRequired[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: NotRequired[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure(TypedDict): + ares_trans_status: NotRequired[Literal["A", "C", "I", "N", "R", "U", "Y"]] + """ + The `transStatus` returned from the card Issuer's ACS in the ARes. + """ + cryptogram: NotRequired[str] + """ + The cryptogram, also known as the "authentication value" (AAV, CAVV or + AEVV). This value is 20 bytes, base64-encoded into a 28-character string. + (Most 3D Secure providers will return the base64-encoded version, which + is what you should specify here.) + """ + electronic_commerce_indicator: NotRequired[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI) is returned by your 3D Secure + provider and indicates what degree of authentication was performed. + """ + network_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions" + ] + """ + Network specific 3DS fields. Network specific arguments require an + explicit card brand choice. The parameter `payment_method_options.card.network`` + must be populated accordingly + """ + requestor_challenge_indicator: NotRequired[str] + """ + The challenge indicator (`threeDSRequestorChallengeInd`) which was requested in the + AReq sent to the card Issuer's ACS. A string containing 2 digits from 01-99. + """ + transaction_id: NotRequired[str] + """ + For 3D Secure 1, the XID. For 3D Secure 2, the Directory Server + Transaction ID (dsTransID). + """ + version: NotRequired[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was performed. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions( + TypedDict, +): + cartes_bancaires: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires" + ] + """ + Cartes Bancaires-specific 3DS fields. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires( + TypedDict, +): + cb_avalgo: Literal["0", "1", "2", "3", "4", "A"] + """ + The cryptogram calculation algorithm used by the card Issuer's ACS + to calculate the Authentication cryptogram. Also known as `cavvAlgorithm`. + messageExtension: CB-AVALGO + """ + cb_exemption: NotRequired[str] + """ + The exemption indicator returned from Cartes Bancaires in the ARes. + message extension: CB-EXEMPTION; string (4 characters) + This is a 3 byte bitmap (low significant byte first and most significant + bit first) that has been Base64 encoded + """ + cb_score: NotRequired[int] + """ + The risk score returned from Cartes Bancaires in the ARes. + message extension: CB-SCORE; numeric value 0-99 + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsCardPresent(TypedDict): + pass + + +class SetupIntentUpdateParamsPaymentMethodOptionsKlarna(TypedDict): + currency: NotRequired[str] + """ + The currency of the SetupIntent. Three letter ISO currency code. + """ + on_demand: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand" + ] + """ + On-demand details if setting up a payment method for on-demand payments. + """ + preferred_locale: NotRequired[ + Literal[ + "cs-CZ", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AT", + "en-AU", + "en-BE", + "en-CA", + "en-CH", + "en-CZ", + "en-DE", + "en-DK", + "en-ES", + "en-FI", + "en-FR", + "en-GB", + "en-GR", + "en-IE", + "en-IT", + "en-NL", + "en-NO", + "en-NZ", + "en-PL", + "en-PT", + "en-RO", + "en-SE", + "en-US", + "es-ES", + "es-US", + "fi-FI", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "it-CH", + "it-IT", + "nb-NO", + "nl-BE", + "nl-NL", + "pl-PL", + "pt-PT", + "ro-RO", + "sv-FI", + "sv-SE", + ] + ] + """ + Preferred language of the Klarna authorization page that the customer is redirected to + """ + subscriptions: NotRequired[ + "Literal['']|List[SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription]" + ] + """ + Subscription details if setting up or charging a subscription + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand(TypedDict): + average_amount: NotRequired[int] + """ + Your average amount value. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + maximum_amount: NotRequired[int] + """ + The maximum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + minimum_amount: NotRequired[int] + """ + The lowest or minimum value you may charge a customer per purchase. You can use a value across your customer base, or segment based on customer type, country, etc. + """ + purchase_interval: NotRequired[Literal["day", "month", "week", "year"]] + """ + Interval at which the customer is making purchases + """ + purchase_interval_count: NotRequired[int] + """ + The number of `purchase_interval` between charges + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Unit of time between subscription charges. + """ + interval_count: NotRequired[int] + """ + The number of intervals (specified in the `interval` attribute) between subscription charges. For example, `interval=month` and `interval_count=3` charges every 3 months. + """ + name: NotRequired[str] + """ + Name for subscription. + """ + next_billing: "SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling" + """ + Describes the upcoming charge for this subscription. + """ + reference: str + """ + A non-customer-facing reference to correlate subscription charges in the Klarna app. Use a value that persists across subscription charges. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling( + TypedDict, +): + amount: int + """ + The amount of the next charge for the subscription. + """ + date: str + """ + The date of the next charge for the subscription in YYYY-MM-DD format. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsLink(TypedDict): + persistent_token: NotRequired[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsPaypal(TypedDict): + billing_agreement_id: NotRequired[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsSepaDebit(TypedDict): + mandate_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions( + TypedDict, +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccount(TypedDict): + financial_connections: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + mandate_options: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + networks: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks" + ] + """ + Additional fields for network related functions + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + return_url: NotRequired[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions( + TypedDict, +): + collection_method: NotRequired["Literal['']|Literal['paper']"] + """ + The method used to collect offline mandate customer acceptance. + """ + + +class SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks( + TypedDict, +): + requested: NotRequired[List[Literal["ach", "us_domestic_wire"]]] + """ + Triggers validations to run across the selected networks + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_verify_microdeposits_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_verify_microdeposits_params.py new file mode 100644 index 00000000..c53bc852 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_setup_intent_verify_microdeposits_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SetupIntentVerifyMicrodepositsParams(RequestOptions): + amounts: NotRequired[List[int]] + """ + Two positive integers, in *cents*, equal to the values of the microdeposits sent to the bank account. + """ + descriptor_code: NotRequired[str] + """ + A six-character code starting with SM present in the microdeposit sent to the bank account. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_create_params.py new file mode 100644 index 00000000..8697e713 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_create_params.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ShippingRateCreateParams(RequestOptions): + delivery_estimate: NotRequired["ShippingRateCreateParamsDeliveryEstimate"] + """ + The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + display_name: str + """ + The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + fixed_amount: NotRequired["ShippingRateCreateParamsFixedAmount"] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. The Shipping tax code is `txcd_92010001`. + """ + type: NotRequired[Literal["fixed_amount"]] + """ + The type of calculation to use on the shipping rate. + """ + + +class ShippingRateCreateParamsDeliveryEstimate(TypedDict): + maximum: NotRequired["ShippingRateCreateParamsDeliveryEstimateMaximum"] + """ + The upper bound of the estimated range. If empty, represents no upper bound i.e., infinite. + """ + minimum: NotRequired["ShippingRateCreateParamsDeliveryEstimateMinimum"] + """ + The lower bound of the estimated range. If empty, represents no lower bound. + """ + + +class ShippingRateCreateParamsDeliveryEstimateMaximum(TypedDict): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class ShippingRateCreateParamsDeliveryEstimateMinimum(TypedDict): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class ShippingRateCreateParamsFixedAmount(TypedDict): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[str, "ShippingRateCreateParamsFixedAmountCurrencyOptions"] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class ShippingRateCreateParamsFixedAmountCurrencyOptions(TypedDict): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_list_params.py new file mode 100644 index 00000000..4a0a8baa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ShippingRateListParams(RequestOptions): + active: NotRequired[bool] + """ + Only return shipping rates that are active or inactive. + """ + created: NotRequired["ShippingRateListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + currency: NotRequired[str] + """ + Only return shipping rates for the given currency. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class ShippingRateListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_modify_params.py new file mode 100644 index 00000000..85f84f4b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_modify_params.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ShippingRateModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Whether the shipping rate can be used for new purchases. Defaults to `true`. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + fixed_amount: NotRequired["ShippingRateModifyParamsFixedAmount"] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + + +class ShippingRateModifyParamsFixedAmount(TypedDict): + currency_options: NotRequired[ + Dict[str, "ShippingRateModifyParamsFixedAmountCurrencyOptions"] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class ShippingRateModifyParamsFixedAmountCurrencyOptions(TypedDict): + amount: NotRequired[int] + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_retrieve_params.py new file mode 100644 index 00000000..2cdc3e78 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ShippingRateRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_update_params.py new file mode 100644 index 00000000..bdfb36dc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_shipping_rate_update_params.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ShippingRateUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Whether the shipping rate can be used for new purchases. Defaults to `true`. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + fixed_amount: NotRequired["ShippingRateUpdateParamsFixedAmount"] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + + +class ShippingRateUpdateParamsFixedAmount(TypedDict): + currency_options: NotRequired[ + Dict[str, "ShippingRateUpdateParamsFixedAmountCurrencyOptions"] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class ShippingRateUpdateParamsFixedAmountCurrencyOptions(TypedDict): + amount: NotRequired[int] + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_create_params.py new file mode 100644 index 00000000..013849e7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_create_params.py @@ -0,0 +1,282 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SourceCreateParams(RequestOptions): + amount: NotRequired[int] + """ + Amount associated with the source. This is the amount for which the source will be chargeable once ready. Required for `single_use` sources. Not supported for `receiver` type sources, where charge amount may not be specified until funds land. + """ + currency: NotRequired[str] + """ + Three-letter [ISO code for the currency](https://stripe.com/docs/currencies) associated with the source. This is the currency for which the source will be chargeable once ready. + """ + customer: NotRequired[str] + """ + The `Customer` to whom the original source is attached to. Must be set when the original source is not a `Source` (e.g., `Card`). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + flow: NotRequired[ + Literal["code_verification", "none", "receiver", "redirect"] + ] + """ + The authentication `flow` of the source to create. `flow` is one of `redirect`, `receiver`, `code_verification`, `none`. It is generally inferred unless a type supports multiple flows. + """ + mandate: NotRequired["SourceCreateParamsMandate"] + """ + Information about a mandate possibility attached to a source object (generally for bank debits) as well as its acceptance status. + """ + metadata: NotRequired[Dict[str, str]] + original_source: NotRequired[str] + """ + The source to share. + """ + owner: NotRequired["SourceCreateParamsOwner"] + """ + Information about the owner of the payment instrument that may be used or required by particular source types. + """ + receiver: NotRequired["SourceCreateParamsReceiver"] + """ + Optional parameters for the receiver flow. Can be set only if the source is a receiver (`flow` is `receiver`). + """ + redirect: NotRequired["SourceCreateParamsRedirect"] + """ + Parameters required for the redirect flow. Required if the source is authenticated by a redirect (`flow` is `redirect`). + """ + source_order: NotRequired["SourceCreateParamsSourceOrder"] + """ + Information about the items and shipping associated with the source. Required for transactional credit (for example Klarna) sources before you can charge it. + """ + statement_descriptor: NotRequired[str] + """ + An arbitrary string to be displayed on your customer's statement. As an example, if your website is `RunClub` and the item you're charging for is a race ticket, you may want to specify a `statement_descriptor` of `RunClub 5K race ticket.` While many payment types will display this information, some may not display it at all. + """ + token: NotRequired[str] + """ + An optional token used to create the source. When passed, token properties will override source parameters. + """ + type: NotRequired[str] + """ + The `type` of the source to create. Required unless `customer` and `original_source` are specified (see the [Cloning card Sources](https://stripe.com/docs/sources/connect#cloning-card-sources) guide) + """ + usage: NotRequired[Literal["reusable", "single_use"]] + + +class SourceCreateParamsMandate(TypedDict): + acceptance: NotRequired["SourceCreateParamsMandateAcceptance"] + """ + The parameters required to notify Stripe of a mandate acceptance or refusal by the customer. + """ + amount: NotRequired["Literal['']|int"] + """ + The amount specified by the mandate. (Leave null for a mandate covering all amounts) + """ + currency: NotRequired[str] + """ + The currency specified by the mandate. (Must match `currency` of the source) + """ + interval: NotRequired[Literal["one_time", "scheduled", "variable"]] + """ + The interval of debits permitted by the mandate. Either `one_time` (just permitting a single debit), `scheduled` (with debits on an agreed schedule or for clearly-defined events), or `variable`(for debits with any frequency) + """ + notification_method: NotRequired[ + Literal["deprecated_none", "email", "manual", "none", "stripe_email"] + ] + """ + The method Stripe should use to notify the customer of upcoming debit instructions and/or mandate confirmation as required by the underlying debit network. Either `email` (an email is sent directly to the customer), `manual` (a `source.mandate_notification` event is sent to your webhooks endpoint and you should handle the notification) or `none` (the underlying debit network does not require any notification). + """ + + +class SourceCreateParamsMandateAcceptance(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + offline: NotRequired["SourceCreateParamsMandateAcceptanceOffline"] + """ + The parameters required to store a mandate accepted offline. Should only be set if `mandate[type]` is `offline` + """ + online: NotRequired["SourceCreateParamsMandateAcceptanceOnline"] + """ + The parameters required to store a mandate accepted online. Should only be set if `mandate[type]` is `online` + """ + status: Literal["accepted", "pending", "refused", "revoked"] + """ + The status of the mandate acceptance. Either `accepted` (the mandate was accepted) or `refused` (the mandate was refused). + """ + type: NotRequired[Literal["offline", "online"]] + """ + The type of acceptance information included with the mandate. Either `online` or `offline` + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceCreateParamsMandateAcceptanceOffline(TypedDict): + contact_email: str + """ + An email to contact you with if a copy of the mandate is requested, required if `type` is `offline`. + """ + + +class SourceCreateParamsMandateAcceptanceOnline(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceCreateParamsOwner(TypedDict): + address: NotRequired["SourceCreateParamsOwnerAddress"] + """ + Owner's address. + """ + email: NotRequired[str] + """ + Owner's email address. + """ + name: NotRequired[str] + """ + Owner's full name. + """ + phone: NotRequired[str] + """ + Owner's phone number. + """ + + +class SourceCreateParamsOwnerAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SourceCreateParamsReceiver(TypedDict): + refund_attributes_method: NotRequired[Literal["email", "manual", "none"]] + """ + The method Stripe should use to request information needed to process a refund or mispayment. Either `email` (an email is sent directly to the customer) or `manual` (a `source.refund_attributes_required` event is sent to your webhooks endpoint). Refer to each payment method's documentation to learn which refund attributes may be required. + """ + + +class SourceCreateParamsRedirect(TypedDict): + return_url: str + """ + The URL you provide to redirect the customer back to you after they authenticated their payment. It can use your application URI scheme in the context of a mobile application. + """ + + +class SourceCreateParamsSourceOrder(TypedDict): + items: NotRequired[List["SourceCreateParamsSourceOrderItem"]] + """ + List of items constituting the order. + """ + shipping: NotRequired["SourceCreateParamsSourceOrderShipping"] + """ + Shipping address for the order. Required if any of the SKUs are for products that have `shippable` set to true. + """ + + +class SourceCreateParamsSourceOrderItem(TypedDict): + amount: NotRequired[int] + currency: NotRequired[str] + description: NotRequired[str] + parent: NotRequired[str] + """ + The ID of the SKU being ordered. + """ + quantity: NotRequired[int] + """ + The quantity of this order item. When type is `sku`, this is the number of instances of the SKU to be ordered. + """ + type: NotRequired[Literal["discount", "shipping", "sku", "tax"]] + + +class SourceCreateParamsSourceOrderShipping(TypedDict): + address: "SourceCreateParamsSourceOrderShippingAddress" + """ + Shipping address. + """ + carrier: NotRequired[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: NotRequired[str] + """ + Recipient name. + """ + phone: NotRequired[str] + """ + Recipient phone (including extension). + """ + tracking_number: NotRequired[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + + +class SourceCreateParamsSourceOrderShippingAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_detach_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_detach_params.py new file mode 100644 index 00000000..854bb41d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_detach_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SourceDetachParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_list_source_transactions_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_list_source_transactions_params.py new file mode 100644 index 00000000..67310857 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_list_source_transactions_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SourceListSourceTransactionsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_modify_params.py new file mode 100644 index 00000000..f57584e1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_modify_params.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SourceModifyParams(RequestOptions): + amount: NotRequired[int] + """ + Amount associated with the source. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + mandate: NotRequired["SourceModifyParamsMandate"] + """ + Information about a mandate possibility attached to a source object (generally for bank debits) as well as its acceptance status. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + owner: NotRequired["SourceModifyParamsOwner"] + """ + Information about the owner of the payment instrument that may be used or required by particular source types. + """ + source_order: NotRequired["SourceModifyParamsSourceOrder"] + """ + Information about the items and shipping associated with the source. Required for transactional credit (for example Klarna) sources before you can charge it. + """ + + +class SourceModifyParamsMandate(TypedDict): + acceptance: NotRequired["SourceModifyParamsMandateAcceptance"] + """ + The parameters required to notify Stripe of a mandate acceptance or refusal by the customer. + """ + amount: NotRequired["Literal['']|int"] + """ + The amount specified by the mandate. (Leave null for a mandate covering all amounts) + """ + currency: NotRequired[str] + """ + The currency specified by the mandate. (Must match `currency` of the source) + """ + interval: NotRequired[Literal["one_time", "scheduled", "variable"]] + """ + The interval of debits permitted by the mandate. Either `one_time` (just permitting a single debit), `scheduled` (with debits on an agreed schedule or for clearly-defined events), or `variable`(for debits with any frequency) + """ + notification_method: NotRequired[ + Literal["deprecated_none", "email", "manual", "none", "stripe_email"] + ] + """ + The method Stripe should use to notify the customer of upcoming debit instructions and/or mandate confirmation as required by the underlying debit network. Either `email` (an email is sent directly to the customer), `manual` (a `source.mandate_notification` event is sent to your webhooks endpoint and you should handle the notification) or `none` (the underlying debit network does not require any notification). + """ + + +class SourceModifyParamsMandateAcceptance(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + offline: NotRequired["SourceModifyParamsMandateAcceptanceOffline"] + """ + The parameters required to store a mandate accepted offline. Should only be set if `mandate[type]` is `offline` + """ + online: NotRequired["SourceModifyParamsMandateAcceptanceOnline"] + """ + The parameters required to store a mandate accepted online. Should only be set if `mandate[type]` is `online` + """ + status: Literal["accepted", "pending", "refused", "revoked"] + """ + The status of the mandate acceptance. Either `accepted` (the mandate was accepted) or `refused` (the mandate was refused). + """ + type: NotRequired[Literal["offline", "online"]] + """ + The type of acceptance information included with the mandate. Either `online` or `offline` + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceModifyParamsMandateAcceptanceOffline(TypedDict): + contact_email: str + """ + An email to contact you with if a copy of the mandate is requested, required if `type` is `offline`. + """ + + +class SourceModifyParamsMandateAcceptanceOnline(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceModifyParamsOwner(TypedDict): + address: NotRequired["SourceModifyParamsOwnerAddress"] + """ + Owner's address. + """ + email: NotRequired[str] + """ + Owner's email address. + """ + name: NotRequired[str] + """ + Owner's full name. + """ + phone: NotRequired[str] + """ + Owner's phone number. + """ + + +class SourceModifyParamsOwnerAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SourceModifyParamsSourceOrder(TypedDict): + items: NotRequired[List["SourceModifyParamsSourceOrderItem"]] + """ + List of items constituting the order. + """ + shipping: NotRequired["SourceModifyParamsSourceOrderShipping"] + """ + Shipping address for the order. Required if any of the SKUs are for products that have `shippable` set to true. + """ + + +class SourceModifyParamsSourceOrderItem(TypedDict): + amount: NotRequired[int] + currency: NotRequired[str] + description: NotRequired[str] + parent: NotRequired[str] + """ + The ID of the SKU being ordered. + """ + quantity: NotRequired[int] + """ + The quantity of this order item. When type is `sku`, this is the number of instances of the SKU to be ordered. + """ + type: NotRequired[Literal["discount", "shipping", "sku", "tax"]] + + +class SourceModifyParamsSourceOrderShipping(TypedDict): + address: "SourceModifyParamsSourceOrderShippingAddress" + """ + Shipping address. + """ + carrier: NotRequired[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: NotRequired[str] + """ + Recipient name. + """ + phone: NotRequired[str] + """ + Recipient phone (including extension). + """ + tracking_number: NotRequired[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + + +class SourceModifyParamsSourceOrderShippingAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_retrieve_params.py new file mode 100644 index 00000000..cea482bd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_retrieve_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SourceRetrieveParams(RequestOptions): + client_secret: NotRequired[str] + """ + The client secret of the source. Required if a publishable key is used to retrieve the source. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_transaction_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_transaction_list_params.py new file mode 100644 index 00000000..bdc215da --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_transaction_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SourceTransactionListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_update_params.py new file mode 100644 index 00000000..ff800484 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_update_params.py @@ -0,0 +1,231 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SourceUpdateParams(TypedDict): + amount: NotRequired[int] + """ + Amount associated with the source. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + mandate: NotRequired["SourceUpdateParamsMandate"] + """ + Information about a mandate possibility attached to a source object (generally for bank debits) as well as its acceptance status. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + owner: NotRequired["SourceUpdateParamsOwner"] + """ + Information about the owner of the payment instrument that may be used or required by particular source types. + """ + source_order: NotRequired["SourceUpdateParamsSourceOrder"] + """ + Information about the items and shipping associated with the source. Required for transactional credit (for example Klarna) sources before you can charge it. + """ + + +class SourceUpdateParamsMandate(TypedDict): + acceptance: NotRequired["SourceUpdateParamsMandateAcceptance"] + """ + The parameters required to notify Stripe of a mandate acceptance or refusal by the customer. + """ + amount: NotRequired["Literal['']|int"] + """ + The amount specified by the mandate. (Leave null for a mandate covering all amounts) + """ + currency: NotRequired[str] + """ + The currency specified by the mandate. (Must match `currency` of the source) + """ + interval: NotRequired[Literal["one_time", "scheduled", "variable"]] + """ + The interval of debits permitted by the mandate. Either `one_time` (just permitting a single debit), `scheduled` (with debits on an agreed schedule or for clearly-defined events), or `variable`(for debits with any frequency) + """ + notification_method: NotRequired[ + Literal["deprecated_none", "email", "manual", "none", "stripe_email"] + ] + """ + The method Stripe should use to notify the customer of upcoming debit instructions and/or mandate confirmation as required by the underlying debit network. Either `email` (an email is sent directly to the customer), `manual` (a `source.mandate_notification` event is sent to your webhooks endpoint and you should handle the notification) or `none` (the underlying debit network does not require any notification). + """ + + +class SourceUpdateParamsMandateAcceptance(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + offline: NotRequired["SourceUpdateParamsMandateAcceptanceOffline"] + """ + The parameters required to store a mandate accepted offline. Should only be set if `mandate[type]` is `offline` + """ + online: NotRequired["SourceUpdateParamsMandateAcceptanceOnline"] + """ + The parameters required to store a mandate accepted online. Should only be set if `mandate[type]` is `online` + """ + status: Literal["accepted", "pending", "refused", "revoked"] + """ + The status of the mandate acceptance. Either `accepted` (the mandate was accepted) or `refused` (the mandate was refused). + """ + type: NotRequired[Literal["offline", "online"]] + """ + The type of acceptance information included with the mandate. Either `online` or `offline` + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceUpdateParamsMandateAcceptanceOffline(TypedDict): + contact_email: str + """ + An email to contact you with if a copy of the mandate is requested, required if `type` is `offline`. + """ + + +class SourceUpdateParamsMandateAcceptanceOnline(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp (in seconds) when the mandate was accepted or refused by the customer. + """ + ip: NotRequired[str] + """ + The IP address from which the mandate was accepted or refused by the customer. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the mandate was accepted or refused by the customer. + """ + + +class SourceUpdateParamsOwner(TypedDict): + address: NotRequired["SourceUpdateParamsOwnerAddress"] + """ + Owner's address. + """ + email: NotRequired[str] + """ + Owner's email address. + """ + name: NotRequired[str] + """ + Owner's full name. + """ + phone: NotRequired[str] + """ + Owner's phone number. + """ + + +class SourceUpdateParamsOwnerAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SourceUpdateParamsSourceOrder(TypedDict): + items: NotRequired[List["SourceUpdateParamsSourceOrderItem"]] + """ + List of items constituting the order. + """ + shipping: NotRequired["SourceUpdateParamsSourceOrderShipping"] + """ + Shipping address for the order. Required if any of the SKUs are for products that have `shippable` set to true. + """ + + +class SourceUpdateParamsSourceOrderItem(TypedDict): + amount: NotRequired[int] + currency: NotRequired[str] + description: NotRequired[str] + parent: NotRequired[str] + """ + The ID of the SKU being ordered. + """ + quantity: NotRequired[int] + """ + The quantity of this order item. When type is `sku`, this is the number of instances of the SKU to be ordered. + """ + type: NotRequired[Literal["discount", "shipping", "sku", "tax"]] + + +class SourceUpdateParamsSourceOrderShipping(TypedDict): + address: "SourceUpdateParamsSourceOrderShippingAddress" + """ + Shipping address. + """ + carrier: NotRequired[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: NotRequired[str] + """ + Recipient name. + """ + phone: NotRequired[str] + """ + Recipient phone (including extension). + """ + tracking_number: NotRequired[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + + +class SourceUpdateParamsSourceOrderShippingAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_verify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_verify_params.py new file mode 100644 index 00000000..81b9e83c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_source_verify_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SourceVerifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + values: List[str] + """ + The values needed to verify the source. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_cancel_params.py new file mode 100644 index 00000000..503bdb00 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_cancel_params.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionCancelParams(RequestOptions): + cancellation_details: NotRequired[ + "SubscriptionCancelParamsCancellationDetails" + ] + """ + Details about why this subscription was cancelled + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + invoice_now: NotRequired[bool] + """ + Will generate a final invoice that invoices for any un-invoiced metered usage and new/pending proration invoice items. Defaults to `false`. + """ + prorate: NotRequired[bool] + """ + Will generate a proration invoice item that credits remaining unused time until the subscription period end. Defaults to `false`. + """ + + +class SubscriptionCancelParamsCancellationDetails(TypedDict): + comment: NotRequired["Literal['']|str"] + """ + Additional comments about why the user canceled the subscription, if the subscription was canceled explicitly by the user. + """ + feedback: NotRequired[ + "Literal['']|Literal['customer_service', 'low_quality', 'missing_features', 'other', 'switched_service', 'too_complex', 'too_expensive', 'unused']" + ] + """ + The customer submitted reason for why they canceled, if the subscription was canceled explicitly by the user. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_create_params.py new file mode 100644 index 00000000..13101cb3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_create_params.py @@ -0,0 +1,780 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionCreateParams(RequestOptions): + add_invoice_items: NotRequired[ + List["SubscriptionCreateParamsAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this subscription. You may pass up to 20 items. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired["SubscriptionCreateParamsAutomaticTax"] + """ + Automatic tax settings for this subscription. + """ + backdate_start_date: NotRequired[int] + """ + A past timestamp to backdate the subscription's start date to. If set, the first invoice will contain line items for the timespan between the start date and the current time. Can be combined with trials and the billing cycle anchor. + """ + billing_cycle_anchor: NotRequired[int] + """ + A future timestamp in UTC format to anchor the subscription's [billing cycle](https://stripe.com/docs/subscriptions/billing-cycle). The anchor is the reference point that aligns future billing cycle dates. It sets the day of week for `week` intervals, the day of month for `month` and `year` intervals, and the month of year for `year` intervals. + """ + billing_cycle_anchor_config: NotRequired[ + "SubscriptionCreateParamsBillingCycleAnchorConfig" + ] + """ + Mutually exclusive with billing_cycle_anchor and only valid with monthly and yearly price intervals. When provided, the billing_cycle_anchor is set to the next occurrence of the day_of_month at the hour, minute, and second UTC. + """ + billing_mode: NotRequired["SubscriptionCreateParamsBillingMode"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionCreateParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. When updating, pass an empty string to remove previously-defined thresholds. + """ + cancel_at: NotRequired["int|Literal['max_period_end', 'min_period_end']"] + """ + A timestamp at which the subscription should cancel. If set to a date before the current period ends, this will cause a proration if prorations have been enabled using `proration_behavior`. If set during a future period, this will always cause a proration for that period. + """ + cancel_at_period_end: NotRequired[bool] + """ + Indicate whether this subscription should cancel at the end of the current period (`current_period_end`). Defaults to `false`. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this subscription at the end of the cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: str + """ + The identifier of the customer to subscribe. + """ + days_until_due: NotRequired[int] + """ + Number of days a customer has to pay invoices generated by this subscription. Valid only for subscriptions where `collection_method` is set to `send_invoice`. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription. It must belong to the customer associated with the subscription. This takes precedence over `default_source`. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_source: NotRequired[str] + """ + ID of the default payment source for the subscription. It must belong to the customer associated with the subscription and be in a chargeable state. If `default_payment_method` is also set, `default_payment_method` will take precedence. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any subscription item that does not have `tax_rates` set. Invoices created will have their `default_tax_rates` populated from the subscription. + """ + description: NotRequired[str] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionCreateParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription. If not specified or empty, inherits the discount from the subscription's customer. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + invoice_settings: NotRequired["SubscriptionCreateParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + items: NotRequired[List["SubscriptionCreateParamsItem"]] + """ + A list of up to 20 subscription items, each with an attached price. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + off_session: NotRequired[bool] + """ + Indicates if a customer is on or off-session while an invoice payment is attempted. Defaults to `false` (on-session). + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the subscription's invoices. + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Only applies to subscriptions with `collection_method=charge_automatically`. + + Use `allow_incomplete` to create Subscriptions with `status=incomplete` if the first invoice can't be paid. Creating Subscriptions with this status allows you to manage scenarios where additional customer actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to create Subscriptions with `status=incomplete` when the first invoice requires payment, otherwise start as active. Subscriptions transition to `status=active` when successfully confirming the PaymentIntent on the first invoice. This allows simpler management of scenarios where additional customer actions are needed to pay a subscription's invoice, such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. If the PaymentIntent is not confirmed within 23 hours Subscriptions transition to `status=incomplete_expired`, which is a terminal state. + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's first invoice can't be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further customer action is needed, this parameter doesn't create a Subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://stripe.com/docs/upgrades#2019-03-14) to learn more. + + `pending_if_incomplete` is only used with updates and cannot be passed when creating a Subscription. + + Subscriptions with `collection_method=send_invoice` are automatically activated regardless of the first Invoice status. + """ + payment_settings: NotRequired["SubscriptionCreateParamsPaymentSettings"] + """ + Payment settings to pass to invoices created by the subscription. + """ + pending_invoice_item_interval: NotRequired[ + "Literal['']|SubscriptionCreateParamsPendingInvoiceItemInterval" + ] + """ + Specifies an interval for how often to bill for any pending invoice items. It is analogous to calling [Create an invoice](https://stripe.com/docs/api#create_invoice) for the given subscription at the specified interval. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) resulting from the `billing_cycle_anchor`. If no value is passed, the default is `create_prorations`. + """ + transfer_data: NotRequired["SubscriptionCreateParamsTransferData"] + """ + If specified, the funds from the subscription's invoices will be transferred to the destination and the ID of the resulting transfers will be found on the resulting charges. + """ + trial_end: NotRequired["Literal['now']|int"] + """ + Unix timestamp representing the end of the trial period the customer will get before being charged for the first time. If set, trial_end will override the default trial period of the plan the customer is being subscribed to. The special value `now` can be provided to end the customer's trial immediately. Can be at most two years from `billing_cycle_anchor`. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + trial_from_plan: NotRequired[bool] + """ + Indicates if a plan's `trial_period_days` should be applied to the subscription. Setting `trial_end` per subscription is preferred, and this defaults to `false`. Setting this flag to `true` together with `trial_end` is not allowed. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + trial_period_days: NotRequired[int] + """ + Integer representing the number of trial period days before the customer is charged for the first time. This will always overwrite any trials that might apply via a subscribed plan. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + trial_settings: NotRequired["SubscriptionCreateParamsTrialSettings"] + """ + Settings related to subscription trials. + """ + + +class SubscriptionCreateParamsAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionCreateParamsAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired["SubscriptionCreateParamsAddInvoiceItemPeriod"] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["SubscriptionCreateParamsAddInvoiceItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionCreateParamsAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionCreateParamsAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionCreateParamsAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionCreateParamsAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionCreateParamsAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionCreateParamsAddInvoiceItemPeriodStart(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "now", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionCreateParamsAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionCreateParamsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired["SubscriptionCreateParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionCreateParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionCreateParamsBillingCycleAnchorConfig(TypedDict): + day_of_month: int + """ + The day of the month the anchor should be. Ranges from 1 to 31. + """ + hour: NotRequired[int] + """ + The hour of the day the anchor should be. Ranges from 0 to 23. + """ + minute: NotRequired[int] + """ + The minute of the hour the anchor should be. Ranges from 0 to 59. + """ + month: NotRequired[int] + """ + The month to start full cycle periods. Ranges from 1 to 12. + """ + second: NotRequired[int] + """ + The second of the minute the anchor should be. Ranges from 0 to 59. + """ + + +class SubscriptionCreateParamsBillingMode(TypedDict): + flexible: NotRequired["SubscriptionCreateParamsBillingModeFlexible"] + """ + Configure behavior for flexible billing mode. + """ + type: Literal["classic", "flexible"] + """ + Controls the calculation and orchestration of prorations and invoices for subscriptions. If no value is passed, the default is `flexible`. + """ + + +class SubscriptionCreateParamsBillingModeFlexible(TypedDict): + proration_discounts: NotRequired[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + +class SubscriptionCreateParamsBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionCreateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionCreateParamsInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription. Will be set on invoices generated by the subscription. + """ + issuer: NotRequired["SubscriptionCreateParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionCreateParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionCreateParamsItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionCreateParamsItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionCreateParamsItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + plan: NotRequired[str] + """ + Plan ID for this item, as a string. + """ + price: NotRequired[str] + """ + The ID of the price object. + """ + price_data: NotRequired["SubscriptionCreateParamsItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. + """ + quantity: NotRequired[int] + """ + Quantity for this item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionCreateParamsItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionCreateParamsItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionCreateParamsItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionCreateParamsItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionCreateParamsItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionCreateParamsPaymentSettings(TypedDict): + payment_method_options: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptions" + ] + """ + Payment-method-specific configuration to provide to invoices created by the subscription. + """ + payment_method_types: NotRequired[ + "Literal['']|List[Literal['ach_credit_transfer', 'ach_debit', 'acss_debit', 'affirm', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'boleto', 'card', 'cashapp', 'crypto', 'custom', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'jp_credit_transfer', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'link', 'multibanco', 'naver_pay', 'nz_bank_account', 'p24', 'payco', 'paynow', 'paypal', 'promptpay', 'revolut_pay', 'sepa_credit_transfer', 'sepa_debit', 'sofort', 'swish', 'us_bank_account', 'wechat_pay']]" + ] + """ + The list of payment method types (e.g. card) to provide to the invoice's PaymentIntent. If not set, Stripe attempts to automatically determine the types to use by looking at the invoice's default payment method, the subscription's default payment method, the customer's default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice). Should not be specified with payment_method_configuration + """ + save_default_payment_method: NotRequired[Literal["off", "on_subscription"]] + """ + Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds. Defaults to `off` if unspecified. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit" + ] + """ + This sub-hash contains details about the Canadian pre-authorized debit payment method options to pass to the invoice's PaymentIntent. + """ + bancontact: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsBancontact" + ] + """ + This sub-hash contains details about the Bancontact payment method options to pass to the invoice's PaymentIntent. + """ + card: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCard" + ] + """ + This sub-hash contains details about the Card payment method options to pass to the invoice's PaymentIntent. + """ + customer_balance: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance" + ] + """ + This sub-hash contains details about the Bank transfer payment method options to pass to the invoice's PaymentIntent. + """ + konbini: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsKonbini" + ] + """ + This sub-hash contains details about the Konbini payment method options to pass to the invoice's PaymentIntent. + """ + sepa_debit: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit" + ] + """ + This sub-hash contains details about the SEPA Direct Debit payment method options to pass to the invoice's PaymentIntent. + """ + us_bank_account: NotRequired[ + "Literal['']|SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount" + ] + """ + This sub-hash contains details about the ACH direct debit payment method options to pass to the invoice's PaymentIntent. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsBancontact( + TypedDict, +): + preferred_language: NotRequired[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCard( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this Subscription on. Depends on the available networks of the card attached to the Subscription. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions( + TypedDict, +): + amount: NotRequired[int] + """ + Amount to be charged for future payments. + """ + amount_type: NotRequired[Literal["fixed", "maximum"]] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance( + TypedDict, +): + bank_transfer: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer" + ] + """ + Configuration for the bank transfer funding type, if the `funding_type` is set to `bank_transfer`. + """ + funding_type: NotRequired[str] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer( + TypedDict, +): + eu_bank_transfer: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer" + ] + """ + Configuration for eu_bank_transfer funding type. + """ + type: NotRequired[str] + """ + The bank transfer type that can be used for funding. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer( + TypedDict, +): + country: str + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsKonbini( + TypedDict, +): + pass + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit( + TypedDict, +): + pass + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount( + TypedDict, +): + financial_connections: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + + +class SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SubscriptionCreateParamsPendingInvoiceItemInterval(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies invoicing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between invoices. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). + """ + + +class SubscriptionCreateParamsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionCreateParamsTrialSettings(TypedDict): + end_behavior: "SubscriptionCreateParamsTrialSettingsEndBehavior" + """ + Defines how the subscription should behave when the user's free trial ends. + """ + + +class SubscriptionCreateParamsTrialSettingsEndBehavior(TypedDict): + missing_payment_method: Literal["cancel", "create_invoice", "pause"] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_delete_discount_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_delete_discount_params.py new file mode 100644 index 00000000..79ade64e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_delete_discount_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class SubscriptionDeleteDiscountParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_create_params.py new file mode 100644 index 00000000..7b139d10 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_create_params.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionItemCreateParams(RequestOptions): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionItemCreateParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionItemCreateParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Use `allow_incomplete` to transition the subscription to `status=past_due` if a payment is required but cannot be paid. This allows you to manage scenarios where additional user actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to transition the subscription to `status=past_due` when payment is required and await explicit confirmation of the invoice's payment intent. This allows simpler management of scenarios where additional user actions are needed to pay a subscription's invoice. Such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. + + Use `pending_if_incomplete` to update the subscription using [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates). When you use `pending_if_incomplete` you can only pass the parameters [supported by pending updates](https://stripe.com/docs/billing/pending-updates-reference#supported-attributes). + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's invoice cannot be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further user action is needed, this parameter does not update the subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://docs.stripe.com/changelog/2019-03-14) to learn more. + """ + plan: NotRequired[str] + """ + The identifier of the plan to add to the subscription. + """ + price: NotRequired[str] + """ + The ID of the price object. + """ + price_data: NotRequired["SubscriptionItemCreateParamsPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, the proration will be calculated as though the subscription was updated at the given time. This can be used to apply the same proration that was previewed with the [upcoming invoice](https://stripe.com/docs/api#retrieve_customer_invoice) endpoint. + """ + quantity: NotRequired[int] + """ + The quantity you'd like to apply to the subscription item you're creating. + """ + subscription: str + """ + The identifier of the subscription to modify. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionItemCreateParamsBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionItemCreateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionItemCreateParamsPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionItemCreateParamsPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionItemCreateParamsPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_delete_params.py new file mode 100644 index 00000000..2355bfe5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_delete_params.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing_extensions import Literal, NotRequired + + +class SubscriptionItemDeleteParams(RequestOptions): + clear_usage: NotRequired[bool] + """ + Delete all usage for the given subscription item. Allowed only when the current plan's `usage_type` is `metered`. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, the proration will be calculated as though the subscription was updated at the given time. This can be used to apply the same proration that was previewed with the [upcoming invoice](https://stripe.com/docs/api#retrieve_customer_invoice) endpoint. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_list_params.py new file mode 100644 index 00000000..38b3a935 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionItemListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + subscription: str + """ + The ID of the subscription whose items will be retrieved. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_modify_params.py new file mode 100644 index 00000000..9759b721 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_modify_params.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionItemModifyParams(RequestOptions): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionItemModifyParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionItemModifyParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + off_session: NotRequired[bool] + """ + Indicates if a customer is on or off-session while an invoice payment is attempted. Defaults to `false` (on-session). + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Use `allow_incomplete` to transition the subscription to `status=past_due` if a payment is required but cannot be paid. This allows you to manage scenarios where additional user actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to transition the subscription to `status=past_due` when payment is required and await explicit confirmation of the invoice's payment intent. This allows simpler management of scenarios where additional user actions are needed to pay a subscription's invoice. Such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. + + Use `pending_if_incomplete` to update the subscription using [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates). When you use `pending_if_incomplete` you can only pass the parameters [supported by pending updates](https://stripe.com/docs/billing/pending-updates-reference#supported-attributes). + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's invoice cannot be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further user action is needed, this parameter does not update the subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://docs.stripe.com/changelog/2019-03-14) to learn more. + """ + plan: NotRequired[str] + """ + The identifier of the new plan for this subscription item. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. When changing a subscription item's price, `quantity` is set to 1 unless a `quantity` parameter is provided. + """ + price_data: NotRequired["SubscriptionItemModifyParamsPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, the proration will be calculated as though the subscription was updated at the given time. This can be used to apply the same proration that was previewed with the [upcoming invoice](https://stripe.com/docs/api#retrieve_customer_invoice) endpoint. + """ + quantity: NotRequired[int] + """ + The quantity you'd like to apply to the subscription item you're creating. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionItemModifyParamsBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionItemModifyParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionItemModifyParamsPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionItemModifyParamsPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionItemModifyParamsPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_retrieve_params.py new file mode 100644 index 00000000..ae8d3d8c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionItemRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_update_params.py new file mode 100644 index 00000000..bd6e0d45 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_item_update_params.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionItemUpdateParams(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionItemUpdateParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionItemUpdateParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + off_session: NotRequired[bool] + """ + Indicates if a customer is on or off-session while an invoice payment is attempted. Defaults to `false` (on-session). + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Use `allow_incomplete` to transition the subscription to `status=past_due` if a payment is required but cannot be paid. This allows you to manage scenarios where additional user actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to transition the subscription to `status=past_due` when payment is required and await explicit confirmation of the invoice's payment intent. This allows simpler management of scenarios where additional user actions are needed to pay a subscription's invoice. Such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. + + Use `pending_if_incomplete` to update the subscription using [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates). When you use `pending_if_incomplete` you can only pass the parameters [supported by pending updates](https://stripe.com/docs/billing/pending-updates-reference#supported-attributes). + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's invoice cannot be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further user action is needed, this parameter does not update the subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://docs.stripe.com/changelog/2019-03-14) to learn more. + """ + plan: NotRequired[str] + """ + The identifier of the new plan for this subscription item. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. When changing a subscription item's price, `quantity` is set to 1 unless a `quantity` parameter is provided. + """ + price_data: NotRequired["SubscriptionItemUpdateParamsPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, the proration will be calculated as though the subscription was updated at the given time. This can be used to apply the same proration that was previewed with the [upcoming invoice](https://stripe.com/docs/api#retrieve_customer_invoice) endpoint. + """ + quantity: NotRequired[int] + """ + The quantity you'd like to apply to the subscription item you're creating. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionItemUpdateParamsBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionItemUpdateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionItemUpdateParamsPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionItemUpdateParamsPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionItemUpdateParamsPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_list_params.py new file mode 100644 index 00000000..d51baa76 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_list_params.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionListParams(RequestOptions): + automatic_tax: NotRequired["SubscriptionListParamsAutomaticTax"] + """ + Filter subscriptions by their automatic tax settings. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + The collection method of the subscriptions to retrieve. Either `charge_automatically` or `send_invoice`. + """ + created: NotRequired["SubscriptionListParamsCreated|int"] + """ + Only return subscriptions that were created during the given date interval. + """ + current_period_end: NotRequired[ + "SubscriptionListParamsCurrentPeriodEnd|int" + ] + """ + Only return subscriptions whose minimum item current_period_end falls within the given date interval. + """ + current_period_start: NotRequired[ + "SubscriptionListParamsCurrentPeriodStart|int" + ] + """ + Only return subscriptions whose maximum item current_period_start falls within the given date interval. + """ + customer: NotRequired[str] + """ + The ID of the customer whose subscriptions will be retrieved. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + plan: NotRequired[str] + """ + The ID of the plan whose subscriptions will be retrieved. + """ + price: NotRequired[str] + """ + Filter for subscriptions that contain this recurring price ID. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[ + Literal[ + "active", + "all", + "canceled", + "ended", + "incomplete", + "incomplete_expired", + "past_due", + "paused", + "trialing", + "unpaid", + ] + ] + """ + The status of the subscriptions to retrieve. Passing in a value of `canceled` will return all canceled subscriptions, including those belonging to deleted customers. Pass `ended` to find subscriptions that are canceled and subscriptions that are expired due to [incomplete payment](https://stripe.com/docs/billing/subscriptions/overview#subscription-statuses). Passing in a value of `all` will return subscriptions of all statuses. If no value is supplied, all subscriptions that have not been canceled are returned. + """ + test_clock: NotRequired[str] + """ + Filter for subscriptions that are associated with the specified test clock. The response will not include subscriptions with test clocks if this and the customer parameter is not set. + """ + + +class SubscriptionListParamsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + + +class SubscriptionListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SubscriptionListParamsCurrentPeriodEnd(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SubscriptionListParamsCurrentPeriodStart(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_migrate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_migrate_params.py new file mode 100644 index 00000000..fed3c5df --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_migrate_params.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionMigrateParams(RequestOptions): + billing_mode: "SubscriptionMigrateParamsBillingMode" + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + + +class SubscriptionMigrateParamsBillingMode(TypedDict): + flexible: NotRequired["SubscriptionMigrateParamsBillingModeFlexible"] + """ + Configure behavior for flexible billing mode. + """ + type: Literal["flexible"] + """ + Controls the calculation and orchestration of prorations and invoices for subscriptions. + """ + + +class SubscriptionMigrateParamsBillingModeFlexible(TypedDict): + proration_discounts: NotRequired[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_modify_params.py new file mode 100644 index 00000000..c4696a1c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_modify_params.py @@ -0,0 +1,765 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionModifyParams(RequestOptions): + add_invoice_items: NotRequired[ + List["SubscriptionModifyParamsAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this subscription. You may pass up to 20 items. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired["SubscriptionModifyParamsAutomaticTax"] + """ + Automatic tax settings for this subscription. We recommend you only include this parameter when the existing value is being changed. + """ + billing_cycle_anchor: NotRequired[Literal["now", "unchanged"]] + """ + Either `now` or `unchanged`. Setting the value to `now` resets the subscription's billing cycle anchor to the current time (in UTC). For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionModifyParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. When updating, pass an empty string to remove previously-defined thresholds. + """ + cancel_at: NotRequired[ + "Literal['']|int|Literal['max_period_end', 'min_period_end']" + ] + """ + A timestamp at which the subscription should cancel. If set to a date before the current period ends, this will cause a proration if prorations have been enabled using `proration_behavior`. If set during a future period, this will always cause a proration for that period. + """ + cancel_at_period_end: NotRequired[bool] + """ + Indicate whether this subscription should cancel at the end of the current period (`current_period_end`). Defaults to `false`. + """ + cancellation_details: NotRequired[ + "SubscriptionModifyParamsCancellationDetails" + ] + """ + Details about why this subscription was cancelled + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this subscription at the end of the cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + days_until_due: NotRequired[int] + """ + Number of days a customer has to pay invoices generated by this subscription. Valid only for subscriptions where `collection_method` is set to `send_invoice`. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription. It must belong to the customer associated with the subscription. This takes precedence over `default_source`. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_source: NotRequired["Literal['']|str"] + """ + ID of the default payment source for the subscription. It must belong to the customer associated with the subscription and be in a chargeable state. If `default_payment_method` is also set, `default_payment_method` will take precedence. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any subscription item that does not have `tax_rates` set. Invoices created will have their `default_tax_rates` populated from the subscription. Pass an empty string to remove previously-defined tax rates. + """ + description: NotRequired["Literal['']|str"] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionModifyParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription. If not specified or empty, inherits the discount from the subscription's customer. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + invoice_settings: NotRequired["SubscriptionModifyParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + items: NotRequired[List["SubscriptionModifyParamsItem"]] + """ + A list of up to 20 subscription items, each with an attached price. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + off_session: NotRequired[bool] + """ + Indicates if a customer is on or off-session while an invoice payment is attempted. Defaults to `false` (on-session). + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the subscription's invoices. + """ + pause_collection: NotRequired[ + "Literal['']|SubscriptionModifyParamsPauseCollection" + ] + """ + If specified, payment collection for this subscription will be paused. Note that the subscription status will be unchanged and will not be updated to `paused`. Learn more about [pausing collection](https://stripe.com/docs/billing/subscriptions/pause-payment). + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Use `allow_incomplete` to transition the subscription to `status=past_due` if a payment is required but cannot be paid. This allows you to manage scenarios where additional user actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to transition the subscription to `status=past_due` when payment is required and await explicit confirmation of the invoice's payment intent. This allows simpler management of scenarios where additional user actions are needed to pay a subscription's invoice. Such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. + + Use `pending_if_incomplete` to update the subscription using [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates). When you use `pending_if_incomplete` you can only pass the parameters [supported by pending updates](https://stripe.com/docs/billing/pending-updates-reference#supported-attributes). + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's invoice cannot be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further user action is needed, this parameter does not update the subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://docs.stripe.com/changelog/2019-03-14) to learn more. + """ + payment_settings: NotRequired["SubscriptionModifyParamsPaymentSettings"] + """ + Payment settings to pass to invoices created by the subscription. + """ + pending_invoice_item_interval: NotRequired[ + "Literal['']|SubscriptionModifyParamsPendingInvoiceItemInterval" + ] + """ + Specifies an interval for how often to bill for any pending invoice items. It is analogous to calling [Create an invoice](https://stripe.com/docs/api#create_invoice) for the given subscription at the specified interval. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, prorations will be calculated as though the subscription was updated at the given time. This can be used to apply exactly the same prorations that were previewed with the [create preview](https://stripe.com/docs/api/invoices/create_preview) endpoint. `proration_date` can also be used to implement custom proration logic, such as prorating by day instead of by second, by providing the time that you wish to use for proration calculations. + """ + transfer_data: NotRequired[ + "Literal['']|SubscriptionModifyParamsTransferData" + ] + """ + If specified, the funds from the subscription's invoices will be transferred to the destination and the ID of the resulting transfers will be found on the resulting charges. This will be unset if you POST an empty value. + """ + trial_end: NotRequired["Literal['now']|int"] + """ + Unix timestamp representing the end of the trial period the customer will get before being charged for the first time. This will always overwrite any trials that might apply via a subscribed plan. If set, `trial_end` will override the default trial period of the plan the customer is being subscribed to. The `billing_cycle_anchor` will be updated to the `trial_end` value. The special value `now` can be provided to end the customer's trial immediately. Can be at most two years from `billing_cycle_anchor`. + """ + trial_from_plan: NotRequired[bool] + """ + Indicates if a plan's `trial_period_days` should be applied to the subscription. Setting `trial_end` per subscription is preferred, and this defaults to `false`. Setting this flag to `true` together with `trial_end` is not allowed. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + trial_settings: NotRequired["SubscriptionModifyParamsTrialSettings"] + """ + Settings related to subscription trials. + """ + + +class SubscriptionModifyParamsAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionModifyParamsAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired["SubscriptionModifyParamsAddInvoiceItemPeriod"] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["SubscriptionModifyParamsAddInvoiceItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionModifyParamsAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionModifyParamsAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionModifyParamsAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionModifyParamsAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionModifyParamsAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionModifyParamsAddInvoiceItemPeriodStart(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "now", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionModifyParamsAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionModifyParamsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired["SubscriptionModifyParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionModifyParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionModifyParamsBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionModifyParamsCancellationDetails(TypedDict): + comment: NotRequired["Literal['']|str"] + """ + Additional comments about why the user canceled the subscription, if the subscription was canceled explicitly by the user. + """ + feedback: NotRequired[ + "Literal['']|Literal['customer_service', 'low_quality', 'missing_features', 'other', 'switched_service', 'too_complex', 'too_expensive', 'unused']" + ] + """ + The customer submitted reason for why they canceled, if the subscription was canceled explicitly by the user. + """ + + +class SubscriptionModifyParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionModifyParamsInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription. Will be set on invoices generated by the subscription. + """ + issuer: NotRequired["SubscriptionModifyParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionModifyParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionModifyParamsItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionModifyParamsItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + clear_usage: NotRequired[bool] + """ + Delete all usage for a given subscription item. You must pass this when deleting a usage records subscription item. `clear_usage` has no effect if the plan has a billing meter attached. + """ + deleted: NotRequired[bool] + """ + A flag that, if set to `true`, will delete the specified item. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionModifyParamsItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + id: NotRequired[str] + """ + Subscription item to update. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + plan: NotRequired[str] + """ + Plan ID for this item, as a string. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. When changing a subscription item's price, `quantity` is set to 1 unless a `quantity` parameter is provided. + """ + price_data: NotRequired["SubscriptionModifyParamsItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionModifyParamsItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionModifyParamsItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionModifyParamsItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionModifyParamsItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionModifyParamsItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionModifyParamsPauseCollection(TypedDict): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + """ + The payment collection behavior for this subscription while paused. One of `keep_as_draft`, `mark_uncollectible`, or `void`. + """ + resumes_at: NotRequired[int] + """ + The time after which the subscription will resume collecting payments. + """ + + +class SubscriptionModifyParamsPaymentSettings(TypedDict): + payment_method_options: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptions" + ] + """ + Payment-method-specific configuration to provide to invoices created by the subscription. + """ + payment_method_types: NotRequired[ + "Literal['']|List[Literal['ach_credit_transfer', 'ach_debit', 'acss_debit', 'affirm', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'boleto', 'card', 'cashapp', 'crypto', 'custom', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'jp_credit_transfer', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'link', 'multibanco', 'naver_pay', 'nz_bank_account', 'p24', 'payco', 'paynow', 'paypal', 'promptpay', 'revolut_pay', 'sepa_credit_transfer', 'sepa_debit', 'sofort', 'swish', 'us_bank_account', 'wechat_pay']]" + ] + """ + The list of payment method types (e.g. card) to provide to the invoice's PaymentIntent. If not set, Stripe attempts to automatically determine the types to use by looking at the invoice's default payment method, the subscription's default payment method, the customer's default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice). Should not be specified with payment_method_configuration + """ + save_default_payment_method: NotRequired[Literal["off", "on_subscription"]] + """ + Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds. Defaults to `off` if unspecified. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit" + ] + """ + This sub-hash contains details about the Canadian pre-authorized debit payment method options to pass to the invoice's PaymentIntent. + """ + bancontact: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsBancontact" + ] + """ + This sub-hash contains details about the Bancontact payment method options to pass to the invoice's PaymentIntent. + """ + card: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCard" + ] + """ + This sub-hash contains details about the Card payment method options to pass to the invoice's PaymentIntent. + """ + customer_balance: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance" + ] + """ + This sub-hash contains details about the Bank transfer payment method options to pass to the invoice's PaymentIntent. + """ + konbini: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsKonbini" + ] + """ + This sub-hash contains details about the Konbini payment method options to pass to the invoice's PaymentIntent. + """ + sepa_debit: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit" + ] + """ + This sub-hash contains details about the SEPA Direct Debit payment method options to pass to the invoice's PaymentIntent. + """ + us_bank_account: NotRequired[ + "Literal['']|SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount" + ] + """ + This sub-hash contains details about the ACH direct debit payment method options to pass to the invoice's PaymentIntent. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsBancontact( + TypedDict, +): + preferred_language: NotRequired[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCard( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this Subscription on. Depends on the available networks of the card attached to the Subscription. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions( + TypedDict, +): + amount: NotRequired[int] + """ + Amount to be charged for future payments. + """ + amount_type: NotRequired[Literal["fixed", "maximum"]] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance( + TypedDict, +): + bank_transfer: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer" + ] + """ + Configuration for the bank transfer funding type, if the `funding_type` is set to `bank_transfer`. + """ + funding_type: NotRequired[str] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer( + TypedDict, +): + eu_bank_transfer: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer" + ] + """ + Configuration for eu_bank_transfer funding type. + """ + type: NotRequired[str] + """ + The bank transfer type that can be used for funding. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer( + TypedDict, +): + country: str + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsKonbini( + TypedDict, +): + pass + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit( + TypedDict, +): + pass + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount( + TypedDict, +): + financial_connections: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + + +class SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SubscriptionModifyParamsPendingInvoiceItemInterval(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies invoicing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between invoices. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). + """ + + +class SubscriptionModifyParamsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionModifyParamsTrialSettings(TypedDict): + end_behavior: "SubscriptionModifyParamsTrialSettingsEndBehavior" + """ + Defines how the subscription should behave when the user's free trial ends. + """ + + +class SubscriptionModifyParamsTrialSettingsEndBehavior(TypedDict): + missing_payment_method: Literal["cancel", "create_invoice", "pause"] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_resume_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_resume_params.py new file mode 100644 index 00000000..a74e3c7b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_resume_params.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class SubscriptionResumeParams(RequestOptions): + billing_cycle_anchor: NotRequired[Literal["now", "unchanged"]] + """ + The billing cycle anchor that applies when the subscription is resumed. Either `now` or `unchanged`. The default is `now`. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) resulting from the `billing_cycle_anchor` being `unchanged`. When the `billing_cycle_anchor` is set to `now` (default value), no prorations are generated. If no value is passed, the default is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, prorations will be calculated as though the subscription was resumed at the given time. This can be used to apply exactly the same prorations that were previewed with the [create preview](https://stripe.com/docs/api/invoices/create_preview) endpoint. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_retrieve_params.py new file mode 100644 index 00000000..17751ff4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_cancel_params.py new file mode 100644 index 00000000..dc84eac0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_cancel_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionScheduleCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + invoice_now: NotRequired[bool] + """ + If the subscription schedule is `active`, indicates if a final invoice will be generated that contains any un-invoiced metered usage and new/pending proration invoice items. Defaults to `true`. + """ + prorate: NotRequired[bool] + """ + If the subscription schedule is `active`, indicates if the cancellation should be prorated. Defaults to `true`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_create_params.py new file mode 100644 index 00000000..c2766214 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_create_params.py @@ -0,0 +1,615 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionScheduleCreateParams(RequestOptions): + billing_mode: NotRequired["SubscriptionScheduleCreateParamsBillingMode"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + customer: NotRequired[str] + """ + The identifier of the customer to create the subscription schedule for. + """ + default_settings: NotRequired[ + "SubscriptionScheduleCreateParamsDefaultSettings" + ] + """ + Object representing the subscription schedule's default settings. + """ + end_behavior: NotRequired[Literal["cancel", "none", "release", "renew"]] + """ + Behavior of the subscription schedule and underlying subscription when it ends. Possible values are `release` or `cancel` with the default being `release`. `release` will end the subscription schedule and keep the underlying subscription running. `cancel` will end the subscription schedule and cancel the underlying subscription. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + from_subscription: NotRequired[str] + """ + Migrate an existing subscription to be managed by a subscription schedule. If this parameter is set, a subscription schedule will be created using the subscription's item(s), set to auto-renew using the subscription's interval. When using this parameter, other parameters (such as phase values) cannot be set. To create a subscription schedule with other modifications, we recommend making two separate API calls. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phases: NotRequired[List["SubscriptionScheduleCreateParamsPhase"]] + """ + List representing phases of the subscription schedule. Each phase can be customized to have different durations, plans, and coupons. If there are multiple phases, the `end_date` of one phase will always equal the `start_date` of the next phase. + """ + start_date: NotRequired["int|Literal['now']"] + """ + When the subscription schedule starts. We recommend using `now` so that it starts the subscription immediately. You can also use a Unix timestamp to backdate the subscription so that it starts on a past date, or set a future date for the subscription to start on. + """ + + +class SubscriptionScheduleCreateParamsBillingMode(TypedDict): + flexible: NotRequired[ + "SubscriptionScheduleCreateParamsBillingModeFlexible" + ] + """ + Configure behavior for flexible billing mode. + """ + type: Literal["classic", "flexible"] + """ + Controls the calculation and orchestration of prorations and invoices for subscriptions. If no value is passed, the default is `flexible`. + """ + + +class SubscriptionScheduleCreateParamsBillingModeFlexible(TypedDict): + proration_discounts: NotRequired[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettings(TypedDict): + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTax" + ] + """ + Default settings for automatic tax computation. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleCreateParamsDefaultSettingsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + transfer_data: NotRequired[ + "Literal['']|SubscriptionScheduleCreateParamsDefaultSettingsTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTaxLiability( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsBillingThresholds( + TypedDict, +): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettings( + TypedDict +): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription schedule. Will be set on invoices generated by the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `collection_method=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettingsIssuer( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleCreateParamsDefaultSettingsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionScheduleCreateParamsPhase(TypedDict): + add_invoice_items: NotRequired[ + List["SubscriptionScheduleCreateParamsPhaseAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this phase. You may pass up to 20 items. + """ + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseAutomaticTax" + ] + """ + Automatic tax settings for this phase. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleCreateParamsPhaseBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will set the Subscription's [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates), which means they will be the Invoice's [`default_tax_rates`](https://stripe.com/docs/api/invoices/create#create_invoice-default_tax_rates) for any Invoices issued by the Subscription during this Phase. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleCreateParamsPhaseDiscount]" + ] + """ + The coupons to redeem into discounts for the schedule phase. If not specified, inherits the discount from the subscription's customer. Pass an empty string to avoid inheriting any discounts. + """ + duration: NotRequired["SubscriptionScheduleCreateParamsPhaseDuration"] + """ + The number of intervals the phase should last. If set, `end_date` must not be set. + """ + end_date: NotRequired[int] + """ + The date at which this phase of the subscription schedule ends. If set, `iterations` must not be set. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + items: List["SubscriptionScheduleCreateParamsPhaseItem"] + """ + List of configuration items, each with an attached price, to apply during this phase of the subscription schedule. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a phase. Metadata on a schedule's phase will update the underlying subscription's `metadata` when the phase is entered, adding new keys and replacing existing keys in the subscription's `metadata`. Individual keys in the subscription's `metadata` can be unset by posting an empty value to them in the phase's `metadata`. To unset all keys in the subscription's `metadata`, update the subscription directly or unset every key individually from the phase's `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Controls whether the subscription schedule should create [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when transitioning to this phase if there is a difference in billing configuration. It's different from the request-level [proration_behavior](https://stripe.com/docs/api/subscription_schedules/update#update_subscription_schedule-proration_behavior) parameter which controls what happens if the update request affects the billing configuration (item price, quantity, etc.) of the current phase. + """ + transfer_data: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + trial: NotRequired[bool] + """ + If set to true the entire phase is counted as a trial and the customer will not be charged for any fees. + """ + trial_end: NotRequired[int] + """ + Sets the phase to trialing from the start date to this date. Must be before the phase end date, can not be combined with `trial` + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionScheduleCreateParamsPhaseAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriod" + ] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "phase_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodStart( + TypedDict +): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "phase_start", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleCreateParamsPhaseAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleCreateParamsPhaseAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleCreateParamsPhaseBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleCreateParamsPhaseDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleCreateParamsPhaseDuration(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies phase duration. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The multiplier applied to the interval. + """ + + +class SubscriptionScheduleCreateParamsPhaseInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with this phase of the subscription schedule. Will be set on invoices generated by this phase of the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `billing=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleCreateParamsPhaseInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleCreateParamsPhaseItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleCreateParamsPhaseItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleCreateParamsPhaseItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a configuration item. Metadata on a configuration item will update the underlying subscription item's `metadata` when the phase is entered, adding new keys and replacing existing keys. Individual keys in the subscription item's `metadata` can be unset by posting an empty value to them in the configuration item's `metadata`. To unset all keys in the subscription item's `metadata`, update the subscription item directly or unset every key individually from the configuration item's `metadata`. + """ + plan: NotRequired[str] + """ + The plan ID to subscribe to. You may specify the same ID in `plan` and `price`. + """ + price: NotRequired[str] + """ + The ID of the price object. + """ + price_data: NotRequired[ + "SubscriptionScheduleCreateParamsPhaseItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. + """ + quantity: NotRequired[int] + """ + Quantity for the given price. Can be set only if the price's `usage_type` is `licensed` and not `metered`. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionScheduleCreateParamsPhaseItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionScheduleCreateParamsPhaseItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleCreateParamsPhaseItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionScheduleCreateParamsPhaseItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleCreateParamsPhaseItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionScheduleCreateParamsPhaseTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_list_params.py new file mode 100644 index 00000000..2f3b91e9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_list_params.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SubscriptionScheduleListParams(RequestOptions): + canceled_at: NotRequired["SubscriptionScheduleListParamsCanceledAt|int"] + """ + Only return subscription schedules that were created canceled the given date interval. + """ + completed_at: NotRequired["SubscriptionScheduleListParamsCompletedAt|int"] + """ + Only return subscription schedules that completed during the given date interval. + """ + created: NotRequired["SubscriptionScheduleListParamsCreated|int"] + """ + Only return subscription schedules that were created during the given date interval. + """ + customer: NotRequired[str] + """ + Only return subscription schedules for the given customer. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + released_at: NotRequired["SubscriptionScheduleListParamsReleasedAt|int"] + """ + Only return subscription schedules that were released during the given date interval. + """ + scheduled: NotRequired[bool] + """ + Only return subscription schedules that have not started yet. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class SubscriptionScheduleListParamsCanceledAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SubscriptionScheduleListParamsCompletedAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SubscriptionScheduleListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SubscriptionScheduleListParamsReleasedAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_modify_params.py new file mode 100644 index 00000000..04d91b09 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_modify_params.py @@ -0,0 +1,589 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionScheduleModifyParams(RequestOptions): + default_settings: NotRequired[ + "SubscriptionScheduleModifyParamsDefaultSettings" + ] + """ + Object representing the subscription schedule's default settings. + """ + end_behavior: NotRequired[Literal["cancel", "none", "release", "renew"]] + """ + Behavior of the subscription schedule and underlying subscription when it ends. Possible values are `release` or `cancel` with the default being `release`. `release` will end the subscription schedule and keep the underlying subscription running. `cancel` will end the subscription schedule and cancel the underlying subscription. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phases: NotRequired[List["SubscriptionScheduleModifyParamsPhase"]] + """ + List representing phases of the subscription schedule. Each phase can be customized to have different durations, plans, and coupons. If there are multiple phases, the `end_date` of one phase will always equal the `start_date` of the next phase. Note that past phases can be omitted. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + If the update changes the billing configuration (item price, quantity, etc.) of the current phase, indicates how prorations from this change should be handled. The default value is `create_prorations`. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettings(TypedDict): + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTax" + ] + """ + Default settings for automatic tax computation. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleModifyParamsDefaultSettingsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + transfer_data: NotRequired[ + "Literal['']|SubscriptionScheduleModifyParamsDefaultSettingsTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTaxLiability( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsBillingThresholds( + TypedDict, +): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettings( + TypedDict +): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription schedule. Will be set on invoices generated by the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `collection_method=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettingsIssuer( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleModifyParamsDefaultSettingsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionScheduleModifyParamsPhase(TypedDict): + add_invoice_items: NotRequired[ + List["SubscriptionScheduleModifyParamsPhaseAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this phase. You may pass up to 20 items. + """ + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseAutomaticTax" + ] + """ + Automatic tax settings for this phase. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleModifyParamsPhaseBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will set the Subscription's [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates), which means they will be the Invoice's [`default_tax_rates`](https://stripe.com/docs/api/invoices/create#create_invoice-default_tax_rates) for any Invoices issued by the Subscription during this Phase. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleModifyParamsPhaseDiscount]" + ] + """ + The coupons to redeem into discounts for the schedule phase. If not specified, inherits the discount from the subscription's customer. Pass an empty string to avoid inheriting any discounts. + """ + duration: NotRequired["SubscriptionScheduleModifyParamsPhaseDuration"] + """ + The number of intervals the phase should last. If set, `end_date` must not be set. + """ + end_date: NotRequired["int|Literal['now']"] + """ + The date at which this phase of the subscription schedule ends. If set, `iterations` must not be set. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + items: List["SubscriptionScheduleModifyParamsPhaseItem"] + """ + List of configuration items, each with an attached price, to apply during this phase of the subscription schedule. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a phase. Metadata on a schedule's phase will update the underlying subscription's `metadata` when the phase is entered, adding new keys and replacing existing keys in the subscription's `metadata`. Individual keys in the subscription's `metadata` can be unset by posting an empty value to them in the phase's `metadata`. To unset all keys in the subscription's `metadata`, update the subscription directly or unset every key individually from the phase's `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Controls whether the subscription schedule should create [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when transitioning to this phase if there is a difference in billing configuration. It's different from the request-level [proration_behavior](https://stripe.com/docs/api/subscription_schedules/update#update_subscription_schedule-proration_behavior) parameter which controls what happens if the update request affects the billing configuration (item price, quantity, etc.) of the current phase. + """ + start_date: NotRequired["int|Literal['now']"] + """ + The date at which this phase of the subscription schedule starts or `now`. Must be set on the first phase. + """ + transfer_data: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + trial: NotRequired[bool] + """ + If set to true the entire phase is counted as a trial and the customer will not be charged for any fees. + """ + trial_end: NotRequired["int|Literal['now']"] + """ + Sets the phase to trialing from the start date to this date. Must be before the phase end date, can not be combined with `trial` + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionScheduleModifyParamsPhaseAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriod" + ] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "phase_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodStart( + TypedDict +): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "phase_start", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleModifyParamsPhaseAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleModifyParamsPhaseAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleModifyParamsPhaseBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleModifyParamsPhaseDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleModifyParamsPhaseDuration(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies phase duration. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The multiplier applied to the interval. + """ + + +class SubscriptionScheduleModifyParamsPhaseInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with this phase of the subscription schedule. Will be set on invoices generated by this phase of the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `billing=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleModifyParamsPhaseInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleModifyParamsPhaseItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleModifyParamsPhaseItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleModifyParamsPhaseItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a configuration item. Metadata on a configuration item will update the underlying subscription item's `metadata` when the phase is entered, adding new keys and replacing existing keys. Individual keys in the subscription item's `metadata` can be unset by posting an empty value to them in the configuration item's `metadata`. To unset all keys in the subscription item's `metadata`, update the subscription item directly or unset every key individually from the configuration item's `metadata`. + """ + plan: NotRequired[str] + """ + The plan ID to subscribe to. You may specify the same ID in `plan` and `price`. + """ + price: NotRequired[str] + """ + The ID of the price object. + """ + price_data: NotRequired[ + "SubscriptionScheduleModifyParamsPhaseItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. + """ + quantity: NotRequired[int] + """ + Quantity for the given price. Can be set only if the price's `usage_type` is `licensed` and not `metered`. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionScheduleModifyParamsPhaseItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionScheduleModifyParamsPhaseItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleModifyParamsPhaseItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionScheduleModifyParamsPhaseItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleModifyParamsPhaseItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionScheduleModifyParamsPhaseTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_release_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_release_params.py new file mode 100644 index 00000000..1c5e4aa9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_release_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionScheduleReleaseParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + preserve_cancel_date: NotRequired[bool] + """ + Keep any cancellation on the subscription that the schedule has set + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_retrieve_params.py new file mode 100644 index 00000000..8b7f1256 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionScheduleRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_update_params.py new file mode 100644 index 00000000..16553471 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_schedule_update_params.py @@ -0,0 +1,588 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionScheduleUpdateParams(TypedDict): + default_settings: NotRequired[ + "SubscriptionScheduleUpdateParamsDefaultSettings" + ] + """ + Object representing the subscription schedule's default settings. + """ + end_behavior: NotRequired[Literal["cancel", "none", "release", "renew"]] + """ + Behavior of the subscription schedule and underlying subscription when it ends. Possible values are `release` or `cancel` with the default being `release`. `release` will end the subscription schedule and keep the underlying subscription running. `cancel` will end the subscription schedule and cancel the underlying subscription. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phases: NotRequired[List["SubscriptionScheduleUpdateParamsPhase"]] + """ + List representing phases of the subscription schedule. Each phase can be customized to have different durations, plans, and coupons. If there are multiple phases, the `end_date` of one phase will always equal the `start_date` of the next phase. Note that past phases can be omitted. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + If the update changes the billing configuration (item price, quantity, etc.) of the current phase, indicates how prorations from this change should be handled. The default value is `create_prorations`. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettings(TypedDict): + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTax" + ] + """ + Default settings for automatic tax computation. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleUpdateParamsDefaultSettingsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + transfer_data: NotRequired[ + "Literal['']|SubscriptionScheduleUpdateParamsDefaultSettingsTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTaxLiability( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsBillingThresholds( + TypedDict, +): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettings( + TypedDict +): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription schedule. Will be set on invoices generated by the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `collection_method=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettingsIssuer( + TypedDict, +): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleUpdateParamsDefaultSettingsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionScheduleUpdateParamsPhase(TypedDict): + add_invoice_items: NotRequired[ + List["SubscriptionScheduleUpdateParamsPhaseAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this phase. You may pass up to 20 items. + """ + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseAutomaticTax" + ] + """ + Automatic tax settings for this phase. + """ + billing_cycle_anchor: NotRequired[Literal["automatic", "phase_start"]] + """ + Can be set to `phase_start` to set the anchor to the start of the phase or `automatic` to automatically change it if needed. Cannot be set to `phase_start` if this phase specifies a trial. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleUpdateParamsPhaseBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically` on creation. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will set the Subscription's [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates), which means they will be the Invoice's [`default_tax_rates`](https://stripe.com/docs/api/invoices/create#create_invoice-default_tax_rates) for any Invoices issued by the Subscription during this Phase. + """ + description: NotRequired["Literal['']|str"] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleUpdateParamsPhaseDiscount]" + ] + """ + The coupons to redeem into discounts for the schedule phase. If not specified, inherits the discount from the subscription's customer. Pass an empty string to avoid inheriting any discounts. + """ + duration: NotRequired["SubscriptionScheduleUpdateParamsPhaseDuration"] + """ + The number of intervals the phase should last. If set, `end_date` must not be set. + """ + end_date: NotRequired["int|Literal['now']"] + """ + The date at which this phase of the subscription schedule ends. If set, `iterations` must not be set. + """ + invoice_settings: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + items: List["SubscriptionScheduleUpdateParamsPhaseItem"] + """ + List of configuration items, each with an attached price, to apply during this phase of the subscription schedule. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a phase. Metadata on a schedule's phase will update the underlying subscription's `metadata` when the phase is entered, adding new keys and replacing existing keys in the subscription's `metadata`. Individual keys in the subscription's `metadata` can be unset by posting an empty value to them in the phase's `metadata`. To unset all keys in the subscription's `metadata`, update the subscription directly or unset every key individually from the phase's `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The account on behalf of which to charge, for each of the associated subscription's invoices. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Controls whether the subscription schedule should create [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when transitioning to this phase if there is a difference in billing configuration. It's different from the request-level [proration_behavior](https://stripe.com/docs/api/subscription_schedules/update#update_subscription_schedule-proration_behavior) parameter which controls what happens if the update request affects the billing configuration (item price, quantity, etc.) of the current phase. + """ + start_date: NotRequired["int|Literal['now']"] + """ + The date at which this phase of the subscription schedule starts or `now`. Must be set on the first phase. + """ + transfer_data: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseTransferData" + ] + """ + The data with which to automatically create a Transfer for each of the associated subscription's invoices. + """ + trial: NotRequired[bool] + """ + If set to true the entire phase is counted as a trial and the customer will not be charged for any fees. + """ + trial_end: NotRequired["int|Literal['now']"] + """ + Sets the phase to trialing from the start date to this date. Must be before the phase end date, can not be combined with `trial` + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriod" + ] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "phase_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodStart( + TypedDict +): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "phase_start", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseAutomaticTaxLiability" + ] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionScheduleUpdateParamsPhaseAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleUpdateParamsPhaseBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionScheduleUpdateParamsPhaseDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleUpdateParamsPhaseDuration(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies phase duration. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The multiplier applied to the interval. + """ + + +class SubscriptionScheduleUpdateParamsPhaseInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with this phase of the subscription schedule. Will be set on invoices generated by this phase of the subscription schedule. + """ + days_until_due: NotRequired[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `billing=charge_automatically`. + """ + issuer: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionScheduleUpdateParamsPhaseInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionScheduleUpdateParamsPhaseItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionScheduleUpdateParamsPhaseItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionScheduleUpdateParamsPhaseItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a configuration item. Metadata on a configuration item will update the underlying subscription item's `metadata` when the phase is entered, adding new keys and replacing existing keys. Individual keys in the subscription item's `metadata` can be unset by posting an empty value to them in the configuration item's `metadata`. To unset all keys in the subscription item's `metadata`, update the subscription item directly or unset every key individually from the configuration item's `metadata`. + """ + plan: NotRequired[str] + """ + The plan ID to subscribe to. You may specify the same ID in `plan` and `price`. + """ + price: NotRequired[str] + """ + The ID of the price object. + """ + price_data: NotRequired[ + "SubscriptionScheduleUpdateParamsPhaseItemPriceData" + ] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. + """ + quantity: NotRequired[int] + """ + Quantity for the given price. Can be set only if the price's `usage_type` is `licensed` and not `metered`. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionScheduleUpdateParamsPhaseItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionScheduleUpdateParamsPhaseItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionScheduleUpdateParamsPhaseItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionScheduleUpdateParamsPhaseItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionScheduleUpdateParamsPhaseItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionScheduleUpdateParamsPhaseTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_search_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_search_params.py new file mode 100644 index 00000000..7930e586 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_search_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SubscriptionSearchParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + page: NotRequired[str] + """ + A cursor for pagination across multiple pages of results. Don't include this parameter on the first call. Use the next_page value returned in a previous response to request subsequent results. + """ + query: str + """ + The search query string. See [search query language](https://stripe.com/docs/search#search-query-language) and the list of supported [query fields for subscriptions](https://stripe.com/docs/search#query-fields-for-subscriptions). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_update_params.py new file mode 100644 index 00000000..66201f21 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_subscription_update_params.py @@ -0,0 +1,764 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SubscriptionUpdateParams(TypedDict): + add_invoice_items: NotRequired[ + List["SubscriptionUpdateParamsAddInvoiceItem"] + ] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this subscription. You may pass up to 20 items. + """ + application_fee_percent: NotRequired["Literal['']|float"] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. The request must be made by a platform account on a connected account in order to set an application fee percentage. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + automatic_tax: NotRequired["SubscriptionUpdateParamsAutomaticTax"] + """ + Automatic tax settings for this subscription. We recommend you only include this parameter when the existing value is being changed. + """ + billing_cycle_anchor: NotRequired[Literal["now", "unchanged"]] + """ + Either `now` or `unchanged`. Setting the value to `now` resets the subscription's billing cycle anchor to the current time (in UTC). For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionUpdateParamsBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. When updating, pass an empty string to remove previously-defined thresholds. + """ + cancel_at: NotRequired[ + "Literal['']|int|Literal['max_period_end', 'min_period_end']" + ] + """ + A timestamp at which the subscription should cancel. If set to a date before the current period ends, this will cause a proration if prorations have been enabled using `proration_behavior`. If set during a future period, this will always cause a proration for that period. + """ + cancel_at_period_end: NotRequired[bool] + """ + Indicate whether this subscription should cancel at the end of the current period (`current_period_end`). Defaults to `false`. + """ + cancellation_details: NotRequired[ + "SubscriptionUpdateParamsCancellationDetails" + ] + """ + Details about why this subscription was cancelled + """ + collection_method: NotRequired[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this subscription at the end of the cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + days_until_due: NotRequired[int] + """ + Number of days a customer has to pay invoices generated by this subscription. Valid only for subscriptions where `collection_method` is set to `send_invoice`. + """ + default_payment_method: NotRequired[str] + """ + ID of the default payment method for the subscription. It must belong to the customer associated with the subscription. This takes precedence over `default_source`. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_source: NotRequired["Literal['']|str"] + """ + ID of the default payment source for the subscription. It must belong to the customer associated with the subscription and be in a chargeable state. If `default_payment_method` is also set, `default_payment_method` will take precedence. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates that will apply to any subscription item that does not have `tax_rates` set. Invoices created will have their `default_tax_rates` populated from the subscription. Pass an empty string to remove previously-defined tax rates. + """ + description: NotRequired["Literal['']|str"] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionUpdateParamsDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription. If not specified or empty, inherits the discount from the subscription's customer. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + invoice_settings: NotRequired["SubscriptionUpdateParamsInvoiceSettings"] + """ + All invoices will be billed using the specified settings. + """ + items: NotRequired[List["SubscriptionUpdateParamsItem"]] + """ + A list of up to 20 subscription items, each with an attached price. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + off_session: NotRequired[bool] + """ + Indicates if a customer is on or off-session while an invoice payment is attempted. Defaults to `false` (on-session). + """ + on_behalf_of: NotRequired["Literal['']|str"] + """ + The account on behalf of which to charge, for each of the subscription's invoices. + """ + pause_collection: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPauseCollection" + ] + """ + If specified, payment collection for this subscription will be paused. Note that the subscription status will be unchanged and will not be updated to `paused`. Learn more about [pausing collection](https://stripe.com/docs/billing/subscriptions/pause-payment). + """ + payment_behavior: NotRequired[ + Literal[ + "allow_incomplete", + "default_incomplete", + "error_if_incomplete", + "pending_if_incomplete", + ] + ] + """ + Use `allow_incomplete` to transition the subscription to `status=past_due` if a payment is required but cannot be paid. This allows you to manage scenarios where additional user actions are needed to pay a subscription's invoice. For example, SCA regulation may require 3DS authentication to complete payment. See the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication) for Billing to learn more. This is the default behavior. + + Use `default_incomplete` to transition the subscription to `status=past_due` when payment is required and await explicit confirmation of the invoice's payment intent. This allows simpler management of scenarios where additional user actions are needed to pay a subscription's invoice. Such as failed payments, [SCA regulation](https://stripe.com/docs/billing/migration/strong-customer-authentication), or collecting a mandate for a bank debit payment method. + + Use `pending_if_incomplete` to update the subscription using [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates). When you use `pending_if_incomplete` you can only pass the parameters [supported by pending updates](https://stripe.com/docs/billing/pending-updates-reference#supported-attributes). + + Use `error_if_incomplete` if you want Stripe to return an HTTP 402 status code if a subscription's invoice cannot be paid. For example, if a payment method requires 3DS authentication due to SCA regulation and further user action is needed, this parameter does not update the subscription and returns an error instead. This was the default behavior for API versions prior to 2019-03-14. See the [changelog](https://docs.stripe.com/changelog/2019-03-14) to learn more. + """ + payment_settings: NotRequired["SubscriptionUpdateParamsPaymentSettings"] + """ + Payment settings to pass to invoices created by the subscription. + """ + pending_invoice_item_interval: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPendingInvoiceItemInterval" + ] + """ + Specifies an interval for how often to bill for any pending invoice items. It is analogous to calling [Create an invoice](https://stripe.com/docs/api#create_invoice) for the given subscription at the specified interval. + """ + proration_behavior: NotRequired[ + Literal["always_invoice", "create_prorations", "none"] + ] + """ + Determines how to handle [prorations](https://stripe.com/docs/billing/subscriptions/prorations) when the billing cycle changes (e.g., when switching plans, resetting `billing_cycle_anchor=now`, or starting a trial), or if an item's `quantity` changes. The default value is `create_prorations`. + """ + proration_date: NotRequired[int] + """ + If set, prorations will be calculated as though the subscription was updated at the given time. This can be used to apply exactly the same prorations that were previewed with the [create preview](https://stripe.com/docs/api/invoices/create_preview) endpoint. `proration_date` can also be used to implement custom proration logic, such as prorating by day instead of by second, by providing the time that you wish to use for proration calculations. + """ + transfer_data: NotRequired[ + "Literal['']|SubscriptionUpdateParamsTransferData" + ] + """ + If specified, the funds from the subscription's invoices will be transferred to the destination and the ID of the resulting transfers will be found on the resulting charges. This will be unset if you POST an empty value. + """ + trial_end: NotRequired["Literal['now']|int"] + """ + Unix timestamp representing the end of the trial period the customer will get before being charged for the first time. This will always overwrite any trials that might apply via a subscribed plan. If set, `trial_end` will override the default trial period of the plan the customer is being subscribed to. The `billing_cycle_anchor` will be updated to the `trial_end` value. The special value `now` can be provided to end the customer's trial immediately. Can be at most two years from `billing_cycle_anchor`. + """ + trial_from_plan: NotRequired[bool] + """ + Indicates if a plan's `trial_period_days` should be applied to the subscription. Setting `trial_end` per subscription is preferred, and this defaults to `false`. Setting this flag to `true` together with `trial_end` is not allowed. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + trial_settings: NotRequired["SubscriptionUpdateParamsTrialSettings"] + """ + Settings related to subscription trials. + """ + + +class SubscriptionUpdateParamsAddInvoiceItem(TypedDict): + discounts: NotRequired[ + List["SubscriptionUpdateParamsAddInvoiceItemDiscount"] + ] + """ + The coupons to redeem into discounts for the item. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + period: NotRequired["SubscriptionUpdateParamsAddInvoiceItemPeriod"] + """ + The period associated with this invoice item. If not set, `period.start.type` defaults to `max_item_period_start` and `period.end.type` defaults to `min_item_period_end`. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["SubscriptionUpdateParamsAddInvoiceItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. Defaults to 1. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + + +class SubscriptionUpdateParamsAddInvoiceItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionUpdateParamsAddInvoiceItemPeriod(TypedDict): + end: "SubscriptionUpdateParamsAddInvoiceItemPeriodEnd" + """ + End of the invoice item period. + """ + start: "SubscriptionUpdateParamsAddInvoiceItemPeriodStart" + """ + Start of the invoice item period. + """ + + +class SubscriptionUpdateParamsAddInvoiceItemPeriodEnd(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal["min_item_period_end", "timestamp"] + """ + Select how to calculate the end of the invoice item period. + """ + + +class SubscriptionUpdateParamsAddInvoiceItemPeriodStart(TypedDict): + timestamp: NotRequired[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal["max_item_period_start", "now", "timestamp"] + """ + Select how to calculate the start of the invoice item period. + """ + + +class SubscriptionUpdateParamsAddInvoiceItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge or a negative integer representing the amount to credit to the customer. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionUpdateParamsAutomaticTax(TypedDict): + enabled: bool + """ + Enabled automatic tax calculation which will automatically compute tax rates on all invoices generated by the subscription. + """ + liability: NotRequired["SubscriptionUpdateParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SubscriptionUpdateParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionUpdateParamsBillingThresholds(TypedDict): + amount_gte: NotRequired[int] + """ + Monetary threshold that triggers the subscription to advance to a new billing period + """ + reset_billing_cycle_anchor: NotRequired[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. + """ + + +class SubscriptionUpdateParamsCancellationDetails(TypedDict): + comment: NotRequired["Literal['']|str"] + """ + Additional comments about why the user canceled the subscription, if the subscription was canceled explicitly by the user. + """ + feedback: NotRequired[ + "Literal['']|Literal['customer_service', 'low_quality', 'missing_features', 'other', 'switched_service', 'too_complex', 'too_expensive', 'unused']" + ] + """ + The customer submitted reason for why they canceled, if the subscription was canceled explicitly by the user. + """ + + +class SubscriptionUpdateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionUpdateParamsInvoiceSettings(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the subscription. Will be set on invoices generated by the subscription. + """ + issuer: NotRequired["SubscriptionUpdateParamsInvoiceSettingsIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SubscriptionUpdateParamsInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SubscriptionUpdateParamsItem(TypedDict): + billing_thresholds: NotRequired[ + "Literal['']|SubscriptionUpdateParamsItemBillingThresholds" + ] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period. Pass an empty string to remove previously-defined thresholds. + """ + clear_usage: NotRequired[bool] + """ + Delete all usage for a given subscription item. You must pass this when deleting a usage records subscription item. `clear_usage` has no effect if the plan has a billing meter attached. + """ + deleted: NotRequired[bool] + """ + A flag that, if set to `true`, will delete the specified item. + """ + discounts: NotRequired[ + "Literal['']|List[SubscriptionUpdateParamsItemDiscount]" + ] + """ + The coupons to redeem into discounts for the subscription item. + """ + id: NotRequired[str] + """ + Subscription item to update. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + plan: NotRequired[str] + """ + Plan ID for this item, as a string. + """ + price: NotRequired[str] + """ + The ID of the price object. One of `price` or `price_data` is required. When changing a subscription item's price, `quantity` is set to 1 unless a `quantity` parameter is provided. + """ + price_data: NotRequired["SubscriptionUpdateParamsItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + Quantity for this item. + """ + tax_rates: NotRequired["Literal['']|List[str]"] + """ + A list of [Tax Rate](https://stripe.com/docs/api/tax_rates) ids. These Tax Rates will override the [`default_tax_rates`](https://stripe.com/docs/api/subscriptions/create#create_subscription-default_tax_rates) on the Subscription. When updating, pass an empty string to remove previously-defined tax rates. + """ + + +class SubscriptionUpdateParamsItemBillingThresholds(TypedDict): + usage_gte: int + """ + Number of units that meets the billing threshold to advance the subscription to a new billing period (e.g., it takes 10 $5 units to meet a $50 [monetary threshold](https://stripe.com/docs/api/subscriptions/update#update_subscription-billing_thresholds-amount_gte)) + """ + + +class SubscriptionUpdateParamsItemDiscount(TypedDict): + coupon: NotRequired[str] + """ + ID of the coupon to create a new discount for. + """ + discount: NotRequired[str] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: NotRequired[str] + """ + ID of the promotion code to create a new discount for. + """ + + +class SubscriptionUpdateParamsItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: str + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. + """ + recurring: "SubscriptionUpdateParamsItemPriceDataRecurring" + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) (or 0 for a free price) representing how much to charge. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SubscriptionUpdateParamsItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SubscriptionUpdateParamsPauseCollection(TypedDict): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + """ + The payment collection behavior for this subscription while paused. One of `keep_as_draft`, `mark_uncollectible`, or `void`. + """ + resumes_at: NotRequired[int] + """ + The time after which the subscription will resume collecting payments. + """ + + +class SubscriptionUpdateParamsPaymentSettings(TypedDict): + payment_method_options: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptions" + ] + """ + Payment-method-specific configuration to provide to invoices created by the subscription. + """ + payment_method_types: NotRequired[ + "Literal['']|List[Literal['ach_credit_transfer', 'ach_debit', 'acss_debit', 'affirm', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'boleto', 'card', 'cashapp', 'crypto', 'custom', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'jp_credit_transfer', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'link', 'multibanco', 'naver_pay', 'nz_bank_account', 'p24', 'payco', 'paynow', 'paypal', 'promptpay', 'revolut_pay', 'sepa_credit_transfer', 'sepa_debit', 'sofort', 'swish', 'us_bank_account', 'wechat_pay']]" + ] + """ + The list of payment method types (e.g. card) to provide to the invoice's PaymentIntent. If not set, Stripe attempts to automatically determine the types to use by looking at the invoice's default payment method, the subscription's default payment method, the customer's default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice). Should not be specified with payment_method_configuration + """ + save_default_payment_method: NotRequired[Literal["off", "on_subscription"]] + """ + Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds. Defaults to `off` if unspecified. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit" + ] + """ + This sub-hash contains details about the Canadian pre-authorized debit payment method options to pass to the invoice's PaymentIntent. + """ + bancontact: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact" + ] + """ + This sub-hash contains details about the Bancontact payment method options to pass to the invoice's PaymentIntent. + """ + card: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCard" + ] + """ + This sub-hash contains details about the Card payment method options to pass to the invoice's PaymentIntent. + """ + customer_balance: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance" + ] + """ + This sub-hash contains details about the Bank transfer payment method options to pass to the invoice's PaymentIntent. + """ + konbini: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini" + ] + """ + This sub-hash contains details about the Konbini payment method options to pass to the invoice's PaymentIntent. + """ + sepa_debit: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit" + ] + """ + This sub-hash contains details about the SEPA Direct Debit payment method options to pass to the invoice's PaymentIntent. + """ + us_bank_account: NotRequired[ + "Literal['']|SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount" + ] + """ + This sub-hash contains details about the ACH direct debit payment method options to pass to the invoice's PaymentIntent. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict, +): + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact( + TypedDict, +): + preferred_language: NotRequired[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCard( + TypedDict, +): + mandate_options: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions" + ] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + network: NotRequired[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this Subscription on. Depends on the available networks of the card attached to the Subscription. Can be only set confirm-time. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions( + TypedDict, +): + amount: NotRequired[int] + """ + Amount to be charged for future payments. + """ + amount_type: NotRequired[Literal["fixed", "maximum"]] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + description: NotRequired[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance( + TypedDict, +): + bank_transfer: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer" + ] + """ + Configuration for the bank transfer funding type, if the `funding_type` is set to `bank_transfer`. + """ + funding_type: NotRequired[str] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer( + TypedDict, +): + eu_bank_transfer: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer" + ] + """ + Configuration for eu_bank_transfer funding type. + """ + type: NotRequired[str] + """ + The bank transfer type that can be used for funding. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer( + TypedDict, +): + country: str + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini( + TypedDict, +): + pass + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit( + TypedDict, +): + pass + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount( + TypedDict, +): + financial_connections: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + filters: NotRequired[ + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters" + ] + """ + Provide filters for the linked accounts that the customer can select for the payment method. + """ + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + + +class SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters( + TypedDict, +): + account_subcategories: NotRequired[List[Literal["checking", "savings"]]] + """ + The account subcategories to use to filter for selectable accounts. Valid subcategories are `checking` and `savings`. + """ + + +class SubscriptionUpdateParamsPendingInvoiceItemInterval(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies invoicing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between invoices. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). + """ + + +class SubscriptionUpdateParamsTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SubscriptionUpdateParamsTrialSettings(TypedDict): + end_behavior: "SubscriptionUpdateParamsTrialSettingsEndBehavior" + """ + Defines how the subscription should behave when the user's free trial ends. + """ + + +class SubscriptionUpdateParamsTrialSettingsEndBehavior(TypedDict): + missing_payment_method: Literal["cancel", "create_invoice", "pause"] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_list_params.py new file mode 100644 index 00000000..931bee2b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TaxCodeListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_retrieve_params.py new file mode 100644 index 00000000..df4670f9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_code_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TaxCodeRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_create_params.py new file mode 100644 index 00000000..9cd1071d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_create_params.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TaxIdCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + owner: NotRequired["TaxIdCreateParamsOwner"] + """ + The account or customer the tax ID belongs to. Defaults to `owner[type]=self`. + """ + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + Type of the tax ID, one of `ad_nrt`, `ae_trn`, `al_tin`, `am_tin`, `ao_tin`, `ar_cuit`, `au_abn`, `au_arn`, `aw_tin`, `az_tin`, `ba_tin`, `bb_tin`, `bd_bin`, `bf_ifu`, `bg_uic`, `bh_vat`, `bj_ifu`, `bo_tin`, `br_cnpj`, `br_cpf`, `bs_tin`, `by_tin`, `ca_bn`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `ca_qst`, `cd_nif`, `ch_uid`, `ch_vat`, `cl_tin`, `cm_niu`, `cn_tin`, `co_nit`, `cr_tin`, `cv_nif`, `de_stn`, `do_rcn`, `ec_ruc`, `eg_tin`, `es_cif`, `et_tin`, `eu_oss_vat`, `eu_vat`, `gb_vat`, `ge_vat`, `gn_nif`, `hk_br`, `hr_oib`, `hu_tin`, `id_npwp`, `il_vat`, `in_gst`, `is_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `ke_pin`, `kg_tin`, `kh_tin`, `kr_brn`, `kz_bin`, `la_tin`, `li_uid`, `li_vat`, `ma_vat`, `md_vat`, `me_pib`, `mk_vat`, `mr_nif`, `mx_rfc`, `my_frp`, `my_itn`, `my_sst`, `ng_tin`, `no_vat`, `no_voec`, `np_pan`, `nz_gst`, `om_vat`, `pe_ruc`, `ph_tin`, `ro_tin`, `rs_pib`, `ru_inn`, `ru_kpp`, `sa_vat`, `sg_gst`, `sg_uen`, `si_tin`, `sn_ninea`, `sr_fin`, `sv_nit`, `th_vat`, `tj_tin`, `tr_tin`, `tw_vat`, `tz_vat`, `ua_vat`, `ug_tin`, `us_ein`, `uy_ruc`, `uz_tin`, `uz_vat`, `ve_rif`, `vn_tin`, `za_vat`, `zm_tin`, or `zw_tin` + """ + value: str + """ + Value of the tax ID. + """ + + +class TaxIdCreateParamsOwner(TypedDict): + account: NotRequired[str] + """ + Account the tax ID belongs to. Required when `type=account` + """ + customer: NotRequired[str] + """ + Customer the tax ID belongs to. Required when `type=customer` + """ + type: Literal["account", "application", "customer", "self"] + """ + Type of owner referenced. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_delete_params.py new file mode 100644 index 00000000..3428e7f6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class TaxIdDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_list_params.py new file mode 100644 index 00000000..9c841c25 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_list_params.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TaxIdListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + owner: NotRequired["TaxIdListParamsOwner"] + """ + The account or customer the tax ID belongs to. Defaults to `owner[type]=self`. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class TaxIdListParamsOwner(TypedDict): + account: NotRequired[str] + """ + Account the tax ID belongs to. Required when `type=account` + """ + customer: NotRequired[str] + """ + Customer the tax ID belongs to. Required when `type=customer` + """ + type: Literal["account", "application", "customer", "self"] + """ + Type of owner referenced. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_retrieve_params.py new file mode 100644 index 00000000..6e030d65 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_id_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TaxIdRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_create_params.py new file mode 100644 index 00000000..e92785e0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_create_params.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TaxRateCreateParams(RequestOptions): + active: NotRequired[bool] + """ + Flag determining whether the tax rate is active or inactive (archived). Inactive tax rates cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. + """ + display_name: str + """ + The display name of the tax rate, which will be shown to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + inclusive: bool + """ + This specifies if the tax rate is inclusive or exclusive. + """ + jurisdiction: NotRequired[str] + """ + The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer's invoice. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + percentage: float + """ + This represents the tax rate percent out of 100. + """ + state: NotRequired[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + tax_type: NotRequired[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + ] + """ + The high-level tax type, such as `vat` or `sales_tax`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_list_params.py new file mode 100644 index 00000000..b4c5704a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TaxRateListParams(RequestOptions): + active: NotRequired[bool] + """ + Optional flag to filter by tax rates that are either active or inactive (archived). + """ + created: NotRequired["TaxRateListParamsCreated|int"] + """ + Optional range for filtering created date. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + inclusive: NotRequired[bool] + """ + Optional flag to filter by tax rates that are inclusive (or those that are not inclusive). + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class TaxRateListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_modify_params.py new file mode 100644 index 00000000..04473b12 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_modify_params.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TaxRateModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Flag determining whether the tax rate is active or inactive (archived). Inactive tax rates cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. + """ + display_name: NotRequired[str] + """ + The display name of the tax rate, which will be shown to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + jurisdiction: NotRequired[str] + """ + The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer's invoice. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + state: NotRequired[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + tax_type: NotRequired[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + ] + """ + The high-level tax type, such as `vat` or `sales_tax`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_retrieve_params.py new file mode 100644 index 00000000..374786b0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TaxRateRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_update_params.py new file mode 100644 index 00000000..c049176a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_tax_rate_update_params.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TaxRateUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Flag determining whether the tax rate is active or inactive (archived). Inactive tax rates cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. + """ + display_name: NotRequired[str] + """ + The display name of the tax rate, which will be shown to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + jurisdiction: NotRequired[str] + """ + The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer's invoice. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + state: NotRequired[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + tax_type: NotRequired[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + ] + """ + The high-level tax type, such as `vat` or `sales_tax`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_create_params.py new file mode 100644 index 00000000..658dc00b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_create_params.py @@ -0,0 +1,1200 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TokenCreateParams(RequestOptions): + account: NotRequired["TokenCreateParamsAccount"] + """ + Information for the account this token represents. + """ + bank_account: NotRequired["TokenCreateParamsBankAccount"] + """ + The bank account this token will represent. + """ + card: NotRequired["TokenCreateParamsCard|str"] + """ + The card this token will represent. If you also pass in a customer, the card must be the ID of a card belonging to the customer. Otherwise, if you do not pass in a customer, this is a dictionary containing a user's credit card details, with the options described below. + """ + customer: NotRequired[str] + """ + Create a token for the customer, which is owned by the application's account. You can only use this with an [OAuth access token](https://stripe.com/docs/connect/standard-accounts) or [Stripe-Account header](https://stripe.com/docs/connect/authentication). Learn more about [cloning saved payment methods](https://stripe.com/docs/connect/cloning-saved-payment-methods). + """ + cvc_update: NotRequired["TokenCreateParamsCvcUpdate"] + """ + The updated CVC value this token represents. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + person: NotRequired["TokenCreateParamsPerson"] + """ + Information for the person this token represents. + """ + pii: NotRequired["TokenCreateParamsPii"] + """ + The PII this token represents. + """ + + +class TokenCreateParamsAccount(TypedDict): + business_type: NotRequired[ + Literal["company", "government_entity", "individual", "non_profit"] + ] + """ + The business type. + """ + company: NotRequired["TokenCreateParamsAccountCompany"] + """ + Information about the company or business. + """ + individual: NotRequired["TokenCreateParamsAccountIndividual"] + """ + Information about the person represented by the account. + """ + tos_shown_and_accepted: NotRequired[bool] + """ + Whether the user described by the data in the token has been shown [the Stripe Connected Account Agreement](https://docs.stripe.com/connect/account-tokens#stripe-connected-account-agreement). When creating an account token to create a new Connect account, this value must be `true`. + """ + + +class TokenCreateParamsAccountCompany(TypedDict): + address: NotRequired["TokenCreateParamsAccountCompanyAddress"] + """ + The company's primary address. + """ + address_kana: NotRequired["TokenCreateParamsAccountCompanyAddressKana"] + """ + The Kana variation of the company's primary address (Japan only). + """ + address_kanji: NotRequired["TokenCreateParamsAccountCompanyAddressKanji"] + """ + The Kanji variation of the company's primary address (Japan only). + """ + directors_provided: NotRequired[bool] + """ + Whether the company's directors have been provided. Set this Boolean to `true` after creating all the company's directors with [the Persons API](https://docs.stripe.com/api/persons) for accounts with a `relationship.director` requirement. This value is not automatically set to `true` after creating directors, so it needs to be updated to indicate all directors have been provided. + """ + directorship_declaration: NotRequired[ + "TokenCreateParamsAccountCompanyDirectorshipDeclaration" + ] + """ + This hash is used to attest that the directors information provided to Stripe is both current and correct. + """ + executives_provided: NotRequired[bool] + """ + Whether the company's executives have been provided. Set this Boolean to `true` after creating all the company's executives with [the Persons API](https://docs.stripe.com/api/persons) for accounts with a `relationship.executive` requirement. + """ + export_license_id: NotRequired[str] + """ + The export license ID number of the company, also referred as Import Export Code (India only). + """ + export_purpose_code: NotRequired[str] + """ + The purpose code to use for export transactions (India only). + """ + name: NotRequired[str] + """ + The company's legal name. + """ + name_kana: NotRequired[str] + """ + The Kana variation of the company's legal name (Japan only). + """ + name_kanji: NotRequired[str] + """ + The Kanji variation of the company's legal name (Japan only). + """ + owners_provided: NotRequired[bool] + """ + Whether the company's owners have been provided. Set this Boolean to `true` after creating all the company's owners with [the Persons API](https://docs.stripe.com/api/persons) for accounts with a `relationship.owner` requirement. + """ + ownership_declaration: NotRequired[ + "TokenCreateParamsAccountCompanyOwnershipDeclaration" + ] + """ + This hash is used to attest that the beneficial owner information provided to Stripe is both current and correct. + """ + ownership_declaration_shown_and_signed: NotRequired[bool] + """ + Whether the user described by the data in the token has been shown the Ownership Declaration and indicated that it is correct. + """ + ownership_exemption_reason: NotRequired[ + "Literal['']|Literal['qualified_entity_exceeds_ownership_threshold', 'qualifies_as_financial_institution']" + ] + """ + This value is used to determine if a business is exempt from providing ultimate beneficial owners. See [this support article](https://support.stripe.com/questions/exemption-from-providing-ownership-details) and [changelog](https://docs.stripe.com/changelog/acacia/2025-01-27/ownership-exemption-reason-accounts-api) for more details. + """ + phone: NotRequired[str] + """ + The company's phone number (used for verification). + """ + registration_date: NotRequired[ + "Literal['']|TokenCreateParamsAccountCompanyRegistrationDate" + ] + """ + When the business was incorporated or registered. + """ + registration_number: NotRequired[str] + """ + The identification number given to a company when it is registered or incorporated, if distinct from the identification number used for filing taxes. (Examples are the CIN for companies and LLP IN for partnerships in India, and the Company Registration Number in Hong Kong). + """ + representative_declaration: NotRequired[ + "TokenCreateParamsAccountCompanyRepresentativeDeclaration" + ] + """ + This hash is used to attest that the representative is authorized to act as the representative of their legal entity. + """ + structure: NotRequired[ + "Literal['']|Literal['free_zone_establishment', 'free_zone_llc', 'government_instrumentality', 'governmental_unit', 'incorporated_non_profit', 'incorporated_partnership', 'limited_liability_partnership', 'llc', 'multi_member_llc', 'private_company', 'private_corporation', 'private_partnership', 'public_company', 'public_corporation', 'public_partnership', 'registered_charity', 'single_member_llc', 'sole_establishment', 'sole_proprietorship', 'tax_exempt_government_instrumentality', 'unincorporated_association', 'unincorporated_non_profit', 'unincorporated_partnership']" + ] + """ + The category identifying the legal structure of the company or legal entity. See [Business structure](https://docs.stripe.com/connect/identity-verification#business-structure) for more details. Pass an empty string to unset this value. + """ + tax_id: NotRequired[str] + """ + The business ID number of the company, as appropriate for the company's country. (Examples are an Employer ID Number in the U.S., a Business Number in Canada, or a Company Number in the UK.) + """ + tax_id_registrar: NotRequired[str] + """ + The jurisdiction in which the `tax_id` is registered (Germany-based companies only). + """ + vat_id: NotRequired[str] + """ + The VAT number of the company. + """ + verification: NotRequired["TokenCreateParamsAccountCompanyVerification"] + """ + Information on the verification state of the company. + """ + + +class TokenCreateParamsAccountCompanyAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class TokenCreateParamsAccountCompanyAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsAccountCompanyAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsAccountCompanyDirectorshipDeclaration(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp marking when the directorship declaration attestation was made. + """ + ip: NotRequired[str] + """ + The IP address from which the directorship declaration attestation was made. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the directorship declaration attestation was made. + """ + + +class TokenCreateParamsAccountCompanyOwnershipDeclaration(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp marking when the beneficial owner attestation was made. + """ + ip: NotRequired[str] + """ + The IP address from which the beneficial owner attestation was made. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the beneficial owner attestation was made. + """ + + +class TokenCreateParamsAccountCompanyRegistrationDate(TypedDict): + day: int + """ + The day of registration, between 1 and 31. + """ + month: int + """ + The month of registration, between 1 and 12. + """ + year: int + """ + The four-digit year of registration. + """ + + +class TokenCreateParamsAccountCompanyRepresentativeDeclaration(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp marking when the representative declaration attestation was made. + """ + ip: NotRequired[str] + """ + The IP address from which the representative declaration attestation was made. + """ + user_agent: NotRequired[str] + """ + The user agent of the browser from which the representative declaration attestation was made. + """ + + +class TokenCreateParamsAccountCompanyVerification(TypedDict): + document: NotRequired[ + "TokenCreateParamsAccountCompanyVerificationDocument" + ] + """ + A document verifying the business. + """ + + +class TokenCreateParamsAccountCompanyVerificationDocument(TypedDict): + back: NotRequired[str] + """ + The back of a document returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `additional_verification`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + front: NotRequired[str] + """ + The front of a document returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `additional_verification`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + + +class TokenCreateParamsAccountIndividual(TypedDict): + address: NotRequired["TokenCreateParamsAccountIndividualAddress"] + """ + The individual's primary address. + """ + address_kana: NotRequired["TokenCreateParamsAccountIndividualAddressKana"] + """ + The Kana variation of the individual's primary address (Japan only). + """ + address_kanji: NotRequired[ + "TokenCreateParamsAccountIndividualAddressKanji" + ] + """ + The Kanji variation of the individual's primary address (Japan only). + """ + dob: NotRequired["Literal['']|TokenCreateParamsAccountIndividualDob"] + """ + The individual's date of birth. + """ + email: NotRequired[str] + """ + The individual's email address. + """ + first_name: NotRequired[str] + """ + The individual's first name. + """ + first_name_kana: NotRequired[str] + """ + The Kana variation of the individual's first name (Japan only). + """ + first_name_kanji: NotRequired[str] + """ + The Kanji variation of the individual's first name (Japan only). + """ + full_name_aliases: NotRequired["Literal['']|List[str]"] + """ + A list of alternate names or aliases that the individual is known by. + """ + gender: NotRequired[str] + """ + The individual's gender + """ + id_number: NotRequired[str] + """ + The government-issued ID number of the individual, as appropriate for the representative's country. (Examples are a Social Security Number in the U.S., or a Social Insurance Number in Canada). Instead of the number itself, you can also provide a [PII token created with Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=pii). + """ + id_number_secondary: NotRequired[str] + """ + The government-issued secondary ID number of the individual, as appropriate for the representative's country, will be used for enhanced verification checks. In Thailand, this would be the laser code found on the back of an ID card. Instead of the number itself, you can also provide a [PII token created with Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=pii). + """ + last_name: NotRequired[str] + """ + The individual's last name. + """ + last_name_kana: NotRequired[str] + """ + The Kana variation of the individual's last name (Japan only). + """ + last_name_kanji: NotRequired[str] + """ + The Kanji variation of the individual's last name (Japan only). + """ + maiden_name: NotRequired[str] + """ + The individual's maiden name. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phone: NotRequired[str] + """ + The individual's phone number. + """ + political_exposure: NotRequired[Literal["existing", "none"]] + """ + Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction. + """ + registered_address: NotRequired[ + "TokenCreateParamsAccountIndividualRegisteredAddress" + ] + """ + The individual's registered address. + """ + relationship: NotRequired["TokenCreateParamsAccountIndividualRelationship"] + """ + Describes the person's relationship to the account. + """ + ssn_last_4: NotRequired[str] + """ + The last four digits of the individual's Social Security Number (U.S. only). + """ + verification: NotRequired["TokenCreateParamsAccountIndividualVerification"] + """ + The individual's verification document information. + """ + + +class TokenCreateParamsAccountIndividualAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class TokenCreateParamsAccountIndividualAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsAccountIndividualAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsAccountIndividualDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class TokenCreateParamsAccountIndividualRegisteredAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class TokenCreateParamsAccountIndividualRelationship(TypedDict): + director: NotRequired[bool] + """ + Whether the person is a director of the account's legal entity. Directors are typically members of the governing board of the company, or responsible for ensuring the company meets its regulatory obligations. + """ + executive: NotRequired[bool] + """ + Whether the person has significant responsibility to control, manage, or direct the organization. + """ + owner: NotRequired[bool] + """ + Whether the person is an owner of the account's legal entity. + """ + percent_ownership: NotRequired["Literal['']|float"] + """ + The percent owned by the person of the account's legal entity. + """ + title: NotRequired[str] + """ + The person's title (e.g., CEO, Support Engineer). + """ + + +class TokenCreateParamsAccountIndividualVerification(TypedDict): + additional_document: NotRequired[ + "TokenCreateParamsAccountIndividualVerificationAdditionalDocument" + ] + """ + A document showing address, either a passport, local ID card, or utility bill from a well-known utility company. + """ + document: NotRequired[ + "TokenCreateParamsAccountIndividualVerificationDocument" + ] + """ + An identifying document, either a passport or local ID card. + """ + + +class TokenCreateParamsAccountIndividualVerificationAdditionalDocument( + TypedDict, +): + back: NotRequired[str] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + front: NotRequired[str] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + + +class TokenCreateParamsAccountIndividualVerificationDocument(TypedDict): + back: NotRequired[str] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + front: NotRequired[str] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + + +class TokenCreateParamsBankAccount(TypedDict): + account_holder_name: NotRequired[str] + """ + The name of the person or business that owns the bank account. This field is required when attaching the bank account to a `Customer` object. + """ + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + The type of entity that holds the account. It can be `company` or `individual`. This field is required when attaching the bank account to a `Customer` object. + """ + account_number: str + """ + The account number for the bank account, in string form. Must be a checking account. + """ + account_type: NotRequired[Literal["checking", "futsu", "savings", "toza"]] + """ + The bank account type. This can only be `checking` or `savings` in most countries. In Japan, this can only be `futsu` or `toza`. + """ + country: str + """ + The country in which the bank account is located. + """ + currency: NotRequired[str] + """ + The currency the bank account is in. This must be a country/currency pairing that [Stripe supports.](https://stripe.com/docs/payouts) + """ + payment_method: NotRequired[str] + """ + The ID of a Payment Method with a `type` of `us_bank_account`. The Payment Method's bank account information will be copied and returned as a Bank Account Token. This parameter is exclusive with respect to all other parameters in the `bank_account` hash. You must include the top-level `customer` parameter if the Payment Method is attached to a `Customer` object. If the Payment Method is not attached to a `Customer` object, it will be consumed and cannot be used again. You may not use Payment Methods which were created by a Setup Intent with `attach_to_self=true`. + """ + routing_number: NotRequired[str] + """ + The routing number, sort code, or other country-appropriate institution number for the bank account. For US bank accounts, this is required and should be the ACH routing number, not the wire routing number. If you are providing an IBAN for `account_number`, this field is not required. + """ + + +class TokenCreateParamsCard(TypedDict): + address_city: NotRequired[str] + """ + City / District / Suburb / Town / Village. + """ + address_country: NotRequired[str] + """ + Billing address country, if provided. + """ + address_line1: NotRequired[str] + """ + Address line 1 (Street address / PO Box / Company name). + """ + address_line2: NotRequired[str] + """ + Address line 2 (Apartment / Suite / Unit / Building). + """ + address_state: NotRequired[str] + """ + State / County / Province / Region. + """ + address_zip: NotRequired[str] + """ + ZIP or postal code. + """ + currency: NotRequired[str] + """ + Required in order to add the card to an account; in all other cases, this parameter is not used. When added to an account, the card (which must be a debit card) can be used as a transfer destination for funds in this currency. + """ + cvc: NotRequired[str] + """ + Card security code. Highly recommended to always include this value. + """ + exp_month: str + """ + Two-digit number representing the card's expiration month. + """ + exp_year: str + """ + Two- or four-digit number representing the card's expiration year. + """ + name: NotRequired[str] + """ + Cardholder's full name. + """ + networks: NotRequired["TokenCreateParamsCardNetworks"] + """ + Contains information about card networks used to process the payment. + """ + number: str + """ + The card number, as a string without any separators. + """ + + +class TokenCreateParamsCardNetworks(TypedDict): + preferred: NotRequired[Literal["cartes_bancaires", "mastercard", "visa"]] + """ + The customer's preferred card network for co-branded cards. Supports `cartes_bancaires`, `mastercard`, or `visa`. Selection of a network that does not apply to the card will be stored as `invalid_preference` on the card. + """ + + +class TokenCreateParamsCvcUpdate(TypedDict): + cvc: str + """ + The CVC value, in string form. + """ + + +class TokenCreateParamsPerson(TypedDict): + additional_tos_acceptances: NotRequired[ + "TokenCreateParamsPersonAdditionalTosAcceptances" + ] + """ + Details on the legal guardian's or authorizer's acceptance of the required Stripe agreements. + """ + address: NotRequired["TokenCreateParamsPersonAddress"] + """ + The person's address. + """ + address_kana: NotRequired["TokenCreateParamsPersonAddressKana"] + """ + The Kana variation of the person's address (Japan only). + """ + address_kanji: NotRequired["TokenCreateParamsPersonAddressKanji"] + """ + The Kanji variation of the person's address (Japan only). + """ + dob: NotRequired["Literal['']|TokenCreateParamsPersonDob"] + """ + The person's date of birth. + """ + documents: NotRequired["TokenCreateParamsPersonDocuments"] + """ + Documents that may be submitted to satisfy various informational requests. + """ + email: NotRequired[str] + """ + The person's email address. + """ + first_name: NotRequired[str] + """ + The person's first name. + """ + first_name_kana: NotRequired[str] + """ + The Kana variation of the person's first name (Japan only). + """ + first_name_kanji: NotRequired[str] + """ + The Kanji variation of the person's first name (Japan only). + """ + full_name_aliases: NotRequired["Literal['']|List[str]"] + """ + A list of alternate names or aliases that the person is known by. + """ + gender: NotRequired[str] + """ + The person's gender (International regulations require either "male" or "female"). + """ + id_number: NotRequired[str] + """ + The person's ID number, as appropriate for their country. For example, a social security number in the U.S., social insurance number in Canada, etc. Instead of the number itself, you can also provide a [PII token provided by Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=pii). + """ + id_number_secondary: NotRequired[str] + """ + The person's secondary ID number, as appropriate for their country, will be used for enhanced verification checks. In Thailand, this would be the laser code found on the back of an ID card. Instead of the number itself, you can also provide a [PII token provided by Stripe.js](https://docs.stripe.com/js/tokens/create_token?type=pii). + """ + last_name: NotRequired[str] + """ + The person's last name. + """ + last_name_kana: NotRequired[str] + """ + The Kana variation of the person's last name (Japan only). + """ + last_name_kanji: NotRequired[str] + """ + The Kanji variation of the person's last name (Japan only). + """ + maiden_name: NotRequired[str] + """ + The person's maiden name. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nationality: NotRequired[str] + """ + The country where the person is a national. Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)), or "XX" if unavailable. + """ + phone: NotRequired[str] + """ + The person's phone number. + """ + political_exposure: NotRequired[Literal["existing", "none"]] + """ + Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction. + """ + registered_address: NotRequired["TokenCreateParamsPersonRegisteredAddress"] + """ + The person's registered address. + """ + relationship: NotRequired["TokenCreateParamsPersonRelationship"] + """ + The relationship that this person has with the account's legal entity. + """ + ssn_last_4: NotRequired[str] + """ + The last four digits of the person's Social Security number (U.S. only). + """ + us_cfpb_data: NotRequired["TokenCreateParamsPersonUsCfpbData"] + """ + Demographic data related to the person. + """ + verification: NotRequired["TokenCreateParamsPersonVerification"] + """ + The person's verification status. + """ + + +class TokenCreateParamsPersonAdditionalTosAcceptances(TypedDict): + account: NotRequired[ + "TokenCreateParamsPersonAdditionalTosAcceptancesAccount" + ] + """ + Details on the legal guardian's acceptance of the main Stripe service agreement. + """ + + +class TokenCreateParamsPersonAdditionalTosAcceptancesAccount(TypedDict): + date: NotRequired[int] + """ + The Unix timestamp marking when the account representative accepted the service agreement. + """ + ip: NotRequired[str] + """ + The IP address from which the account representative accepted the service agreement. + """ + user_agent: NotRequired["Literal['']|str"] + """ + The user agent of the browser from which the account representative accepted the service agreement. + """ + + +class TokenCreateParamsPersonAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class TokenCreateParamsPersonAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsPersonAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class TokenCreateParamsPersonDob(TypedDict): + day: int + """ + The day of birth, between 1 and 31. + """ + month: int + """ + The month of birth, between 1 and 12. + """ + year: int + """ + The four-digit year of birth. + """ + + +class TokenCreateParamsPersonDocuments(TypedDict): + company_authorization: NotRequired[ + "TokenCreateParamsPersonDocumentsCompanyAuthorization" + ] + """ + One or more documents that demonstrate proof that this person is authorized to represent the company. + """ + passport: NotRequired["TokenCreateParamsPersonDocumentsPassport"] + """ + One or more documents showing the person's passport page with photo and personal data. + """ + visa: NotRequired["TokenCreateParamsPersonDocumentsVisa"] + """ + One or more documents showing the person's visa required for living in the country where they are residing. + """ + + +class TokenCreateParamsPersonDocumentsCompanyAuthorization(TypedDict): + files: NotRequired[List[str]] + """ + One or more document ids returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `account_requirement`. + """ + + +class TokenCreateParamsPersonDocumentsPassport(TypedDict): + files: NotRequired[List[str]] + """ + One or more document ids returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `account_requirement`. + """ + + +class TokenCreateParamsPersonDocumentsVisa(TypedDict): + files: NotRequired[List[str]] + """ + One or more document ids returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `account_requirement`. + """ + + +class TokenCreateParamsPersonRegisteredAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class TokenCreateParamsPersonRelationship(TypedDict): + authorizer: NotRequired[bool] + """ + Whether the person is the authorizer of the account's representative. + """ + director: NotRequired[bool] + """ + Whether the person is a director of the account's legal entity. Directors are typically members of the governing board of the company, or responsible for ensuring the company meets its regulatory obligations. + """ + executive: NotRequired[bool] + """ + Whether the person has significant responsibility to control, manage, or direct the organization. + """ + legal_guardian: NotRequired[bool] + """ + Whether the person is the legal guardian of the account's representative. + """ + owner: NotRequired[bool] + """ + Whether the person is an owner of the account's legal entity. + """ + percent_ownership: NotRequired["Literal['']|float"] + """ + The percent owned by the person of the account's legal entity. + """ + representative: NotRequired[bool] + """ + Whether the person is authorized as the primary representative of the account. This is the person nominated by the business to provide information about themselves, and general information about the account. There can only be one representative at any given time. At the time the account is created, this person should be set to the person responsible for opening the account. + """ + title: NotRequired[str] + """ + The person's title (e.g., CEO, Support Engineer). + """ + + +class TokenCreateParamsPersonUsCfpbData(TypedDict): + ethnicity_details: NotRequired[ + "TokenCreateParamsPersonUsCfpbDataEthnicityDetails" + ] + """ + The persons ethnicity details + """ + race_details: NotRequired["TokenCreateParamsPersonUsCfpbDataRaceDetails"] + """ + The persons race details + """ + self_identified_gender: NotRequired[str] + """ + The persons self-identified gender + """ + + +class TokenCreateParamsPersonUsCfpbDataEthnicityDetails(TypedDict): + ethnicity: NotRequired[ + List[ + Literal[ + "cuban", + "hispanic_or_latino", + "mexican", + "not_hispanic_or_latino", + "other_hispanic_or_latino", + "prefer_not_to_answer", + "puerto_rican", + ] + ] + ] + """ + The persons ethnicity + """ + ethnicity_other: NotRequired[str] + """ + Please specify your origin, when other is selected. + """ + + +class TokenCreateParamsPersonUsCfpbDataRaceDetails(TypedDict): + race: NotRequired[ + List[ + Literal[ + "african_american", + "american_indian_or_alaska_native", + "asian", + "asian_indian", + "black_or_african_american", + "chinese", + "ethiopian", + "filipino", + "guamanian_or_chamorro", + "haitian", + "jamaican", + "japanese", + "korean", + "native_hawaiian", + "native_hawaiian_or_other_pacific_islander", + "nigerian", + "other_asian", + "other_black_or_african_american", + "other_pacific_islander", + "prefer_not_to_answer", + "samoan", + "somali", + "vietnamese", + "white", + ] + ] + ] + """ + The persons race. + """ + race_other: NotRequired[str] + """ + Please specify your race, when other is selected. + """ + + +class TokenCreateParamsPersonVerification(TypedDict): + additional_document: NotRequired[ + "TokenCreateParamsPersonVerificationAdditionalDocument" + ] + """ + A document showing address, either a passport, local ID card, or utility bill from a well-known utility company. + """ + document: NotRequired["TokenCreateParamsPersonVerificationDocument"] + """ + An identifying document, either a passport or local ID card. + """ + + +class TokenCreateParamsPersonVerificationAdditionalDocument(TypedDict): + back: NotRequired[str] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + front: NotRequired[str] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + + +class TokenCreateParamsPersonVerificationDocument(TypedDict): + back: NotRequired[str] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + front: NotRequired[str] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. The uploaded file needs to be a color image (smaller than 8,000px by 8,000px), in JPG, PNG, or PDF format, and less than 10 MB in size. + """ + + +class TokenCreateParamsPii(TypedDict): + id_number: NotRequired[str] + """ + The `id_number` for the PII, in string form. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_retrieve_params.py new file mode 100644 index 00000000..a8e659fc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_token_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TokenRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_cancel_params.py new file mode 100644 index 00000000..619d448a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TopupCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_create_params.py new file mode 100644 index 00000000..e7d682ac --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_create_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TopupCreateParams(RequestOptions): + amount: int + """ + A positive integer representing how much to transfer. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + source: NotRequired[str] + """ + The ID of a source to transfer funds from. For most users, this should be left unspecified which will use the bank account that was set up in the dashboard for the specified currency. In test mode, this can be a test bank token (see [Testing Top-ups](https://stripe.com/docs/connect/testing#testing-top-ups)). + """ + statement_descriptor: NotRequired[str] + """ + Extra information about a top-up for the source's bank statement. Limited to 15 ASCII characters. + """ + transfer_group: NotRequired[str] + """ + A string that identifies this top-up as part of a group. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_list_params.py new file mode 100644 index 00000000..1bac955d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_list_params.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TopupListParams(RequestOptions): + amount: NotRequired["TopupListParamsAmount|int"] + """ + A positive integer representing how much to transfer. + """ + created: NotRequired["TopupListParamsCreated|int"] + """ + A filter on the list, based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with a number of different query options. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["canceled", "failed", "pending", "succeeded"]] + """ + Only return top-ups that have the given status. One of `canceled`, `failed`, `pending` or `succeeded`. + """ + + +class TopupListParamsAmount(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class TopupListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_modify_params.py new file mode 100644 index 00000000..1886a84f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_modify_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TopupModifyParams(RequestOptions): + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_retrieve_params.py new file mode 100644 index 00000000..6ae1b2bf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TopupRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_update_params.py new file mode 100644 index 00000000..e4f803fd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_topup_update_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TopupUpdateParams(TypedDict): + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_params.py new file mode 100644 index 00000000..b2fb8d59 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_params.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TransferCreateParams(RequestOptions): + amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) representing how much to transfer. + """ + currency: str + """ + Three-letter [ISO code for currency](https://www.iso.org/iso-4217-currency-codes.html) in lowercase. Must be a [supported currency](https://docs.stripe.com/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination: str + """ + The ID of a connected Stripe account. [See the Connect documentation](https://docs.stripe.com/docs/connect/separate-charges-and-transfers) for details. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + source_transaction: NotRequired[str] + """ + You can use this parameter to transfer funds from a charge before they are added to your available balance. A pending balance will transfer immediately but the funds will not become available until the original charge becomes available. [See the Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-availability) for details. + """ + source_type: NotRequired[Literal["bank_account", "card", "fpx"]] + """ + The source balance to use for this transfer. One of `bank_account`, `card`, or `fpx`. For most users, this will default to `card`. + """ + transfer_group: NotRequired[str] + """ + A string that identifies this transaction as part of a group. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) for details. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_reversal_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_reversal_params.py new file mode 100644 index 00000000..e59069fd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_create_reversal_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TransferCreateReversalParams(RequestOptions): + amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) representing how much of this transfer to reverse. Can only reverse up to the unreversed amount remaining of the transfer. Partial transfer reversals are only allowed for transfers to Stripe Accounts. Defaults to the entire transfer amount. + """ + description: NotRequired[str] + """ + An arbitrary string which you can attach to a reversal object. This will be unset if you POST an empty value. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + refund_application_fee: NotRequired[bool] + """ + Boolean indicating whether the application fee should be refunded when reversing this transfer. If a full transfer reversal is given, the full application fee will be refunded. Otherwise, the application fee will be refunded with an amount proportional to the amount of the transfer reversed. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_params.py new file mode 100644 index 00000000..e131cd5a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransferListParams(RequestOptions): + created: NotRequired["TransferListParamsCreated|int"] + """ + Only return transfers that were created during the given date interval. + """ + destination: NotRequired[str] + """ + Only return transfers for the destination specified by this account ID. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + transfer_group: NotRequired[str] + """ + Only return transfers with the specified transfer group. + """ + + +class TransferListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_reversals_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_reversals_params.py new file mode 100644 index 00000000..f5aeb8ef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_list_reversals_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransferListReversalsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_params.py new file mode 100644 index 00000000..bfee1cec --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TransferModifyParams(RequestOptions): + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_reversal_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_reversal_params.py new file mode 100644 index 00000000..ab2b0d27 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_modify_reversal_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class TransferModifyReversalParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_params.py new file mode 100644 index 00000000..21daaac7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransferRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_reversal_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_reversal_params.py new file mode 100644 index 00000000..d827a484 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_retrieve_reversal_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransferRetrieveReversalParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_create_params.py new file mode 100644 index 00000000..50268c85 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_create_params.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransferReversalCreateParams(TypedDict): + amount: NotRequired[int] + """ + A positive integer in cents (or local equivalent) representing how much of this transfer to reverse. Can only reverse up to the unreversed amount remaining of the transfer. Partial transfer reversals are only allowed for transfers to Stripe Accounts. Defaults to the entire transfer amount. + """ + description: NotRequired[str] + """ + An arbitrary string which you can attach to a reversal object. This will be unset if you POST an empty value. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + refund_application_fee: NotRequired[bool] + """ + Boolean indicating whether the application fee should be refunded when reversing this transfer. If a full transfer reversal is given, the full application fee will be refunded. Otherwise, the application fee will be refunded with an amount proportional to the amount of the transfer reversed. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_list_params.py new file mode 100644 index 00000000..61cb435f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransferReversalListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_retrieve_params.py new file mode 100644 index 00000000..8cabccb5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_retrieve_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransferReversalRetrieveParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_update_params.py new file mode 100644 index 00000000..aebe79cc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_reversal_update_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransferReversalUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_update_params.py new file mode 100644 index 00000000..4d045254 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_transfer_update_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransferUpdateParams(TypedDict): + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_create_params.py new file mode 100644 index 00000000..b5cd7b97 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_create_params.py @@ -0,0 +1,411 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class WebhookEndpointCreateParams(RequestOptions): + api_version: NotRequired[ + Literal[ + "2011-01-01", + "2011-06-21", + "2011-06-28", + "2011-08-01", + "2011-09-15", + "2011-11-17", + "2012-02-23", + "2012-03-25", + "2012-06-18", + "2012-06-28", + "2012-07-09", + "2012-09-24", + "2012-10-26", + "2012-11-07", + "2013-02-11", + "2013-02-13", + "2013-07-05", + "2013-08-12", + "2013-08-13", + "2013-10-29", + "2013-12-03", + "2014-01-31", + "2014-03-13", + "2014-03-28", + "2014-05-19", + "2014-06-13", + "2014-06-17", + "2014-07-22", + "2014-07-26", + "2014-08-04", + "2014-08-20", + "2014-09-08", + "2014-10-07", + "2014-11-05", + "2014-11-20", + "2014-12-08", + "2014-12-17", + "2014-12-22", + "2015-01-11", + "2015-01-26", + "2015-02-10", + "2015-02-16", + "2015-02-18", + "2015-03-24", + "2015-04-07", + "2015-06-15", + "2015-07-07", + "2015-07-13", + "2015-07-28", + "2015-08-07", + "2015-08-19", + "2015-09-03", + "2015-09-08", + "2015-09-23", + "2015-10-01", + "2015-10-12", + "2015-10-16", + "2016-02-03", + "2016-02-19", + "2016-02-22", + "2016-02-23", + "2016-02-29", + "2016-03-07", + "2016-06-15", + "2016-07-06", + "2016-10-19", + "2017-01-27", + "2017-02-14", + "2017-04-06", + "2017-05-25", + "2017-06-05", + "2017-08-15", + "2017-12-14", + "2018-01-23", + "2018-02-05", + "2018-02-06", + "2018-02-28", + "2018-05-21", + "2018-07-27", + "2018-08-23", + "2018-09-06", + "2018-09-24", + "2018-10-31", + "2018-11-08", + "2019-02-11", + "2019-02-19", + "2019-03-14", + "2019-05-16", + "2019-08-14", + "2019-09-09", + "2019-10-08", + "2019-10-17", + "2019-11-05", + "2019-12-03", + "2020-03-02", + "2020-08-27", + "2022-08-01", + "2022-11-15", + "2023-08-16", + "2023-10-16", + "2024-04-10", + "2024-06-20", + "2024-09-30.acacia", + "2024-10-28.acacia", + "2024-11-20.acacia", + "2024-12-18.acacia", + "2025-01-27.acacia", + "2025-02-24.acacia", + "2025-03-01.dashboard", + "2025-03-31.basil", + "2025-04-30.basil", + "2025-05-28.basil", + "2025-06-30.basil", + "2025-07-30.basil", + "2025-08-27.basil", + "2025-09-30.clover", + "2025-10-29.clover", + ] + ] + """ + Events sent to this endpoint will be generated with this Stripe Version instead of your account's default Stripe Version. + """ + connect: NotRequired[bool] + """ + Whether this endpoint should receive events from connected accounts (`true`), or from your account (`false`). Defaults to `false`. + """ + description: NotRequired["Literal['']|str"] + """ + An optional description of what the webhook is used for. + """ + enabled_events: List[ + Literal[ + "*", + "account.application.authorized", + "account.application.deauthorized", + "account.external_account.created", + "account.external_account.deleted", + "account.external_account.updated", + "account.updated", + "application_fee.created", + "application_fee.refund.updated", + "application_fee.refunded", + "balance.available", + "balance_settings.updated", + "billing.alert.triggered", + "billing_portal.configuration.created", + "billing_portal.configuration.updated", + "billing_portal.session.created", + "capability.updated", + "cash_balance.funds_available", + "charge.captured", + "charge.dispute.closed", + "charge.dispute.created", + "charge.dispute.funds_reinstated", + "charge.dispute.funds_withdrawn", + "charge.dispute.updated", + "charge.expired", + "charge.failed", + "charge.pending", + "charge.refund.updated", + "charge.refunded", + "charge.succeeded", + "charge.updated", + "checkout.session.async_payment_failed", + "checkout.session.async_payment_succeeded", + "checkout.session.completed", + "checkout.session.expired", + "climate.order.canceled", + "climate.order.created", + "climate.order.delayed", + "climate.order.delivered", + "climate.order.product_substituted", + "climate.product.created", + "climate.product.pricing_updated", + "coupon.created", + "coupon.deleted", + "coupon.updated", + "credit_note.created", + "credit_note.updated", + "credit_note.voided", + "customer.created", + "customer.deleted", + "customer.discount.created", + "customer.discount.deleted", + "customer.discount.updated", + "customer.source.created", + "customer.source.deleted", + "customer.source.expiring", + "customer.source.updated", + "customer.subscription.created", + "customer.subscription.deleted", + "customer.subscription.paused", + "customer.subscription.pending_update_applied", + "customer.subscription.pending_update_expired", + "customer.subscription.resumed", + "customer.subscription.trial_will_end", + "customer.subscription.updated", + "customer.tax_id.created", + "customer.tax_id.deleted", + "customer.tax_id.updated", + "customer.updated", + "customer_cash_balance_transaction.created", + "entitlements.active_entitlement_summary.updated", + "file.created", + "financial_connections.account.created", + "financial_connections.account.deactivated", + "financial_connections.account.disconnected", + "financial_connections.account.reactivated", + "financial_connections.account.refreshed_balance", + "financial_connections.account.refreshed_ownership", + "financial_connections.account.refreshed_transactions", + "identity.verification_session.canceled", + "identity.verification_session.created", + "identity.verification_session.processing", + "identity.verification_session.redacted", + "identity.verification_session.requires_input", + "identity.verification_session.verified", + "invoice.created", + "invoice.deleted", + "invoice.finalization_failed", + "invoice.finalized", + "invoice.marked_uncollectible", + "invoice.overdue", + "invoice.overpaid", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_attempt_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.updated", + "invoice.voided", + "invoice.will_be_due", + "invoice_payment.paid", + "invoiceitem.created", + "invoiceitem.deleted", + "issuing_authorization.created", + "issuing_authorization.request", + "issuing_authorization.updated", + "issuing_card.created", + "issuing_card.updated", + "issuing_cardholder.created", + "issuing_cardholder.updated", + "issuing_dispute.closed", + "issuing_dispute.created", + "issuing_dispute.funds_reinstated", + "issuing_dispute.funds_rescinded", + "issuing_dispute.submitted", + "issuing_dispute.updated", + "issuing_personalization_design.activated", + "issuing_personalization_design.deactivated", + "issuing_personalization_design.rejected", + "issuing_personalization_design.updated", + "issuing_token.created", + "issuing_token.updated", + "issuing_transaction.created", + "issuing_transaction.purchase_details_receipt_updated", + "issuing_transaction.updated", + "mandate.updated", + "payment_intent.amount_capturable_updated", + "payment_intent.canceled", + "payment_intent.created", + "payment_intent.partially_funded", + "payment_intent.payment_failed", + "payment_intent.processing", + "payment_intent.requires_action", + "payment_intent.succeeded", + "payment_link.created", + "payment_link.updated", + "payment_method.attached", + "payment_method.automatically_updated", + "payment_method.detached", + "payment_method.updated", + "payout.canceled", + "payout.created", + "payout.failed", + "payout.paid", + "payout.reconciliation_completed", + "payout.updated", + "person.created", + "person.deleted", + "person.updated", + "plan.created", + "plan.deleted", + "plan.updated", + "price.created", + "price.deleted", + "price.updated", + "product.created", + "product.deleted", + "product.updated", + "promotion_code.created", + "promotion_code.updated", + "quote.accepted", + "quote.canceled", + "quote.created", + "quote.finalized", + "radar.early_fraud_warning.created", + "radar.early_fraud_warning.updated", + "refund.created", + "refund.failed", + "refund.updated", + "reporting.report_run.failed", + "reporting.report_run.succeeded", + "reporting.report_type.updated", + "review.closed", + "review.opened", + "setup_intent.canceled", + "setup_intent.created", + "setup_intent.requires_action", + "setup_intent.setup_failed", + "setup_intent.succeeded", + "sigma.scheduled_query_run.created", + "source.canceled", + "source.chargeable", + "source.failed", + "source.mandate_notification", + "source.refund_attributes_required", + "source.transaction.created", + "source.transaction.updated", + "subscription_schedule.aborted", + "subscription_schedule.canceled", + "subscription_schedule.completed", + "subscription_schedule.created", + "subscription_schedule.expiring", + "subscription_schedule.released", + "subscription_schedule.updated", + "tax.settings.updated", + "tax_rate.created", + "tax_rate.updated", + "terminal.reader.action_failed", + "terminal.reader.action_succeeded", + "terminal.reader.action_updated", + "test_helpers.test_clock.advancing", + "test_helpers.test_clock.created", + "test_helpers.test_clock.deleted", + "test_helpers.test_clock.internal_failure", + "test_helpers.test_clock.ready", + "topup.canceled", + "topup.created", + "topup.failed", + "topup.reversed", + "topup.succeeded", + "transfer.created", + "transfer.reversed", + "transfer.updated", + "treasury.credit_reversal.created", + "treasury.credit_reversal.posted", + "treasury.debit_reversal.completed", + "treasury.debit_reversal.created", + "treasury.debit_reversal.initial_credit_granted", + "treasury.financial_account.closed", + "treasury.financial_account.created", + "treasury.financial_account.features_status_updated", + "treasury.inbound_transfer.canceled", + "treasury.inbound_transfer.created", + "treasury.inbound_transfer.failed", + "treasury.inbound_transfer.succeeded", + "treasury.outbound_payment.canceled", + "treasury.outbound_payment.created", + "treasury.outbound_payment.expected_arrival_date_updated", + "treasury.outbound_payment.failed", + "treasury.outbound_payment.posted", + "treasury.outbound_payment.returned", + "treasury.outbound_payment.tracking_details_updated", + "treasury.outbound_transfer.canceled", + "treasury.outbound_transfer.created", + "treasury.outbound_transfer.expected_arrival_date_updated", + "treasury.outbound_transfer.failed", + "treasury.outbound_transfer.posted", + "treasury.outbound_transfer.returned", + "treasury.outbound_transfer.tracking_details_updated", + "treasury.received_credit.created", + "treasury.received_credit.failed", + "treasury.received_credit.succeeded", + "treasury.received_debit.created", + "billing.credit_balance_transaction.created", + "billing.credit_grant.created", + "billing.credit_grant.updated", + "billing.meter.created", + "billing.meter.deactivated", + "billing.meter.reactivated", + "billing.meter.updated", + ] + ] + """ + The list of events to enable for this endpoint. You may specify `['*']` to enable all events, except those that require explicit selection. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + url: str + """ + The URL of the webhook endpoint. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_delete_params.py new file mode 100644 index 00000000..8c17a5d8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class WebhookEndpointDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_list_params.py new file mode 100644 index 00000000..837e62fd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class WebhookEndpointListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_modify_params.py new file mode 100644 index 00000000..93a0041f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_modify_params.py @@ -0,0 +1,289 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class WebhookEndpointModifyParams(RequestOptions): + description: NotRequired["Literal['']|str"] + """ + An optional description of what the webhook is used for. + """ + disabled: NotRequired[bool] + """ + Disable the webhook endpoint if set to true. + """ + enabled_events: NotRequired[ + List[ + Literal[ + "*", + "account.application.authorized", + "account.application.deauthorized", + "account.external_account.created", + "account.external_account.deleted", + "account.external_account.updated", + "account.updated", + "application_fee.created", + "application_fee.refund.updated", + "application_fee.refunded", + "balance.available", + "balance_settings.updated", + "billing.alert.triggered", + "billing_portal.configuration.created", + "billing_portal.configuration.updated", + "billing_portal.session.created", + "capability.updated", + "cash_balance.funds_available", + "charge.captured", + "charge.dispute.closed", + "charge.dispute.created", + "charge.dispute.funds_reinstated", + "charge.dispute.funds_withdrawn", + "charge.dispute.updated", + "charge.expired", + "charge.failed", + "charge.pending", + "charge.refund.updated", + "charge.refunded", + "charge.succeeded", + "charge.updated", + "checkout.session.async_payment_failed", + "checkout.session.async_payment_succeeded", + "checkout.session.completed", + "checkout.session.expired", + "climate.order.canceled", + "climate.order.created", + "climate.order.delayed", + "climate.order.delivered", + "climate.order.product_substituted", + "climate.product.created", + "climate.product.pricing_updated", + "coupon.created", + "coupon.deleted", + "coupon.updated", + "credit_note.created", + "credit_note.updated", + "credit_note.voided", + "customer.created", + "customer.deleted", + "customer.discount.created", + "customer.discount.deleted", + "customer.discount.updated", + "customer.source.created", + "customer.source.deleted", + "customer.source.expiring", + "customer.source.updated", + "customer.subscription.created", + "customer.subscription.deleted", + "customer.subscription.paused", + "customer.subscription.pending_update_applied", + "customer.subscription.pending_update_expired", + "customer.subscription.resumed", + "customer.subscription.trial_will_end", + "customer.subscription.updated", + "customer.tax_id.created", + "customer.tax_id.deleted", + "customer.tax_id.updated", + "customer.updated", + "customer_cash_balance_transaction.created", + "entitlements.active_entitlement_summary.updated", + "file.created", + "financial_connections.account.created", + "financial_connections.account.deactivated", + "financial_connections.account.disconnected", + "financial_connections.account.reactivated", + "financial_connections.account.refreshed_balance", + "financial_connections.account.refreshed_ownership", + "financial_connections.account.refreshed_transactions", + "identity.verification_session.canceled", + "identity.verification_session.created", + "identity.verification_session.processing", + "identity.verification_session.redacted", + "identity.verification_session.requires_input", + "identity.verification_session.verified", + "invoice.created", + "invoice.deleted", + "invoice.finalization_failed", + "invoice.finalized", + "invoice.marked_uncollectible", + "invoice.overdue", + "invoice.overpaid", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_attempt_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.updated", + "invoice.voided", + "invoice.will_be_due", + "invoice_payment.paid", + "invoiceitem.created", + "invoiceitem.deleted", + "issuing_authorization.created", + "issuing_authorization.request", + "issuing_authorization.updated", + "issuing_card.created", + "issuing_card.updated", + "issuing_cardholder.created", + "issuing_cardholder.updated", + "issuing_dispute.closed", + "issuing_dispute.created", + "issuing_dispute.funds_reinstated", + "issuing_dispute.funds_rescinded", + "issuing_dispute.submitted", + "issuing_dispute.updated", + "issuing_personalization_design.activated", + "issuing_personalization_design.deactivated", + "issuing_personalization_design.rejected", + "issuing_personalization_design.updated", + "issuing_token.created", + "issuing_token.updated", + "issuing_transaction.created", + "issuing_transaction.purchase_details_receipt_updated", + "issuing_transaction.updated", + "mandate.updated", + "payment_intent.amount_capturable_updated", + "payment_intent.canceled", + "payment_intent.created", + "payment_intent.partially_funded", + "payment_intent.payment_failed", + "payment_intent.processing", + "payment_intent.requires_action", + "payment_intent.succeeded", + "payment_link.created", + "payment_link.updated", + "payment_method.attached", + "payment_method.automatically_updated", + "payment_method.detached", + "payment_method.updated", + "payout.canceled", + "payout.created", + "payout.failed", + "payout.paid", + "payout.reconciliation_completed", + "payout.updated", + "person.created", + "person.deleted", + "person.updated", + "plan.created", + "plan.deleted", + "plan.updated", + "price.created", + "price.deleted", + "price.updated", + "product.created", + "product.deleted", + "product.updated", + "promotion_code.created", + "promotion_code.updated", + "quote.accepted", + "quote.canceled", + "quote.created", + "quote.finalized", + "radar.early_fraud_warning.created", + "radar.early_fraud_warning.updated", + "refund.created", + "refund.failed", + "refund.updated", + "reporting.report_run.failed", + "reporting.report_run.succeeded", + "reporting.report_type.updated", + "review.closed", + "review.opened", + "setup_intent.canceled", + "setup_intent.created", + "setup_intent.requires_action", + "setup_intent.setup_failed", + "setup_intent.succeeded", + "sigma.scheduled_query_run.created", + "source.canceled", + "source.chargeable", + "source.failed", + "source.mandate_notification", + "source.refund_attributes_required", + "source.transaction.created", + "source.transaction.updated", + "subscription_schedule.aborted", + "subscription_schedule.canceled", + "subscription_schedule.completed", + "subscription_schedule.created", + "subscription_schedule.expiring", + "subscription_schedule.released", + "subscription_schedule.updated", + "tax.settings.updated", + "tax_rate.created", + "tax_rate.updated", + "terminal.reader.action_failed", + "terminal.reader.action_succeeded", + "terminal.reader.action_updated", + "test_helpers.test_clock.advancing", + "test_helpers.test_clock.created", + "test_helpers.test_clock.deleted", + "test_helpers.test_clock.internal_failure", + "test_helpers.test_clock.ready", + "topup.canceled", + "topup.created", + "topup.failed", + "topup.reversed", + "topup.succeeded", + "transfer.created", + "transfer.reversed", + "transfer.updated", + "treasury.credit_reversal.created", + "treasury.credit_reversal.posted", + "treasury.debit_reversal.completed", + "treasury.debit_reversal.created", + "treasury.debit_reversal.initial_credit_granted", + "treasury.financial_account.closed", + "treasury.financial_account.created", + "treasury.financial_account.features_status_updated", + "treasury.inbound_transfer.canceled", + "treasury.inbound_transfer.created", + "treasury.inbound_transfer.failed", + "treasury.inbound_transfer.succeeded", + "treasury.outbound_payment.canceled", + "treasury.outbound_payment.created", + "treasury.outbound_payment.expected_arrival_date_updated", + "treasury.outbound_payment.failed", + "treasury.outbound_payment.posted", + "treasury.outbound_payment.returned", + "treasury.outbound_payment.tracking_details_updated", + "treasury.outbound_transfer.canceled", + "treasury.outbound_transfer.created", + "treasury.outbound_transfer.expected_arrival_date_updated", + "treasury.outbound_transfer.failed", + "treasury.outbound_transfer.posted", + "treasury.outbound_transfer.returned", + "treasury.outbound_transfer.tracking_details_updated", + "treasury.received_credit.created", + "treasury.received_credit.failed", + "treasury.received_credit.succeeded", + "treasury.received_debit.created", + "billing.credit_balance_transaction.created", + "billing.credit_grant.created", + "billing.credit_grant.updated", + "billing.meter.created", + "billing.meter.deactivated", + "billing.meter.reactivated", + "billing.meter.updated", + ] + ] + ] + """ + The list of events to enable for this endpoint. You may specify `['*']` to enable all events, except those that require explicit selection. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + url: NotRequired[str] + """ + The URL of the webhook endpoint. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_retrieve_params.py new file mode 100644 index 00000000..3387b0f2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class WebhookEndpointRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_update_params.py new file mode 100644 index 00000000..48ab0604 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/_webhook_endpoint_update_params.py @@ -0,0 +1,288 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class WebhookEndpointUpdateParams(TypedDict): + description: NotRequired["Literal['']|str"] + """ + An optional description of what the webhook is used for. + """ + disabled: NotRequired[bool] + """ + Disable the webhook endpoint if set to true. + """ + enabled_events: NotRequired[ + List[ + Literal[ + "*", + "account.application.authorized", + "account.application.deauthorized", + "account.external_account.created", + "account.external_account.deleted", + "account.external_account.updated", + "account.updated", + "application_fee.created", + "application_fee.refund.updated", + "application_fee.refunded", + "balance.available", + "balance_settings.updated", + "billing.alert.triggered", + "billing_portal.configuration.created", + "billing_portal.configuration.updated", + "billing_portal.session.created", + "capability.updated", + "cash_balance.funds_available", + "charge.captured", + "charge.dispute.closed", + "charge.dispute.created", + "charge.dispute.funds_reinstated", + "charge.dispute.funds_withdrawn", + "charge.dispute.updated", + "charge.expired", + "charge.failed", + "charge.pending", + "charge.refund.updated", + "charge.refunded", + "charge.succeeded", + "charge.updated", + "checkout.session.async_payment_failed", + "checkout.session.async_payment_succeeded", + "checkout.session.completed", + "checkout.session.expired", + "climate.order.canceled", + "climate.order.created", + "climate.order.delayed", + "climate.order.delivered", + "climate.order.product_substituted", + "climate.product.created", + "climate.product.pricing_updated", + "coupon.created", + "coupon.deleted", + "coupon.updated", + "credit_note.created", + "credit_note.updated", + "credit_note.voided", + "customer.created", + "customer.deleted", + "customer.discount.created", + "customer.discount.deleted", + "customer.discount.updated", + "customer.source.created", + "customer.source.deleted", + "customer.source.expiring", + "customer.source.updated", + "customer.subscription.created", + "customer.subscription.deleted", + "customer.subscription.paused", + "customer.subscription.pending_update_applied", + "customer.subscription.pending_update_expired", + "customer.subscription.resumed", + "customer.subscription.trial_will_end", + "customer.subscription.updated", + "customer.tax_id.created", + "customer.tax_id.deleted", + "customer.tax_id.updated", + "customer.updated", + "customer_cash_balance_transaction.created", + "entitlements.active_entitlement_summary.updated", + "file.created", + "financial_connections.account.created", + "financial_connections.account.deactivated", + "financial_connections.account.disconnected", + "financial_connections.account.reactivated", + "financial_connections.account.refreshed_balance", + "financial_connections.account.refreshed_ownership", + "financial_connections.account.refreshed_transactions", + "identity.verification_session.canceled", + "identity.verification_session.created", + "identity.verification_session.processing", + "identity.verification_session.redacted", + "identity.verification_session.requires_input", + "identity.verification_session.verified", + "invoice.created", + "invoice.deleted", + "invoice.finalization_failed", + "invoice.finalized", + "invoice.marked_uncollectible", + "invoice.overdue", + "invoice.overpaid", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_attempt_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.updated", + "invoice.voided", + "invoice.will_be_due", + "invoice_payment.paid", + "invoiceitem.created", + "invoiceitem.deleted", + "issuing_authorization.created", + "issuing_authorization.request", + "issuing_authorization.updated", + "issuing_card.created", + "issuing_card.updated", + "issuing_cardholder.created", + "issuing_cardholder.updated", + "issuing_dispute.closed", + "issuing_dispute.created", + "issuing_dispute.funds_reinstated", + "issuing_dispute.funds_rescinded", + "issuing_dispute.submitted", + "issuing_dispute.updated", + "issuing_personalization_design.activated", + "issuing_personalization_design.deactivated", + "issuing_personalization_design.rejected", + "issuing_personalization_design.updated", + "issuing_token.created", + "issuing_token.updated", + "issuing_transaction.created", + "issuing_transaction.purchase_details_receipt_updated", + "issuing_transaction.updated", + "mandate.updated", + "payment_intent.amount_capturable_updated", + "payment_intent.canceled", + "payment_intent.created", + "payment_intent.partially_funded", + "payment_intent.payment_failed", + "payment_intent.processing", + "payment_intent.requires_action", + "payment_intent.succeeded", + "payment_link.created", + "payment_link.updated", + "payment_method.attached", + "payment_method.automatically_updated", + "payment_method.detached", + "payment_method.updated", + "payout.canceled", + "payout.created", + "payout.failed", + "payout.paid", + "payout.reconciliation_completed", + "payout.updated", + "person.created", + "person.deleted", + "person.updated", + "plan.created", + "plan.deleted", + "plan.updated", + "price.created", + "price.deleted", + "price.updated", + "product.created", + "product.deleted", + "product.updated", + "promotion_code.created", + "promotion_code.updated", + "quote.accepted", + "quote.canceled", + "quote.created", + "quote.finalized", + "radar.early_fraud_warning.created", + "radar.early_fraud_warning.updated", + "refund.created", + "refund.failed", + "refund.updated", + "reporting.report_run.failed", + "reporting.report_run.succeeded", + "reporting.report_type.updated", + "review.closed", + "review.opened", + "setup_intent.canceled", + "setup_intent.created", + "setup_intent.requires_action", + "setup_intent.setup_failed", + "setup_intent.succeeded", + "sigma.scheduled_query_run.created", + "source.canceled", + "source.chargeable", + "source.failed", + "source.mandate_notification", + "source.refund_attributes_required", + "source.transaction.created", + "source.transaction.updated", + "subscription_schedule.aborted", + "subscription_schedule.canceled", + "subscription_schedule.completed", + "subscription_schedule.created", + "subscription_schedule.expiring", + "subscription_schedule.released", + "subscription_schedule.updated", + "tax.settings.updated", + "tax_rate.created", + "tax_rate.updated", + "terminal.reader.action_failed", + "terminal.reader.action_succeeded", + "terminal.reader.action_updated", + "test_helpers.test_clock.advancing", + "test_helpers.test_clock.created", + "test_helpers.test_clock.deleted", + "test_helpers.test_clock.internal_failure", + "test_helpers.test_clock.ready", + "topup.canceled", + "topup.created", + "topup.failed", + "topup.reversed", + "topup.succeeded", + "transfer.created", + "transfer.reversed", + "transfer.updated", + "treasury.credit_reversal.created", + "treasury.credit_reversal.posted", + "treasury.debit_reversal.completed", + "treasury.debit_reversal.created", + "treasury.debit_reversal.initial_credit_granted", + "treasury.financial_account.closed", + "treasury.financial_account.created", + "treasury.financial_account.features_status_updated", + "treasury.inbound_transfer.canceled", + "treasury.inbound_transfer.created", + "treasury.inbound_transfer.failed", + "treasury.inbound_transfer.succeeded", + "treasury.outbound_payment.canceled", + "treasury.outbound_payment.created", + "treasury.outbound_payment.expected_arrival_date_updated", + "treasury.outbound_payment.failed", + "treasury.outbound_payment.posted", + "treasury.outbound_payment.returned", + "treasury.outbound_payment.tracking_details_updated", + "treasury.outbound_transfer.canceled", + "treasury.outbound_transfer.created", + "treasury.outbound_transfer.expected_arrival_date_updated", + "treasury.outbound_transfer.failed", + "treasury.outbound_transfer.posted", + "treasury.outbound_transfer.returned", + "treasury.outbound_transfer.tracking_details_updated", + "treasury.received_credit.created", + "treasury.received_credit.failed", + "treasury.received_credit.succeeded", + "treasury.received_debit.created", + "billing.credit_balance_transaction.created", + "billing.credit_grant.created", + "billing.credit_grant.updated", + "billing.meter.created", + "billing.meter.deactivated", + "billing.meter.reactivated", + "billing.meter.updated", + ] + ] + ] + """ + The list of events to enable for this endpoint. You may specify `['*']` to enable all events, except those that require explicit selection. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + url: NotRequired[str] + """ + The URL of the webhook endpoint. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__init__.py new file mode 100644 index 00000000..dd5370ee --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__init__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.apps._secret_create_params import ( + SecretCreateParams as SecretCreateParams, + SecretCreateParamsScope as SecretCreateParamsScope, + ) + from stripe.params.apps._secret_delete_where_params import ( + SecretDeleteWhereParams as SecretDeleteWhereParams, + SecretDeleteWhereParamsScope as SecretDeleteWhereParamsScope, + ) + from stripe.params.apps._secret_find_params import ( + SecretFindParams as SecretFindParams, + SecretFindParamsScope as SecretFindParamsScope, + ) + from stripe.params.apps._secret_list_params import ( + SecretListParams as SecretListParams, + SecretListParamsScope as SecretListParamsScope, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "SecretCreateParams": ("stripe.params.apps._secret_create_params", False), + "SecretCreateParamsScope": ( + "stripe.params.apps._secret_create_params", + False, + ), + "SecretDeleteWhereParams": ( + "stripe.params.apps._secret_delete_where_params", + False, + ), + "SecretDeleteWhereParamsScope": ( + "stripe.params.apps._secret_delete_where_params", + False, + ), + "SecretFindParams": ("stripe.params.apps._secret_find_params", False), + "SecretFindParamsScope": ("stripe.params.apps._secret_find_params", False), + "SecretListParams": ("stripe.params.apps._secret_list_params", False), + "SecretListParamsScope": ("stripe.params.apps._secret_list_params", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..791641bb383c97cf9e9bb2377d21d5d1a52a986e GIT binary patch literal 1519 zcmb7D&2Q936n|r{9dGs{%aRZXMO|en!XVb7MV#77B_xG{R!E_$un?A$9TF@4(#(Wp z(MF1*9yoI2(n>uRcQjQ8gl!0$2`T7Ka4chGqREoc!R0%8*)eZ^M-)m8~mmDMm-{am2gTAhF^Gj1ns*7})Q8CA;E9ecExdBh6 z-IUF?yz2z3y0L#ds_JrEE>QN!+Feur$prg{rDh)J5JmK2oyqN-NWYC8c6Hju(2uaT;+O**JsUI}V%1^&9x`uMxJPrxfz_ zXZ6O9;z|9&lVa_`!o%y&re=S*_;l*bgN0uvj(4X|JS_cjc&1x9(ydJPHFdJw1GQBC z{~rS?NB;(b?bX`T>g>x{)jyJEa=@QpB;kEKUi%kDQfFnPm7e-z=%Wkl2*RH6X{LwI zSq(!eW_||&Pmqv*bs#5yg|ok@l^2St=`V~opjU?DP0~};n%*-q_y|2X_7&-#Xm*cY cMSNbbPAJ=j=cmA!>gS4Dy{DnaKEx$n0#vWL&;S4c literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0d432e6160031594a93c0cb553a20a0a5070c44 GIT binary patch literal 1120 zcmZuw%}*3D6mNGvcUh1{!YUdi2#1MbN9770fJ9AjHKLb^Ni)tgFk!xEyM#TXSL2QK zPcZ%|Ufk@(G%+4Lc_RTlaPoC#*FdyM-~09VUfb9AUcZcw*ANW;dp3HnBlJ@(M#C6_ zlh*)_P>4btqXc^xD_n^yiRNhq)?z&|JR>nZGqF4iqY8S2Lj5fY4T?W&LU~1uhO+vyo6~S3 z3Pey|Qp(|t=){Bd5u(V$A@VA(5Y?zojqAXwNzD+ifUYXu8Zwn3V}Mn=fb|l?i_Fke zxNAAKoZ6xRqhg&=U(n}1^Aj#jdXW2RC~Kf0N=|$s_0&(Ov~s^2XMQM~|8Cm~vYbkT zE7gXRZ9>!@LS&7QBnvyS!gWISI(}SQmxR*7ffCu#81;q_(k%-TZ>Zh37vog zI`6nUSwh|I^uXPqd{<<-`#2LcURukt-6-95*Zg3YrlGq}(|tFN-ne;J>}2V3>;40m zL-Ln$aPYS&cj2xmr*2+6*Y)$9yMz~cAdn151Sw6eyvwR8L?vvP{3(cc=v%$n(|cPV ztNr@?K%YOZR1EvrM2(xh_5S4CK%W~iV-tr@MtGuexH-c0#eu$1ELd}N{{I``9+)pT zK!}S%>*0k$51FFeUEML*1Z;CE((;2K>!eV=4yR1&0=kXe09)I!*rd9-p~RFD>bJ0I zC5ozCRcJIy<4XU)M?8G9GxLh#k>CiD7O-U literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_delete_where_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_delete_where_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d8ef11a3faec1b44baae3587d8048850cd74f04 GIT binary patch literal 1050 zcmZ`&Jx>%t7@pbhI}Q;1I3;RerkbF)yN~*=z@?BN|_Y7K#R4M24Jj_5{{EuuUDoRkc(95##DvvR(XG}F2%Zj+0YTjaO zqZ_9633u>qZXqaBNUla13-i2?VU-icK9GGpBS$ZTwIYLHHQx#rL9EN74DJ;Y(&>ew zSWoiRU?GgwA&-Mi$Tx#Dc^;HKxmM(}GdFJq0@FENq99xa5#TdP2|-y!7KCLf0w$`s zSzHCqUg*eKEtn~LyrF&6;NcVj!W;6n)!wmoR^BysTa$fja?dbqZ_gn^Bd_icc Hsp9?(P0#{X literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_find_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/apps/__pycache__/_secret_find_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..690f39144a79d5ba7edbe5f65823fb242a1b39b4 GIT binary patch literal 1028 zcmZuvJ5Los6rS0geca3Csd$w{3&3JyU{zYMAVei0XhfTh$z?R=9_QMIdkT`z6=ky5iIe0D*0?8^iyA&WnGYy zmp~3sjAERk3*7arvIvp`#87}^6c{fMGZ|sl4Up>1>=#{A8E&tG9;TNb7NxR5NJTP}+2B;WLx z!)Tl3vA@gmT|Z4;`DI^j75T#az5Bj^0?w6S5NcR8*PL*N`f$ z74v1Ew{&b8T-d?~c#pnyx`*U&<3nrEnLZ-Z$A)3K$2J-odAr*1&P=1=R~rxiZ_-^* zUv5&2tM-tlCAvKq60>Ry@hskfXP%*)Fp7#^E*0qs#ubq;5&Synp!R%3|2(Q;OoN_i zKB1v1__$_QG*l5zYNowb&;=rH13PUghUBoaWUMgv|vF<)P$Tyv~XiGS#Af|uwTr~5w5Y)o{qD# zHJ1JvHeRkVlNbvtI}*Tx$~U`r7cp+Kzj^a}Z|1!>@4YXTN*Te&f6s-VErfomP5(1{ z!ue|uPEmjY9HAI{7%N$ev{?7_T-GBaHa#=8JS(<68zT)pLV@uX1t!Ix^x_`R$yp0n zo7w}m)N-n&U&^G4<;Zh-*rZ%M%|w_c92jFOu|r$SkUj0UpwqLtBL zGi-=P;iSNxM|8dm`%^@bhXdqkFA>$LaT7Rd26zqDl47ia>+#xvw|k6UFo6N5%z?Il zkENKFU3KK>Hf=B}RKU-C=Eq!CXcC0U9@(M0DWlS&$C;l5(u~456msfc`|U=WQEBpg z8R5cbLY?+^A@e#oa0p5Km=Yq(gv4pkjFdb~$YIlu3JrrIBB^u1t?KB99F(G_?1)0nz@$+5dh`GH6?_i-v{w6c+=2jJP=@EZq^f_p@hBR2|n+^i+` z(`2=F|AEV)9xE9b_tXYi2;8<0Yw%=%^%|u9}$tjbDfL3Jl zpsQDHHmW?2DHvCvMu|--Q1xLG3Z@n05zZ<}-I~K~5cnMcc$f0n*YTxJd5{r2%+T~n zqf?&i8gqZ;s1DbwWjRySp+;CSMft0@z{r`CWiB9b&HO;?9khO7O=9Qd%>{zxqUK (import_target, is_submodule) +_import_map = { + "AlertActivateParams": ( + "stripe.params.billing._alert_activate_params", + False, + ), + "AlertArchiveParams": ( + "stripe.params.billing._alert_archive_params", + False, + ), + "AlertCreateParams": ("stripe.params.billing._alert_create_params", False), + "AlertCreateParamsUsageThreshold": ( + "stripe.params.billing._alert_create_params", + False, + ), + "AlertCreateParamsUsageThresholdFilter": ( + "stripe.params.billing._alert_create_params", + False, + ), + "AlertDeactivateParams": ( + "stripe.params.billing._alert_deactivate_params", + False, + ), + "AlertListParams": ("stripe.params.billing._alert_list_params", False), + "AlertRetrieveParams": ( + "stripe.params.billing._alert_retrieve_params", + False, + ), + "CreditBalanceSummaryRetrieveParams": ( + "stripe.params.billing._credit_balance_summary_retrieve_params", + False, + ), + "CreditBalanceSummaryRetrieveParamsFilter": ( + "stripe.params.billing._credit_balance_summary_retrieve_params", + False, + ), + "CreditBalanceSummaryRetrieveParamsFilterApplicabilityScope": ( + "stripe.params.billing._credit_balance_summary_retrieve_params", + False, + ), + "CreditBalanceSummaryRetrieveParamsFilterApplicabilityScopePrice": ( + "stripe.params.billing._credit_balance_summary_retrieve_params", + False, + ), + "CreditBalanceTransactionListParams": ( + "stripe.params.billing._credit_balance_transaction_list_params", + False, + ), + "CreditBalanceTransactionRetrieveParams": ( + "stripe.params.billing._credit_balance_transaction_retrieve_params", + False, + ), + "CreditGrantCreateParams": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantCreateParamsAmount": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantCreateParamsAmountMonetary": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantCreateParamsApplicabilityConfig": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantCreateParamsApplicabilityConfigScope": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantCreateParamsApplicabilityConfigScopePrice": ( + "stripe.params.billing._credit_grant_create_params", + False, + ), + "CreditGrantExpireParams": ( + "stripe.params.billing._credit_grant_expire_params", + False, + ), + "CreditGrantListParams": ( + "stripe.params.billing._credit_grant_list_params", + False, + ), + "CreditGrantModifyParams": ( + "stripe.params.billing._credit_grant_modify_params", + False, + ), + "CreditGrantRetrieveParams": ( + "stripe.params.billing._credit_grant_retrieve_params", + False, + ), + "CreditGrantUpdateParams": ( + "stripe.params.billing._credit_grant_update_params", + False, + ), + "CreditGrantVoidGrantParams": ( + "stripe.params.billing._credit_grant_void_grant_params", + False, + ), + "MeterCreateParams": ("stripe.params.billing._meter_create_params", False), + "MeterCreateParamsCustomerMapping": ( + "stripe.params.billing._meter_create_params", + False, + ), + "MeterCreateParamsDefaultAggregation": ( + "stripe.params.billing._meter_create_params", + False, + ), + "MeterCreateParamsValueSettings": ( + "stripe.params.billing._meter_create_params", + False, + ), + "MeterDeactivateParams": ( + "stripe.params.billing._meter_deactivate_params", + False, + ), + "MeterEventAdjustmentCreateParams": ( + "stripe.params.billing._meter_event_adjustment_create_params", + False, + ), + "MeterEventAdjustmentCreateParamsCancel": ( + "stripe.params.billing._meter_event_adjustment_create_params", + False, + ), + "MeterEventCreateParams": ( + "stripe.params.billing._meter_event_create_params", + False, + ), + "MeterEventSummaryListParams": ( + "stripe.params.billing._meter_event_summary_list_params", + False, + ), + "MeterListEventSummariesParams": ( + "stripe.params.billing._meter_list_event_summaries_params", + False, + ), + "MeterListParams": ("stripe.params.billing._meter_list_params", False), + "MeterModifyParams": ("stripe.params.billing._meter_modify_params", False), + "MeterReactivateParams": ( + "stripe.params.billing._meter_reactivate_params", + False, + ), + "MeterRetrieveParams": ( + "stripe.params.billing._meter_retrieve_params", + False, + ), + "MeterUpdateParams": ("stripe.params.billing._meter_update_params", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b015a1a3ebd65e2c6172d9d757426c818afd48f2 GIT binary patch literal 6704 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 q!^!dROC3Xky(EkC?M4xQ{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_activate_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_activate_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..279f555b8071908a40bbd5d21be4df1888661093 GIT binary patch literal 644 zcmXw1y>1jS5FYQ}E#Z=YK%78S5zQ4jE2NDgB|?G%1w=%%jpf{qF00$MH@5F|+ru;D zcm%|wP$3$$QYtFCNJl7AVXrTiJoAm`f5zW8H#fi@{qI?EN&tR4;qJt1usXEh5^~5% z2^Gl*aX2W0D$K$Thh>eZ7jckB8^iP3iGjd^>iHvRxhl42?!a#kgSR+OdlXWaF|__`V9)uXymJy)S4slED%C7}r(f><=ai8=X9E4)lIxHVa+3hrzk1jS5FYQ}E#Z;?LYzQ|BBHq>XF=L1QX(WMP(VR6+gQ%+=x%kp_Qv*|ZhLr! z9FKr_6e>i6R!T)h7wHH^D(rP)$ur-0{%8Dsb8`di(f^(lCj{WP6K+p@1J(x?oI?&d zDWM`6Ar1#+P=#68;joOVIEx7c@EY>y6XY?HZ=v_kk|r7U{y1Ss+N~2jo1-@GYEwv| z?Mw8w(8lt+$I>`up)enNS5I%^!1}qB&jBGLIb^{{zz`#hAKO=VG0Dlk>6I|9@wWGRGJy)P3slEDA>v6ra8QytVIq4oPf-Vw5;RT1)W)DQFTT><}9i9SEG}n$hO=VXwSjnVAc| zI?&VQ=qN$_1N;v(UR{GmLKIYVmh4cZ;?3->alleW+Ba{0?_=NB%&(n}PjK_NlaoRC7CfW48^z7R%Q-N&6}x}*#kRs22SPZq9HQb*x4wwr5g9A!8?S<>E&vFtNoT67YG%qKwOh5s&tOihTxrzer>0M@okZ z3{pC9SVnm)ZIOr+2SJ zn^q36ORM3iOH`$0W%>`V596#vmU;KWMWBl}%5PMMciq$S$d0 znn^C$8%m(M&MqsW^S`P%6_qA$A;UM3V3Dz+mycFIu2vpYo$aZ$-PFR7ZECHZE3fi=ae3cG$$!f`E3CdLc)y(4jhmHvYz7uvMln3GHOFmF&+ zKR&dmUmvEP5$RxXINSAYTC5Kg4h7^~JyCU3x=}8w*Q2gmp+kGMM=!m*^)>#G-9lvp zKmGxdW79B<7Y;G*{7#nsAonVA@6_oT-lTgTDh4fG}ste!df91wCMAdij#V@xo8>|XuFOptxY7ttVY9=<41 z+au&7TggFa!!xXOsuNuD`m0VK2&N_$T2> zu%}Ay?d(3Mrm(nOI|DvOLtUDpMq0P!(vzYry+7l=8z%m@!-Bz1z0e(BqbFT=%_B!X z!OvcQnJnLbzVp4e^&{E3jH0xwH*XDn_x+G)hv~2mrouk7A9j=3MeXv2*6#;_;oPD$ zeraJYZQ>0dw2gevq3iB`nB;+e;6(SKz&v&2GA4vvWkB{Wpnm~_KUqS$%i$F`)_VT~ D-`K6g literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f65cc05c3e910dc8de7854c37e00601dade4fbb7 GIT binary patch literal 930 zcmZ{i%}*3D6u{g0+TmkajOe0}Xn@NeU?N1h5EF?B9tawZm$@{BDeQ#K2W^+Icf50B zJ?Yi>r+9I*7t_Re@Z^mI@xaN~=`I&zleX{u`uf`U@uglLM=<1{`{@TCp`S(>4bZD` zxe41jN>GA1%5aRaksa=2ZtPaF%e~Bx{Va$Bj2yIu67LixKEt0~>msgogI4XAQCe6} zy=F%pCe_PQrA01*c-yH|El1b3Q^f@3dSa(g#wryo*|R?EI&_FGPeDIN48=G>vGW!& zmw5@k2h>dFC(Z`!V}=Jq;@*&&Wkc@W@Nh`{8#1~Z{6lJnbi>w|Zam{mC=vph-j1G3BZ3&C{2PD+|5+UIGOD(zwSn(+xsso)?N%DF#DVDj_^`{dw!SVs z?$1BzPp=QW^$W-G!;1jTJm|^(?Ztt&I3o4gp4WTxeyl&aFz^;ebh3FS`xA2mZ|?u( z&clyxe`aamEmbz6Ir_*>E7VOJ!U_?#KS^O5RG6mI0aOnnvN^nE6~ayw%cbe!D($ua yRdjca=gR#oNY~+pE!k5s4=RQ!jd0;&jIRQO*S@3X548F_n8o2)euZGGZvO=og7=C5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_alert_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f433003fe3f43f6435385cfe5f1cc32115d5d7c9 GIT binary patch literal 644 zcmXw1y>1jS5FYQ}9pRFIK%78S5zQ4j3(`iBh>)N_0TIz`V{Njd%j$ORjqN+#_V5fj z9s%(vREP$xl!}Tj(h-VOjMo=Sp83Y}KjZJ4n;SsK{CiRyGl1VtxIOV2tPTiVKn^)8 zp<*dx4hLmWg=yH~u#BoWjTr>+8uI89hqIAO%vtq*uULu237woua0 zOZ2udmiXNxWu3Cnn4fxAPuFo^^^D{TKuB2*Y48y+#0cZZ^y)4qIol`R1f#Hh@Ulcr z;jAujj_)&_Ri;gFQD-tg8ui+~5HhP!h;~DWO69ZC;ein6v#j(Q?fTadkv23|x7$Kw zQYxEug$wZ&R-}WQhM%bl`9v=GD>PH9YW_x9EO!r;nig`x53|!L%AC(p&Usm!@Vc>Q zO74xHzu=~@xLcD!HbKKFO;IDSyK?zSQI^hMWUd#X*Ubp89@mZTxe6WW(>0HXe1>0x z;WAntf4TExu=6w8xe9`~ueWavUGGDmW=s*gRS4yGq1~X{#5Of$^^M>6g207EY23p6 zRJz1lE@&6|9-*85zMtcPen=vHCNNKlT!oCW>jc=|B@8cN^f!rEe>uJeVx9MY(wVF^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_summary_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_summary_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..769e4ebf7ddb16e4abdf31667d73a1d4907788e1 GIT binary patch literal 1766 zcmbVNOK%)S5bk;P%&uo0KR|wfe6T>u9O3~2Bti)YV_}fOCW_&*m)3ZuaYmk3x@Rr# zIYdJIftVXd5PyO@m#loTT0$H+aWnFULrzrntev$n0HGX)pUe7gRi|Yk z0kQ9-vJNce-brgNqD)P7%Nkduf+wo=`Jm#-MjF>~lTc&F*^!f5Fn>Zg=@|*>nO_iY zaXT>(Z4vHp%B>~v@d4ay@C4V`=ntHLs@0F+LutJpWl<6Ht$vMi zDlhKKy3DyylY=@QhTb@| z-_;ZG(rJXtRbGeJ=T%OO^O}P0&KR-A>eIv?BaYUZ2CncSkb3XGO7~$^WoaA%BWXR@ zipz?t`DhYjQiJ}OsvQv(bzq7`JPm$Z*)^0eC@-cFx`Ji~jh1r`y;(Hav|=8OCgNrE zFjZ|9z>##B}H}ZTOvEIf#dIliW_tJ)OHTY~MVzZ%#0bF)wEr zqbRC_$$uhJ z)2G?Q4!KAq=B1On3XXgm3=lc<%E9J$pAKJL8_tA>c6e5ji$|XSw9_4WcY)>31j~&w z80&HZQS-kOs0+^wEU^Nwm6;~pz`0lpx&n0e7b*bv=#B4yBe8-W6KJNE|7deUQ(V;z ze6`TD@ftL!zF}F}T(JW0N<~2k=xTk1sM%)1_fyT8s3rJd1k?=x&8|UDyAI( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8f8df507340f245085ee7b0c0f44dbf15af2186 GIT binary patch literal 911 zcmYjPy-yTD6rb6zTi^~Nf*|-o4w@@qqqKwqO|(!nel*ui=5~i;Wp{R&nIm_#+F03f zbe0ClGT0 zTO)k!wXYb@M2w=GE50&f+$(0B+0#s~((sG=Bj_wvJ2as@WN!rJl7@N;J-|yUXex_p zSl%IR@T$TOJ5psS6Ge^jDCTX_Vtbijg~z%%)S}H1(_R~GZ#4Z%`3E?zl zgcOs6q*>HSG_DeI*rAE>2>pW!TPjh^5JEZ66fKuZh;T|*%+)t^4iH^_3ihFqpv}9% zVwz=DXmzmfMu1sW=a4?w;H@e%!;z1t55v-P1ywE=_5Yaa!e=>{S{^#f<9qWfU+lr$+R#}m z88JUDzT2o23ucxLBFw8KnR%8%zq!Iwy&Og}%e-L>!n%raso!q7e>2RSPFiNZ1?bY> oGJkAaEP;vPlXpOz*%;#s58=&Iv~Y?Vf4oKPf4z5sK$X$|0K`o9P5=M^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_balance_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ac606b470defbb4753d498fdd0a334d4c4bba73 GIT binary patch literal 684 zcmYLHy>AmS6o0<2gp#%(AtDe{g^)5d7IdvT1SA+xK?Rl@u$|~6+D?@0?aJEn zAAtB%m=Fs(sS^`hrBH@W*ymJO@_WDM_x+x~t*@_vJ^Jtc`~v~_<%H`KufTH8f>X#K zBL$QsCB)&N2+A-G8ypr<8K*IU0G>k@9YYo)`5JovG+89Q)^8{DNWF1@M^n`1Rb_H1 zw0((Q=Gs_(b6*;#%oS!M@9OC)4lEy9`4kXRl0h200}L_3_?~@r7n6+aTD}N+Vg2Z- zjgp%IFSr=tTg8RuBbV_2jmmL`uesu-t`nSBTx9#bR^4Vy@DdrT*BC2hHZ2_PFm^QM zh1V!I5*1lehuWxmlQAxYG`#7Bu`jT+I=K2s4`qpTEavnX>WPsReIX4N+XE>lxfs&{ zA5BnXbcSL^i+o6{g*lXBr~mi~)w#j#${O%7YHHKu71F9Hmk#ryaQ}(cez<$;juq{v1O32~i;xg< YnE=^2hweG_{v;7;e|~=nmNnl00OL!%%m4rY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b34c121dbac7acdfbf68df62f7572d9efe64e6a7 GIT binary patch literal 2524 zcmb7Gy^q{P6d&8OUhn69fI_m#9Y;O{PLwl{2#9ovl)H%IP_je>C{`fLSV7|1(y8g&2Qe!yl?xjMx#pL ziT`bR^9@4&#!3E^#?1Z`U>*{exJr-sN=H$US9_|jbu^!LsGMuPlCO7kzuYPNM#oTy zO4f->en4I;_u|CVMESaxFz)n3tsN#P>v86a$~XOp zxhUApOvor5Pxk)=<{@FEqqwA_ehWTgnyan=S|P3mJk5AUS;;LO0~}w#^)apkU!KU6 z$E(H!F_>Q1Rhi(qWOag6n9lS~wIE%atjROrruqcQ_csvfH_aLG&Kel(CF|S?5@4N# z-E_F)$711-g{ywJ9V9|`vhnO;Vo}udy3TE{=Oz8MFxd3A#M@30w7U|;kVKB>idw`& zKg2LWIE*f6vK8_^aNBVb`izS@+uUT`#M@!E0}8O+$O&9gg%N@lBWCz4aa<>H1PvUY z2_xcO$U%X&SrvwDBWT;AYTJJ3ZugL{+xER}r#D`iv27;^!o-o;V%xk7e&RY1p~VRo zninJ-ON3)C{7UwLl2<=kcR)dFE7-NJvG{HhM%EW$!g}Xd!|<*bY+0*L_bv-uYlj6p zR?oX_Mg8PX7+hHX=wmB}1Uw&sfV0J73oh{@W<@dv7I?3R`|Yj_lD&md!U;IX&SaLO zKF4a7!~iD#1IW+hS^eCQp4(H^lCh_g&a4e6x`K7ap4 z&cC%d=%({0hxBBQG>#7F;MSu`S}&q=CkAWj?9z}f<#KTP=|TK>ZLs@jIc=IlYUV4o zBM-W1wKb%z90A!=X>)N%7bU`%a!cN*yKx^O`yaw`vF;$Z6E`DgO`r+1O`YQnyoKaA5}6Vwki)#-?;=@3@*WbrOOgw~ z#Akp&ESkrjwyvhl)gfKYEw9Z#IGa`%hIFA|Ic`4K^3$;LrsZIvGOp_q@Ur{#HIwpF zAc|GPISaadQQC2O+XvaP0CHT~v54H19e9d7>IyLNQ6Ol?-0K9X&)omApgPJQtUB&3 zs{XoJN_F7_M1*x%aEc8h>ms+hVZ=l!#-R=7PDMu=G-V53!I5mh8zTd@)K-RcrC*pEx(Cd zg)UEs+h%#%{z=2iLMwaKlsixvsnJbf;)_7Q9ka&=>yJ0m6U*tWHKbOarj4V|jQZ2Y zT54STM^hX6K2b~ho(^3l%XvKOV6RPwJ@XoRs;`0ZCHul$;h%u80&o01kUdRNl$SbDE<7g-&&lPK zTpsBkD8?Wd5g10_DTZP^-WU-WMn{1BlJitCem^!MFpQd2;Jp!nVblWP$)%Tw%Ygg` DjHpS< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2be311b10d93c457de2e5d704c935222515a5c9c GIT binary patch literal 653 zcmXw1y>1jS5FYQ}E#Z=YggAkyBAP977Nm_*1W+hYKp=#)jkUS8F4pbZ8`~G%HdOEo zIUWJ=C{&0Bt(1z2F47T-RE*b&CC_~0`JeIk_4PHtWBxr99|*v2C)}L)8m#sZoIwdC zsh}n~Ar1#sP=|TggjbHSUpDh3^?SZggkf;Jme9NAKTZ*WqGx|uhdM)Dcvt7GcHSd%H=7o z#1U;;d#vQn_{mdhgyq`}8WdA*D5en&r%hijJrY&r{Mn@MhfQ5W412(in70`>tsb~C z9ZB(;`$#^+uiHiBcE%`wBHF+eks~byi07`U~1p} zT`yo}%cXIf^P}k#Z@8d+L4FCWD literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10ab36501fda80074cdd2c46300f396bc01f4c72 GIT binary patch literal 846 zcmYjPy>AmS6u0jy*ER{NnkbZ_g4!+_+7ooGIuxWbpnyOuH(*_IZffPuceS0Wkr-iT zYuH#3e+pBS1)bE1i7iqoLnofkO@yU;AHVnEpWnS7wc0X*BmX{Nt1d#nv@<{8m*@Hr z)Fp~hj1!dN5MymyiIv)+UD|fyq;BY9WT9geJ0DT(QvBUE<)Jt7+LhnhY2%{)hMow~Tn@GlWXA&yaKy+hQd&N^V!jqw5KrT-CY zfp{kCF4JD%l{>^)AoFgnMl|c9`3%@Fbu1#TG|$(Oh*DYjy`fZDN<~qlJZ8L4y7VLy zwD9Of9`U$v6P7Yn)TN4q((&j-QPFApg--~NQc6g%Oh}r=!$jLvLe7R!Vj@CMzObbd z#XUkI&NCI2(;`GTWr%V04PAqYZa)O4KqTn%i{Lqx1C`~$i%ijE_bAH-aC2}J^#(vP zIH&wPNLV+>N9r`=`+HBG29hbdn?pj>r!s&GSx$qzd}GjMNuujXuN(pC>lu&)hCocl zUOo~Ppil}Q4EY|!C-k$vKHi?xH>b|#%(7g6=Ap);v7D@JPo3>KQoBEP#&5qYO{!Z{ zXKRjDTc71*Wn=1W%#r5fulA&|Gj(=KL^S3XcHr-{4C6f_%u9(S8rUCq JZV;%l`X3-R;VJ+C literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d78a84e34a7c540844c3ee32e2b9b0d4bd32631a GIT binary patch literal 821 zcmXw1&rcLF6mI9&&f)^1CaVN5#DvUYcOqPg2O#1B(O|rcF-_T)Wx`BnXbagj#*_XH zEH|&lKgElLi|K`fCvPMx9ys|rv-^_1e($}u?|ZNB$L#D30#W}K)255iZ);4&pMddm z0B49HhBK7o1Y?Vx%*oxv&Ar5{Y&Y}sAPMqD(!j_;+lYCe5%W3z4)0n?!eJ0K{#Y1c zGq=Z&Pq@;rN}U!$MUL^d(w;WnPO3Cmjh$3;Ni%b2x6t-%Dmm-f%Tw_tV7v$53~`iT zh7#v3;x6~N{|LNx@qpoV*qh*I&cx$RJ-oqv?jKbCNzAjcp&tdNy$Lx}y)CKGFAJ6) z3|~`8b7cZPD5+o{<|icIt*pHNmw{jiVusN$9*w~x41geMH#;+ zG|xI4MRAmhe!M|@M_jP@l#A0iOZVe)s1FOV)_uAfD`;(}gafqCRSdb(lE-CLTD+fT znY~YXRqdp2i?@uSdQzY1mP6SD5|s)8s7+8`(63f|?!{bm=|xpU-k-j@8#PV4Ce|ggo)l8lqay7*nLrOq z;8``LZrVcaA$*{@Ph#B5LOUXMB^e}k+e~YfD{T85Qu_nRu|vMIr(n)vb(nIjsku| zLPv}EDO89Cos^1-E|LjFDrRq;m3HQvo%hUsUteDXI_BS_;ynZS?S$JCufXzvz&YfQ zvl1$nGUjkl2344bEe^}5iqn`u07sBVA0dyCeG9#Rnk8vtMg7Z3)`SGCBbcK*vg+erILR2cBmJauXIGbjr*Jw8d9T90l zV|BABL?)%OSzEpkUtvi)xcR_ORfT*k=lnUEiB&a!p)8g=he}NfIp&AiXo525Gn6x4 z7AL%3*i$9dH( zBVD@YA(2n;tJlAXF5Z5=^P{)@Guplig1D=iS)C;JSK7#GRCeGV0)L)zl6cxBx2n! K8`nUr_5Kf+Q?YFT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_credit_grant_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..293d29a3b7541ffa14fb2553f8d14c8d57d03488 GIT binary patch literal 781 zcmXw1&ubGw6rR~%`C)3U3dK@96rtphEY)kd1WZ?;8K^AoSBFi_f2f z*{%Ush#`h!l;8*_PUK*lJF%O1k(c<9p9E2Wk%JBpbKfK8LGalv`=iRxZw9|?(sZ=9 z&$~){hg_nK&naM9;EFkO2w%z)X0-SUbudh=v*98jAluw($xeMHBI!WS=CiS1WkYtT_+?-SwFV8LC8g)#$_cB z%)7arO1o0!dYKR^M5?IbsgQ)^*1%6_W+J+I7oMdFggr3`_d%YkGz*`m3gXsYnx1pf z3-@UE90Ut5L0pD0KMk{?I!ncq_SWN28kbv{IY4_LL-Q8TAk2!m*)ib*`qo$-d86mowQ*x(;%!VF$FEKUw6gwny*0kmo_OsA zwY)ZZG?E`Xqrr81e7iaEnnfkQx46|>7N}unloVr^wycy4fq?=ctt+|xDNEz5kW$uN vi;Ao68+23MF8$ukS51n|lItc+U5xR+0O5x}(9Rg`{0AmS6o0<2gp#%(AtEZoP_blaEa+NwC`e^M1%Y6=#k$5%sg*nXYCBP~BKR9x zHde%+!h~4RNu8M3Dupt1!ak>#{NC^ReZS}L>+5Uaj`_DGasu$%3pXcSf#tpfXTX7z z5-O4t;&D_)Rh-8yj?1J<^OQgYhrpAMz*8jO;^3cWi)_&Oq7FQL8s|5CW{IgYt|U66rYwJ_ZT~!7G=WYcuo|YqZnPhKli5Y>(uWD$ z4FbctMQQv3!+6@n8$M_o`Hn-^-Mui-eSOb~?sI{8=*VSE2)W9D>|Q|s0tSDxgmk|= Jx&p^q@BiYfvXB4( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d0b924849d9e73af75b04216b540f25c4c02b28 GIT binary patch literal 1759 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_event_summary_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_event_summary_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b4753d90855b43c64f03f4b7799d2f9875665cd GIT binary patch literal 983 zcmYjPzfTlF6rTNgdj|&rAtFbV014RwHfm>pf?%`&G@{Klli_waChRX}W`QlN(AZiD zc9a_b6l1Zu#!O>jWk-ToP&sqEdpgO!{oXh4y_xsD`PytYfL!d)H2GEo;HPq`WtHIS zkpySJ2fh}7P-|GM%xI@wi#M&O9MK10(|2Q@J(!eF^b%_omsB^OF6D4%uT|$ zYlzw=;h3U83~k5!1wKp(#lEP&%o6NxkPhz@$%QQ|fvXSFKLZ%FH6OI~R{$H>^tBbq z)&aI8)=O+-V-<_`cW#CXY~%V%Vi|ny8Rt68Z7*wp$ktgb@lcgrWgq82f3U z@GyjjDGJIRgK;WGAw*FWbHqs;F&Sf!h*LFus ziT5<-I9OVb;{$oVw~jgovNKN#apVPL*Gn?KA4d?M7P zyj>CmDj$YQM~Ib>kQGY8KuQUVz~v;Pj=GgH^1%Z3PMWvi`^ebo)}^jn&ZP}T$N%Ap zd*>{_HQzJmtKH_*xp}_xv7Qgl^~|}79lrgZxll1P zix^a;(>Uuo!MD!(l_7x`uaNWd+nEcy$00azo*Eb3IIQ}Qx2yO zuGbYf2O$WJ2*gHU7#f?A8C!vsV=J;_Cvajna1CIBXCSoSfY8ClXRF8&R61_6@>4ra zLyo+}hZ*K#D;0z$Tru_r;i75E$_5dbp-2w3sL)Y_;c&OeQP_S$aQ$BS=KzDi2ti=J z0@%WKXsjx>3b3QF*~c!n?kiR?)_|!LT%WfGywhi#|MIwl)iO_Iz<8mjcl38vHQ%W< zhvb7ztm@E3Jw3vS*v{e@F@pIE#8Awox0`W6W6Y$7lMo6LV_8>-ByG5Z_b9{C#V09B zLg_>#CPLP@Kui>oBRSTwXiuG@WV1rlk@h~#n4CC5QHEig(Ja*=$0P~qajRLC9)t;s zF@&-PVNAm;(s&rc!wg0J6^jcdMLIujZqhc(Q2dZ5nt*U|2Qs?1k19QhI1@zajjr^(9Fqh+6~W-q2H0JSmq z)zKuyews_e$d*-NWC zKHszFOJ;iE^7!NH?!x14W36Ye88!y+GNsNV+9SLGV<(r*5CYd+y{ocpCuWzl^B!Z*Xj*LcgsrJ|NfUY8#$& zl%WjgsK5!vmiKb6@Dso0{X8hbBrHfmF!Im~lm#D97Bc+RcOjBSpL803tkA(``Yk)| zF{NKunwLTW66|oLJDzFmaLr_zo2lJWTPrSEw(nv%ItqxcB*^E8p#*0r@!limv*12p zEX?p0yb~574jbX#E#4R*{w*^04Q`Pr3$4}2l32Xo=tO4b6@wgY!f#TU7Rt1k$hhdz zJ$6t^W(Yg2QjwW3=LOehTIp13t4|NW4~it|zUC*)L|lwG0yes*b~_U$qEw^>qtr}N zT9jEYw|tY*<6fFOjURf5P(^&g#7UgQrl0Uq*+&;@FuObqmM=Xoj4lak&0ho; z?>zDul literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4884fd5cde09ba807f7dee6e86f14bcf0a30bdc9 GIT binary patch literal 690 zcmX|9y>8S%5T5nlIpHqhBB20+CKXpCD~LoDrHGKAAOV4B+^n42;bNWbb-a7w+`}{E zcm%`)@DNlH4YHJqiteN%6sefCFKjXU%{M#$`@Pp&1v>ig{p1@1_+^!w<1fKtpTIdt zkSv9aMT}YOq)z5WZiC&_%lyb^;J|Z`-bau=vafFI9|ct~==`?IfYobn@N|OOyedqh za!ri)GSPt-pY>)00%LFaAab z?!c@2hiI@oR5E#Ay^hN`({)!Sx=7!bq%ABZtcjxgFt`mdX1wDvIs5#|I3gksoJU>p-)cT9e_GPQ2 z#zbq}DXOwV*&7iO(2q!bf}a}?XTyt)tsmaj+;RMH9zgHz%$vRaymHa~&z84uTc#%NV-~fbCww<|PdN1R)D&Yga&5=mYaJ@Pr0+NwiD&VNcqrWDU_iT_PNE9-}^nk|L^(R`uZB!qyIk5j|sppC)}O*7OV~|xPS~Y zQb0*kLL3f?pbXQn#bFVZaT*f{;1y)iC&*$XUqkPoCUr9C{C2{CG#f{FHbZURRVJ50 z+n4A~u8rmQN76WDt}q*WS5I%_!0Ne`F90DW8Kl86V2BaMPwcC^m}F$%@;VrV&7-$y zP#qy3n|#g+esHshpS4gY2TzZlhh4W{n>xQZS?J#dJtZLP9H9FF@S3kDo z9Dert%V_!G^S$rA?H|$hRS?8owRvagy6^i$LmRVQ2a|pu$_=|oOkLT$zV$6HFkBcE z+AYn`rA@ryg0_(#Saj3f_mezO53OiF6zFG`T!n;?>jcQ&CG;<0@F$5#cR9KS%UbV$ D5C^U4 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ee4e6dbb12e95797e433d6ee079c3e367df4560 GIT binary patch literal 644 zcmXw1y>1jS5FYQ}E#Z<7fjEJvBAP35R!AGAh>)OwfD+McV{Njdi*>v9#`c|Vdw7Oi z9s%(vREP$xl!}Tj(h-VO*z1cW&wS(gpYiwg^);|Z|9j3)2*7VA+@E*_mIoGGLIDLS zp&}U}4hLmWg<06)u#BoWiwOkq28!r26fu%-q4&>{CK>krIAKWIjbpr+qBb9D!==#n zC3?rTvHanYG)~DC7H8ho(^VW;zO?csAY`O~EcgT%VubNC`|2(x1=+W}35H?&_&pj_ z$7mGC8Gg)FUgmXxM90#zbBrW9=Gal`N*E!+pjsrg`Z#%Jr`zOWIHy)owDD z3n5M370%dKSXv$2HS}CoNXKGMU!$HFS<|=DV7YTB<%EkdJF-~JhG-vmLNs?B>t*ZaVy8QF;4Dwy=UP;Ss|Vw&1!^^I?Nf#KYs&~9OV zDqZ3Y7qpA~$fCP+-_P+tJ+Y$wOrT#_auX6lZWADT*D$z-;ol@8>0)#XmUZ6$0pD?~ AKL7v# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/__pycache__/_meter_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0de663afb0f30c3ad44c1ca978d584e71e6ea97e GIT binary patch literal 647 zcmX|9v2GMG5FPLCZSKOI!bKDTi6#|WBo+iwMJb|4P{0WRX|}PP^XOvTu6MKch1)(f z`~b%%AU=gEqCsvbsOU}#p-6?jd%?x{&GXDWk3HW8gLQCA|9v1o5`bUcxm}$VxO(Qm zClDY=202Ly@i@qWJWRtpN+SXRJO>e8fQT^q8n$_9r|u;2Z|@|;MlYo{Nnr1c3iAff zX0k$Id++KJ#gQDFahucHRRLHDBcwz?8XNp>^ft4A!Zpm+-K};#xozxSQWX# zHq@rF8;o(K3d4;oly*n{!e8LZS-5#mPm3JsM9t|D>ZvJ8`l2wH?Hm@xRH_L*$fzArXw8e{F@Zdq4r zPQ5W6=ts_cfFGL=7vsy#?eEd{G6*`|WekI@MYMSPxp&$B&sKMDQ%6Z`V^fz-r)kO# zTZiG?pwhnG<{c_O8?EAoM@@mDLpR<1_W2H~d(L$u1=|12G9-jt$3V7z!qY!-mvk4s JYj9hW`VSD~sAB*C literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_activate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_activate_params.py new file mode 100644 index 00000000..f68a2b71 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_activate_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AlertActivateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_archive_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_archive_params.py new file mode 100644 index 00000000..3213ed47 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_archive_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AlertArchiveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_create_params.py new file mode 100644 index 00000000..95d96ca8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_create_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class AlertCreateParams(RequestOptions): + alert_type: Literal["usage_threshold"] + """ + The type of alert to create. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + title: str + """ + The title of the alert. + """ + usage_threshold: NotRequired["AlertCreateParamsUsageThreshold"] + """ + The configuration of the usage threshold. + """ + + +class AlertCreateParamsUsageThreshold(TypedDict): + filters: NotRequired[List["AlertCreateParamsUsageThresholdFilter"]] + """ + The filters allows limiting the scope of this usage alert. You can only specify up to one filter at this time. + """ + gte: int + """ + Defines at which value the alert will fire. + """ + meter: str + """ + The [Billing Meter](https://docs.stripe.com/api/billing/meter) ID whose usage is monitored. + """ + recurrence: Literal["one_time"] + """ + Defines how the alert will behave. + """ + + +class AlertCreateParamsUsageThresholdFilter(TypedDict): + customer: NotRequired[str] + """ + Limit the scope to this usage alert only to this customer. + """ + type: Literal["customer"] + """ + What type of filter is being applied to this usage alert. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_deactivate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_deactivate_params.py new file mode 100644 index 00000000..b69f8cbb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_deactivate_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AlertDeactivateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_list_params.py new file mode 100644 index 00000000..20129d2f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_list_params.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class AlertListParams(RequestOptions): + alert_type: NotRequired[Literal["usage_threshold"]] + """ + Filter results to only include this type of alert. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + meter: NotRequired[str] + """ + Filter results to only include alerts with the given meter. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_retrieve_params.py new file mode 100644 index 00000000..92df807c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_alert_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AlertRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_summary_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_summary_retrieve_params.py new file mode 100644 index 00000000..83568bde --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_summary_retrieve_params.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class CreditBalanceSummaryRetrieveParams(RequestOptions): + customer: str + """ + The customer for which to fetch credit balance summary. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + filter: "CreditBalanceSummaryRetrieveParamsFilter" + """ + The filter criteria for the credit balance summary. + """ + + +class CreditBalanceSummaryRetrieveParamsFilter(TypedDict): + applicability_scope: NotRequired[ + "CreditBalanceSummaryRetrieveParamsFilterApplicabilityScope" + ] + """ + The billing credit applicability scope for which to fetch credit balance summary. + """ + credit_grant: NotRequired[str] + """ + The credit grant for which to fetch credit balance summary. + """ + type: Literal["applicability_scope", "credit_grant"] + """ + Specify the type of this filter. + """ + + +class CreditBalanceSummaryRetrieveParamsFilterApplicabilityScope(TypedDict): + price_type: NotRequired[Literal["metered"]] + """ + The price type that credit grants can apply to. We currently only support the `metered` price type. Cannot be used in combination with `prices`. + """ + prices: NotRequired[ + List["CreditBalanceSummaryRetrieveParamsFilterApplicabilityScopePrice"] + ] + """ + A list of prices that the credit grant can apply to. We currently only support the `metered` prices. Cannot be used in combination with `price_type`. + """ + + +class CreditBalanceSummaryRetrieveParamsFilterApplicabilityScopePrice( + TypedDict, +): + id: str + """ + The price ID this credit grant should apply to. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_list_params.py new file mode 100644 index 00000000..2a61839e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_list_params.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditBalanceTransactionListParams(RequestOptions): + credit_grant: NotRequired[str] + """ + The credit grant for which to fetch credit balance transactions. + """ + customer: str + """ + The customer for which to fetch credit balance transactions. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_retrieve_params.py new file mode 100644 index 00000000..2a550682 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_balance_transaction_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditBalanceTransactionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_create_params.py new file mode 100644 index 00000000..2b30b24b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_create_params.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class CreditGrantCreateParams(RequestOptions): + amount: "CreditGrantCreateParamsAmount" + """ + Amount of this credit grant. + """ + applicability_config: "CreditGrantCreateParamsApplicabilityConfig" + """ + Configuration specifying what this credit grant applies to. We currently only support `metered` prices that have a [Billing Meter](https://docs.stripe.com/api/billing/meter) attached to them. + """ + category: NotRequired[Literal["paid", "promotional"]] + """ + The category of this credit grant. It defaults to `paid` if not specified. + """ + customer: str + """ + ID of the customer to receive the billing credits. + """ + effective_at: NotRequired[int] + """ + The time when the billing credits become effective-when they're eligible for use. It defaults to the current timestamp if not specified. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + The time when the billing credits expire. If not specified, the billing credits don't expire. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of key-value pairs that you can attach to an object. You can use this to store additional information about the object (for example, cost basis) in a structured format. + """ + name: NotRequired[str] + """ + A descriptive name shown in the Dashboard. + """ + priority: NotRequired[int] + """ + The desired priority for applying this credit grant. If not specified, it will be set to the default value of 50. The highest priority is 0 and the lowest is 100. + """ + + +class CreditGrantCreateParamsAmount(TypedDict): + monetary: NotRequired["CreditGrantCreateParamsAmountMonetary"] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + + +class CreditGrantCreateParamsAmountMonetary(TypedDict): + currency: str + """ + Three-letter [ISO code for the currency](https://stripe.com/docs/currencies) of the `value` parameter. + """ + value: int + """ + A positive integer representing the amount of the credit grant. + """ + + +class CreditGrantCreateParamsApplicabilityConfig(TypedDict): + scope: "CreditGrantCreateParamsApplicabilityConfigScope" + """ + Specify the scope of this applicability config. + """ + + +class CreditGrantCreateParamsApplicabilityConfigScope(TypedDict): + price_type: NotRequired[Literal["metered"]] + """ + The price type that credit grants can apply to. We currently only support the `metered` price type. Cannot be used in combination with `prices`. + """ + prices: NotRequired[ + List["CreditGrantCreateParamsApplicabilityConfigScopePrice"] + ] + """ + A list of prices that the credit grant can apply to. We currently only support the `metered` prices. Cannot be used in combination with `price_type`. + """ + + +class CreditGrantCreateParamsApplicabilityConfigScopePrice(TypedDict): + id: str + """ + The price ID this credit grant should apply to. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_expire_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_expire_params.py new file mode 100644 index 00000000..a2e4fa63 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_expire_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditGrantExpireParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_list_params.py new file mode 100644 index 00000000..bf8ab6d0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditGrantListParams(RequestOptions): + customer: NotRequired[str] + """ + Only return credit grants for this customer. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_modify_params.py new file mode 100644 index 00000000..4c02e354 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_modify_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class CreditGrantModifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired["Literal['']|int"] + """ + The time when the billing credits created by this credit grant expire. If set to empty, the billing credits never expire. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of key-value pairs you can attach to an object. You can use this to store additional information about the object (for example, cost basis) in a structured format. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_retrieve_params.py new file mode 100644 index 00000000..5c0418e6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditGrantRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_update_params.py new file mode 100644 index 00000000..fc5c4e40 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_update_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class CreditGrantUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired["Literal['']|int"] + """ + The time when the billing credits created by this credit grant expire. If set to empty, the billing credits never expire. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of key-value pairs you can attach to an object. You can use this to store additional information about the object (for example, cost basis) in a structured format. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_void_grant_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_void_grant_params.py new file mode 100644 index 00000000..9a411106 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_credit_grant_void_grant_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditGrantVoidGrantParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_create_params.py new file mode 100644 index 00000000..d1b7aeb4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_create_params.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class MeterCreateParams(RequestOptions): + customer_mapping: NotRequired["MeterCreateParamsCustomerMapping"] + """ + Fields that specify how to map a meter event to a customer. + """ + default_aggregation: "MeterCreateParamsDefaultAggregation" + """ + The default settings to aggregate a meter's events with. + """ + display_name: str + """ + The meter's name. Not visible to the customer. + """ + event_name: str + """ + The name of the meter event to record usage for. Corresponds with the `event_name` field on meter events. + """ + event_time_window: NotRequired[Literal["day", "hour"]] + """ + The time window which meter events have been pre-aggregated for, if any. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + value_settings: NotRequired["MeterCreateParamsValueSettings"] + """ + Fields that specify how to calculate a meter event's value. + """ + + +class MeterCreateParamsCustomerMapping(TypedDict): + event_payload_key: str + """ + The key in the meter event payload to use for mapping the event to a customer. + """ + type: Literal["by_id"] + """ + The method for mapping a meter event to a customer. Must be `by_id`. + """ + + +class MeterCreateParamsDefaultAggregation(TypedDict): + formula: Literal["count", "last", "sum"] + """ + Specifies how events are aggregated. Allowed values are `count` to count the number of events, `sum` to sum each event's value and `last` to take the last event's value in the window. + """ + + +class MeterCreateParamsValueSettings(TypedDict): + event_payload_key: str + """ + The key in the usage event payload to use as the value for this meter. For example, if the event payload contains usage on a `bytes_used` field, then set the event_payload_key to "bytes_used". + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_deactivate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_deactivate_params.py new file mode 100644 index 00000000..9ad26f4b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_deactivate_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class MeterDeactivateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_adjustment_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_adjustment_create_params.py new file mode 100644 index 00000000..fd7595b1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_adjustment_create_params.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class MeterEventAdjustmentCreateParams(RequestOptions): + cancel: NotRequired["MeterEventAdjustmentCreateParamsCancel"] + """ + Specifies which event to cancel. + """ + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + type: Literal["cancel"] + """ + Specifies whether to cancel a single event or a range of events for a time period. Time period cancellation is not supported yet. + """ + + +class MeterEventAdjustmentCreateParamsCancel(TypedDict): + identifier: NotRequired[str] + """ + Unique identifier for the event. You can only cancel events within 24 hours of Stripe receiving them. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_create_params.py new file mode 100644 index 00000000..6a65963e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_create_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class MeterEventCreateParams(RequestOptions): + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + identifier: NotRequired[str] + """ + A unique identifier for the event. If not provided, one is generated. We recommend using UUID-like identifiers. We will enforce uniqueness within a rolling period of at least 24 hours. The enforcement of uniqueness primarily addresses issues arising from accidental retries or other problems occurring within extremely brief time intervals. This approach helps prevent duplicate entries and ensures data integrity in high-frequency operations. + """ + payload: Dict[str, str] + """ + The payload of the event. This must contain the fields corresponding to a meter's `customer_mapping.event_payload_key` (default is `stripe_customer_id`) and `value_settings.event_payload_key` (default is `value`). Read more about the [payload](https://docs.stripe.com/billing/subscriptions/usage-based/recording-usage#payload-key-overrides). + """ + timestamp: NotRequired[int] + """ + The time of the event. Measured in seconds since the Unix epoch. Must be within the past 35 calendar days or up to 5 minutes in the future. Defaults to current timestamp if not specified. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_summary_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_summary_list_params.py new file mode 100644 index 00000000..3c5d49a6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_event_summary_list_params.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class MeterEventSummaryListParams(TypedDict): + customer: str + """ + The customer for which to fetch event summaries. + """ + end_time: int + """ + The timestamp from when to stop aggregating meter events (exclusive). Must be aligned with minute boundaries. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + start_time: int + """ + The timestamp from when to start aggregating meter events (inclusive). Must be aligned with minute boundaries. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + value_grouping_window: NotRequired[Literal["day", "hour"]] + """ + Specifies what granularity to use when generating event summaries. If not specified, a single event summary would be returned for the specified time range. For hourly granularity, start and end times must align with hour boundaries (e.g., 00:00, 01:00, ..., 23:00). For daily granularity, start and end times must align with UTC day boundaries (00:00 UTC). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_event_summaries_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_event_summaries_params.py new file mode 100644 index 00000000..ac858160 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_event_summaries_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class MeterListEventSummariesParams(RequestOptions): + customer: str + """ + The customer for which to fetch event summaries. + """ + end_time: int + """ + The timestamp from when to stop aggregating meter events (exclusive). Must be aligned with minute boundaries. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + start_time: int + """ + The timestamp from when to start aggregating meter events (inclusive). Must be aligned with minute boundaries. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + value_grouping_window: NotRequired[Literal["day", "hour"]] + """ + Specifies what granularity to use when generating event summaries. If not specified, a single event summary would be returned for the specified time range. For hourly granularity, start and end times must align with hour boundaries (e.g., 00:00, 01:00, ..., 23:00). For daily granularity, start and end times must align with UTC day boundaries (00:00 UTC). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_params.py new file mode 100644 index 00000000..4de12600 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class MeterListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["active", "inactive"]] + """ + Filter results to only include meters with the given status. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_modify_params.py new file mode 100644 index 00000000..1a6251ba --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_modify_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class MeterModifyParams(RequestOptions): + display_name: NotRequired[str] + """ + The meter's name. Not visible to the customer. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_reactivate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_reactivate_params.py new file mode 100644 index 00000000..fba5db17 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_reactivate_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class MeterReactivateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_retrieve_params.py new file mode 100644 index 00000000..0c1bb88e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class MeterRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_update_params.py new file mode 100644 index 00000000..8d8c0069 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing/_meter_update_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class MeterUpdateParams(TypedDict): + display_name: NotRequired[str] + """ + The meter's name. Not visible to the customer. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__init__.py new file mode 100644 index 00000000..1fe2f4e0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__init__.py @@ -0,0 +1,317 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.billing_portal._configuration_create_params import ( + ConfigurationCreateParams as ConfigurationCreateParams, + ConfigurationCreateParamsBusinessProfile as ConfigurationCreateParamsBusinessProfile, + ConfigurationCreateParamsFeatures as ConfigurationCreateParamsFeatures, + ConfigurationCreateParamsFeaturesCustomerUpdate as ConfigurationCreateParamsFeaturesCustomerUpdate, + ConfigurationCreateParamsFeaturesInvoiceHistory as ConfigurationCreateParamsFeaturesInvoiceHistory, + ConfigurationCreateParamsFeaturesPaymentMethodUpdate as ConfigurationCreateParamsFeaturesPaymentMethodUpdate, + ConfigurationCreateParamsFeaturesSubscriptionCancel as ConfigurationCreateParamsFeaturesSubscriptionCancel, + ConfigurationCreateParamsFeaturesSubscriptionCancelCancellationReason as ConfigurationCreateParamsFeaturesSubscriptionCancelCancellationReason, + ConfigurationCreateParamsFeaturesSubscriptionUpdate as ConfigurationCreateParamsFeaturesSubscriptionUpdate, + ConfigurationCreateParamsFeaturesSubscriptionUpdateProduct as ConfigurationCreateParamsFeaturesSubscriptionUpdateProduct, + ConfigurationCreateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity as ConfigurationCreateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity, + ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd as ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd, + ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition as ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition, + ConfigurationCreateParamsLoginPage as ConfigurationCreateParamsLoginPage, + ) + from stripe.params.billing_portal._configuration_list_params import ( + ConfigurationListParams as ConfigurationListParams, + ) + from stripe.params.billing_portal._configuration_modify_params import ( + ConfigurationModifyParams as ConfigurationModifyParams, + ConfigurationModifyParamsBusinessProfile as ConfigurationModifyParamsBusinessProfile, + ConfigurationModifyParamsFeatures as ConfigurationModifyParamsFeatures, + ConfigurationModifyParamsFeaturesCustomerUpdate as ConfigurationModifyParamsFeaturesCustomerUpdate, + ConfigurationModifyParamsFeaturesInvoiceHistory as ConfigurationModifyParamsFeaturesInvoiceHistory, + ConfigurationModifyParamsFeaturesPaymentMethodUpdate as ConfigurationModifyParamsFeaturesPaymentMethodUpdate, + ConfigurationModifyParamsFeaturesSubscriptionCancel as ConfigurationModifyParamsFeaturesSubscriptionCancel, + ConfigurationModifyParamsFeaturesSubscriptionCancelCancellationReason as ConfigurationModifyParamsFeaturesSubscriptionCancelCancellationReason, + ConfigurationModifyParamsFeaturesSubscriptionUpdate as ConfigurationModifyParamsFeaturesSubscriptionUpdate, + ConfigurationModifyParamsFeaturesSubscriptionUpdateProduct as ConfigurationModifyParamsFeaturesSubscriptionUpdateProduct, + ConfigurationModifyParamsFeaturesSubscriptionUpdateProductAdjustableQuantity as ConfigurationModifyParamsFeaturesSubscriptionUpdateProductAdjustableQuantity, + ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd as ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd, + ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition as ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition, + ConfigurationModifyParamsLoginPage as ConfigurationModifyParamsLoginPage, + ) + from stripe.params.billing_portal._configuration_retrieve_params import ( + ConfigurationRetrieveParams as ConfigurationRetrieveParams, + ) + from stripe.params.billing_portal._configuration_update_params import ( + ConfigurationUpdateParams as ConfigurationUpdateParams, + ConfigurationUpdateParamsBusinessProfile as ConfigurationUpdateParamsBusinessProfile, + ConfigurationUpdateParamsFeatures as ConfigurationUpdateParamsFeatures, + ConfigurationUpdateParamsFeaturesCustomerUpdate as ConfigurationUpdateParamsFeaturesCustomerUpdate, + ConfigurationUpdateParamsFeaturesInvoiceHistory as ConfigurationUpdateParamsFeaturesInvoiceHistory, + ConfigurationUpdateParamsFeaturesPaymentMethodUpdate as ConfigurationUpdateParamsFeaturesPaymentMethodUpdate, + ConfigurationUpdateParamsFeaturesSubscriptionCancel as ConfigurationUpdateParamsFeaturesSubscriptionCancel, + ConfigurationUpdateParamsFeaturesSubscriptionCancelCancellationReason as ConfigurationUpdateParamsFeaturesSubscriptionCancelCancellationReason, + ConfigurationUpdateParamsFeaturesSubscriptionUpdate as ConfigurationUpdateParamsFeaturesSubscriptionUpdate, + ConfigurationUpdateParamsFeaturesSubscriptionUpdateProduct as ConfigurationUpdateParamsFeaturesSubscriptionUpdateProduct, + ConfigurationUpdateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity as ConfigurationUpdateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity, + ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd as ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd, + ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition as ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition, + ConfigurationUpdateParamsLoginPage as ConfigurationUpdateParamsLoginPage, + ) + from stripe.params.billing_portal._session_create_params import ( + SessionCreateParams as SessionCreateParams, + SessionCreateParamsFlowData as SessionCreateParamsFlowData, + SessionCreateParamsFlowDataAfterCompletion as SessionCreateParamsFlowDataAfterCompletion, + SessionCreateParamsFlowDataAfterCompletionHostedConfirmation as SessionCreateParamsFlowDataAfterCompletionHostedConfirmation, + SessionCreateParamsFlowDataAfterCompletionRedirect as SessionCreateParamsFlowDataAfterCompletionRedirect, + SessionCreateParamsFlowDataSubscriptionCancel as SessionCreateParamsFlowDataSubscriptionCancel, + SessionCreateParamsFlowDataSubscriptionCancelRetention as SessionCreateParamsFlowDataSubscriptionCancelRetention, + SessionCreateParamsFlowDataSubscriptionCancelRetentionCouponOffer as SessionCreateParamsFlowDataSubscriptionCancelRetentionCouponOffer, + SessionCreateParamsFlowDataSubscriptionUpdate as SessionCreateParamsFlowDataSubscriptionUpdate, + SessionCreateParamsFlowDataSubscriptionUpdateConfirm as SessionCreateParamsFlowDataSubscriptionUpdateConfirm, + SessionCreateParamsFlowDataSubscriptionUpdateConfirmDiscount as SessionCreateParamsFlowDataSubscriptionUpdateConfirmDiscount, + SessionCreateParamsFlowDataSubscriptionUpdateConfirmItem as SessionCreateParamsFlowDataSubscriptionUpdateConfirmItem, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ConfigurationCreateParams": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsBusinessProfile": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeatures": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesCustomerUpdate": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesInvoiceHistory": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesPaymentMethodUpdate": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionCancel": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionCancelCancellationReason": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionUpdate": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionUpdateProduct": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsLoginPage": ( + "stripe.params.billing_portal._configuration_create_params", + False, + ), + "ConfigurationListParams": ( + "stripe.params.billing_portal._configuration_list_params", + False, + ), + "ConfigurationModifyParams": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsBusinessProfile": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeatures": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesCustomerUpdate": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesInvoiceHistory": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesPaymentMethodUpdate": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionCancel": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionCancelCancellationReason": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionUpdate": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionUpdateProduct": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionUpdateProductAdjustableQuantity": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsLoginPage": ( + "stripe.params.billing_portal._configuration_modify_params", + False, + ), + "ConfigurationRetrieveParams": ( + "stripe.params.billing_portal._configuration_retrieve_params", + False, + ), + "ConfigurationUpdateParams": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsBusinessProfile": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeatures": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesCustomerUpdate": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesInvoiceHistory": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesPaymentMethodUpdate": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionCancel": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionCancelCancellationReason": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionUpdate": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionUpdateProduct": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionUpdateProductAdjustableQuantity": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEnd": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsFeaturesSubscriptionUpdateScheduleAtPeriodEndCondition": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsLoginPage": ( + "stripe.params.billing_portal._configuration_update_params", + False, + ), + "SessionCreateParams": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowData": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataAfterCompletion": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataAfterCompletionHostedConfirmation": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataAfterCompletionRedirect": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionCancel": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionCancelRetention": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionCancelRetentionCouponOffer": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionUpdate": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionUpdateConfirm": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionUpdateConfirmDiscount": ( + "stripe.params.billing_portal._session_create_params", + False, + ), + "SessionCreateParamsFlowDataSubscriptionUpdateConfirmItem": ( + "stripe.params.billing_portal._session_create_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f177629669d9d57512afa50fb1ab9896a9317ebc GIT binary patch literal 6650 zcmb`L-)|Gy6~|}n%)}wTe-TK4I8J~#Au;(u$WI`4k_Ez#Y+S1DrIKZPCSj7f9_!8+ zNCFaC^#S#1r9SLSEA<7bEB=(e>}p@w(e|NgU;1W9w^Tg!oO>PP>^lAtI*5sX8)(#=({FK|G>e)R-4<||Gh_&zLqpelTC@rM3!;iV|u8Ucx6fV zvX?OSnl)4*3RQ_pYe_Bj5g)B1b@T)|LF-99Z6FP_ku=gK(nOm{Gi@O)w3W2dHqyr9 z)tK$HgLLqH#q6Xf$w}Hpy67o#ik>E?X*cPnJ*0=8A!q1Wa+aPW=V&kKrGDb4eWZ^D zNPzZ}e(tZD1N1yO&-ZK13-ltnNC(Lv4U!-oB13eT4AV>G5*;BUbd-$J5DC%CA-nbeWIGILA3BI43!; za87Yv<(%f6;hfdxAnrWp0_Qc(>zp?@7m=@IZ7%;W{72=LOv1X?uF)dDlSpJ|X=f?8 z{4ZRXLD_9IXxd^aBa91)JQ{5i7M}Y-U*8F|1UC>2XJ2 zi?cYj-N7Rdg)_F1(rtT zE9F*q?%afDt2(!Eg8QUpl8$@l_`ZwU7TlkB!qh*{#8Zyp?6@n(h!#yg(s3y+I%_&J zENwZZx%dA+aUhCj;7xJ^M+UrOZ5pYy_$HP@*CDGru!_XG|3y*UwKQX6r)W_W9x7cF zg_cJYMKP0-MN!P5WKk4zC|?xCyvi0uWlm*_qFk7wMNyek@uH~8w`@^V7Oi|y96QcY zMNt^Auqb*C6~(&lFhhTwdm#LxFmlbM*wdo$Q0c-bv^=6PikXxwjA9NY3!|7r`NAmX zRkkoHb1GXH<-&;L?%}6JWlqHlqblFBg;80w@`Z8iI7bymVZe`t(crd6;eF@lZ%92w z#1+$evJ`jX?of$?iyMy4A{I@XI)7r#S8jXLvK?LHWy&ajn{dY~_g>dEgX!=pFjB&& z$Qqui${hLzyl3H~c=33C5i66nQujADbXM_9#hr5}D?Fnx&*jlAbps01amZ`Qu#;9M z<+#(wIp-}$r%b{3bkFXL4UIOfkEVGq9ZeXfX{0t|`0gGzM`Ovtcl212zof^6?Fv&N z1j8>;=0nsW@ROC*BN`Bmh$cicq6N{4XhXCEU=CNSnS%+hOZgdehyYbx1m!PP`4F8r zk&}on#3{sSL^q-baRzY~aSqXo@FV&V0RUXYTs0TLa*wzCEc!)|sxBnMKUeZ025>Ux z5f=~_5rc>zVhAyexP%x%j3Ppa%ZM=mT*yS}3$aBv`uSQI#|RUMNyHVz6yho%sIY0= zpFzwb<`DCMqzpLNYGB6;|My=2zLx4F2Y$u&Ov0P;Tlj0obNRW)K`XvJlV9f|Joi5H zFwZk@RB~`_i=*CW(rfU+Eh_a(4lY@~4ZtduB?s3m-(Kf_zm%UyPrYAAPvoF{FQ~Zn zv4aoUc$(o^-P%pvi8~H+eXIJ;GGi8Vn-*bgBr=Z9$H5x6CKac;t2%K8)^3Ag$Lvf3 zRvvtSxT^TI@oN3BePE$S@c9|qOg#-P>Grl`r9(F@M>j{pmbDGl7z)Re+j>e1J=Rl? zL#B}krFY;%GBq(eHXgDKM;}Rp0eoB7A#v|QqC!K5t2q>l87aew#YWRRa9y$7b;M%q zGnmO3q|tr=J1?ZHr@pTL$Ntg3IN$Y8e%IiCx$@PWA3Fnop8CFX=;g`}%{_0r&VJSS z&-U&&Ehpc!bnGkMj;5^SZEX7QzkO26sdthL?rr|>+XCM<1hQTjeXy|`eAyk8{!|~7 zzUf%--U}|dbt1KJK_auQ&Q2PekNy;zI6m@hhBsFx zd>qJ+`}ufCQs&_Jf|?!X<8euuh4H+ao#5kHNx36~a8FjVb6g3_d6S6DmD`{!qEQ5l zR)w|>S`@Vhphbm7K)Z|Deb62XEdkoEQTq*ONuh0l76fTn&29^YfpQKMznZm$vI~kI z6iCFLP{N*rRJ@IN#JoVsC1X`6>!9S)5fuvgs5}%(0+d`zl0w-6C6|aWd|n<3Edg3CFG-D88x;xxC6||nLP>y<%S%!yTcG6gvMn^| z;|Er@PJgVLW>V2^zcJ>`FGad3D5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40a3feb27b0856ed7f8a35b0426adb902baf2045 GIT binary patch literal 6117 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 T2_H~)#_*>5Q{PJ{gi-znMhn!k literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e778528d411d8d7c5236bd1352dfe5afde85b92 GIT binary patch literal 908 zcmYk4y>AmS6u|AA?{aMuprR#(wt{{v8QK$ctvZxSFrb1!ELkik=cHDB=d0~h&B9c6 zwuX%r@ux6FS&*epOl*}(87cEU-)cdBpzu0Q_`DxvZV9 z>pd$jKn!BYK>}M4I=#XxiP!RS-Qy_nTRsF8@B+l>9K=3_-@GEc6%2xA^_Mf6(A;@T zPx@5p*O_J_RhFPvOld3U4uy7yOwzbhgckcG54iqd?F&Fb3&x;Tc@L;Z(L>9qAH!WM zXB-J8q%tMdf=#$LfB+3M&quD7n zb(+R3?cp}<3Q0{s&oYw6W|k=&(=O?AZG6rWrp+CtiPX-QbTyTS%^4G7oRWlMY-TY| zMBL|2uVH-BC%ib3?p+LO3&G7@j7gdbo!6qQr>C@($T@f{)nCE2Rl)6fbR-fQ_0qHG zfU09HvgoDIlyB_|acut|?UT;2Ejv1;>1o7SJIV(7NTfU4PoG7KX}XnJ2hyV|viVs? zqb%<^YBSDV{h5%O@CbMQzZ=Z$<>10|I~&NVEhXPVtEkLwAHk1WV~9qz)iGMVs#N^& zDgXquTlyt(SCuWq2^Uw>Cy=C8;$&snOi>7%i7%@yQo& zw6Hlwn>mpW$`THnRnsVX*~YRMNi2$)ly2Zmpa+?4t+>qj!oc)Q(^R>^&0nEtY0)Lk tGdHYu8}1hGwkMaZ3GJs=>~`fr2yX%acP>HW5;T7YOE4U!H^7QK`X98|^kM)2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/billing_portal/__pycache__/_configuration_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd02d6e77d1d21d154f5f199337dbee51a0d5508 GIT binary patch literal 6195 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 (import_target, is_submodule) +_import_map = { + "SessionCreateParams": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsAdaptivePricing": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsAfterExpiration": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsAfterExpirationRecovery": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsAutomaticTax": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsAutomaticTaxLiability": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsBrandingSettings": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsBrandingSettingsIcon": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsBrandingSettingsLogo": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsConsentCollection": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsConsentCollectionPaymentMethodReuseAgreement": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomField": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomFieldDropdown": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomFieldDropdownOption": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomFieldLabel": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomFieldNumeric": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomFieldText": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomText": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomTextAfterSubmit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomTextShippingAddress": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomTextSubmit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomTextTermsOfServiceAcceptance": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsCustomerUpdate": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsDiscount": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsInvoiceCreation": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsInvoiceCreationInvoiceData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsInvoiceCreationInvoiceDataCustomField": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsInvoiceCreationInvoiceDataIssuer": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsInvoiceCreationInvoiceDataRenderingOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsLineItem": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsLineItemAdjustableQuantity": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsLineItemPriceData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsLineItemPriceDataProductData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsLineItemPriceDataRecurring": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsNameCollection": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsNameCollectionBusiness": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsNameCollectionIndividual": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsOptionalItem": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsOptionalItemAdjustableQuantity": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentIntentData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentIntentDataShipping": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentIntentDataShippingAddress": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentIntentDataTransferData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAffirm": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAfterpayClearpay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAlipay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAlma": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsAuBecsDebit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsBancontact": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsBillie": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsBoleto": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCard": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCardRestrictions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCashapp": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCustomerBalance": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsDemoPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsEps": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsFpx": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsGiropay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsGrabpay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsIdeal": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKakaoPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKlarna": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKonbini": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsKrCard": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsLink": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsMobilepay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsMultibanco": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsNaverPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsOxxo": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsP24": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsPayByBank": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsPayco": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsPaynow": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsPaypal": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsPix": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsRevolutPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSamsungPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSatispay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSofort": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsSwish": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsTwint": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPaymentMethodOptionsWechatPay": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPermissions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsPhoneNumberCollection": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSavedPaymentMethodOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSetupIntentData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingAddressCollection": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOption": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimate": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateDataFixedAmount": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataBillingMode": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataBillingModeFlexible": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataInvoiceSettings": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataInvoiceSettingsIssuer": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataTransferData": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataTrialSettings": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsSubscriptionDataTrialSettingsEndBehavior": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsTaxIdCollection": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsWalletOptions": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionCreateParamsWalletOptionsLink": ( + "stripe.params.checkout._session_create_params", + False, + ), + "SessionExpireParams": ( + "stripe.params.checkout._session_expire_params", + False, + ), + "SessionLineItemListParams": ( + "stripe.params.checkout._session_line_item_list_params", + False, + ), + "SessionListLineItemsParams": ( + "stripe.params.checkout._session_list_line_items_params", + False, + ), + "SessionListParams": ( + "stripe.params.checkout._session_list_params", + False, + ), + "SessionListParamsCreated": ( + "stripe.params.checkout._session_list_params", + False, + ), + "SessionListParamsCustomerDetails": ( + "stripe.params.checkout._session_list_params", + False, + ), + "SessionModifyParams": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsCollectedInformation": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsCollectedInformationShippingDetails": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsCollectedInformationShippingDetailsAddress": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOption": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateData": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimate": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateDataFixedAmount": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionModifyParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params.checkout._session_modify_params", + False, + ), + "SessionRetrieveParams": ( + "stripe.params.checkout._session_retrieve_params", + False, + ), + "SessionUpdateParams": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsCollectedInformation": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsCollectedInformationShippingDetails": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsCollectedInformationShippingDetailsAddress": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOption": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateData": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimate": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateDataFixedAmount": ( + "stripe.params.checkout._session_update_params", + False, + ), + "SessionUpdateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params.checkout._session_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0f7731e1f704b20c5310132fb76ac88de8836d4 GIT binary patch literal 14715 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 UcGXWc4Z+rO5I>oJkN3_01L8#+y8r+H literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d94caa4d16dd16216d768b83ce5e4041de8033d GIT binary patch literal 47348 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

w9r0l&@vTqw@AQ;a#*G%|;*PGsz@VzXkOOsjpkt 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 R-CWb$Ja^!GbYrtO`2SCchzI}x literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4125f0c7364db59c2d806662df0c631d7ffa6bfd GIT binary patch literal 645 zcmXw1y>1jS5FYQ}E#Z=YK%78S5zQ4j3(`g@A`lcPAWk&fSj+9`Zgso%X6=h^sgq~O z@d$`Vp+YohrBqaOk&aNLV!Tc)dFC6BXTF)Szi)1C04@FRNj_!(zpZh*!W*zYAaD*D zWUPRaC5&0@6<+Bleuw=cD8nRV;K6Iif>X#sWZ!%jpF~YG?ESIEkhNPM@OXjRysJ#E zq^6VLZLSUJyGP1cXI^7AaiLD$7PwTYQZG_7zmD$m-*TzD~v_v7=4IxUEEeebKLL4vB!g*@je;tr$eQoM? zTZmLjWzw#2A-=+zd~p4l&s2$gDwq5v>bX%Bf1?Z*yN626b2;UQ>12*F<0mLjc#(hN zRbysK?v0+m;5s+BThWDdikcHmULmi#a`|M2letJL`IYW(HSkN(cjVCT~F!noePy=a>sIG&NH-CGFd9;3FCZX?rFRJQB>?#7bcL9S782*g{7OzHEK&p%W E58VH((EtDd literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_line_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_line_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c845363f4e2807354ffb911b0937ea4f40fdeb0b GIT binary patch literal 767 zcmX|9y>AmS6u0ku*Q8DON>N)XA=Gxs&{}+msbZ)q0a6qp3d=3lHTRlWx$|AmPL-?( zBu2J|tt;YBVT!UKFAPjh)!0mi+gCe+XfEA3Rh zh0_7gA=1@%qYR=$-cg;>rj&CB=rS<+IRX^m2nEi21TK&b!+{s!eREbV^sS1?|FB!{i z(c0xgeM6T9qU#T|mnJ~FVn`1`_EnnESE+({_aIICCNez;JAIQRJp*w@V}4Atk?N)5 z>E7cfRB{EonRyU)K~fWtXF#)}GTP}ur=JcKWwNZE#io2_EE0pHV&%KNY?LpVL<(Vn zY#H$h{cJoO%SmHhOQrnu6tp!_K`ywYRn^Us6VD3M>NEDQ28*8~8V0F9pV*3zRC+X8c zI@&0G{zR(NHPK2`snQ`4Qcz{QzQdBo-+bd4&y441t2Ie*>3@sakARThRvE8w1g^Ib zoRO5IG$#d(DYe+ky~2~pAjH2O-by1AmBsr7&!=2x{2q6Wg^Fo zc<+vHj2Qop8T$s7>4)v8THFJzF)f?XPA1@ufkMAaR8r`w1tQJFA>W4ssi2DBv`j== zg?UzFrkc?vQO4Sn0|RQe-K?6Ni=+U~t4Yoanf7vvr#V0FCAqUG+v3XCMpgGXPlS*r zsoTQ2!rwqsCd@Z-jgZ`aWJj_9b|_BSOVC{-OZHkC$k(=|?BdI8JLz;WNp=F_gyq>j zEBoe1ijDQ>FPP2@td)2nIRwq{!K?&U)|Ii&5p=q;XBgM6e4bQc(*UP?Y zU?#O_BG5Z1K9gUw%jbG9yD|(`t~@VnUPYv}a2}lReVrIgKN|+m#_aU`7d@C-8U{;a z=F!s&e=xT?3|4DK&5pzGwj0&FOLLtoH!@thnNfBis>t+9tlIVIfm1k~8W8peb=_K* y?n4{2jy#9xwz=s(V@oZdN^$EaD6V`;=}koF#wD4*B<;V^ecHTOz9D$j-v0q;a@&0X literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ec736718074c4ae8f8fd25a0c3d1a4358f746df GIT binary patch literal 1816 zcmai!&2Jk;6u@V{cm0)=q{K-|>LwMEC6X2N&>WgpYEw~Fl|iIjEWv8yojNP;S7*jm z7I6daxz*fyMf@pTviO2V0uG$GMT*OzC*JIOOrph@1v5W3Z{P2+Ua@r{r{_TDf57}X!l)~Gs4IVou;NLpz_9Acw_vn@ zU~Nj2l6dNrXeF8X=rf`hZ0c#uxG^Q>jFj=MIZ~M;)fq9pnus)wR-f@QT0@X@p}oj2 z9bif!T_RJTyTlFYH&^D+J%U|^y>I=9aidpExY-+07KfPd*8GC0X&*D!4=7(OeI0K~ z>NxWJsP7!&Co#cX$H$2qd0Y$p&}Y1nxM_$Z=D?0H@LD+!{Aj=%l(~e7)$S8`S9oBv z7l%oJ8RiBA%3oKF6C80JT-lKF8XX?e9`WpS^#7tllrt^3@T|mbS*~R!Qp3kvcl~(aLI@V|BBnwUrZ^RoBPrdPy#~ zUMSh}^|5-rBug8kUiRMWtLA+mx^ddt%bK^d+MTg_=YQ6cR(Z*b`}HxH-|Sah^rGfT zvkoZ9e;r(sSqINnsd<-ZZJjsgD}34oa-VUf4}~WOpacwe+By+^N7jT`7edq#*%0E2 z5Lbn032{w`ty0_sg+2fQPiHQj+{?`7SZ$Wcs9Zid$gI_|x>^!z`5ivRCL;dD32TDo z?SvJnO69gfYGCFX4xxiPZSCz#eE`-A?<1DwYafC_#SHFKZG87IKX-8^K|Ad#Un$Cb z$05b1+lh;BH&MWW>nu&6Yl>#OR7@Ov3||EC#iDuZ70ETgz372FoB0vmO!F)AR?+3R z$u>Ak@Ta>V&J;btZJ{aFMG^IcooGsRsVUcG z{w&!_Q?0AbWIfr`>Y6Adg!ctg{*z!TMEqO|)~csCssfrM+6YZ^R0A{>Lo*yr1Dc7U zS&n7_&Bf3hNArNr#LzrPX91myp)(vU09uTpvm8AK=zI*FV#n57> zR9^lH4K0f-|A>6tCZ7MWysOcBZ`k@xIk+SNXWw5~T@vu&fE)%B0th8^_KBv{U7blq?q*XLGvx=u0lnFJd< z7EVAFzI|5RcblZT=NwhHhQGL&791zE>9unuUYFkgMt&YF% zI@c>}?^Hc-^|clZF!qR7g;lKp=dBoy_PnozV?s*pS1mAj8WOZBoB`|`zCi2$7`y)5167e5BYLkM_USRH5^Q|-jz)9t(rJ#jlt5zbk3zGTq( znd-=8h2oK7>;Ip%o2E&@=PYT2ii|N?gH%A)fVq(PP&WkCv5v9<4=5zT)D!?z&$vclL3 zIws^Ay$V~I481a9C~ENMp#roPSGr!Wc&RU6il|w-JkZ{SC}fooNsW-C$*~Ym^T5rNv-GDh zoo&7`xm(1x4hil2%JVHKn1s!lA)>=YA%L=`<+W_1!wVO?^~UeGV;vE5vx%pPWq0vG zH~16H!={fVmLf+DyY0b7SjuuDHPd#y7HL?!7F$oW`+KpiVC^yT>|h>9x%?GB77 zj*posbuV|lzu)d2eOBq^%YC_gI-$Gw^2&B^rPeDv?8^@$9A;eV?bua`yb5iBBjIVbt)H*ip(Vt-xG%_l-R|88zF+k=1NB zS+W@_Kfscf6D}DjHM$IYopc}WpBwQAE4m3B!tHHGD^7{&@;|FB-p6#W3r8IKPpLLQ5s9Fry;%u%P=)a zI81A_DJ4#$!|uOv(8to)?QoUwLyFBt%bwo!&t#-~u#e!1$TJd8P&_S75QY1tD30OJ z+W-L>2^@Goa^_6o`F5mZrpiL^Ap6lPNzCntuO%s!el00@g;wASo`uVHKr}8nMzjO~ z{-)%PF{0I=?uWT!RQu^em`k@&;4OyU1OXp7lZp7$Y;N(i9LyI&@h|xEu7KcioSQwh z8H)JXKlOvxv_<89C1%huA zziNVS9K4b9>ny*o@!JKj7d-3m(?@w|bGLCz#{K!Nb}RVG`z8GlmV*CU2p%2*aF-~4 ztqS7xFN6zU2l0N1!#t)w_ptD&}%#ZZ7|_;%3owFE6E_P>(; BB&`4d literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/__pycache__/_session_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34209ca75c405f34d6c1d339963d534174e46877 GIT binary patch literal 649 zcmXw1KW`H;6o0;dIZE1s1VkXFisgpJDqX7%6%q_6pjKUOv5wqRa>|{3wVfy@F~VnP z_y~xP!h~4RNu8M3Dupt1!ak>#{NC^R{eREjx3{;z9QE&6aZUh!TjB168?Zh$;1Y7k zNeLB639;BKy~jOjB;{hc;h90`}ho% zG6_ym%K{hpK9gCc+6b3*#`96qYh%WERv}~U7Gssj=cUDc#xCYr=`_+#Kn8}izS6SY zWh~=d=&UQ9v9GW;I=KBvr=mhS;Y<1o)l7?;z7ZPB{SzT(1)tE9Y&=7r(*^PcEsGDd zZuC^}!{Nb8stS$!wK2#hsHjO()JW^DTsofOcqZnWGUeJ~a?=lU7Q?!cJzJzDvAODr zA)nz_f3ONxXJ799=2QQG7U|{ZXZmzg-AQ?HquRP3U|FfbOOVr zMsA0y++e!IJ2q$+`GG;V@sS(lv3z7i^P@mLH{{wUgxo|x4zFNv1z(fQBkjI2XN5VZoTowvFo)QcoP(nVX(9~-X)eI zl_9lV8STl^w3jpHdbwcoci97)KXd@sf!TMo5yc{ z-#2gG8|rU`LRNyu|99E`%ZeoZ17G4tjg+IZEJ>eBmSo9})RgOTGgVK?_?~iuEW%`QgQjkA96tKJ)|jgSS9D z;(C(?Cd_F*eJ9xp*?Kr-`t4o2)w124`z@UK5uf!V!0-g(*D7hQ8-{B(sbTP}VKhCf z?Vz4Fj8EI96V@;dEax+ZVY;pt2rGQUU<6SG7Ir8dfhv9dw7TmxX?4dvsBTh!FYsE` z+g?DOOYeE!9;~DKp4r%=u2tQq?tay=A6HwQVApfsS-*Ux>cduFYC!{Yhx%0*)o#&h zOK@9l?9#@b*AA+NA2M&W1@%T)zuxMw3@kv1G${TrKzt?*PG1=4mtQNXGun}qQngoF zO4VO!QenAEy4x=@z5LleIr}OVqBG@}<*U8oyM6L*3@x1<=+~kDQldXwh-aGaeXCIY zP2Sg0DuiLg;8&+?*))%dw{a6T-*)`OHd-N4J5<>Wu4)#=917eqRzh(Kg;?_5eMhloglHnxq$@f*15R+)V`Qh-7p% zzBa|n;`0-RL0%X|K?YRu%ir1~?*9OqZ$j|prLhqV49GQh0Tw*zdT%3!;vW3`3J9Qe zezoiO=Fj!XxtN-j^8@`SaQs$Igc8Oa#DkXI}x6a1F|@T3QWZCb~x!WNSoje zZ!!MwL4eC(9=Zz-vYc=b$Yb-1eXY@GKo*v7XXji%uipp1pqV;4uK;93}PxZY?pM%_k--+g1JPlU0X(I{bx zgDYY@?D0+iL`1p`>j|U&6q{>6> zApglLMJ_y)Un@!``&v=)3a!EwJP()ckZ2rojA)!3pDD3pjA$*)`%&yTzGl{-FWW+a zw-|O61bpC32I6D0g~iiiuowu%SMc*MfDnFMm_4=`lK9Es8QO&%Yn2k$AQQkx4-=e< zZ>6~qG3Y@+UHpLb!xSJEg5NFSS4D)xklwT`>?*ZQ^a zJMO1!8`{A?50d`^1Z;>b|3{PL)xS&Ed(!oxc1qT}m7xU1a9xx2FYKWN#jvEy`j?*! zB`AiA%d-C0J3|SI;ngg($qXeZhUK@Q4d_q|Z^=bjACSUOfpT~js>O?FHuf?HWBq6- PK{0$gtoWA#rQq$qWfBf2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_create_params.py new file mode 100644 index 00000000..73bd78a2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_create_params.py @@ -0,0 +1,2890 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SessionCreateParams(RequestOptions): + adaptive_pricing: NotRequired["SessionCreateParamsAdaptivePricing"] + """ + Settings for price localization with [Adaptive Pricing](https://docs.stripe.com/payments/checkout/adaptive-pricing). + """ + after_expiration: NotRequired["SessionCreateParamsAfterExpiration"] + """ + Configure actions after a Checkout Session has expired. + """ + allow_promotion_codes: NotRequired[bool] + """ + Enables user redeemable promotion codes. + """ + automatic_tax: NotRequired["SessionCreateParamsAutomaticTax"] + """ + Settings for automatic tax lookup for this session and resulting payments, invoices, and subscriptions. + """ + billing_address_collection: NotRequired[Literal["auto", "required"]] + """ + Specify whether Checkout should collect the customer's billing address. Defaults to `auto`. + """ + branding_settings: NotRequired["SessionCreateParamsBrandingSettings"] + """ + The branding settings for the Checkout Session. This parameter is not allowed if ui_mode is `custom`. + """ + cancel_url: NotRequired[str] + """ + If set, Checkout displays a back button and customers will be directed to this URL if they decide to cancel payment and return to your website. This parameter is not allowed if ui_mode is `embedded` or `custom`. + """ + client_reference_id: NotRequired[str] + """ + A unique string to reference the Checkout Session. This can be a + customer ID, a cart ID, or similar, and can be used to reconcile the + session with your internal systems. + """ + consent_collection: NotRequired["SessionCreateParamsConsentCollection"] + """ + Configure fields for the Checkout Session to gather active consent from customers. + """ + currency: NotRequired[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). Required in `setup` mode when `payment_method_types` is not set. + """ + custom_fields: NotRequired[List["SessionCreateParamsCustomField"]] + """ + Collect additional information from your customer using custom fields. Up to 3 fields are supported. + """ + custom_text: NotRequired["SessionCreateParamsCustomText"] + """ + Display additional text for your customers using custom text. + """ + customer: NotRequired[str] + """ + ID of an existing Customer, if one exists. In `payment` mode, the customer's most recently saved card + payment method will be used to prefill the email, name, card details, and billing address + on the Checkout page. In `subscription` mode, the customer's [default payment method](https://stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method) + will be used if it's a card, otherwise the most recently saved card will be used. A valid billing address, billing name and billing email are required on the payment method for Checkout to prefill the customer's card details. + + If the Customer already has a valid [email](https://stripe.com/docs/api/customers/object#customer_object-email) set, the email will be prefilled and not editable in Checkout. + If the Customer does not have a valid `email`, Checkout will set the email entered during the session on the Customer. + + If blank for Checkout Sessions in `subscription` mode or with `customer_creation` set as `always` in `payment` mode, Checkout will create a new Customer object based on information provided during the payment flow. + + You can set [`payment_intent_data.setup_future_usage`](https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-payment_intent_data-setup_future_usage) to have Checkout automatically attach the payment method to the Customer you pass in for future reuse. + """ + customer_creation: NotRequired[Literal["always", "if_required"]] + """ + Configure whether a Checkout Session creates a [Customer](https://stripe.com/docs/api/customers) during Session confirmation. + + When a Customer is not created, you can still retrieve email, address, and other customer data entered in Checkout + with [customer_details](https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-customer_details). + + Sessions that don't create Customers instead are grouped by [guest customers](https://stripe.com/docs/payments/checkout/guest-customers) + in the Dashboard. Promotion codes limited to first time customers will return invalid for these Sessions. + + Can only be set in `payment` and `setup` mode. + """ + customer_email: NotRequired[str] + """ + If provided, this value will be used when the Customer object is created. + If not provided, customers will be asked to enter their email address. + Use this parameter to prefill customer data if you already have an email + on file. To access information about the customer once a session is + complete, use the `customer` field. + """ + customer_update: NotRequired["SessionCreateParamsCustomerUpdate"] + """ + Controls what fields on Customer can be updated by the Checkout Session. Can only be provided when `customer` is provided. + """ + discounts: NotRequired[List["SessionCreateParamsDiscount"]] + """ + The coupon or promotion code to apply to this Session. Currently, only up to one may be specified. + """ + excluded_payment_method_types: NotRequired[ + List[ + Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + A list of the types of payment methods (e.g., `card`) that should be excluded from this Checkout Session. This should only be used when payment methods for this Checkout Session are managed through the [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + The Epoch time in seconds at which the Checkout Session will expire. It can be anywhere from 30 minutes to 24 hours after Checkout Session creation. By default, this value is 24 hours from creation. + """ + invoice_creation: NotRequired["SessionCreateParamsInvoiceCreation"] + """ + Generate a post-purchase Invoice for one-time payments. + """ + line_items: NotRequired[List["SessionCreateParamsLineItem"]] + """ + A list of items the customer is purchasing. Use this parameter to pass one-time or recurring [Prices](https://stripe.com/docs/api/prices). The parameter is required for `payment` and `subscription` mode. + + For `payment` mode, there is a maximum of 100 line items, however it is recommended to consolidate line items if there are more than a few dozen. + + For `subscription` mode, there is a maximum of 20 line items with recurring Prices and 20 line items with one-time Prices. Line items with one-time Prices will be on the initial invoice only. + """ + locale: NotRequired[ + Literal[ + "auto", + "bg", + "cs", + "da", + "de", + "el", + "en", + "en-GB", + "es", + "es-419", + "et", + "fi", + "fil", + "fr", + "fr-CA", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "lv", + "ms", + "mt", + "nb", + "nl", + "pl", + "pt", + "pt-BR", + "ro", + "ru", + "sk", + "sl", + "sv", + "th", + "tr", + "vi", + "zh", + "zh-HK", + "zh-TW", + ] + ] + """ + The IETF language tag of the locale Checkout is displayed in. If blank or `auto`, the browser's locale is used. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mode: NotRequired[Literal["payment", "setup", "subscription"]] + """ + The mode of the Checkout Session. Pass `subscription` if the Checkout Session includes at least one recurring item. + """ + name_collection: NotRequired["SessionCreateParamsNameCollection"] + """ + Controls name collection settings for the session. + + You can configure Checkout to collect your customers' business names, individual names, or both. Each name field can be either required or optional. + + If a [Customer](https://stripe.com/docs/api/customers) is created or provided, the names can be saved to the Customer object as well. + """ + optional_items: NotRequired[List["SessionCreateParamsOptionalItem"]] + """ + A list of optional items the customer can add to their order at checkout. Use this parameter to pass one-time or recurring [Prices](https://stripe.com/docs/api/prices). + + There is a maximum of 10 optional items allowed on a Checkout Session, and the existing limits on the number of line items allowed on a Checkout Session apply to the combined number of line items and optional items. + + For `payment` mode, there is a maximum of 100 combined line items and optional items, however it is recommended to consolidate items if there are more than a few dozen. + + For `subscription` mode, there is a maximum of 20 line items and optional items with recurring Prices and 20 line items and optional items with one-time Prices. + """ + origin_context: NotRequired[Literal["mobile_app", "web"]] + """ + Where the user is coming from. This informs the optimizations that are applied to the session. + """ + payment_intent_data: NotRequired["SessionCreateParamsPaymentIntentData"] + """ + A subset of parameters to be passed to PaymentIntent creation for Checkout Sessions in `payment` mode. + """ + payment_method_collection: NotRequired[Literal["always", "if_required"]] + """ + Specify whether Checkout should collect a payment method. When set to `if_required`, Checkout will not collect a payment method when the total due for the session is 0. + This may occur if the Checkout Session includes a free trial or a discount. + + Can only be set in `subscription` mode. Defaults to `always`. + + If you'd like information on how to collect a payment method outside of Checkout, read the guide on configuring [subscriptions with a free trial](https://stripe.com/docs/payments/checkout/free-trials). + """ + payment_method_configuration: NotRequired[str] + """ + The ID of the payment method configuration to use with this Checkout session. + """ + payment_method_data: NotRequired["SessionCreateParamsPaymentMethodData"] + """ + This parameter allows you to set some attributes on the payment method created during a Checkout session. + """ + payment_method_options: NotRequired[ + "SessionCreateParamsPaymentMethodOptions" + ] + """ + Payment-method-specific configuration. + """ + payment_method_types: NotRequired[ + List[ + Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + A list of the types of payment methods (e.g., `card`) this Checkout Session can accept. + + You can omit this attribute to manage your payment methods from the [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods). + See [Dynamic Payment Methods](https://stripe.com/docs/payments/payment-methods/integration-options#using-dynamic-payment-methods) for more details. + + Read more about the supported payment methods and their requirements in our [payment + method details guide](https://docs.stripe.com/docs/payments/checkout/payment-methods). + + If multiple payment methods are passed, Checkout will dynamically reorder them to + prioritize the most relevant payment methods based on the customer's location and + other characteristics. + """ + permissions: NotRequired["SessionCreateParamsPermissions"] + """ + This property is used to set up permissions for various actions (e.g., update) on the CheckoutSession object. Can only be set when creating `embedded` or `custom` sessions. + + For specific permissions, please refer to their dedicated subsections, such as `permissions.update_shipping_details`. + """ + phone_number_collection: NotRequired[ + "SessionCreateParamsPhoneNumberCollection" + ] + """ + Controls phone number collection settings for the session. + + We recommend that you review your privacy policy and check with your legal contacts + before using this feature. Learn more about [collecting phone numbers with Checkout](https://stripe.com/docs/payments/checkout/phone-numbers). + """ + redirect_on_completion: NotRequired[ + Literal["always", "if_required", "never"] + ] + """ + This parameter applies to `ui_mode: embedded`. Learn more about the [redirect behavior](https://stripe.com/docs/payments/checkout/custom-success-page?payment-ui=embedded-form) of embedded sessions. Defaults to `always`. + """ + return_url: NotRequired[str] + """ + The URL to redirect your customer back to after they authenticate or cancel their payment on the + payment method's app or site. This parameter is required if `ui_mode` is `embedded` or `custom` + and redirect-based payment methods are enabled on the session. + """ + saved_payment_method_options: NotRequired[ + "SessionCreateParamsSavedPaymentMethodOptions" + ] + """ + Controls saved payment method settings for the session. Only available in `payment` and `subscription` mode. + """ + setup_intent_data: NotRequired["SessionCreateParamsSetupIntentData"] + """ + A subset of parameters to be passed to SetupIntent creation for Checkout Sessions in `setup` mode. + """ + shipping_address_collection: NotRequired[ + "SessionCreateParamsShippingAddressCollection" + ] + """ + When set, provides configuration for Checkout to collect a shipping address from a customer. + """ + shipping_options: NotRequired[List["SessionCreateParamsShippingOption"]] + """ + The shipping rate options to apply to this Session. Up to a maximum of 5. + """ + submit_type: NotRequired[ + Literal["auto", "book", "donate", "pay", "subscribe"] + ] + """ + Describes the type of transaction being performed by Checkout in order + to customize relevant text on the page, such as the submit button. + `submit_type` can only be specified on Checkout Sessions in + `payment` or `subscription` mode. If blank or `auto`, `pay` is used. + """ + subscription_data: NotRequired["SessionCreateParamsSubscriptionData"] + """ + A subset of parameters to be passed to subscription creation for Checkout Sessions in `subscription` mode. + """ + success_url: NotRequired[str] + """ + The URL to which Stripe should send customers when payment or setup + is complete. + This parameter is not allowed if ui_mode is `embedded` or `custom`. If you'd like to use + information from the successful Checkout Session on your page, read the + guide on [customizing your success page](https://stripe.com/docs/payments/checkout/custom-success-page). + """ + tax_id_collection: NotRequired["SessionCreateParamsTaxIdCollection"] + """ + Controls tax ID collection during checkout. + """ + ui_mode: NotRequired[Literal["custom", "embedded", "hosted"]] + """ + The UI mode of the Session. Defaults to `hosted`. + """ + wallet_options: NotRequired["SessionCreateParamsWalletOptions"] + """ + Wallet-specific configuration. + """ + + +class SessionCreateParamsAdaptivePricing(TypedDict): + enabled: NotRequired[bool] + """ + If set to `true`, Adaptive Pricing is available on [eligible sessions](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing?payment-ui=stripe-hosted#restrictions). Defaults to your [dashboard setting](https://dashboard.stripe.com/settings/adaptive-pricing). + """ + + +class SessionCreateParamsAfterExpiration(TypedDict): + recovery: NotRequired["SessionCreateParamsAfterExpirationRecovery"] + """ + Configure a Checkout Session that can be used to recover an expired session. + """ + + +class SessionCreateParamsAfterExpirationRecovery(TypedDict): + allow_promotion_codes: NotRequired[bool] + """ + Enables user redeemable promotion codes on the recovered Checkout Sessions. Defaults to `false` + """ + enabled: bool + """ + If `true`, a recovery URL will be generated to recover this Checkout Session if it + expires before a successful transaction is completed. It will be attached to the + Checkout Session object upon expiration. + """ + + +class SessionCreateParamsAutomaticTax(TypedDict): + enabled: bool + """ + Set to `true` to [calculate tax automatically](https://docs.stripe.com/tax) using the customer's location. + + Enabling this parameter causes Checkout to collect any billing address information necessary for tax calculation. + """ + liability: NotRequired["SessionCreateParamsAutomaticTaxLiability"] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + + +class SessionCreateParamsAutomaticTaxLiability(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SessionCreateParamsBrandingSettings(TypedDict): + background_color: NotRequired["Literal['']|str"] + """ + A hex color value starting with `#` representing the background color for the Checkout Session. + """ + border_style: NotRequired[ + "Literal['']|Literal['pill', 'rectangular', 'rounded']" + ] + """ + The border style for the Checkout Session. + """ + button_color: NotRequired["Literal['']|str"] + """ + A hex color value starting with `#` representing the button color for the Checkout Session. + """ + display_name: NotRequired[str] + """ + A string to override the business name shown on the Checkout Session. This only shows at the top of the Checkout page, and your business name still appears in terms, receipts, and other places. + """ + font_family: NotRequired[ + "Literal['']|Literal['be_vietnam_pro', 'bitter', 'chakra_petch', 'default', 'hahmlet', 'inconsolata', 'inter', 'lato', 'lora', 'm_plus_1_code', 'montserrat', 'noto_sans', 'noto_sans_jp', 'noto_serif', 'nunito', 'open_sans', 'pridi', 'pt_sans', 'pt_serif', 'raleway', 'roboto', 'roboto_slab', 'source_sans_pro', 'titillium_web', 'ubuntu_mono', 'zen_maru_gothic']" + ] + """ + The font family for the Checkout Session corresponding to one of the [supported font families](https://docs.stripe.com/payments/checkout/customization/appearance?payment-ui=stripe-hosted#font-compatibility). + """ + icon: NotRequired["SessionCreateParamsBrandingSettingsIcon"] + """ + The icon for the Checkout Session. For best results, use a square image. + """ + logo: NotRequired["SessionCreateParamsBrandingSettingsLogo"] + """ + The logo for the Checkout Session. + """ + + +class SessionCreateParamsBrandingSettingsIcon(TypedDict): + file: NotRequired[str] + """ + The ID of a [File upload](https://stripe.com/docs/api/files) representing the icon. Purpose must be `business_icon`. Required if `type` is `file` and disallowed otherwise. + """ + type: Literal["file", "url"] + """ + The type of image for the icon. Must be one of `file` or `url`. + """ + url: NotRequired[str] + """ + The URL of the image. Required if `type` is `url` and disallowed otherwise. + """ + + +class SessionCreateParamsBrandingSettingsLogo(TypedDict): + file: NotRequired[str] + """ + The ID of a [File upload](https://stripe.com/docs/api/files) representing the logo. Purpose must be `business_logo`. Required if `type` is `file` and disallowed otherwise. + """ + type: Literal["file", "url"] + """ + The type of image for the logo. Must be one of `file` or `url`. + """ + url: NotRequired[str] + """ + The URL of the image. Required if `type` is `url` and disallowed otherwise. + """ + + +class SessionCreateParamsConsentCollection(TypedDict): + payment_method_reuse_agreement: NotRequired[ + "SessionCreateParamsConsentCollectionPaymentMethodReuseAgreement" + ] + """ + Determines the display of payment method reuse agreement text in the UI. If set to `hidden`, it will hide legal text related to the reuse of a payment method. + """ + promotions: NotRequired[Literal["auto", "none"]] + """ + If set to `auto`, enables the collection of customer consent for promotional communications. The Checkout + Session will determine whether to display an option to opt into promotional communication + from the merchant depending on the customer's locale. Only available to US merchants. + """ + terms_of_service: NotRequired[Literal["none", "required"]] + """ + If set to `required`, it requires customers to check a terms of service checkbox before being able to pay. + There must be a valid terms of service URL set in your [Dashboard settings](https://dashboard.stripe.com/settings/public). + """ + + +class SessionCreateParamsConsentCollectionPaymentMethodReuseAgreement( + TypedDict, +): + position: Literal["auto", "hidden"] + """ + Determines the position and visibility of the payment method reuse agreement in the UI. When set to `auto`, Stripe's + defaults will be used. When set to `hidden`, the payment method reuse agreement text will always be hidden in the UI. + """ + + +class SessionCreateParamsCustomField(TypedDict): + dropdown: NotRequired["SessionCreateParamsCustomFieldDropdown"] + """ + Configuration for `type=dropdown` fields. + """ + key: str + """ + String of your choice that your integration can use to reconcile this field. Must be unique to this field, alphanumeric, and up to 200 characters. + """ + label: "SessionCreateParamsCustomFieldLabel" + """ + The label for the field, displayed to the customer. + """ + numeric: NotRequired["SessionCreateParamsCustomFieldNumeric"] + """ + Configuration for `type=numeric` fields. + """ + optional: NotRequired[bool] + """ + Whether the customer is required to complete the field before completing the Checkout Session. Defaults to `false`. + """ + text: NotRequired["SessionCreateParamsCustomFieldText"] + """ + Configuration for `type=text` fields. + """ + type: Literal["dropdown", "numeric", "text"] + """ + The type of the field. + """ + + +class SessionCreateParamsCustomFieldDropdown(TypedDict): + default_value: NotRequired[str] + """ + The value that will pre-fill the field on the payment page.Must match a `value` in the `options` array. + """ + options: List["SessionCreateParamsCustomFieldDropdownOption"] + """ + The options available for the customer to select. Up to 200 options allowed. + """ + + +class SessionCreateParamsCustomFieldDropdownOption(TypedDict): + label: str + """ + The label for the option, displayed to the customer. Up to 100 characters. + """ + value: str + """ + The value for this option, not displayed to the customer, used by your integration to reconcile the option selected by the customer. Must be unique to this option, alphanumeric, and up to 100 characters. + """ + + +class SessionCreateParamsCustomFieldLabel(TypedDict): + custom: str + """ + Custom text for the label, displayed to the customer. Up to 50 characters. + """ + type: Literal["custom"] + """ + The type of the label. + """ + + +class SessionCreateParamsCustomFieldNumeric(TypedDict): + default_value: NotRequired[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: NotRequired[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: NotRequired[int] + """ + The minimum character length requirement for the customer's input. + """ + + +class SessionCreateParamsCustomFieldText(TypedDict): + default_value: NotRequired[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: NotRequired[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: NotRequired[int] + """ + The minimum character length requirement for the customer's input. + """ + + +class SessionCreateParamsCustomText(TypedDict): + after_submit: NotRequired[ + "Literal['']|SessionCreateParamsCustomTextAfterSubmit" + ] + """ + Custom text that should be displayed after the payment confirmation button. + """ + shipping_address: NotRequired[ + "Literal['']|SessionCreateParamsCustomTextShippingAddress" + ] + """ + Custom text that should be displayed alongside shipping address collection. + """ + submit: NotRequired["Literal['']|SessionCreateParamsCustomTextSubmit"] + """ + Custom text that should be displayed alongside the payment confirmation button. + """ + terms_of_service_acceptance: NotRequired[ + "Literal['']|SessionCreateParamsCustomTextTermsOfServiceAcceptance" + ] + """ + Custom text that should be displayed in place of the default terms of service agreement text. + """ + + +class SessionCreateParamsCustomTextAfterSubmit(TypedDict): + message: str + """ + Text may be up to 1200 characters in length. + """ + + +class SessionCreateParamsCustomTextShippingAddress(TypedDict): + message: str + """ + Text may be up to 1200 characters in length. + """ + + +class SessionCreateParamsCustomTextSubmit(TypedDict): + message: str + """ + Text may be up to 1200 characters in length. + """ + + +class SessionCreateParamsCustomTextTermsOfServiceAcceptance(TypedDict): + message: str + """ + Text may be up to 1200 characters in length. + """ + + +class SessionCreateParamsCustomerUpdate(TypedDict): + address: NotRequired[Literal["auto", "never"]] + """ + Describes whether Checkout saves the billing address onto `customer.address`. + To always collect a full billing address, use `billing_address_collection`. Defaults to `never`. + """ + name: NotRequired[Literal["auto", "never"]] + """ + Describes whether Checkout saves the name onto `customer.name`. Defaults to `never`. + """ + shipping: NotRequired[Literal["auto", "never"]] + """ + Describes whether Checkout saves shipping information onto `customer.shipping`. + To collect shipping information, use `shipping_address_collection`. Defaults to `never`. + """ + + +class SessionCreateParamsDiscount(TypedDict): + coupon: NotRequired[str] + """ + The ID of the coupon to apply to this Session. + """ + promotion_code: NotRequired[str] + """ + The ID of a promotion code to apply to this Session. + """ + + +class SessionCreateParamsInvoiceCreation(TypedDict): + enabled: bool + """ + Set to `true` to enable invoice creation. + """ + invoice_data: NotRequired["SessionCreateParamsInvoiceCreationInvoiceData"] + """ + Parameters passed when creating invoices for payment-mode Checkout Sessions. + """ + + +class SessionCreateParamsInvoiceCreationInvoiceData(TypedDict): + account_tax_ids: NotRequired["Literal['']|List[str]"] + """ + The account tax IDs associated with the invoice. + """ + custom_fields: NotRequired[ + "Literal['']|List[SessionCreateParamsInvoiceCreationInvoiceDataCustomField]" + ] + """ + Default custom fields to be displayed on invoices for this customer. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + footer: NotRequired[str] + """ + Default footer to be displayed on invoices for this customer. + """ + issuer: NotRequired["SessionCreateParamsInvoiceCreationInvoiceDataIssuer"] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + rendering_options: NotRequired[ + "Literal['']|SessionCreateParamsInvoiceCreationInvoiceDataRenderingOptions" + ] + """ + Default options for invoice PDF rendering for this customer. + """ + + +class SessionCreateParamsInvoiceCreationInvoiceDataCustomField(TypedDict): + name: str + """ + The name of the custom field. This may be up to 40 characters. + """ + value: str + """ + The value of the custom field. This may be up to 140 characters. + """ + + +class SessionCreateParamsInvoiceCreationInvoiceDataIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SessionCreateParamsInvoiceCreationInvoiceDataRenderingOptions(TypedDict): + amount_tax_display: NotRequired[ + "Literal['']|Literal['exclude_tax', 'include_inclusive_tax']" + ] + """ + How line-item prices and amounts will be displayed with respect to tax on invoice PDFs. One of `exclude_tax` or `include_inclusive_tax`. `include_inclusive_tax` will include inclusive tax (and exclude exclusive tax) in invoice PDF amounts. `exclude_tax` will exclude all tax (inclusive and exclusive alike) from invoice PDF amounts. + """ + template: NotRequired[str] + """ + ID of the invoice rendering template to use for this invoice. + """ + + +class SessionCreateParamsLineItem(TypedDict): + adjustable_quantity: NotRequired[ + "SessionCreateParamsLineItemAdjustableQuantity" + ] + """ + When set, provides configuration for this item's quantity to be adjusted by the customer during Checkout. + """ + dynamic_tax_rates: NotRequired[List[str]] + """ + The [tax rates](https://stripe.com/docs/api/tax_rates) that will be applied to this line item depending on the customer's billing/shipping address. We currently support the following countries: US, GB, AU, and all countries in the EU. + """ + price: NotRequired[str] + """ + The ID of the [Price](https://stripe.com/docs/api/prices) or [Plan](https://stripe.com/docs/api/plans) object. One of `price` or `price_data` is required. + """ + price_data: NotRequired["SessionCreateParamsLineItemPriceData"] + """ + Data used to generate a new [Price](https://stripe.com/docs/api/prices) object inline. One of `price` or `price_data` is required. + """ + quantity: NotRequired[int] + """ + The quantity of the line item being purchased. Quantity should not be defined when `recurring.usage_type=metered`. + """ + tax_rates: NotRequired[List[str]] + """ + The [tax rates](https://stripe.com/docs/api/tax_rates) which apply to this line item. + """ + + +class SessionCreateParamsLineItemAdjustableQuantity(TypedDict): + enabled: bool + """ + Set to true if the quantity can be adjusted to any non-negative integer. + """ + maximum: NotRequired[int] + """ + The maximum quantity the customer can purchase for the Checkout Session. By default this value is 99. You can specify a value up to 999999. + """ + minimum: NotRequired[int] + """ + The minimum quantity the customer must purchase for the Checkout Session. By default this value is 0. + """ + + +class SessionCreateParamsLineItemPriceData(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + product: NotRequired[str] + """ + The ID of the [Product](https://docs.stripe.com/api/products) that this [Price](https://docs.stripe.com/api/prices) will belong to. One of `product` or `product_data` is required. + """ + product_data: NotRequired[ + "SessionCreateParamsLineItemPriceDataProductData" + ] + """ + Data used to generate a new [Product](https://docs.stripe.com/api/products) object inline. One of `product` or `product_data` is required. + """ + recurring: NotRequired["SessionCreateParamsLineItemPriceDataRecurring"] + """ + The recurring components of a price such as `interval` and `interval_count`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + unit_amount: NotRequired[int] + """ + A non-negative integer in cents (or local equivalent) representing how much to charge. One of `unit_amount` or `unit_amount_decimal` is required. + """ + unit_amount_decimal: NotRequired[str] + """ + Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set. + """ + + +class SessionCreateParamsLineItemPriceDataProductData(TypedDict): + description: NotRequired[str] + """ + The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. + """ + images: NotRequired[List[str]] + """ + A list of up to 8 URLs of images for this product, meant to be displayable to the customer. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: str + """ + The product's name, meant to be displayable to the customer. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + unit_label: NotRequired[str] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. + """ + + +class SessionCreateParamsLineItemPriceDataRecurring(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Specifies billing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: NotRequired[int] + """ + The number of intervals between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of three years interval allowed (3 years, 36 months, or 156 weeks). + """ + + +class SessionCreateParamsNameCollection(TypedDict): + business: NotRequired["SessionCreateParamsNameCollectionBusiness"] + """ + Controls settings applied for collecting the customer's business name on the session. + """ + individual: NotRequired["SessionCreateParamsNameCollectionIndividual"] + """ + Controls settings applied for collecting the customer's individual name on the session. + """ + + +class SessionCreateParamsNameCollectionBusiness(TypedDict): + enabled: bool + """ + Enable business name collection on the Checkout Session. Defaults to `false`. + """ + optional: NotRequired[bool] + """ + Whether the customer is required to provide a business name before completing the Checkout Session. Defaults to `false`. + """ + + +class SessionCreateParamsNameCollectionIndividual(TypedDict): + enabled: bool + """ + Enable individual name collection on the Checkout Session. Defaults to `false`. + """ + optional: NotRequired[bool] + """ + Whether the customer is required to provide their name before completing the Checkout Session. Defaults to `false`. + """ + + +class SessionCreateParamsOptionalItem(TypedDict): + adjustable_quantity: NotRequired[ + "SessionCreateParamsOptionalItemAdjustableQuantity" + ] + """ + When set, provides configuration for the customer to adjust the quantity of the line item created when a customer chooses to add this optional item to their order. + """ + price: str + """ + The ID of the [Price](https://stripe.com/docs/api/prices) or [Plan](https://stripe.com/docs/api/plans) object. + """ + quantity: int + """ + The initial quantity of the line item created when a customer chooses to add this optional item to their order. + """ + + +class SessionCreateParamsOptionalItemAdjustableQuantity(TypedDict): + enabled: bool + """ + Set to true if the quantity can be adjusted to any non-negative integer. + """ + maximum: NotRequired[int] + """ + The maximum quantity of this item the customer can purchase. By default this value is 99. You can specify a value up to 999999. + """ + minimum: NotRequired[int] + """ + The minimum quantity of this item the customer must purchase, if they choose to purchase it. Because this item is optional, the customer will always be able to remove it from their order, even if the `minimum` configured here is greater than 0. By default this value is 0. + """ + + +class SessionCreateParamsPaymentIntentData(TypedDict): + application_fee_amount: NotRequired[int] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total amount captured. For more information, see the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts). + """ + capture_method: NotRequired[ + Literal["automatic", "automatic_async", "manual"] + ] + """ + Controls when the funds will be captured from the customer's account. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The Stripe account ID for which these funds are intended. For details, + see the PaymentIntents [use case for connected + accounts](https://docs.stripe.com/docs/payments/connected-accounts). + """ + receipt_email: NotRequired[str] + """ + Email address that the receipt for the resulting payment will be sent to. If `receipt_email` is specified for a payment in live mode, a receipt will be sent regardless of your [email settings](https://dashboard.stripe.com/account/emails). + """ + setup_future_usage: NotRequired[Literal["off_session", "on_session"]] + """ + Indicates that you intend to [make future payments](https://stripe.com/docs/payments/payment-intents#future-usage) with the payment + method collected by this Checkout Session. + + When setting this to `on_session`, Checkout will show a notice to the + customer that their payment details will be saved. + + When setting this to `off_session`, Checkout will show a notice to the + customer that their payment details will be saved and used for future + payments. + + If a Customer has been provided or Checkout creates a new Customer, + Checkout will attach the payment method to the Customer. + + If Checkout does not create a Customer, the payment method is not attached + to a Customer. To reuse the payment method, you can retrieve it from the + Checkout Session's PaymentIntent. + + When processing card payments, Checkout also uses `setup_future_usage` + to dynamically optimize your payment flow and comply with regional + legislation and network rules, such as SCA. + """ + shipping: NotRequired["SessionCreateParamsPaymentIntentDataShipping"] + """ + Shipping information for this payment. + """ + statement_descriptor: NotRequired[str] + """ + Text that appears on the customer's statement as the statement descriptor for a non-card charge. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). + + Setting this value for a card charge returns an error. For card charges, set the [statement_descriptor_suffix](https://docs.stripe.com/get-started/account/statement-descriptors#dynamic) instead. + """ + statement_descriptor_suffix: NotRequired[str] + """ + Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement. + """ + transfer_data: NotRequired[ + "SessionCreateParamsPaymentIntentDataTransferData" + ] + """ + The parameters used to automatically create a Transfer when the payment succeeds. + For more information, see the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts). + """ + transfer_group: NotRequired[str] + """ + A string that identifies the resulting payment as part of a group. See the PaymentIntents [use case for connected accounts](https://stripe.com/docs/connect/separate-charges-and-transfers) for details. + """ + + +class SessionCreateParamsPaymentIntentDataShipping(TypedDict): + address: "SessionCreateParamsPaymentIntentDataShippingAddress" + """ + Shipping address. + """ + carrier: NotRequired[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: str + """ + Recipient name. + """ + phone: NotRequired[str] + """ + Recipient phone (including extension). + """ + tracking_number: NotRequired[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + + +class SessionCreateParamsPaymentIntentDataShippingAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SessionCreateParamsPaymentIntentDataTransferData(TypedDict): + amount: NotRequired[int] + """ + The amount that will be transferred automatically when a charge succeeds. + """ + destination: str + """ + If specified, successful charges will be attributed to the destination + account for tax reporting, and the funds from charges will be transferred + to the destination account. The ID of the resulting transfer will be + returned on the successful charge's `transfer` field. + """ + + +class SessionCreateParamsPaymentMethodData(TypedDict): + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + Allow redisplay will be set on the payment method on confirmation and indicates whether this payment method can be shown again to the customer in a checkout flow. Only set this field if you wish to override the allow_redisplay value determined by Checkout. + """ + + +class SessionCreateParamsPaymentMethodOptions(TypedDict): + acss_debit: NotRequired["SessionCreateParamsPaymentMethodOptionsAcssDebit"] + """ + contains details about the ACSS Debit payment method options. + """ + affirm: NotRequired["SessionCreateParamsPaymentMethodOptionsAffirm"] + """ + contains details about the Affirm payment method options. + """ + afterpay_clearpay: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsAfterpayClearpay" + ] + """ + contains details about the Afterpay Clearpay payment method options. + """ + alipay: NotRequired["SessionCreateParamsPaymentMethodOptionsAlipay"] + """ + contains details about the Alipay payment method options. + """ + alma: NotRequired["SessionCreateParamsPaymentMethodOptionsAlma"] + """ + contains details about the Alma payment method options. + """ + amazon_pay: NotRequired["SessionCreateParamsPaymentMethodOptionsAmazonPay"] + """ + contains details about the AmazonPay payment method options. + """ + au_becs_debit: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsAuBecsDebit" + ] + """ + contains details about the AU Becs Debit payment method options. + """ + bacs_debit: NotRequired["SessionCreateParamsPaymentMethodOptionsBacsDebit"] + """ + contains details about the Bacs Debit payment method options. + """ + bancontact: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsBancontact" + ] + """ + contains details about the Bancontact payment method options. + """ + billie: NotRequired["SessionCreateParamsPaymentMethodOptionsBillie"] + """ + contains details about the Billie payment method options. + """ + boleto: NotRequired["SessionCreateParamsPaymentMethodOptionsBoleto"] + """ + contains details about the Boleto payment method options. + """ + card: NotRequired["SessionCreateParamsPaymentMethodOptionsCard"] + """ + contains details about the Card payment method options. + """ + cashapp: NotRequired["SessionCreateParamsPaymentMethodOptionsCashapp"] + """ + contains details about the Cashapp Pay payment method options. + """ + customer_balance: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsCustomerBalance" + ] + """ + contains details about the Customer Balance payment method options. + """ + demo_pay: NotRequired["SessionCreateParamsPaymentMethodOptionsDemoPay"] + """ + contains details about the DemoPay payment method options. + """ + eps: NotRequired["SessionCreateParamsPaymentMethodOptionsEps"] + """ + contains details about the EPS payment method options. + """ + fpx: NotRequired["SessionCreateParamsPaymentMethodOptionsFpx"] + """ + contains details about the FPX payment method options. + """ + giropay: NotRequired["SessionCreateParamsPaymentMethodOptionsGiropay"] + """ + contains details about the Giropay payment method options. + """ + grabpay: NotRequired["SessionCreateParamsPaymentMethodOptionsGrabpay"] + """ + contains details about the Grabpay payment method options. + """ + ideal: NotRequired["SessionCreateParamsPaymentMethodOptionsIdeal"] + """ + contains details about the Ideal payment method options. + """ + kakao_pay: NotRequired["SessionCreateParamsPaymentMethodOptionsKakaoPay"] + """ + contains details about the Kakao Pay payment method options. + """ + klarna: NotRequired["SessionCreateParamsPaymentMethodOptionsKlarna"] + """ + contains details about the Klarna payment method options. + """ + konbini: NotRequired["SessionCreateParamsPaymentMethodOptionsKonbini"] + """ + contains details about the Konbini payment method options. + """ + kr_card: NotRequired["SessionCreateParamsPaymentMethodOptionsKrCard"] + """ + contains details about the Korean card payment method options. + """ + link: NotRequired["SessionCreateParamsPaymentMethodOptionsLink"] + """ + contains details about the Link payment method options. + """ + mobilepay: NotRequired["SessionCreateParamsPaymentMethodOptionsMobilepay"] + """ + contains details about the Mobilepay payment method options. + """ + multibanco: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsMultibanco" + ] + """ + contains details about the Multibanco payment method options. + """ + naver_pay: NotRequired["SessionCreateParamsPaymentMethodOptionsNaverPay"] + """ + contains details about the Naver Pay payment method options. + """ + oxxo: NotRequired["SessionCreateParamsPaymentMethodOptionsOxxo"] + """ + contains details about the OXXO payment method options. + """ + p24: NotRequired["SessionCreateParamsPaymentMethodOptionsP24"] + """ + contains details about the P24 payment method options. + """ + pay_by_bank: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsPayByBank" + ] + """ + contains details about the Pay By Bank payment method options. + """ + payco: NotRequired["SessionCreateParamsPaymentMethodOptionsPayco"] + """ + contains details about the PAYCO payment method options. + """ + paynow: NotRequired["SessionCreateParamsPaymentMethodOptionsPaynow"] + """ + contains details about the PayNow payment method options. + """ + paypal: NotRequired["SessionCreateParamsPaymentMethodOptionsPaypal"] + """ + contains details about the PayPal payment method options. + """ + pix: NotRequired["SessionCreateParamsPaymentMethodOptionsPix"] + """ + contains details about the Pix payment method options. + """ + revolut_pay: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsRevolutPay" + ] + """ + contains details about the RevolutPay payment method options. + """ + samsung_pay: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsSamsungPay" + ] + """ + contains details about the Samsung Pay payment method options. + """ + satispay: NotRequired["SessionCreateParamsPaymentMethodOptionsSatispay"] + """ + contains details about the Satispay payment method options. + """ + sepa_debit: NotRequired["SessionCreateParamsPaymentMethodOptionsSepaDebit"] + """ + contains details about the Sepa Debit payment method options. + """ + sofort: NotRequired["SessionCreateParamsPaymentMethodOptionsSofort"] + """ + contains details about the Sofort payment method options. + """ + swish: NotRequired["SessionCreateParamsPaymentMethodOptionsSwish"] + """ + contains details about the Swish payment method options. + """ + twint: NotRequired["SessionCreateParamsPaymentMethodOptionsTwint"] + """ + contains details about the TWINT payment method options. + """ + us_bank_account: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsUsBankAccount" + ] + """ + contains details about the Us Bank Account payment method options. + """ + wechat_pay: NotRequired["SessionCreateParamsPaymentMethodOptionsWechatPay"] + """ + contains details about the WeChat Pay payment method options. + """ + + +class SessionCreateParamsPaymentMethodOptionsAcssDebit(TypedDict): + currency: NotRequired[Literal["cad", "usd"]] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). This is only accepted for Checkout Sessions in `setup` mode. + """ + mandate_options: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsAcssDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: NotRequired[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: NotRequired[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Verification method for the intent + """ + + +class SessionCreateParamsPaymentMethodOptionsAcssDebitMandateOptions( + TypedDict +): + custom_mandate_url: NotRequired["Literal['']|str"] + """ + A URL for custom mandate text to render during confirmation step. + The URL will be rendered with additional GET parameters `payment_intent` and `payment_intent_client_secret` when confirming a Payment Intent, + or `setup_intent` and `setup_intent_client_secret` when confirming a Setup Intent. + """ + default_for: NotRequired[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. Only usable in `setup` mode. + """ + interval_description: NotRequired[str] + """ + Description of the mandate interval. Only required if 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: NotRequired[Literal["combined", "interval", "sporadic"]] + """ + Payment schedule for the mandate. + """ + transaction_type: NotRequired[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + +class SessionCreateParamsPaymentMethodOptionsAffirm(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsAfterpayClearpay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsAlipay(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsAlma(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + +class SessionCreateParamsPaymentMethodOptionsAmazonPay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsAuBecsDebit(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: NotRequired[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + +class SessionCreateParamsPaymentMethodOptionsBacsDebit(TypedDict): + mandate_options: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsBacsDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: NotRequired[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + +class SessionCreateParamsPaymentMethodOptionsBacsDebitMandateOptions( + TypedDict +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + +class SessionCreateParamsPaymentMethodOptionsBancontact(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsBillie(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + +class SessionCreateParamsPaymentMethodOptionsBoleto(TypedDict): + expires_after_days: NotRequired[int] + """ + The number of calendar days before a Boleto voucher expires. For example, if you create a Boleto voucher on Monday and you set expires_after_days to 2, the Boleto invoice will expire on Wednesday at 23:59 America/Sao_Paulo time. + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsCard(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + installments: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsCardInstallments" + ] + """ + Installment options for card payments + """ + request_extended_authorization: NotRequired[ + Literal["if_available", "never"] + ] + """ + Request ability to [capture beyond the standard authorization validity window](https://docs.stripe.com/payments/extended-authorization) for this CheckoutSession. + """ + request_incremental_authorization: NotRequired[ + Literal["if_available", "never"] + ] + """ + Request ability to [increment the authorization](https://docs.stripe.com/payments/incremental-authorization) for this CheckoutSession. + """ + request_multicapture: NotRequired[Literal["if_available", "never"]] + """ + Request ability to make [multiple captures](https://docs.stripe.com/payments/multicapture) for this CheckoutSession. + """ + request_overcapture: NotRequired[Literal["if_available", "never"]] + """ + Request ability to [overcapture](https://docs.stripe.com/payments/overcapture) for this CheckoutSession. + """ + request_three_d_secure: NotRequired[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + restrictions: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsCardRestrictions" + ] + """ + Restrictions to apply to the card payment method. For example, you can block specific card brands. + """ + setup_future_usage: NotRequired[Literal["off_session", "on_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + statement_descriptor_suffix_kana: NotRequired[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kana prefix (shortened Kana descriptor) or Kana statement descriptor that's set on the account to form the complete statement descriptor. Maximum 22 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 22 characters. + """ + statement_descriptor_suffix_kanji: NotRequired[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kanji prefix (shortened Kanji descriptor) or Kanji statement descriptor that's set on the account to form the complete statement descriptor. Maximum 17 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 17 characters. + """ + + +class SessionCreateParamsPaymentMethodOptionsCardInstallments(TypedDict): + enabled: NotRequired[bool] + """ + Setting to true enables installments for this Checkout Session. + Setting to false will prevent any installment plan from applying to a payment. + """ + + +class SessionCreateParamsPaymentMethodOptionsCardRestrictions(TypedDict): + brands_blocked: NotRequired[ + List[ + Literal[ + "american_express", + "discover_global_network", + "mastercard", + "visa", + ] + ] + ] + """ + Specify the card brands to block in the Checkout Session. If a customer enters or selects a card belonging to a blocked brand, they can't complete the Session. + """ + + +class SessionCreateParamsPaymentMethodOptionsCashapp(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsCustomerBalance(TypedDict): + bank_transfer: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer" + ] + """ + Configuration for the bank transfer funding type, if the `funding_type` is set to `bank_transfer`. + """ + funding_type: NotRequired[Literal["bank_transfer"]] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer( + TypedDict, +): + eu_bank_transfer: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer" + ] + """ + Configuration for eu_bank_transfer funding type. + """ + requested_address_types: NotRequired[ + List[ + Literal[ + "aba", "iban", "sepa", "sort_code", "spei", "swift", "zengin" + ] + ] + ] + """ + List of address types that should be returned in the financial_addresses response. If not specified, all valid types will be returned. + + Permitted values include: `sort_code`, `zengin`, `iban`, or `spei`. + """ + type: Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + """ + The list of bank transfer types that this PaymentIntent is allowed to use for funding. + """ + + +class SessionCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer( + TypedDict, +): + country: str + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + +class SessionCreateParamsPaymentMethodOptionsDemoPay(TypedDict): + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsEps(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsFpx(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsGiropay(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsGrabpay(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsIdeal(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsKakaoPay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsKlarna(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + subscriptions: NotRequired[ + "Literal['']|List[SessionCreateParamsPaymentMethodOptionsKlarnaSubscription]" + ] + """ + Subscription details if the Checkout Session sets up a future subscription. + """ + + +class SessionCreateParamsPaymentMethodOptionsKlarnaSubscription(TypedDict): + interval: Literal["day", "month", "week", "year"] + """ + Unit of time between subscription charges. + """ + interval_count: NotRequired[int] + """ + The number of intervals (specified in the `interval` attribute) between subscription charges. For example, `interval=month` and `interval_count=3` charges every 3 months. + """ + name: NotRequired[str] + """ + Name for subscription. + """ + next_billing: ( + "SessionCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling" + ) + """ + Describes the upcoming charge for this subscription. + """ + reference: str + """ + A non-customer-facing reference to correlate subscription charges in the Klarna app. Use a value that persists across subscription charges. + """ + + +class SessionCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling( + TypedDict, +): + amount: int + """ + The amount of the next charge for the subscription. + """ + date: str + """ + The date of the next charge for the subscription in YYYY-MM-DD format. + """ + + +class SessionCreateParamsPaymentMethodOptionsKonbini(TypedDict): + expires_after_days: NotRequired[int] + """ + The number of calendar days (between 1 and 60) after which Konbini payment instructions will expire. For example, if a PaymentIntent is confirmed with Konbini and `expires_after_days` set to 2 on Monday JST, the instructions will expire on Wednesday 23:59:59 JST. Defaults to 3 days. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsKrCard(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsLink(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsMobilepay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsMultibanco(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsNaverPay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsOxxo(TypedDict): + expires_after_days: NotRequired[int] + """ + The number of calendar days before an OXXO voucher expires. For example, if you create an OXXO voucher on Monday and you set expires_after_days to 2, the OXXO invoice will expire on Wednesday at 23:59 America/Mexico_City time. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsP24(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + tos_shown_and_accepted: NotRequired[bool] + """ + Confirm that the payer has accepted the P24 terms and conditions. + """ + + +class SessionCreateParamsPaymentMethodOptionsPayByBank(TypedDict): + pass + + +class SessionCreateParamsPaymentMethodOptionsPayco(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + +class SessionCreateParamsPaymentMethodOptionsPaynow(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsPaypal(TypedDict): + capture_method: NotRequired["Literal['']|Literal['manual']"] + """ + Controls when the funds will be captured from the customer's account. + """ + preferred_locale: NotRequired[ + Literal[ + "cs-CZ", + "da-DK", + "de-AT", + "de-DE", + "de-LU", + "el-GR", + "en-GB", + "en-US", + "es-ES", + "fi-FI", + "fr-BE", + "fr-FR", + "fr-LU", + "hu-HU", + "it-IT", + "nl-BE", + "nl-NL", + "pl-PL", + "pt-PT", + "sk-SK", + "sv-SE", + ] + ] + """ + [Preferred locale](https://stripe.com/docs/payments/paypal/supported-locales) of the PayPal checkout page that the customer is redirected to. + """ + reference: NotRequired[str] + """ + A reference of the PayPal transaction visible to customer which is mapped to PayPal's invoice ID. This must be a globally unique ID if you have configured in your PayPal settings to block multiple payments per invoice ID. + """ + risk_correlation_id: NotRequired[str] + """ + The risk correlation ID for an on-session payment using a saved PayPal payment method. + """ + setup_future_usage: NotRequired[ + "Literal['']|Literal['none', 'off_session']" + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + + If you've already set `setup_future_usage` and you're performing a request using a publishable key, you can only update the value from `on_session` to `off_session`. + """ + + +class SessionCreateParamsPaymentMethodOptionsPix(TypedDict): + amount_includes_iof: NotRequired[Literal["always", "never"]] + """ + Determines if the amount includes the IOF tax. Defaults to `never`. + """ + expires_after_seconds: NotRequired[int] + """ + The number of seconds (between 10 and 1209600) after which Pix payment will expire. Defaults to 86400 seconds. + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsRevolutPay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: NotRequired[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsSamsungPay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + +class SessionCreateParamsPaymentMethodOptionsSatispay(TypedDict): + capture_method: NotRequired[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + +class SessionCreateParamsPaymentMethodOptionsSepaDebit(TypedDict): + mandate_options: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsSepaDebitMandateOptions" + ] + """ + Additional fields for Mandate creation + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: NotRequired[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + +class SessionCreateParamsPaymentMethodOptionsSepaDebitMandateOptions( + TypedDict +): + reference_prefix: NotRequired["Literal['']|str"] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + +class SessionCreateParamsPaymentMethodOptionsSofort(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsSwish(TypedDict): + reference: NotRequired[str] + """ + The order reference that will be displayed to customers in the Swish application. Defaults to the `id` of the Payment Intent. + """ + + +class SessionCreateParamsPaymentMethodOptionsTwint(TypedDict): + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPaymentMethodOptionsUsBankAccount(TypedDict): + financial_connections: NotRequired[ + "SessionCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections" + ] + """ + Additional fields for Financial Connections Session creation + """ + setup_future_usage: NotRequired[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: NotRequired[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: NotRequired[Literal["automatic", "instant"]] + """ + Verification method for the intent + """ + + +class SessionCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections( + TypedDict, +): + permissions: NotRequired[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions to request. If this parameter is passed, the `payment_method` permission must be included. Valid permissions include: `balances`, `ownership`, `payment_method`, and `transactions`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + + +class SessionCreateParamsPaymentMethodOptionsWechatPay(TypedDict): + app_id: NotRequired[str] + """ + The app ID registered with WeChat Pay. Only required when client is ios or android. + """ + client: Literal["android", "ios", "web"] + """ + The client type that the end customer will pay from + """ + setup_future_usage: NotRequired[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + +class SessionCreateParamsPermissions(TypedDict): + update_shipping_details: NotRequired[Literal["client_only", "server_only"]] + """ + Determines which entity is allowed to update the shipping details. + + Default is `client_only`. Stripe Checkout client will automatically update the shipping details. If set to `server_only`, only your server is allowed to update the shipping details. + + When set to `server_only`, you must add the onShippingDetailsChange event handler when initializing the Stripe Checkout client and manually update the shipping details from your server using the Stripe API. + """ + + +class SessionCreateParamsPhoneNumberCollection(TypedDict): + enabled: bool + """ + Set to `true` to enable phone number collection. + + Can only be set in `payment` and `subscription` mode. + """ + + +class SessionCreateParamsSavedPaymentMethodOptions(TypedDict): + allow_redisplay_filters: NotRequired[ + List[Literal["always", "limited", "unspecified"]] + ] + """ + Uses the `allow_redisplay` value of each saved payment method to filter the set presented to a returning customer. By default, only saved payment methods with 'allow_redisplay: ‘always' are shown in Checkout. + """ + payment_method_remove: NotRequired[Literal["disabled", "enabled"]] + """ + Enable customers to choose if they wish to remove their saved payment methods. Disabled by default. + """ + payment_method_save: NotRequired[Literal["disabled", "enabled"]] + """ + Enable customers to choose if they wish to save their payment method for future use. Disabled by default. + """ + + +class SessionCreateParamsSetupIntentData(TypedDict): + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The Stripe account for which the setup is intended. + """ + + +class SessionCreateParamsShippingAddressCollection(TypedDict): + allowed_countries: List[ + Literal[ + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CV", + "CW", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MK", + "ML", + "MM", + "MN", + "MO", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + "ZZ", + ] + ] + """ + An array of two-letter ISO country codes representing which countries Checkout should provide as options for + shipping locations. + """ + + +class SessionCreateParamsShippingOption(TypedDict): + shipping_rate: NotRequired[str] + """ + The ID of the Shipping Rate to use for this shipping option. + """ + shipping_rate_data: NotRequired[ + "SessionCreateParamsShippingOptionShippingRateData" + ] + """ + Parameters to be passed to Shipping Rate creation for this shipping option. + """ + + +class SessionCreateParamsShippingOptionShippingRateData(TypedDict): + delivery_estimate: NotRequired[ + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimate" + ] + """ + The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + display_name: str + """ + The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + fixed_amount: NotRequired[ + "SessionCreateParamsShippingOptionShippingRateDataFixedAmount" + ] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. The Shipping tax code is `txcd_92010001`. + """ + type: NotRequired[Literal["fixed_amount"]] + """ + The type of calculation to use on the shipping rate. + """ + + +class SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimate( + TypedDict, +): + maximum: NotRequired[ + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum" + ] + """ + The upper bound of the estimated range. If empty, represents no upper bound i.e., infinite. + """ + minimum: NotRequired[ + "SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum" + ] + """ + The lower bound of the estimated range. If empty, represents no lower bound. + """ + + +class SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionCreateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionCreateParamsShippingOptionShippingRateDataFixedAmount(TypedDict): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[ + str, + "SessionCreateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions", + ] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class SessionCreateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions( + TypedDict, +): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + + +class SessionCreateParamsSubscriptionData(TypedDict): + application_fee_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. To use an application fee percent, the request must be made on behalf of another account, using the `Stripe-Account` header or an OAuth key. For more information, see the application fees [documentation](https://stripe.com/docs/connect/subscriptions#collecting-fees-on-subscriptions). + """ + billing_cycle_anchor: NotRequired[int] + """ + A future timestamp to anchor the subscription's billing cycle for new subscriptions. + """ + billing_mode: NotRequired["SessionCreateParamsSubscriptionDataBillingMode"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + default_tax_rates: NotRequired[List[str]] + """ + The tax rates that will apply to any subscription item that does not have + `tax_rates` set. Invoices created will have their `default_tax_rates` populated + from the subscription. + """ + description: NotRequired[str] + """ + The subscription's description, meant to be displayable to the customer. + Use this field to optionally store an explanation of the subscription + for rendering in the [customer portal](https://stripe.com/docs/customer-management). + """ + invoice_settings: NotRequired[ + "SessionCreateParamsSubscriptionDataInvoiceSettings" + ] + """ + All invoices will be billed using the specified settings. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + on_behalf_of: NotRequired[str] + """ + The account on behalf of which to charge, for each of the subscription's invoices. + """ + proration_behavior: NotRequired[Literal["create_prorations", "none"]] + """ + Determines how to handle prorations resulting from the `billing_cycle_anchor`. If no value is passed, the default is `create_prorations`. + """ + transfer_data: NotRequired[ + "SessionCreateParamsSubscriptionDataTransferData" + ] + """ + If specified, the funds from the subscription's invoices will be transferred to the destination and the ID of the resulting transfers will be found on the resulting charges. + """ + trial_end: NotRequired[int] + """ + Unix timestamp representing the end of the trial period the customer will get before being charged for the first time. Has to be at least 48 hours in the future. + """ + trial_period_days: NotRequired[int] + """ + Integer representing the number of trial period days before the customer is charged for the first time. Has to be at least 1. + """ + trial_settings: NotRequired[ + "SessionCreateParamsSubscriptionDataTrialSettings" + ] + """ + Settings related to subscription trials. + """ + + +class SessionCreateParamsSubscriptionDataBillingMode(TypedDict): + flexible: NotRequired[ + "SessionCreateParamsSubscriptionDataBillingModeFlexible" + ] + """ + Configure behavior for flexible billing mode. + """ + type: Literal["classic", "flexible"] + """ + Controls the calculation and orchestration of prorations and invoices for subscriptions. If no value is passed, the default is `flexible`. + """ + + +class SessionCreateParamsSubscriptionDataBillingModeFlexible(TypedDict): + proration_discounts: NotRequired[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + +class SessionCreateParamsSubscriptionDataInvoiceSettings(TypedDict): + issuer: NotRequired[ + "SessionCreateParamsSubscriptionDataInvoiceSettingsIssuer" + ] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + + +class SessionCreateParamsSubscriptionDataInvoiceSettingsIssuer(TypedDict): + account: NotRequired[str] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced in the request. + """ + + +class SessionCreateParamsSubscriptionDataTransferData(TypedDict): + amount_percent: NotRequired[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: str + """ + ID of an existing, connected Stripe account. + """ + + +class SessionCreateParamsSubscriptionDataTrialSettings(TypedDict): + end_behavior: "SessionCreateParamsSubscriptionDataTrialSettingsEndBehavior" + """ + Defines how the subscription should behave when the user's free trial ends. + """ + + +class SessionCreateParamsSubscriptionDataTrialSettingsEndBehavior(TypedDict): + missing_payment_method: Literal["cancel", "create_invoice", "pause"] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ + + +class SessionCreateParamsTaxIdCollection(TypedDict): + enabled: bool + """ + Enable tax ID collection during checkout. Defaults to `false`. + """ + required: NotRequired[Literal["if_supported", "never"]] + """ + Describes whether a tax ID is required during checkout. Defaults to `never`. + """ + + +class SessionCreateParamsWalletOptions(TypedDict): + link: NotRequired["SessionCreateParamsWalletOptionsLink"] + """ + contains details about the Link wallet options. + """ + + +class SessionCreateParamsWalletOptionsLink(TypedDict): + display: NotRequired[Literal["auto", "never"]] + """ + Specifies whether Checkout should display Link as a payment option. By default, Checkout will display all the supported wallets that the Checkout Session was created with. This is the `auto` behavior, and it is the default choice. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_expire_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_expire_params.py new file mode 100644 index 00000000..090460b1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_expire_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SessionExpireParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_line_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_line_item_list_params.py new file mode 100644 index 00000000..29666f0c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_line_item_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class SessionLineItemListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_line_items_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_line_items_params.py new file mode 100644 index 00000000..35895af2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_line_items_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SessionListLineItemsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_params.py new file mode 100644 index 00000000..cf2a7710 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_list_params.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SessionListParams(RequestOptions): + created: NotRequired["SessionListParamsCreated|int"] + """ + Only return Checkout Sessions that were created during the given date interval. + """ + customer: NotRequired[str] + """ + Only return the Checkout Sessions for the Customer specified. + """ + customer_details: NotRequired["SessionListParamsCustomerDetails"] + """ + Only return the Checkout Sessions for the Customer details specified. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + payment_intent: NotRequired[str] + """ + Only return the Checkout Session for the PaymentIntent specified. + """ + payment_link: NotRequired[str] + """ + Only return the Checkout Sessions for the Payment Link specified. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["complete", "expired", "open"]] + """ + Only return the Checkout Sessions matching the given status. + """ + subscription: NotRequired[str] + """ + Only return the Checkout Session for the subscription specified. + """ + + +class SessionListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class SessionListParamsCustomerDetails(TypedDict): + email: str + """ + Customer's email address. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_modify_params.py new file mode 100644 index 00000000..8a9fd903 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_modify_params.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SessionModifyParams(RequestOptions): + collected_information: NotRequired[ + "SessionModifyParamsCollectedInformation" + ] + """ + Information about the customer collected within the Checkout Session. Can only be set when updating `embedded` or `custom` sessions. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + shipping_options: NotRequired[ + "Literal['']|List[SessionModifyParamsShippingOption]" + ] + """ + The shipping rate options to apply to this Session. Up to a maximum of 5. + """ + + +class SessionModifyParamsCollectedInformation(TypedDict): + shipping_details: NotRequired[ + "SessionModifyParamsCollectedInformationShippingDetails" + ] + """ + The shipping details to apply to this Session. + """ + + +class SessionModifyParamsCollectedInformationShippingDetails(TypedDict): + address: "SessionModifyParamsCollectedInformationShippingDetailsAddress" + """ + The address of the customer + """ + name: str + """ + The name of customer + """ + + +class SessionModifyParamsCollectedInformationShippingDetailsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SessionModifyParamsShippingOption(TypedDict): + shipping_rate: NotRequired[str] + """ + The ID of the Shipping Rate to use for this shipping option. + """ + shipping_rate_data: NotRequired[ + "SessionModifyParamsShippingOptionShippingRateData" + ] + """ + Parameters to be passed to Shipping Rate creation for this shipping option. + """ + + +class SessionModifyParamsShippingOptionShippingRateData(TypedDict): + delivery_estimate: NotRequired[ + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimate" + ] + """ + The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + display_name: str + """ + The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + fixed_amount: NotRequired[ + "SessionModifyParamsShippingOptionShippingRateDataFixedAmount" + ] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. The Shipping tax code is `txcd_92010001`. + """ + type: NotRequired[Literal["fixed_amount"]] + """ + The type of calculation to use on the shipping rate. + """ + + +class SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimate( + TypedDict, +): + maximum: NotRequired[ + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMaximum" + ] + """ + The upper bound of the estimated range. If empty, represents no upper bound i.e., infinite. + """ + minimum: NotRequired[ + "SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMinimum" + ] + """ + The lower bound of the estimated range. If empty, represents no lower bound. + """ + + +class SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMaximum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionModifyParamsShippingOptionShippingRateDataDeliveryEstimateMinimum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionModifyParamsShippingOptionShippingRateDataFixedAmount(TypedDict): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[ + str, + "SessionModifyParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions", + ] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class SessionModifyParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions( + TypedDict, +): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_retrieve_params.py new file mode 100644 index 00000000..fc641db9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SessionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_update_params.py new file mode 100644 index 00000000..2b710959 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/checkout/_session_update_params.py @@ -0,0 +1,198 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SessionUpdateParams(TypedDict): + collected_information: NotRequired[ + "SessionUpdateParamsCollectedInformation" + ] + """ + Information about the customer collected within the Checkout Session. Can only be set when updating `embedded` or `custom` sessions. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + shipping_options: NotRequired[ + "Literal['']|List[SessionUpdateParamsShippingOption]" + ] + """ + The shipping rate options to apply to this Session. Up to a maximum of 5. + """ + + +class SessionUpdateParamsCollectedInformation(TypedDict): + shipping_details: NotRequired[ + "SessionUpdateParamsCollectedInformationShippingDetails" + ] + """ + The shipping details to apply to this Session. + """ + + +class SessionUpdateParamsCollectedInformationShippingDetails(TypedDict): + address: "SessionUpdateParamsCollectedInformationShippingDetailsAddress" + """ + The address of the customer + """ + name: str + """ + The name of customer + """ + + +class SessionUpdateParamsCollectedInformationShippingDetailsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: str + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class SessionUpdateParamsShippingOption(TypedDict): + shipping_rate: NotRequired[str] + """ + The ID of the Shipping Rate to use for this shipping option. + """ + shipping_rate_data: NotRequired[ + "SessionUpdateParamsShippingOptionShippingRateData" + ] + """ + Parameters to be passed to Shipping Rate creation for this shipping option. + """ + + +class SessionUpdateParamsShippingOptionShippingRateData(TypedDict): + delivery_estimate: NotRequired[ + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimate" + ] + """ + The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + display_name: str + """ + The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + fixed_amount: NotRequired[ + "SessionUpdateParamsShippingOptionShippingRateDataFixedAmount" + ] + """ + Describes a fixed amount to charge for shipping. Must be present if type is `fixed_amount`. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. The Shipping tax code is `txcd_92010001`. + """ + type: NotRequired[Literal["fixed_amount"]] + """ + The type of calculation to use on the shipping rate. + """ + + +class SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimate( + TypedDict, +): + maximum: NotRequired[ + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum" + ] + """ + The upper bound of the estimated range. If empty, represents no upper bound i.e., infinite. + """ + minimum: NotRequired[ + "SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum" + ] + """ + The lower bound of the estimated range. If empty, represents no lower bound. + """ + + +class SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMaximum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionUpdateParamsShippingOptionShippingRateDataDeliveryEstimateMinimum( + TypedDict, +): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + +class SessionUpdateParamsShippingOptionShippingRateDataFixedAmount(TypedDict): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: NotRequired[ + Dict[ + str, + "SessionUpdateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions", + ] + ] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + + +class SessionUpdateParamsShippingOptionShippingRateDataFixedAmountCurrencyOptions( + TypedDict, +): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__init__.py new file mode 100644 index 00000000..68984299 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__init__.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.climate._order_cancel_params import ( + OrderCancelParams as OrderCancelParams, + ) + from stripe.params.climate._order_create_params import ( + OrderCreateParams as OrderCreateParams, + OrderCreateParamsBeneficiary as OrderCreateParamsBeneficiary, + ) + from stripe.params.climate._order_list_params import ( + OrderListParams as OrderListParams, + ) + from stripe.params.climate._order_modify_params import ( + OrderModifyParams as OrderModifyParams, + OrderModifyParamsBeneficiary as OrderModifyParamsBeneficiary, + ) + from stripe.params.climate._order_retrieve_params import ( + OrderRetrieveParams as OrderRetrieveParams, + ) + from stripe.params.climate._order_update_params import ( + OrderUpdateParams as OrderUpdateParams, + OrderUpdateParamsBeneficiary as OrderUpdateParamsBeneficiary, + ) + from stripe.params.climate._product_list_params import ( + ProductListParams as ProductListParams, + ) + from stripe.params.climate._product_retrieve_params import ( + ProductRetrieveParams as ProductRetrieveParams, + ) + from stripe.params.climate._supplier_list_params import ( + SupplierListParams as SupplierListParams, + ) + from stripe.params.climate._supplier_retrieve_params import ( + SupplierRetrieveParams as SupplierRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "OrderCancelParams": ("stripe.params.climate._order_cancel_params", False), + "OrderCreateParams": ("stripe.params.climate._order_create_params", False), + "OrderCreateParamsBeneficiary": ( + "stripe.params.climate._order_create_params", + False, + ), + "OrderListParams": ("stripe.params.climate._order_list_params", False), + "OrderModifyParams": ("stripe.params.climate._order_modify_params", False), + "OrderModifyParamsBeneficiary": ( + "stripe.params.climate._order_modify_params", + False, + ), + "OrderRetrieveParams": ( + "stripe.params.climate._order_retrieve_params", + False, + ), + "OrderUpdateParams": ("stripe.params.climate._order_update_params", False), + "OrderUpdateParamsBeneficiary": ( + "stripe.params.climate._order_update_params", + False, + ), + "ProductListParams": ("stripe.params.climate._product_list_params", False), + "ProductRetrieveParams": ( + "stripe.params.climate._product_retrieve_params", + False, + ), + "SupplierListParams": ( + "stripe.params.climate._supplier_list_params", + False, + ), + "SupplierRetrieveParams": ( + "stripe.params.climate._supplier_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e604c5889a1e7a203b35b12b0b13288ff8f11bc9 GIT binary patch literal 2408 zcmb7E&2Jk;6rbI-H+JmxSL}Q^DMWFRa6-M}L!9^!2?;?dX+-FuE2P!NJ55*FFU?NU z7$s6vap>qcHy0B?Iq_!JCTl~I=B@V4dvD&ndGlu8?*~O0 zMnJ)zRqIg}pu8ng!Yfm^;tqQVY=HSbl1^9|)3BD1tY*x%sbL?A1o5WI(Fvq_}+Ei=;?{v5R zH=monIhaq})E}w1M&Qg%8p}usD_!Hj20~a`-}Zgm!lciAv}Yag7r&YfAVVKFd|t6e z)3zK)t)Y9Yn0k{}Q;#N>>KD56qQ=}`KR3D!HI6x-p9)+&R6pka#<{UcxAL(C=f~gX zck&YMesmrBK=zF@(&@SXPeOBNED5?-IJkv+k^g`8P)HKmhscZ#F_vO1%@{)zl3@%G z1rdcYh9xA=Sb?!3u%-a4M+p!l_&W!{9-=g&Fh;b8CP4U7L}*{w7b)}Nv?m;PBkW6i zA`$nbbwpWG(X6zG4q*+WbyP!?WyYCRcd^d2x6 zK4H6tLz|cyl#(#Df?JD(cqGhy1iH1cO)=N&i7??B4i05%5bzGOR-gyl8xgjIax@0) zw9`N*Tk0Lp!Rn^FtA31wE$aE|vPZFfZQk>?EO%3#H=0}6HPs#L?x?o4q53U)$8+Cq zy!nD>e9I+=nL*5D6r0y{u$F_W%6 zuQk4>PiyZy%}(E6dT{-DW#-Yl&nmO`mwwDo9*tdjp!_;gJt~YI70R8YRL-@Lq~!ko zBZUg%zas&bm!_YUW}akc+7f6d0lWQs)jIkvQ%8@>?@O!oD`7gSDV!uKX_2;kIH!(x zDRu+Pa|6PP6Q18uec-_#;zbMM@NxQR!5t zSM`7*hAX@w!%HFyZ{YAU*uuL#yeztKcpxM24)`;Dj5;79G70P?^*tLpYjPZHv-tayx~_S7Mqp q#Z2JPn~lU*z$#5L_Nx5i!&+WE$h=qHPx&7w%R7 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7876381b409a1c77dad4c0b360fbb94e5f31c65a GIT binary patch literal 640 zcmXw1J8u**5FYRAj&QjU32_2ZMKo9BERr@#kwk(5B|Jp4jb+ZG%j$ORjqM9}J^Y3o zKLPPms1OZWDHRo6q$3omu-Azt&wS%~&-nZL`Wm=n{yiz)5P;uaxI5`BSnWG-0RjXm zp&~gU9!F(V#d+M~xJ;@vPYFcu0z~o&M2h5F9Q^ZakqtY4yf7q9|1F-)(AbmO7D^iT zlDsO6b^QLZvR+we6yx9;=xrQWJ#+E}Aml_q9=!*QF~Rh)d-WGHLG~P9M8mk*JkbL6 zA(vw;UvteX(_}cWxfI94PSa&f@(LMi))=dln3W#)7(1KsGHA5#UMG$;v9Y?@V2n$t zEN{zZ>?^FC4sJfuQ&l0I$T>YiGqtLwFO|h|`#`B_At&^JkEbXFJx6&?%i;sA7xq-i z-O=+MY6^?nwKL!oG}NUjYNT~rE*+Oe#Vt~%d?#$&w!(sPR4;VL*XK#sUGvD1&+w}^ zSSHJNU+(?rZT(EPuA(UI>Ww=?-}xXU88IE!z*N|S_CszmyQp2wq3z8eFq~VI#xE<( zq)puSLEFd=9J=Z5g(>dqhfZ`K3CvSRu3|#Sbp~Yj5(bwr{F^1DyX;?sW3Bgp7^bQf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_order_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92c7002d7ced0edcaa8fbb4484877ca31d89e438 GIT binary patch literal 1195 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_product_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_product_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b41e46dafade745fdf12925395dd6f9e09c31ac GIT binary patch literal 648 zcmXw1y>1gh5T3n1o8TlM0TzfVqHz(gAZ?T)LV^OB2$bfU)!`dCC*SQ}cGs3IT6l(- zM?gFZ6{0~WrJ|yXWI~aO*;{9&o%v?xe`ddLZ*Kt|^Y2M<$^d>l;r7HEus$Mi0XgKX zgo>q%IUJNh6{cZ}!!oMkG-eRME6AfykjKcrh2B3+mdT*=#|Z=0?7YMC85;YxwuO?0 zUZOXJvBd9=ly%BNV?Oq-o^Im6`WeX=fRM5r(%=*@#0cZZ^y)4qIXfi232Obo^I2AUjdl~z5s@Y|RyVss zWKt@dwWSO371pGKn~(fVRmdlD!C#`8T2=Gc%3`^HtkkrS6MmeHrzmqiM>*$Z@qyP% zd#2>U@c9dF3XA(S8DtYQoYE9E^13aTkISOUEOJr%ZiL>nBfP<|Uh0mk(UC4)^N7f2 z_|@yLqSgB^cYgHtenxv&K@fNK?yaHgzV8zaDPp@0q5M9y8+Mb}WleSa*6({k;KHIb zZfSllZQ>mlw2gd^&`tNyPx44VAdx;4n5RUpLdMv20_@-t`j;^Hn?$U;8eIdi*84wW C^{y)b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_supplier_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/__pycache__/_supplier_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11b1acd063601f99f1207c3ce2e488ec0dc03543 GIT binary patch literal 793 zcmX|9J8u&~5Z=9)ox~0h2RRTFp(Krqcm-*r6cG{>kwHW>*Q_qSNpkYNvb&D#9(uZ% zjus*DN2n|}=%iFsbe2pgQZajLXQi9{=9`=M{;b!R2_E_HY4pP(jpNy`&k>aC6?e z=PPr@zGoJ`j%J2#%PZDS`gtBlAaqIZ0udy#s6!e?={Y}zvrItY!5|OPuyErjiBz#F zRUnkM2WJXIr&TSgoTotooEOWSCt28!HLh`f*$-l45qh+REtM!9a2}*-rh;-DoD19n znxa&FBQu2LZon?G1lV~xV6Q;-RF<e)9u~>2AiZL7bjtFfy2#S~ z_KTNHMhfKh|xbn<0sT-%;F+Y7eV{4B>Sn-gbq!90Hc)gG_!PMqD65sgLo zPODNhO>J#1%=_S(c_2b>zwp#B$5zd79vOwhKtU??D=Oz{%3aez%gF19?y3i71BYS* iRf?Z{hGJ?{N^dNTdHCP=wZ~-Nh zq=K5{gm@fPQ61-Ti{mP((>x^*!3!vpPf(^vzQw^m&lcIB^T!JV(rlgJ`4o+Ptt^+q zxR>M=H`ejH$I^Nw*I15%YoO~muzKR;3qZ(833>DuFvbMahwjy1%t~_L_#zs_&Ccmm zsfwdML902=@J*qM+B6x?RUyjbL8s|5CW;yvYc?3GWjU=p?lE>gEvlf=egrykq=}8y z%{F6&5YiTH?TmeemD9n^M|vh}q+>Cs&(Tb*RP?2^SnVB2IpJbVkBZR*MM-BUX0+lT zs9M-FDfWj?pHagt?kQ(bjL}e+hAX71EtifeUKbWAGwXJkUiZU-#ZWDD#~0~I*Il#Y z$Y=P~>o1e#>6be{db>Z9-K!`{yL$W9(6`?YnT9T6yAUSBMzkMyli7uGg@@kn2Z7<- zqA-4KVK8mtEg!Uve9xhq?m-ykp?=^*_ocu*cH}B1gj{Dp_AjA-34^~`Lb}WM*Wg&| F{U0ozuOt8f literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_cancel_params.py new file mode 100644 index 00000000..ba99988d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OrderCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_create_params.py new file mode 100644 index 00000000..45ca4295 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_create_params.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired, TypedDict + + +class OrderCreateParams(RequestOptions): + amount: NotRequired[int] + """ + Requested amount of carbon removal units. Either this or `metric_tons` must be specified. + """ + beneficiary: NotRequired["OrderCreateParamsBeneficiary"] + """ + Publicly sharable reference for the end beneficiary of carbon removal. Assumed to be the Stripe account if not set. + """ + currency: NotRequired[str] + """ + Request currency for the order as a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a supported [settlement currency for your account](https://stripe.com/docs/currencies). If omitted, the account's default currency will be used. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + metric_tons: NotRequired[str] + """ + Requested number of tons for the order. Either this or `amount` must be specified. + """ + product: str + """ + Unique identifier of the Climate product. + """ + + +class OrderCreateParamsBeneficiary(TypedDict): + public_name: str + """ + Publicly displayable name for the end beneficiary of carbon removal. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_list_params.py new file mode 100644 index 00000000..c17bfa64 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OrderListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_modify_params.py new file mode 100644 index 00000000..af437147 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_modify_params.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class OrderModifyParams(RequestOptions): + beneficiary: NotRequired["Literal['']|OrderModifyParamsBeneficiary"] + """ + Publicly sharable reference for the end beneficiary of carbon removal. Assumed to be the Stripe account if not set. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + + +class OrderModifyParamsBeneficiary(TypedDict): + public_name: Union[Literal[""], str] + """ + Publicly displayable name for the end beneficiary of carbon removal. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_retrieve_params.py new file mode 100644 index 00000000..9364635f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OrderRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_update_params.py new file mode 100644 index 00000000..05a947f0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_order_update_params.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class OrderUpdateParams(TypedDict): + beneficiary: NotRequired["Literal['']|OrderUpdateParamsBeneficiary"] + """ + Publicly sharable reference for the end beneficiary of carbon removal. Assumed to be the Stripe account if not set. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + + +class OrderUpdateParamsBeneficiary(TypedDict): + public_name: Union[Literal[""], str] + """ + Publicly displayable name for the end beneficiary of carbon removal. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_list_params.py new file mode 100644 index 00000000..504998ab --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_retrieve_params.py new file mode 100644 index 00000000..c9cc1bd6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_product_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ProductRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_list_params.py new file mode 100644 index 00000000..93e5b97a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SupplierListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_retrieve_params.py new file mode 100644 index 00000000..262e8b95 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/climate/_supplier_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SupplierRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__init__.py new file mode 100644 index 00000000..e297cf84 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__init__.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.entitlements._active_entitlement_list_params import ( + ActiveEntitlementListParams as ActiveEntitlementListParams, + ) + from stripe.params.entitlements._active_entitlement_retrieve_params import ( + ActiveEntitlementRetrieveParams as ActiveEntitlementRetrieveParams, + ) + from stripe.params.entitlements._feature_create_params import ( + FeatureCreateParams as FeatureCreateParams, + ) + from stripe.params.entitlements._feature_list_params import ( + FeatureListParams as FeatureListParams, + ) + from stripe.params.entitlements._feature_modify_params import ( + FeatureModifyParams as FeatureModifyParams, + ) + from stripe.params.entitlements._feature_retrieve_params import ( + FeatureRetrieveParams as FeatureRetrieveParams, + ) + from stripe.params.entitlements._feature_update_params import ( + FeatureUpdateParams as FeatureUpdateParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ActiveEntitlementListParams": ( + "stripe.params.entitlements._active_entitlement_list_params", + False, + ), + "ActiveEntitlementRetrieveParams": ( + "stripe.params.entitlements._active_entitlement_retrieve_params", + False, + ), + "FeatureCreateParams": ( + "stripe.params.entitlements._feature_create_params", + False, + ), + "FeatureListParams": ( + "stripe.params.entitlements._feature_list_params", + False, + ), + "FeatureModifyParams": ( + "stripe.params.entitlements._feature_modify_params", + False, + ), + "FeatureRetrieveParams": ( + "stripe.params.entitlements._feature_retrieve_params", + False, + ), + "FeatureUpdateParams": ( + "stripe.params.entitlements._feature_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5238ce13b755b3f6539bc6174a2d615952fd9d9d GIT binary patch literal 1967 zcmbtT&2JM&6rbJouI>VYGNN?fSaV^RK;UW&M+D>zi`r8iR(gmUVeSvxqbKnC7w-~49g&HI>nzh8BI z41v&>liry;LVxnfKyrQ1`w_qcfl`K6$2l?BfGm7r=>0gt%_x9I9_$t}ATxB4(^ zjbnvo-0>ffHPMF8sQt}TG^9lLf;b|~4kEYZW4`eH^(zbZ{KbX&OW!PAfQ2LHR+zVr z7eeMS9|t&Omp#g^IK&AkY#;mI_IH>O53l2WlZi#_uol7d1jg6P)&BAUcLUpRBiFmx z-gi;&+rH8Fwb*^_TfXxpg&bnsj76GFNP3VwZQ70~$R1j>eJIIJjTa61&fGg5C;gI# zT%3NJi<{|%*el{jhEAEIocd3)BSnJuh5H*%&*NK1yA6zl<0oS5*aNp=-8 zhcS}mF5&h9ArVPR=V0zFw-^?4Ba>u8C%}ou90Jx!(W5qPEvIBlv~;Ar+9{B|*t``5 z*jx=a%&#$BV^M5gj2QM$osXh5FI+XxJ1c8Abj@`fuA9EMY{qSND+*_ur$0BT$MC5b z44hR=`+a1lEo~09IyG(E3q5Ar&A1I!+5IYPn;e2X=HRE-Ky9I}T*x<`Hk!Y%$Bi!@ z7pLwm-oN~`KK=8VC-oEe7Jn}v+4<<`ef_VA$(_ofol32zDz#DF%)a#4TeMNMIj~p zhLR89wCKO&16eKlHyMd-2Y4-7K6zJW3yzEy?Etq0t&;a)x8UMv5fAWN(3j}&M52Qp zp&md)>Y(;=XVV^^BhxVD1f@PG=mtsJ)sQsv44wQ#sqD(Ks_klTQ{AF6qjhu2ajrh$ gYH}Zanxf~kN6Ye7;rUsVtM@WRwb4}pk=2vu^?P6Y+OO}uAC1Ng!J+@&6;~c1zpPUae*!MI z5S);h#55r(?NVy7lQ^l{bxZ6fUg~#!N*wZx#NI~|`#`_DReU!X2JNZe)@jpX{tX=U zL7P{(5t-D;crS!DxX$im#%>A)ajy!k?BpJDxrhD<0n(*0={oNSxZuTf6WM73KDc)f zA>-UILB&mY_lBREFy0MQ$NHABdW+@9JtL0csWieQkb*Q;=j%vCsV>4^Uz;oiRWv}x zLhkcj*vk|Y0Sxj;#)Y4VRG4C3n@AbEAMF`XJMFLtIhRoioEI~kr&-)jES}^1s2?Sh z9akGw+~PcvGBZ(`D9)9whr%L}!WGhdBbNxt^=Ec~LfF0>uqU7oO_sCgnSo?|JIfC7 zWwssl4pAgK26@a9vCHzIImqNj=iwu!g@N@P4@CQ*8NMoVV0rmRhCi-Ag)H{9qb$T?n zGWJ$#cCPhBk7k$0-g3<>Jvehm&9$+&Rx+wtKedB}YE`m3TveULv#Pa}?VBPn!yL0v zXo literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_active_entitlement_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_active_entitlement_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..233bab2f26ea2cb14f78cbfdd2694c4093285d51 GIT binary patch literal 674 zcmYjPziU)M5T1R%?u?g2K|B;e2sT&b7EK!h21N^rqS(A$UO^ zNbGFIKgCLH>_GJo$Df&u(;#(Kpousk4e z3OVGggo>q%IUJNh6{cZ}!!oMkG-eRMGsvU&kjKcrhCV(`7RjLV+ZhAaY`w;lDH{8- zwuO?0Jkg87Skl*zly!%N#(d;My2Mq`_Oj5F?E5kk@TYa<)%;5e&lS z{^OA?X82Uv!j@Q}q|{ayIKx+&&MMO+IIlCA9}PN9R|uI^C`7X%M5Xd+>2ObolWA7^ z6YYATBN9z$tZuf2$fQ&@Ye@+41(tLMS0DMYs*sQ6oIgP`v8v|JmBn)RP^n2F$NVrG zO;F~1hH}Qs;vKIS_E^ci;loGV6c%@Dx{!_0a4J*O$m{mGoCvIm7%sAwocPZv^opMF z0mFKsJMPU+bZML0BtF2;UjHmQd-Lhq_ukHrXy+mb;;!CaUv%B*`@%!Y*bYi4KPm0T z&?I(I6A#~to8AyOwAmS6u|BK$~8?>N-GsASSpqq8mn}z7}5%ggjxhbLbq5Z_nMw^U$vboSy&2x zL$4bv;!k0!x*$u4fr%|rC_^XgyF}`f?Du=;=jZp{z3)p)O{7Kq+lT`jq2I=si#vm9 zSHlI0P=phd;t*rQR$`@gXs1r-RJNVCsTX<}S?C3doKGln0e{mmjf9P{7c~AD46tgy zfzu%fc~r47Vsf9kQf8;huhooAxSONUoMC zWm%R>R<(mtZtDDsrg}%WAIV9c0_kTXvJYY)^MV}Y5|XX1P9x6xq|15($RctE*%?XV z52P5&lRVq$Y(FI;matW52i6Bc^jmQOq^Rm4kjYpkkZLUmJ+3RJy{cqd`*eyi_jMB0 zWDJ$^f5bEXK$}=E@knnI8)JOqA-wYoJ^qP;zurCUmz^7=RdxG6u4>bK literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7346f1575d94afd7a0dc2120bd78cfd23b61264 GIT binary patch literal 896 zcmZXSy>HYo6u|Ao$)z86P|N*LcT0y!g8Srd65XI<;)(F<}l$9AJ|a4Px7Fv_u4*3fVwzFUFR(V7s!%k;Kg`b z%PB+r32|;o&9Vu1Z+S2wqFkk|k12r;PRb1?|B=HH3_~G``WH1isgvQURrTlmVq`n$nEL z{nY5Ql%DjX)ShtjCW`Dcma03HMtRO;R5nt3xqx>v< z0-`5b5k6-U(#>66jQ)SP8y)m?+2JYVr(v4xhs8i1vwW-b@KGod37ds>h>k#nI)73? zSd_O8A(x3vA=6TX^w4&Nrn)WEdUT2bujvxXEzpW6^!5?`Y%C31qsHo(tX?{f7hL*i zesw5D_cq34qayXiAsN2;JT;nKACvWp&Ne@Z(aiFgELUW1W%zh>cWq48DzdQl#U0JJ z#-vpee!nVVuU%73dxs9?b_^-AbI8q*DPIl>-4ffxIcrcjlaLEDtY!D@l@?6WGILXF qH^H`juN}UuO{_n$qPI&IV|?u+ymf(^7pVQmU&O(%agDSnqyGUsIqvZQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a9c583d95587a7a12894062dc41ff244b705e4c GIT binary patch literal 849 zcmXw1K~K~`6rO2kyIoj7qk=Y)7%pTJ*hWa?LOc+H9$+;ZFC}C$Y#-3jcFJ^?>>A@q z@7`E{g7K$#akCdQ7Y?4hksuy8In!=m()Ygi&3mtJ-n<_(GgC-Q{?CgN8=>FEsiZam z*ET_b@za9Z_0 z2DY%8eFJAb$mOd{Mm)`1mLl6xS1Pg_&AGAWC$1I=6@ zKmiU>V7)_N19_x5sD*e_+lFBrs2gs=TNNML6NXew8K-k=hA}Oxdpp2nPrx1zqocuV zCRmayhjnFi4$6Uk#?tV;H)(i(dHLXjxypVn#mW<{4wRdKWFeDGk(4FSX}QX!)Idtr z6r~9dd$GYyO3!*ME>A>VH=xKN=dqfjl%*+`te6(1!aR<$b@gxPT0?aE(Ldn{_{VAA z--i5D^2~q9CB&;+oS#PNvA@N-r;vvJIi%-)93A@EK%Ve)z5R5}&-JiZGabN=A@_CF zC<8w$F6u)nBN;=YZSK>faulXzJqudKw6lR|=q3u~YLM?~^%?zYE)2=2xi}_^SC&Bm*g5Z~_iQw~F(w-oH9h~OJDT#w#48x_psL?#HPk}cVw;L` zizqMGNSLKijvQqA#)6oXVo-NWhC*LLnwy0ajyW_FE<3+(Q1Op>jc(n|@=cx#PrF!u f`D3lFY>e@ZgYfz#TD(MSf1Nwn9ky?fHbwS-{Y&Gi literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e94e639b8dab2b0e234c32aeba61da8622893906 GIT binary patch literal 653 zcmXw1y>1gh5T3n1o8TlM0TzfVqHz(gAZ?T)LO_8G3QBX$>c|bw$#=V#-L++R6z~i& zkAQd-Dnx@$N<~E%$%G;mv$xJlJM+!X|IB{h+}r><=HH{@m;wBD!p(`-V0A#?9CFB6 z2^C8jb2uo2Don!`hh0U>2Mq`@&@h!MsQ>D66Ka<)%=5e&lS{tL|P zRO1m^UEmDgW;&}(li4(Qryr)X3|$T#nKfw#16K;o^gDN$7P?!dngNh3>dQ9qH0F z4~Tq*U%mb^TE6>o>ql?rXS8z}1aVhy-x#_P^nJD=MQnE>lwXQ=6K@i`sHu40|6MN# zoLiK}ZO#v;O}yoTwvq1;y6*1#aUSStFS`= literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/__pycache__/_feature_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9645437efd15b32770596033e7d7da7f82b380f GIT binary patch literal 809 zcmXw1O=}cE5bd7nncYn`Mp2_KMkJT8VA7~yE=iCO)I$uS<}x8Po$X38WWLhVyX=a1 z(z~~;KSBH{UR?GfeevMQTOfWwPIk}i6m-?=*HuOJqrT3}Od(_W-&Xk8Md+u!ROU^< z`MLq8NFaeD6ypHLPT*jBcOo|?0g1i9i~YdI$U#q$aNi?A!2e?USqo|dukHV`u1HWCUu6yraS% zXdn6+PsE$nWcJ;~#l5$7*xg*odv}f7)Abk>H?>@ogvYSmuIoBu7BZ%%7>iTUjVx|5 zcGBfh`67KYfF}EC8tGZac#@=wt1wM+#w4+CuIc_6og0WQ-qE8p26~wE=_cgID$VG# zR6(?~k*3FCa!5CL=NJ+}dyw>K6znU7{}4$1J< zr^cwcFeVEXJKOr!dNjJUGA1h(H9hySGn#6RNvmMw^{T&B&sT%Y{7Kp!D5bbkG7S0( zlH7_U?ZOrsN;^_H;5CbiR&xej)K^RC*QH$pY)*dLxHA`H{Le@D&JVOULTkVM%eX#l K|3M}c)&BwNK-DGy literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_list_params.py new file mode 100644 index 00000000..0964edb0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ActiveEntitlementListParams(RequestOptions): + customer: str + """ + The ID of the customer. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_retrieve_params.py new file mode 100644 index 00000000..c8d0020e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_active_entitlement_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ActiveEntitlementRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_create_params.py new file mode 100644 index 00000000..58338e5f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_create_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class FeatureCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + lookup_key: str + """ + A unique key you provide as your own system identifier. This may be up to 80 characters. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: str + """ + The feature's name, for your own purpose, not meant to be displayable to the customer. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_list_params.py new file mode 100644 index 00000000..d57a686c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_list_params.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class FeatureListParams(RequestOptions): + archived: NotRequired[bool] + """ + If set, filter results to only include features with the given archive status. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + lookup_key: NotRequired[str] + """ + If set, filter results to only include features with the given lookup_key. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_modify_params.py new file mode 100644 index 00000000..59158e75 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_modify_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class FeatureModifyParams(RequestOptions): + active: NotRequired[bool] + """ + Inactive features cannot be attached to new products and will not be returned from the features list endpoint. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: NotRequired[str] + """ + The feature's name, for your own purpose, not meant to be displayable to the customer. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_retrieve_params.py new file mode 100644 index 00000000..5933235c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class FeatureRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_update_params.py new file mode 100644 index 00000000..cbc29b19 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/entitlements/_feature_update_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FeatureUpdateParams(TypedDict): + active: NotRequired[bool] + """ + Inactive features cannot be attached to new products and will not be returned from the features list endpoint. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: NotRequired[str] + """ + The feature's name, for your own purpose, not meant to be displayable to the customer. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__init__.py new file mode 100644 index 00000000..bfa14a8f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__init__.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.financial_connections._account_disconnect_params import ( + AccountDisconnectParams as AccountDisconnectParams, + ) + from stripe.params.financial_connections._account_list_owners_params import ( + AccountListOwnersParams as AccountListOwnersParams, + ) + from stripe.params.financial_connections._account_list_params import ( + AccountListParams as AccountListParams, + AccountListParamsAccountHolder as AccountListParamsAccountHolder, + ) + from stripe.params.financial_connections._account_owner_list_params import ( + AccountOwnerListParams as AccountOwnerListParams, + ) + from stripe.params.financial_connections._account_refresh_account_params import ( + AccountRefreshAccountParams as AccountRefreshAccountParams, + ) + from stripe.params.financial_connections._account_refresh_params import ( + AccountRefreshParams as AccountRefreshParams, + ) + from stripe.params.financial_connections._account_retrieve_params import ( + AccountRetrieveParams as AccountRetrieveParams, + ) + from stripe.params.financial_connections._account_subscribe_params import ( + AccountSubscribeParams as AccountSubscribeParams, + ) + from stripe.params.financial_connections._account_unsubscribe_params import ( + AccountUnsubscribeParams as AccountUnsubscribeParams, + ) + from stripe.params.financial_connections._session_create_params import ( + SessionCreateParams as SessionCreateParams, + SessionCreateParamsAccountHolder as SessionCreateParamsAccountHolder, + SessionCreateParamsFilters as SessionCreateParamsFilters, + ) + from stripe.params.financial_connections._session_retrieve_params import ( + SessionRetrieveParams as SessionRetrieveParams, + ) + from stripe.params.financial_connections._transaction_list_params import ( + TransactionListParams as TransactionListParams, + TransactionListParamsTransactedAt as TransactionListParamsTransactedAt, + TransactionListParamsTransactionRefresh as TransactionListParamsTransactionRefresh, + ) + from stripe.params.financial_connections._transaction_retrieve_params import ( + TransactionRetrieveParams as TransactionRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "AccountDisconnectParams": ( + "stripe.params.financial_connections._account_disconnect_params", + False, + ), + "AccountListOwnersParams": ( + "stripe.params.financial_connections._account_list_owners_params", + False, + ), + "AccountListParams": ( + "stripe.params.financial_connections._account_list_params", + False, + ), + "AccountListParamsAccountHolder": ( + "stripe.params.financial_connections._account_list_params", + False, + ), + "AccountOwnerListParams": ( + "stripe.params.financial_connections._account_owner_list_params", + False, + ), + "AccountRefreshAccountParams": ( + "stripe.params.financial_connections._account_refresh_account_params", + False, + ), + "AccountRefreshParams": ( + "stripe.params.financial_connections._account_refresh_params", + False, + ), + "AccountRetrieveParams": ( + "stripe.params.financial_connections._account_retrieve_params", + False, + ), + "AccountSubscribeParams": ( + "stripe.params.financial_connections._account_subscribe_params", + False, + ), + "AccountUnsubscribeParams": ( + "stripe.params.financial_connections._account_unsubscribe_params", + False, + ), + "SessionCreateParams": ( + "stripe.params.financial_connections._session_create_params", + False, + ), + "SessionCreateParamsAccountHolder": ( + "stripe.params.financial_connections._session_create_params", + False, + ), + "SessionCreateParamsFilters": ( + "stripe.params.financial_connections._session_create_params", + False, + ), + "SessionRetrieveParams": ( + "stripe.params.financial_connections._session_retrieve_params", + False, + ), + "TransactionListParams": ( + "stripe.params.financial_connections._transaction_list_params", + False, + ), + "TransactionListParamsTransactedAt": ( + "stripe.params.financial_connections._transaction_list_params", + False, + ), + "TransactionListParamsTransactionRefresh": ( + "stripe.params.financial_connections._transaction_list_params", + False, + ), + "TransactionRetrieveParams": ( + "stripe.params.financial_connections._transaction_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc12a825ee3b46e6690a774ed179431821dda0db GIT binary patch literal 3811 zcmb_dO>YxN7@pnrZu}j`u@lGna_rFHP;5RbRPoi4Kne{?5do>)R$4jUC2X_1wq`eg zX^<%Dfg@56oGSH#RK!o|rHD(qqKB%z^tLojsW|nWnf2zgQcOCMU%$^YJI~I{&OGmr zi9{4Zv;WTPCo%~AMnJm>ezG>lA@mrjNaYMDVHz?%^`V+=1F7N9Fa%NQF+uX$OX!E8)IfsE^5 ztCJ89(fBTnht-PCJ>le%CfFgh`VErDTSr<)%18eon_K4Ggl;w)*ip=ex@>5Kxc1qV z3(EAx3)8cg<~{~e40mi-x=m{8Imex7qb(yhk^VNq+XuF=n`eMUazgmKXKi4cTBS+9 zdgX?0)vUT+GZg5)x+EWRG z0*<`Ry699CI;*xAaW2@O>5is@*#Qprt1T8|VyE6ptSu5}BBwhPVP8Gi<^)qY(~(MW zSpu0Plj-cUFK^tsK&YDuo!rxWY<5GHI=!NSMhY}=4+&|ewzoZMt6~3c270}ns5l$< zcQF0#7J`ga(Y5;!9-|0y;GeY>GyusLJVN)ld%V-G zwP=NV<}2J2R(Q;>2=mAxPC(m=u!5e!7}DlZ2|46$(>9K9j6)8&TeLm%{~vI-(H-G4 zbek)4b7j$uDeZz&Yhv%IIn4 zj4)R|;6~UE!@Af8_c*O4tXk3TIGRPumyO9*x%)JBS|8lbuJ=w?r`5rIYfHzZCSYRg z9WG~wpVPA7{vT$JNnvpJKZSoFl5lGM=I}hzJ)Tya}IX?sgU* z2S}{hegYA$KgX?0h#UU}9r{&Bt@FGntxFJIO9Eu!Hl*CP@LCFq(kldEJxWJxfnM|y z*UhhnhQWIZk|z-4MUgndaE#(K5_5p_lGjUd9*GA4Pe|S%#YH5N@uQMgqIeRCMZn{d zcZlL+NE`$_EP2N%K8eI3z$21(isC6Q5SZpD^D!`^@W`0t%`)aHFnM5xByXNEGB6Xs zlqK(T#w-9c224rv>Wujk82?pEjKLd>&6vBu9E4GmlJ^y3rg$V)fH@+0(>$9GFa=gDw#-ng{Efg0^o(LH}2A}I+B6!!X literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_disconnect_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_disconnect_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ee3a3e2ad664397836f3a979548ada57cfcbfd1 GIT binary patch literal 666 zcmX|9Piqu06n~k2yVh;1ATElh;$;urpuLuYrJx6?qKGh;5GT)V=u9%5WXtYdPkw-| zA3^*mp2Uj`^yJA~VXcRrOeR|cdGGh~^8WpjZ|m!8;FkG&U%n*(zr1n1(iK?lIdBF7 z1Sz2+IUycLWmLs^+~K%Psx(gtMDP?u@&QDOJvTE71D{C(E~KcR@d~IwpecOYke%$gzod=7?q%>s7`4q z-_d$*kF?quKYC1!w76Zn3w(lxx-zmxT6gWz_fm0HNM5ql7@joBc$kif|KqU`Fs|oK z&-d&_-)(c(iI4DeFkB>y*Pm~EA8h?dwl1P5?Khj(7d;!pPAmS6u0jyN!zqVX;q*Ip|(qg#)7U@B`PEsP>MiED2wIZIjz+@`)WHSnSqUg ztzlzD{3%RP7Iac4CbmeS44tsgNiF$({GQ+Q^Uv>Ry}kgiYAG)&;W(KU-i z4x8cLEnb-+{tO9BR&X1g*9k3R`zq?eh$NXR>XavppWtKK6_OSa z?dOCiMVPXT>7pjev!^UCmX#(_+oPnbscbi^MHORCGKz7rfN>_0UTWLt@d`71tqv(Y9(KD*fw8+s5p=r8%D8!k$86A@N z%=C*cD8E1{J4X3Hp9;R$di(?_rs-~O4v-V7khzfM6y@b3QI~PTV@6UO3(jd=c7QN( zoZ!@ug5688%V^~TSurh@qG}BF&WKOoSL5MOjT+nIV0+?uVRaIL`rTnLeDk$7TG|>1 zTXS@2g810yCrgz!27aPJCiT!H4_ OXbo0}{2CZlX8#8jY3Bz3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2ea44283145d9ea2a94165c50ef7a7588495449 GIT binary patch literal 1207 zcmZvb%TLrm7{F(?kL?1xh^+DokFXrv160L$B1Q;_m>4uZ65Y$Bv;#D>(=szl*o!B* zdt<$EHU24H-0a0PF&;d5BLO^c@|$+M5w%Ib`Q|s@%zUr;TrLkF_{6VC|8WtaA8L|+ zMo&3=4aza{kcR^l;s(Y_F9d~9YiOyi1$t;SjL>YD7!}YX$tRG!oQCKd8&Ed7WHAo>$u$a*0e+>E4J^f~pC(#uv%y>;J}ZgzGi zdl#Xzw=h3O6g9Ai8iiMgY95{dMs=^S0%HjXHF`wr6EkByuJ?JdM~ptn_nQBZq9Q7! zWMtKKqb8FofM*VOLXph;gL+^i3Ove_ij!?2yV<-h4SMF?|3N=Pz5NEms|K^GetTj8p<$uJ=fW07>y zgoBMHBX+yY-xp%k$X;s|}M&VHGD*r~2|_0`it!LUwERGn>$&SgPP9&Sp{p;XgpcJu{J-~Z!}8VMqk7su zhKKvzl9RL>TUuS`CD@h}dtoP*+Y}NK4z)D-HFe>L64#YbW#d&PMwPg!MC#MH($qPr zsDUCDKtP5d_`iZ0o^01Tm6@(S^G8r>?bt4>~8D_KiE;Im+d;TN|+oN5^33lrhxZ)og0x_54lW2;>` SM=+eV(Xin1Ut2r;o$DrM+|eV5eI+0Xm<{d~^f8;x1umi~8x|3U!#_QrHY6L5Op zfn$(@6lNfY9SA)RvLFvTVU9Wof&e@MY4{$bh@o#`71xOdQ7iuAjTW@%3D>3-*txbe z&)GqrE0)^&%R#}?9iEt^imCQV0&v=O_Ay|f15?lmUI7*|blq_*O5v6}>z;`#Zo&r_ z{LF+2Ck%2?=;C&oC-Tf7Zq3-M50gapg?ai`Fy*^_MitGqZ7`8?(IdO8D;2XbJ1VG1 zZItnx8(Wv&UGMS2Uebmt<6UXjFx76=Y>f~>b4G}rB_x+=Kl6B=kb^$WsvG5G2R773 z*#$zV5YkY?rO<>ZFN6)bFkiu`gW&ul-jg}QJ#mD0nBF(Cz>lS2*~Ye%`>rzHrpdnR z7auZlh%>&6i-Fmb;_l|{J6LnWHVWrJdrV_jkQWRW<&e0`1r-UW8A+rNEGav{gjSM} za!8UnQAicASq#*S>!{p3(68P00sLs*9O_YXZH(4Vf*`7$#GtV}M8g-K>!bPAF#&QIs`v6*`b z2V+qBd813gm5oGOrPBStbhb(jl2zu`w$LuClu+cJ!`o{@bg^#zV+1I}1V${n#vRxCc_uVeD?=gnOTI^jEZ+xS zkVD{yq$+nvGu0!(*9H$)iL!dGG&X_lfg<*C7(L{A&rq!;V9cPLCWaOGyFRm#iRR<+=mTl%{e rU8U>(0Uk>?0CvEUdSK0Yh%vrQ5MKL+7Qds_UrCD74}(i&f9>hNOVHd# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_refresh_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_refresh_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e0854211b589ad163ad584b1c246c6e118d2fdd GIT binary patch literal 737 zcmYjPJx>%t7=CBJZVwNM0V94?bXUMcEsO?CI7qZ0#Q4!{GZ}VYxDC5A%gh|!^_p1P zfj`0cJFINH(3oi~tn5e-3o2)KA#sv@_j#XrKcCFE+1VLzNB_N(eNm*DJ) z14ocSMhYlNLP(9h!Ylp6FM}i~!z3i&!86GGcaQ}be(~GfB$|Z%=y&b(i4C@LZTi0L zY~=vY?(^@mYL z>WD5lwv&1P@qW!uf_`Wh*3(pugzLGhP!C^l#Y=4?99LXq^T@ytgnr-bBu8z zq~T3D##G?0KEs)_aPff-Wr=i8jOixoeIqOSTpBEv2U70mVvi1Zx{o5GhbRtdk?+uI zVun&YT)F>%YNzRP(lwc^!mn0u+i{p;i|xP zzhfgasoeOj3^!Vb;n<+iwWy5-tx(ZbnwqasQ{|>Z7x8MV?^CttT=!Bz-*e{FCxo0w XKo)<(+7#CQL@|kvAD@H!HQE0FlcvX} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc21737604930a786c26c7341599de7a5fcc7d0e GIT binary patch literal 662 zcmXw1KW`H;6o0;d2_|~6+D?@0Fz^W) zJ_6#SFd-InQYR+1N}&v$u+OO_zxR87|KIcX&CLz4NB?_VoDzWFPPjes8mx{ixPTmT zQbI*iLL3gtpbFEl#bFs$aT*f{;05H-N62F&-$L)7CW~ay`QwBEX|~?t`4qKzU7JD* zZC|2Sg*KMo9ZBPqg~B}ZuAZ*r!0M@$F90DWIi$fUV2BaMkL;_vnB?Tp@Bs4fid)z*NIQB#|ysFBufx%5LJxX21#vP=qrS(}$K?t5cu-5m4g!+N1Q zu3|^J_Ueb0e1c!S{xVv=`*P<;Z}(@kdldw6S8d-Kx>@vn+M$iuE{93K9py&fBxX_D zF8m;Nyufg7P-wS8KczPDmJ8ZOzGu-*_t4MvNZq%h{a&D-SaKB-Laq}a2ba*lgu&k= NBHiWa8Z2wQ{{zuuv)KRu literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_subscribe_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_account_subscribe_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bab4f3a3ee40d79be700467036e9ca8332bcaefd GIT binary patch literal 758 zcmYjP&rcOG5T5R@x8MVUB)(`oaeESIgo77CA~DeeK_l_92b;1xz=qv+Y5NH8t`|?< zc>W2-KgAQ_Vm2`*dh$ksc;IBag~TR1`_0$sbmp6Wotc>iyY$}&1*xDW86ge_RZxdn*x|5>>Ntz*BufYc@EnTh9TYK=FQLzo^~TAt_uDx`($2od zqY-NJvN5F;+A`5rsm(BGdt0SJ#jEztwlprPR9NIbhqpHg;d0&jr+|==0YZMt6QUMaZ9OJ1>D3W2^C%DC^G>D$(sk6&rVDzyc5#sR%- z&3pLPA55aj&Znuf{^EJGco76~dXd1~!pA3*jkASEXR}M^(NagNySL|^Py=7i3R8aO zO!}cKH^??I!xMu-yO+^Pb27k%*9>hynto*~aqiI+s;;?Tzh??iwoS zDClzh1jJ9FI;BA?AqpDkB85<-!d@o=OZ)cCcxF8F>@N!o^I(?x^C16;0Df5Gc7-?O za@UYE$RI-nlqf;Sab=lzvg^TySMP!CtO(-)lO1xn`0U&7FOrZB#Bgl&NDaD*Rk%Rt$E9IL`S9@6z;`@eH3beu|5Hh^vV{ z5`1fYV-qVQ+n_Q5bi@=kXXO>cRXYnl%sJ(0P79I>&Y7D96Y6Fs^}peX%UG`_GBz!> zV2K(Scn4p*y=gFg{c&#AT|Ez0FFY@dFCti4`S5tUGh2ByTU^l`dz){i>bZv2 ziFEf)gu8fYFSCjCq%!k4otB+J*jO{J?CWSna!R&ME!)a%`4z*i<87z?j_euJJYi4| d4P5vLp{oec);H*Vht1znjN<8=D=@z{`!BBe(1`#5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e55e0c00a8466f29936d61b292bc615055917a0b GIT binary patch literal 1806 zcmZux&2QX96d$iY_dD6pr1>N&D%28*1%(1qQbbxoK~<<)5Yk>ojy=g*@mFWOA$tcE z@eg!+>lN{*aEY~-Xe7je6SqW3d+3Qb<8|1eSn~6m-#ovW_nY6FKbp-Nf``3c2;Q$E z^tTw4k3M$JC^*lNk9;LWk+q;^&5tDzR@T|F|oMr3wP1y#^j$k%>CzD|_i z)gn*VlBfZwNz4nhDp3p2>I7OF)a?2{;zwKIt;ghPpRnxPGz*fL0irz&SZ1r-d>CYe zx*@M`Cz*%}DDipqyFp6)`+=8v#nOe<#)Gq8!Fi4d>MB0!R=$V2i0W510IedT5uF(G z;ENYt$sM`%b^Mo)4rQM^%&B!B{ zx)I~6SAbu5Ueb@V2TAA?%3E$R#Jyr{ki*oCeZFwTpI-(cFvYmJTR67HtsOUXV~;Ri zO@54FvKOShmAZq7#2JoA)=PZe$fz4L*OScidP-;%$h|UKrEMsHP6^Wi!>yE(U6Oe{ zUZW)I(-`+@xNTe9!Z>y#f-$dQ93_4~6n+Ear+qgZ&$Kai<2cD&xe~_I5P8L!ag}A1 z3N`+Q&cLEK&zxQo5oa$xbnX+jpCzgDAjwF$wv{CNLA>W|x!yjBedmD02TmC5IOzbY ziEpoe@S(#%GHWRWxO;>-kUB_-lS@=0yo57633*d+QFEw9fqI2vkK z=-Xlkt72NqpdYtwlgzN@%tRO5`SU4*`nod+j wQC=BHx&0@a`wMO6X!G1yQLN$mIfBpmmeNqHmxFTzpYxRt`17w2e5B<51qmy=YXATM literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_session_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0be9c3ade48eb474fc30c61e88f34130b226e6e GIT binary patch literal 662 zcmXw1KW`H;6o0;d2_^E*f4ngu&DJrVPtn-7wG~Pl zcappj#yWj>sI0#f8jDc~4RW0aR?nP$0SGxMAdgM~V@xo8>`wj0tRM$YFQP%*JUl^T zT!CY>THp-dam_2!WH_(6EQW(l(`8KZ3K?rQ7^_qgojB3N#_DF9 zF)pRDyltJauds4=aPyg-sS4>>&gn}u6RT?aT3IZ2kCd7SIi^Q^G(lO=8Oj+g#d}&W z?3t4Ld(U4`BP{OL&Vi57P*+CONb9y;`awu8M}n7Zq@=`ATbD8uW@CCi91HGy^+I=i z$6j>ZHjkY61iyOyWwJc^a_2{H=V!8W6-8-RZ{Iq4F8ZPDp3B%i4pZTEw5Ptw?4ov4 z1S0MSgW=qw^bDK8Qd@Y-Cv7v|bLggf5O_V*51i?~7nr9`T*ZWt>kP>LCG;<0@Hb0H LcR9QUr`qWM4Y;%i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61ed2b72617620856f40270230b207e1ff64711a GIT binary patch literal 1596 zcmai!zi-?&6vwHbC!Kvx(mU67T)=G-H_#9Z`7sqifTlqm6v4SjoaGimInigq5~YxI z;46wQX@_+37I*8|qJK)49BwHH6dgKsGvG^yOnsEZ^TjYw0eX7+@bSlc{F1-7T1^BG z|Mzn8%17vL^`jrBc1|cbuThL*BSo3fGYsXMshL?ltMskZ&YYf;xjolFCfY=?{XL2u zV*F-RWAqv&b%8dBJEdMpJ)r&!^@q)1?jO}LFyz8x@_e6gu~mp9ryPj=DB&V7--B$!`%!-n3KPB{^hKB^ z&%$CTc5`}rT0iLBgUeYq*opi1w2x#r>R8QdXUZcs8vRHUU@R z8^w@$YJtkAmwyN52lPkl;>$Uyj%C690)?Wx)H0ox)51uwk%{h`}-As z=iRMN=smU$!3Mni4wz%hFpRe@GH(Bgmi|I_ChkXuchsFA_)P9yG`wH@34+h$Qycu` KErL&3(*FR?|B8_S literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/__pycache__/_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb2867732004e5b6bcd887db46642b23f70b3f3c GIT binary patch literal 670 zcmYLHy>AmS6o0<2gp#%(A)+FtiX}s1LD#B7g#-gCsKCH2mdQO*D|hzQcA{j5k-24K zMf@pDhy|V0iHWUJC_^Xgb1E$Pz2Ecue$U_5*Vn)u^Y@;3LjZnx;rgU2u-tdx6bdLv z2^Gl+@i;1@D$e5;$7NEbc}gIHCr~8sp-7Q@je~!lEwVx9w-*Ma**LU)lKLwpQ(!|E< zW|J{4rLw#&pRq5nbUL{DNRL&8bS&reF`9{0HGQfqmOBSZO@tiN13sFdEa(j7jF#dp ztrzxK$=%_@N7M+5JGC?5V>HyI5jE1fEtkF%lFO0cB^xOzvF*rEX8-rc^r}G?T!!^R zcYM{Jblo*~9r*x1d;PQI?B%B$-+S9XlI@EqO1paV+R)FVA5srp#CAzcg)M2nf+n+z z+I13!aXSbM=N6^$s|=HB6L0vSZRA@HU3K@uZ1?pYC%SJ2=Ds5rF(KqK1G0M#{c{-n P$r952ym1MRwch^#_&B#8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_disconnect_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_disconnect_params.py new file mode 100644 index 00000000..45ca66ce --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_disconnect_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AccountDisconnectParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_owners_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_owners_params.py new file mode 100644 index 00000000..a185d56c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_owners_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AccountListOwnersParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + ownership: str + """ + The ID of the ownership object to fetch owners from. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_params.py new file mode 100644 index 00000000..d87f6b10 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_list_params.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AccountListParams(RequestOptions): + account_holder: NotRequired["AccountListParamsAccountHolder"] + """ + If present, only return accounts that belong to the specified account holder. `account_holder[customer]` and `account_holder[account]` are mutually exclusive. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + session: NotRequired[str] + """ + If present, only return accounts that were collected as part of the given session. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class AccountListParamsAccountHolder(TypedDict): + account: NotRequired[str] + """ + The ID of the Stripe account whose accounts will be retrieved. + """ + customer: NotRequired[str] + """ + The ID of the Stripe customer whose accounts will be retrieved. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_owner_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_owner_list_params.py new file mode 100644 index 00000000..d2ea5e2f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_owner_list_params.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AccountOwnerListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + ownership: str + """ + The ID of the ownership object to fetch owners from. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_account_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_account_params.py new file mode 100644 index 00000000..578ef3c4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_account_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class AccountRefreshAccountParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: List[Literal["balance", "ownership", "transactions"]] + """ + The list of account features that you would like to refresh. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_params.py new file mode 100644 index 00000000..7ca98edd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_refresh_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class AccountRefreshParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: List[Literal["balance", "ownership", "transactions"]] + """ + The list of account features that you would like to refresh. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_retrieve_params.py new file mode 100644 index 00000000..02d5a379 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class AccountRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_subscribe_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_subscribe_params.py new file mode 100644 index 00000000..b6ac1c02 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_subscribe_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class AccountSubscribeParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: List[Literal["transactions"]] + """ + The list of account features to which you would like to subscribe. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_unsubscribe_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_unsubscribe_params.py new file mode 100644 index 00000000..98cc488d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_account_unsubscribe_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class AccountUnsubscribeParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: List[Literal["transactions"]] + """ + The list of account features from which you would like to unsubscribe. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_create_params.py new file mode 100644 index 00000000..e1dfd366 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_create_params.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SessionCreateParams(RequestOptions): + account_holder: "SessionCreateParamsAccountHolder" + """ + The account holder to link accounts for. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + filters: NotRequired["SessionCreateParamsFilters"] + """ + Filters to restrict the kinds of accounts to collect. + """ + permissions: List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + """ + List of data features that you would like to request access to. + + Possible values are `balances`, `transactions`, `ownership`, and `payment_method`. + """ + prefetch: NotRequired[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + List of data features that you would like to retrieve upon account creation. + """ + return_url: NotRequired[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + +class SessionCreateParamsAccountHolder(TypedDict): + account: NotRequired[str] + """ + The ID of the Stripe account whose accounts will be retrieved. Should only be present if `type` is `account`. + """ + customer: NotRequired[str] + """ + The ID of the Stripe customer whose accounts will be retrieved. Should only be present if `type` is `customer`. + """ + type: Literal["account", "customer"] + """ + Type of account holder to collect accounts for. + """ + + +class SessionCreateParamsFilters(TypedDict): + account_subcategories: NotRequired[ + List[ + Literal[ + "checking", + "credit_card", + "line_of_credit", + "mortgage", + "savings", + ] + ] + ] + """ + Restricts the Session to subcategories of accounts that can be linked. Valid subcategories are: `checking`, `savings`, `mortgage`, `line_of_credit`, `credit_card`. + """ + countries: NotRequired[List[str]] + """ + List of countries from which to collect accounts. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_retrieve_params.py new file mode 100644 index 00000000..fc641db9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_session_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SessionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_list_params.py new file mode 100644 index 00000000..3290ec94 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_list_params.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransactionListParams(RequestOptions): + account: str + """ + The ID of the Financial Connections Account whose transactions will be retrieved. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + transacted_at: NotRequired["TransactionListParamsTransactedAt|int"] + """ + A filter on the list based on the object `transacted_at` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with the following options: + """ + transaction_refresh: NotRequired["TransactionListParamsTransactionRefresh"] + """ + A filter on the list based on the object `transaction_refresh` field. The value can be a dictionary with the following options: + """ + + +class TransactionListParamsTransactedAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class TransactionListParamsTransactionRefresh(TypedDict): + after: str + """ + Return results where the transactions were created or updated by a refresh that took place after this refresh (non-inclusive). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_retrieve_params.py new file mode 100644 index 00000000..07744dd9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/financial_connections/_transaction_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransactionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__init__.py new file mode 100644 index 00000000..700618ae --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__init__.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.forwarding._request_create_params import ( + RequestCreateParams as RequestCreateParams, + RequestCreateParamsRequest as RequestCreateParamsRequest, + RequestCreateParamsRequestHeader as RequestCreateParamsRequestHeader, + ) + from stripe.params.forwarding._request_list_params import ( + RequestListParams as RequestListParams, + RequestListParamsCreated as RequestListParamsCreated, + ) + from stripe.params.forwarding._request_retrieve_params import ( + RequestRetrieveParams as RequestRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "RequestCreateParams": ( + "stripe.params.forwarding._request_create_params", + False, + ), + "RequestCreateParamsRequest": ( + "stripe.params.forwarding._request_create_params", + False, + ), + "RequestCreateParamsRequestHeader": ( + "stripe.params.forwarding._request_create_params", + False, + ), + "RequestListParams": ( + "stripe.params.forwarding._request_list_params", + False, + ), + "RequestListParamsCreated": ( + "stripe.params.forwarding._request_list_params", + False, + ), + "RequestRetrieveParams": ( + "stripe.params.forwarding._request_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4a8145088c4b592c1c2241981574ae643b39088 GIT binary patch literal 1397 zcmb7C&2Q936rb^|z204K5+K`#EmUcii$Pf{fGSlgNRTE?1&R<939L$%6HkK`e|2W^ zvDHS35C@LjxU^D_Mfp>DDdLij=%H#ay=}VXLpkxrcA#pDP@d)Ay!Yn4nfKoOerh)B z2!uaxho4jt`dt|Z0(LIL1eS*=Kmm?Wj9rYCu0>i*T!IlLYyxZ&Rbt)MW5YG#s$0!t zDv=r2+*(|B>$$B*jo5N6(2e}72Gzg}YTp@dlM-GD>i3X4(rfe@w)LmF+QzaO##zdQ z7pK8mM3v*q+t=p2*@d~;D_<;rZWDRzI{jviaxu%OFX%O&`7xL6|8bTsIr;Xz1?mTs z*_u33##{}#D36@@kE^&bfTCLE-gPQiNY~3MZ0%czgCnEeEHA73b;>q;7KF)4*JDN5 z-f~{IS47N1&h)!;A}H%088h$BU}a^mvka!ggqfj0y)-iw)D$R6EMtHJsenS@A8rFY zL^UK}Eu@c*gYuPz&=%g(go?_gk9W!wwn$%NTA$oNLfu&Gl0Mpj93?kU2MJY1E~gM{ zU?fx>x$KndUA%!d$!)ZOZMS`#$4 z?TV}b`oSiaqgrsbykv1=QGMzMVdJasi4vH^&N@64bUK3oe}(dr22SzF&Knvyo);#e@Vsu; zgPy#y2hU?IsA2|weiL9D4YWqB^R(0bQ9SOPe{400-kDs(o-=F_w^n=~^ zPd;e=ajd;N_TKK;_)sU~BLhU5BQO6p(b&Xa2t)eO$tOprezv9t1gw2-!O3^qHu}C{ zqetTx$f7+eYsFZhnPRF(L@$F@J-R7q!oxJ-OwC6gme~Jdn>-xJ-;h%tp6fZEnQAs4 z>LWA+6|r%Eee=`e(J!)-U@FG)TL3U1jGq|@pZXP@`HhUd&?>sIhX7vGiEcbIHQg9k pxYn=5Zr?SCNxmkW z{!F+H#_v`Yt6$ev2dy=5Ut1g6>Y}y2X5AAK<|d^5VO!2-76@OiAyA zgF@1~VP1HatlbR@5G;}#y|hrip#U!HKb9GA-4?(K z_?`(C=hA`Wj3r#UF%*omg2~N{l`$kmfR@9Qd$x23Oz>bZ8psW;;gwL7%S|$j_d&=l zb#jLBfim0NE6fMQi{ndM-QfNM~u1wdG}L4Mo)R>e3B#)F6V53h_3IZ=~0**_`7Uy1PS*?kc|8&-1oB*AxUm@KmNqekpZanQm=C4Y$G7xJvx9@Fu?C-q75%9LK2 znWpW|9J19JUmfR9Z;y|kbSInMlzOX^bLXeDz1nQIpSfEzleR9uu$+41h2?HLbK=_0 z?7b?^=C!q}jn>JYz9}xOGI@)-%RwUZPx1IPbv0@2HPSl#4Potyq$TxiaTYI2x}Wk= zUi$xr?*T*N$l9S^^PX1|ZI#q{CDga7=600!ffB0C;zK2L@)wn+KBdJ+sN~mBAfSzN zzYZpi&XjgmC~fYH&;E7si^Nb<=(7@@N?mzvw?5^8H$-@ v7{*J77&o4i3(v`|3Awd!E*b8)yCAqMzA{|HeY&$CxGdgRdihf6x{Ln-Om2Z1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/_request_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/__pycache__/_request_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8209336be47c1da1cfc1183da20fb18db0fafae9 GIT binary patch literal 1209 zcmai!zfTlF6vt<}`wdxn{E54#$T5#ms=Lwf1zJ zovratvGH<^*~C~_*^vMiRKD4{Jwh~blY8@>&zpPmX5X9rQZA1mc-Zd;zGfoyQ%s7- z7>LW)AkLA8JS9M((oz(m)j$okmX>QR&_knTgl5ZBkcyrnPk)CzgD9Uh8KYIosR^`1 z%ptW>t8V`iOX^BC{*oLW6ULt>+>av$M1STpURSfxX3T}tr^L(b-83QImfz-W8C%-H zM(8qt`8gt}rFf{NzCuLvlv!Xz_tbS5Z6L%L5N$|I$p%~>^3s49LsIvk{EL*gFn{9>e(P*bStIikf8;7`ssvb2opHutsB?QeC(-KjNRzB}jDh z);Wkn;&h@@XN#~y9w*Lr%t^4a5yywHv$Ns045AVQv-ndj8&cRd`6$kKcu=F>QlvCn^+AFX1 z^|cFCHLMF0Rpz^_H@(!?mkLs@b@lGf2fH`6*w+^eI#xYnz0tY8K39;Lg^yaVvfS5~ zb3*SIJN~~o4GzxR87fBmz+t*@_vUHb3i;+O#Za>nh7S73Qy!3A*O zq=brOgg6|OK^10Ui^DRi;w&Z*zzg8fIq(?C*U;x@$vo+IemkR2nvEkoo1iwYYg0&} z?Md{i(8lV!Lus6|P{>bws+X%euzYIm3qZ&Shb%Y-3^Bs^kv(-A6HfN6o(KJ~d9Z48 zghmxO#W%UiE8QeGt8>AJ{Z5lICh`gyYt|U6B%hQHcNsgIk)Fy5=}64zbJSxaYx+_eEO!p292a6l5A%~T3QngernD^H(Ryx9 zrPv$nKBKxYxKrDJe1w|XHbsrJZpWqXrTUO7?n*G_d9&Kzi20a7Jy#t!rW2{%`k@t{ z;AgkDh!$@@-}&C%{t<0o1wovu&D%gnK+pFY{I4wilPJe`lbCsJ`}*5&d4u81pwRB! zJT-0O4Og_Se9xkrbl;PCpzd4K{wdH;thfpZA=e3zy-Vm_LjO+^k#sS<2CLfae*|i; Ak^lez literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_create_params.py new file mode 100644 index 00000000..e35ebfc5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_create_params.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class RequestCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + payment_method: str + """ + The PaymentMethod to insert into the forwarded request. Forwarding previously consumed PaymentMethods is allowed. + """ + replacements: List[ + Literal[ + "card_cvc", + "card_expiry", + "card_number", + "cardholder_name", + "request_signature", + ] + ] + """ + The field kinds to be replaced in the forwarded request. + """ + request: "RequestCreateParamsRequest" + """ + The request body and headers to be sent to the destination endpoint. + """ + url: str + """ + The destination URL for the forwarded request. Must be supported by the config. + """ + + +class RequestCreateParamsRequest(TypedDict): + body: NotRequired[str] + """ + The body payload to send to the destination endpoint. + """ + headers: NotRequired[List["RequestCreateParamsRequestHeader"]] + """ + The headers to include in the forwarded request. Can be omitted if no additional headers (excluding Stripe-generated ones such as the Content-Type header) should be included. + """ + + +class RequestCreateParamsRequestHeader(TypedDict): + name: str + """ + The header name. + """ + value: str + """ + The header value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_list_params.py new file mode 100644 index 00000000..6c79d631 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_list_params.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class RequestListParams(RequestOptions): + created: NotRequired["RequestListParamsCreated"] + """ + Similar to other List endpoints, filters results based on created timestamp. You can pass gt, gte, lt, and lte timestamp values. + """ + ending_before: NotRequired[str] + """ + A pagination cursor to fetch the previous page of the list. The value must be a ForwardingRequest ID. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A pagination cursor to fetch the next page of the list. The value must be a ForwardingRequest ID. + """ + + +class RequestListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Return results where the `created` field is greater than this value. + """ + gte: NotRequired[int] + """ + Return results where the `created` field is greater than or equal to this value. + """ + lt: NotRequired[int] + """ + Return results where the `created` field is less than this value. + """ + lte: NotRequired[int] + """ + Return results where the `created` field is less than or equal to this value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_retrieve_params.py new file mode 100644 index 00000000..988b7d6a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/forwarding/_request_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class RequestRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__init__.py new file mode 100644 index 00000000..f791e48c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__init__.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.identity._verification_report_list_params import ( + VerificationReportListParams as VerificationReportListParams, + VerificationReportListParamsCreated as VerificationReportListParamsCreated, + ) + from stripe.params.identity._verification_report_retrieve_params import ( + VerificationReportRetrieveParams as VerificationReportRetrieveParams, + ) + from stripe.params.identity._verification_session_cancel_params import ( + VerificationSessionCancelParams as VerificationSessionCancelParams, + ) + from stripe.params.identity._verification_session_create_params import ( + VerificationSessionCreateParams as VerificationSessionCreateParams, + VerificationSessionCreateParamsOptions as VerificationSessionCreateParamsOptions, + VerificationSessionCreateParamsOptionsDocument as VerificationSessionCreateParamsOptionsDocument, + VerificationSessionCreateParamsProvidedDetails as VerificationSessionCreateParamsProvidedDetails, + VerificationSessionCreateParamsRelatedPerson as VerificationSessionCreateParamsRelatedPerson, + ) + from stripe.params.identity._verification_session_list_params import ( + VerificationSessionListParams as VerificationSessionListParams, + VerificationSessionListParamsCreated as VerificationSessionListParamsCreated, + ) + from stripe.params.identity._verification_session_modify_params import ( + VerificationSessionModifyParams as VerificationSessionModifyParams, + VerificationSessionModifyParamsOptions as VerificationSessionModifyParamsOptions, + VerificationSessionModifyParamsOptionsDocument as VerificationSessionModifyParamsOptionsDocument, + VerificationSessionModifyParamsProvidedDetails as VerificationSessionModifyParamsProvidedDetails, + ) + from stripe.params.identity._verification_session_redact_params import ( + VerificationSessionRedactParams as VerificationSessionRedactParams, + ) + from stripe.params.identity._verification_session_retrieve_params import ( + VerificationSessionRetrieveParams as VerificationSessionRetrieveParams, + ) + from stripe.params.identity._verification_session_update_params import ( + VerificationSessionUpdateParams as VerificationSessionUpdateParams, + VerificationSessionUpdateParamsOptions as VerificationSessionUpdateParamsOptions, + VerificationSessionUpdateParamsOptionsDocument as VerificationSessionUpdateParamsOptionsDocument, + VerificationSessionUpdateParamsProvidedDetails as VerificationSessionUpdateParamsProvidedDetails, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "VerificationReportListParams": ( + "stripe.params.identity._verification_report_list_params", + False, + ), + "VerificationReportListParamsCreated": ( + "stripe.params.identity._verification_report_list_params", + False, + ), + "VerificationReportRetrieveParams": ( + "stripe.params.identity._verification_report_retrieve_params", + False, + ), + "VerificationSessionCancelParams": ( + "stripe.params.identity._verification_session_cancel_params", + False, + ), + "VerificationSessionCreateParams": ( + "stripe.params.identity._verification_session_create_params", + False, + ), + "VerificationSessionCreateParamsOptions": ( + "stripe.params.identity._verification_session_create_params", + False, + ), + "VerificationSessionCreateParamsOptionsDocument": ( + "stripe.params.identity._verification_session_create_params", + False, + ), + "VerificationSessionCreateParamsProvidedDetails": ( + "stripe.params.identity._verification_session_create_params", + False, + ), + "VerificationSessionCreateParamsRelatedPerson": ( + "stripe.params.identity._verification_session_create_params", + False, + ), + "VerificationSessionListParams": ( + "stripe.params.identity._verification_session_list_params", + False, + ), + "VerificationSessionListParamsCreated": ( + "stripe.params.identity._verification_session_list_params", + False, + ), + "VerificationSessionModifyParams": ( + "stripe.params.identity._verification_session_modify_params", + False, + ), + "VerificationSessionModifyParamsOptions": ( + "stripe.params.identity._verification_session_modify_params", + False, + ), + "VerificationSessionModifyParamsOptionsDocument": ( + "stripe.params.identity._verification_session_modify_params", + False, + ), + "VerificationSessionModifyParamsProvidedDetails": ( + "stripe.params.identity._verification_session_modify_params", + False, + ), + "VerificationSessionRedactParams": ( + "stripe.params.identity._verification_session_redact_params", + False, + ), + "VerificationSessionRetrieveParams": ( + "stripe.params.identity._verification_session_retrieve_params", + False, + ), + "VerificationSessionUpdateParams": ( + "stripe.params.identity._verification_session_update_params", + False, + ), + "VerificationSessionUpdateParamsOptions": ( + "stripe.params.identity._verification_session_update_params", + False, + ), + "VerificationSessionUpdateParamsOptionsDocument": ( + "stripe.params.identity._verification_session_update_params", + False, + ), + "VerificationSessionUpdateParamsProvidedDetails": ( + "stripe.params.identity._verification_session_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..102fd33a5daf6a9d291e81afd7062220fd026aeb GIT binary patch literal 3546 zcmbtW&2JM&6rbJoZk+fdjuR&#AH=auz=3!Llu`k$+5{*qG>wu{iEX8o;~l~_J6>yc z6EF=DLOpOq>VZou^-`&bKc$x`mXxOA)Hk!XaZ=adFqVJ&-kaw)^WMz+ zt$&QgdJqif?-BFK5JJB(r9PCJu=TEh(0ybeL$DALG(ljpXo*D9BmrTG&Vw#lAtGxs zQ8b0mhpa9V*1}wtt!~nz^>A6SA|$FsNlc58xE3e9S}#dx2|m|l^^v5OB>h@H*TdET zNogrEs11@KZHNqO!`$9&?IR=F2$y@TQ8K2DaXDg*ll|I$GNDb7w3a55+N6L?WJHbF z*Mbq}*lQ#}?lY2r{l)-bisK;1A&$cw_ZcHFJIZm)7zcSj#|e&Uj*~_P>{%lRc%b%) zd=vU!&@xzZLdMirNXu3aRuAS6{lUta7rdBBDmHa>VjF7~W`<9$ES%HlE}WaY_`&@9 zdC?pD6jSr6St`1wU0%e@`;zIn3q@Kaj+bpWJ4bQR#Rf!8|JQ91yVS(%I0ytj6U{zL z*l}RJxnjA5t(uG6+J!Gt+s;(07)=fzS6CK~S9mqQvvz5X;IjKt{{?EVn+7({Vz+2o zj(6lG@fWehDzkv8W0#@G<1PG~s+?;(T`zN}Wqm%f4fATXO?{dj+SR9pU)%aL`|qmH z|D5(BHj1U%%>tLn7FqAQHLX*=Trr@!ZBlM_XqR#ezqTni`|nDb%Blr763nTP^78O>L%A-e$FCsa1i9wD+O_aPSi`h z6&o?S_Y{M-Vj~7)dm3R7We{T!2Y@oY)zRK|)Tx(+Nd#d!OOfzaX>6~L1xhmLXE3mr zkd$BPM#xkU<4i}{?LI#!PiJ|p@qVapq69C{#t4BV!FTI6zTzCd!1MLIha}l9i z!Y$EdUVLl_4{H%_NgE;+H>4%xvfCZZN*m}Q{DzGsltpg+#f@@s)&g?b#o^;&?RiJI zj&4X-&~+g%%;#kGqbk6YL-{j z*s$u7jeIfEoqdum{NO&yzVRrUzI*=Or6;M(cW*vUP2WBLbMNTp z(D=RB@BJg2iNVdpz?Lix#C;^i;{W^=Mv394NPwRw(~pyxpQ0IG0`0lOy6MhH9(^0h zqXz?TOY`}h*BulUQVD9>=T<9_sE%*AxXfO)4rSHx_R3G3-#ABkuR~6p;JnVR_YP*F zjNCd6&`e8|T~OMBn!G)85+^mvc&WpU?I0x1X>=zkbr^348*xJOUWNY=dS?CovLm6nW1Bx#(&F?|-H0VbZ zKf?7Sk`IEOSNwjik05yp^h1h2%Job`&vJbl$ulsoD*j=vA4Bp9&`&Dhn{$2uUAw+i=}<@<}=@&d2jrlf9`fW2p<0D z3cctd^t+n0k2P`5z6R$Riczd3DAfj7lP&)2Vy>;T=<4`9#BD8n8=y! zTqqS~B$nQzaY5pHG!jvBNMk1_qO<2Pe})JeXfYb-Um{`Q{E~&ii~IcS$XLz!ss52LY4hPQshji^uGvM zm~uHEC6r_WGqOh*$s&Sj{LOoB`pXt0p&;?MG!xQ^nu+X^ET-8I?~=Wo5owddBFtiG zB{Zc%&T$bkq1MAaxNu*WZk$J>6b_aijd3Wd9%4B1gJ4)AOFu=)ky1l|B{lpDpEL6@M~xZv;~z93#clzqQ4 z{Zn1H+*2FP^D4-xHwlT}?aItRJ-q^m=Z9@eT z{~)2GMf?;hM1xjJMMW3s2t_LFbs}NOGjBZOH=Y@PTU}iNyY%0?{51ji<&3KpUxMYX z1;1Qa~2G1Pn34_>Mhw86~-!A%u0v*j2+GL z(tDI^hKj6cLv2*M&R8ylG#$TY>99aMMsW|F1Hpy3(xj zwJ{$(svFgF4|XE8Ti>?g1N`g{PNI_+pRRrHZ~TZh&VnFL)%sPSYsJ849a+Y1OicPY zDK~^RF->iY@O`-H4TcMYLc3x5CUuF|9BIdV!=j6H$G3G?-Lj_rXrS*|aTXFn&J!Tp Ur!Y8$;h!WT>F0OnU{!bf9~ua_i~s-t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4cb3c31cf29d6286be99f2cf3251fa6fc3938ed GIT binary patch literal 670 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 TV7TmS%bNTB$FC3!b=ZFbA54vW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c86fa2521ee761f4cf2f2435165ae155d2570be4 GIT binary patch literal 2085 zcmah~%WvF77$2`6>wP7pq}e7>g9ueyx5^q?pa?asNQ26u4Hf0N2pMN*l34MpGu|bO zdIZ6N1GlEP9E-T{e{hMlmuN0MaN?FKTMj+(&3L`tjVi^Gzxn)|Zyw*{_xbNyt&HGd z|IK+HR}lI~eB_TlP>y~Be5sRmk8li#YZ2S(Efip^qRHcbT; z&~1dZpAgoG@~4{Z)htQW0JKQVAzGHG3212qtw^*CXk`SgcB@wHU$LE~@QKgJgEnEw zr*Yy%A+rixTlHEA*Y0>Mu~c5X<0XW;KCi4riLmu3!MyZ&HzrsZwz6wwQX706Jp|dhI?f!2imXrr#2@GgBzp0Sy%hz- z-VAr_Rl>HDD7HU|65=ndMA5bvZrUquYnz1F?vSu!``)@8cayCsyxMr@ip`)NmSQk) zHwm-hKrbeCEJJF8uVLaPUEAr51m9s<^u_%l{7z=vh`UrUM+y@ZMnU|H4yyHCZTJ4; zQd(W?X^V%2f^HrfXmW1%+%DU@wY&4Ukxp1W&B|vcX7^`5N^2`UZ6$~5iwEWh&(uQQ zI6?*8I5e_7Dl@-t?k~KT&b*(Nul2NR(wxraml!MM0o~Bi0!)vWGFD_+YFHL(SG6=+ z1EU{598l%k3m3k7ctT|iN@;bFdpZRhtXVpp7MD3K#EcL!wP%DTj?At)FEnwW6mNpU z>L4I;6SD{AD!4s4;&!%1n2)(PWa{@YGwz;XYUbhyuZEl?l5N01b;!UR8M1U}qf0g# zR`Eop9E%4uo=Hr-4iux~do2<&!izwUmP>)KvCCK-(S+Ar-;aJE*b#JLe2QlM$$3en z=^XOC4uR!y(x!yhb2M<1)|NPg5r4x2#+k3ofFPG-5EZ%L+IkfE$1@`8gbHy9UiLKz z$jIvp2WIuxul7$br?nfYc@vT|J(3)#>oafdy_?oA_Oy$6@y?&$!|B}Ro_0A$7OW@J z>Dfk4Ym8K^IBG1V!-{7TAA-@^SM9O`WTXxs93gU)p$K?DGf*D2!2e?pxIL4A2%S= zkgu$#$(}crAr9F|piIO+EX$Onj_4~{myv{#Ig*zgr_&4bde&QS&?Q)*z{_rdI8+ry zd2S%(>Qi*~DOyg^a^ILy%)PLWVCY{l6!Xb9eFQ`Q)G5XM3v?LzmrS8QM=(g|{s&T9 B2#5dx literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_redact_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_redact_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b96ebc314f06ae3d33ad4fb63eab88d49a14f5b GIT binary patch literal 670 zcmYjPziU)M5T1R%?u?g2K|B;e2sT$Fi>3`Jf}n*&Nzmdo%ky@;Ecf2Nm$!Szy(X}VjSyd8Nj|vz$dAeb`9v@HQ#4asR{VKsG2h%P%c;^6zL$-s zs3o7Hp7UJ2vpAj+sU z;e)rTrtZ1-I?< zZUk*&n~HkyG~D)vz=cKa*fpM`uJD>m+GV~)=(4}#S>3JgkV)SR%mWhVA!F1jS5FYQ}9pQ2z65<4+A)>h=XF=L1MT7(e3Mdg2+gQtaxLCLA-PpdaU zxiK_}sVm!sCt}kZ3>OBaV_18Z+QNO8w9S0SqU-Li=XForwWj@QpdVUs84^OS5+FMl TFt~u>pClsP&;2W~s=fUW)wQ_y literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/__pycache__/_verification_session_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68500e606a10e93a5de01caac28a6fe65058f217 GIT binary patch literal 2022 zcmah}OK%)S5bk;I?90x>@y51dkcpBER(2pff>3P0Sb{@jB0_j9Lc@5wZI3*!bk8nc zlmiD49J$50`5457|G_1ry;yzWz=@lY7m#wIx@TvzYen)%U0w5aRX?igtKaMO3WAUQ zJMY)42>mI3iq9A-$KQeS5MhLs0EJ3R3DuUWh<`QELcOJjM#~7zmZ=~WeSom`J;FLM zf7NpTR!O1;pyn8ANwfs0HHMZYS_ZT-hE{r2yY`pZ&Q`g;?zdB}-}YH*YrJ&ZPYLw` zUfqb(kIDUxPYLGbPkIT#!myoRBA5E`=lB6A4-r8v1*4XF4-t*%#FztA3}RyC7R+UV zmxw`(Ep=>7E!MC$wAM$6+yng00wESIjrm#v@0INef8kR?{Vl)krG6aUC5*vzFTq|) z?s(J-88^vZ;zgKSAxS;JJ$~gBmyZ&$7vrUPs5DP;xI^Qvk0DTSf*&w`CK&=Q&JhT= zh2wT7BvH!CK6ax{xJfA2Q;6?|UFMeSMqWr;JLwWYqkbfl_=b!4LH`TfiL?BMLAHGkq5uST3Cl5N01ZN$I=8L@O^V@Nidc8Q07Xe{!D@X{LYzze~V9NjsGAMuCQ2+TIa| zFcNI}z&Pu<84%Hu45A{^T;Gi2;ABQF2^%4780>QpkdgC?hgR*U&z@XZ$?B__^$sLw zW-K{S*B4(pcs*-e>+9Ew;$66MfV27KzP?-_i}vH0>{7F@H^(Yg95s>BQN_LjD<@Mb zD;Cl^N}4`Ip4IRaxN(Do(5bkQ0No)R=5xa_3zjkxCu1PCphB#|V3$Ea41jekt1k5Q zh2lN6#srd=sBqh`tK5WKLPqkgCA-?$9C68B3WXp#aGncE4$(RCJ|Zb0vmmcANtmbB zt-O1#(q-^aV6b;V9BGQ8{AVI%@ej0;p_PF-t5^sA0Kqi4VJg<+F9ryv!MSsa^&99g O4PLf{{ttpl-u-`kVDhK{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_list_params.py new file mode 100644 index 00000000..e02d3b36 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_list_params.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class VerificationReportListParams(RequestOptions): + client_reference_id: NotRequired[str] + """ + A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. + """ + created: NotRequired["VerificationReportListParamsCreated|int"] + """ + Only return VerificationReports that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + type: NotRequired[Literal["document", "id_number"]] + """ + Only return VerificationReports of this type + """ + verification_session: NotRequired[str] + """ + Only return VerificationReports created by this VerificationSession ID. It is allowed to provide a VerificationIntent ID. + """ + + +class VerificationReportListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_retrieve_params.py new file mode 100644 index 00000000..a289cedd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_report_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class VerificationReportRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_cancel_params.py new file mode 100644 index 00000000..3c43c7a9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class VerificationSessionCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_create_params.py new file mode 100644 index 00000000..2c7cc20a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_create_params.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class VerificationSessionCreateParams(RequestOptions): + client_reference_id: NotRequired[str] + """ + A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + options: NotRequired["VerificationSessionCreateParamsOptions"] + """ + A set of options for the session's verification checks. + """ + provided_details: NotRequired[ + "VerificationSessionCreateParamsProvidedDetails" + ] + """ + Details provided about the user being verified. These details may be shown to the user. + """ + related_customer: NotRequired[str] + """ + Customer ID + """ + related_person: NotRequired["VerificationSessionCreateParamsRelatedPerson"] + """ + Tokens referencing a Person resource and it's associated account. + """ + return_url: NotRequired[str] + """ + The URL that the user will be redirected to upon completing the verification flow. + """ + type: NotRequired[Literal["document", "id_number"]] + """ + The type of [verification check](https://stripe.com/docs/identity/verification-checks) to be performed. You must provide a `type` if not passing `verification_flow`. + """ + verification_flow: NotRequired[str] + """ + The ID of a verification flow from the Dashboard. See https://docs.stripe.com/identity/verification-flows. + """ + + +class VerificationSessionCreateParamsOptions(TypedDict): + document: NotRequired[ + "Literal['']|VerificationSessionCreateParamsOptionsDocument" + ] + """ + Options that apply to the [document check](https://stripe.com/docs/identity/verification-checks?type=document). + """ + + +class VerificationSessionCreateParamsOptionsDocument(TypedDict): + allowed_types: NotRequired[ + List[Literal["driving_license", "id_card", "passport"]] + ] + """ + Array of strings of allowed identity document types. If the provided identity document isn't one of the allowed types, the verification check will fail with a document_type_not_allowed error code. + """ + require_id_number: NotRequired[bool] + """ + Collect an ID number and perform an [ID number check](https://stripe.com/docs/identity/verification-checks?type=id-number) with the document's extracted name and date of birth. + """ + require_live_capture: NotRequired[bool] + """ + Disable image uploads, identity document images have to be captured using the device's camera. + """ + require_matching_selfie: NotRequired[bool] + """ + Capture a face image and perform a [selfie check](https://stripe.com/docs/identity/verification-checks?type=selfie) comparing a photo ID and a picture of your user's face. [Learn more](https://stripe.com/docs/identity/selfie). + """ + + +class VerificationSessionCreateParamsProvidedDetails(TypedDict): + email: NotRequired[str] + """ + Email of user being verified + """ + phone: NotRequired[str] + """ + Phone number of user being verified + """ + + +class VerificationSessionCreateParamsRelatedPerson(TypedDict): + account: str + """ + A token representing a connected account. If provided, the person parameter is also required and must be associated with the account. + """ + person: str + """ + A token referencing a Person resource that this verification is being used to verify. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_list_params.py new file mode 100644 index 00000000..6bd46221 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_list_params.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class VerificationSessionListParams(RequestOptions): + client_reference_id: NotRequired[str] + """ + A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. + """ + created: NotRequired["VerificationSessionListParamsCreated|int"] + """ + Only return VerificationSessions that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + related_customer: NotRequired[str] + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[ + Literal["canceled", "processing", "requires_input", "verified"] + ] + """ + Only return VerificationSessions with this status. [Learn more about the lifecycle of sessions](https://stripe.com/docs/identity/how-sessions-work). + """ + + +class VerificationSessionListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_modify_params.py new file mode 100644 index 00000000..ec4fb2c1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_modify_params.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class VerificationSessionModifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + options: NotRequired["VerificationSessionModifyParamsOptions"] + """ + A set of options for the session's verification checks. + """ + provided_details: NotRequired[ + "VerificationSessionModifyParamsProvidedDetails" + ] + """ + Details provided about the user being verified. These details may be shown to the user. + """ + type: NotRequired[Literal["document", "id_number"]] + """ + The type of [verification check](https://stripe.com/docs/identity/verification-checks) to be performed. + """ + + +class VerificationSessionModifyParamsOptions(TypedDict): + document: NotRequired[ + "Literal['']|VerificationSessionModifyParamsOptionsDocument" + ] + """ + Options that apply to the [document check](https://stripe.com/docs/identity/verification-checks?type=document). + """ + + +class VerificationSessionModifyParamsOptionsDocument(TypedDict): + allowed_types: NotRequired[ + List[Literal["driving_license", "id_card", "passport"]] + ] + """ + Array of strings of allowed identity document types. If the provided identity document isn't one of the allowed types, the verification check will fail with a document_type_not_allowed error code. + """ + require_id_number: NotRequired[bool] + """ + Collect an ID number and perform an [ID number check](https://stripe.com/docs/identity/verification-checks?type=id-number) with the document's extracted name and date of birth. + """ + require_live_capture: NotRequired[bool] + """ + Disable image uploads, identity document images have to be captured using the device's camera. + """ + require_matching_selfie: NotRequired[bool] + """ + Capture a face image and perform a [selfie check](https://stripe.com/docs/identity/verification-checks?type=selfie) comparing a photo ID and a picture of your user's face. [Learn more](https://stripe.com/docs/identity/selfie). + """ + + +class VerificationSessionModifyParamsProvidedDetails(TypedDict): + email: NotRequired[str] + """ + Email of user being verified + """ + phone: NotRequired[str] + """ + Phone number of user being verified + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_redact_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_redact_params.py new file mode 100644 index 00000000..a624950f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_redact_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class VerificationSessionRedactParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_retrieve_params.py new file mode 100644 index 00000000..f696500f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class VerificationSessionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_update_params.py new file mode 100644 index 00000000..6fe2b727 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/identity/_verification_session_update_params.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class VerificationSessionUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + options: NotRequired["VerificationSessionUpdateParamsOptions"] + """ + A set of options for the session's verification checks. + """ + provided_details: NotRequired[ + "VerificationSessionUpdateParamsProvidedDetails" + ] + """ + Details provided about the user being verified. These details may be shown to the user. + """ + type: NotRequired[Literal["document", "id_number"]] + """ + The type of [verification check](https://stripe.com/docs/identity/verification-checks) to be performed. + """ + + +class VerificationSessionUpdateParamsOptions(TypedDict): + document: NotRequired[ + "Literal['']|VerificationSessionUpdateParamsOptionsDocument" + ] + """ + Options that apply to the [document check](https://stripe.com/docs/identity/verification-checks?type=document). + """ + + +class VerificationSessionUpdateParamsOptionsDocument(TypedDict): + allowed_types: NotRequired[ + List[Literal["driving_license", "id_card", "passport"]] + ] + """ + Array of strings of allowed identity document types. If the provided identity document isn't one of the allowed types, the verification check will fail with a document_type_not_allowed error code. + """ + require_id_number: NotRequired[bool] + """ + Collect an ID number and perform an [ID number check](https://stripe.com/docs/identity/verification-checks?type=id-number) with the document's extracted name and date of birth. + """ + require_live_capture: NotRequired[bool] + """ + Disable image uploads, identity document images have to be captured using the device's camera. + """ + require_matching_selfie: NotRequired[bool] + """ + Capture a face image and perform a [selfie check](https://stripe.com/docs/identity/verification-checks?type=selfie) comparing a photo ID and a picture of your user's face. [Learn more](https://stripe.com/docs/identity/selfie). + """ + + +class VerificationSessionUpdateParamsProvidedDetails(TypedDict): + email: NotRequired[str] + """ + Email of user being verified + """ + phone: NotRequired[str] + """ + Phone number of user being verified + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__init__.py new file mode 100644 index 00000000..4532dea5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__init__.py @@ -0,0 +1,1171 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.issuing._authorization_approve_params import ( + AuthorizationApproveParams as AuthorizationApproveParams, + ) + from stripe.params.issuing._authorization_capture_params import ( + AuthorizationCaptureParams as AuthorizationCaptureParams, + AuthorizationCaptureParamsPurchaseDetails as AuthorizationCaptureParamsPurchaseDetails, + AuthorizationCaptureParamsPurchaseDetailsFleet as AuthorizationCaptureParamsPurchaseDetailsFleet, + AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData as AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData, + AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown as AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown, + AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel as AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel, + AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel as AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel, + AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax as AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax, + AuthorizationCaptureParamsPurchaseDetailsFlight as AuthorizationCaptureParamsPurchaseDetailsFlight, + AuthorizationCaptureParamsPurchaseDetailsFlightSegment as AuthorizationCaptureParamsPurchaseDetailsFlightSegment, + AuthorizationCaptureParamsPurchaseDetailsFuel as AuthorizationCaptureParamsPurchaseDetailsFuel, + AuthorizationCaptureParamsPurchaseDetailsLodging as AuthorizationCaptureParamsPurchaseDetailsLodging, + AuthorizationCaptureParamsPurchaseDetailsReceipt as AuthorizationCaptureParamsPurchaseDetailsReceipt, + ) + from stripe.params.issuing._authorization_create_params import ( + AuthorizationCreateParams as AuthorizationCreateParams, + AuthorizationCreateParamsAmountDetails as AuthorizationCreateParamsAmountDetails, + AuthorizationCreateParamsFleet as AuthorizationCreateParamsFleet, + AuthorizationCreateParamsFleetCardholderPromptData as AuthorizationCreateParamsFleetCardholderPromptData, + AuthorizationCreateParamsFleetReportedBreakdown as AuthorizationCreateParamsFleetReportedBreakdown, + AuthorizationCreateParamsFleetReportedBreakdownFuel as AuthorizationCreateParamsFleetReportedBreakdownFuel, + AuthorizationCreateParamsFleetReportedBreakdownNonFuel as AuthorizationCreateParamsFleetReportedBreakdownNonFuel, + AuthorizationCreateParamsFleetReportedBreakdownTax as AuthorizationCreateParamsFleetReportedBreakdownTax, + AuthorizationCreateParamsFuel as AuthorizationCreateParamsFuel, + AuthorizationCreateParamsMerchantData as AuthorizationCreateParamsMerchantData, + AuthorizationCreateParamsNetworkData as AuthorizationCreateParamsNetworkData, + AuthorizationCreateParamsRiskAssessment as AuthorizationCreateParamsRiskAssessment, + AuthorizationCreateParamsRiskAssessmentCardTestingRisk as AuthorizationCreateParamsRiskAssessmentCardTestingRisk, + AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk as AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk, + AuthorizationCreateParamsVerificationData as AuthorizationCreateParamsVerificationData, + AuthorizationCreateParamsVerificationDataAuthenticationExemption as AuthorizationCreateParamsVerificationDataAuthenticationExemption, + AuthorizationCreateParamsVerificationDataThreeDSecure as AuthorizationCreateParamsVerificationDataThreeDSecure, + ) + from stripe.params.issuing._authorization_decline_params import ( + AuthorizationDeclineParams as AuthorizationDeclineParams, + ) + from stripe.params.issuing._authorization_expire_params import ( + AuthorizationExpireParams as AuthorizationExpireParams, + ) + from stripe.params.issuing._authorization_finalize_amount_params import ( + AuthorizationFinalizeAmountParams as AuthorizationFinalizeAmountParams, + AuthorizationFinalizeAmountParamsFleet as AuthorizationFinalizeAmountParamsFleet, + AuthorizationFinalizeAmountParamsFleetCardholderPromptData as AuthorizationFinalizeAmountParamsFleetCardholderPromptData, + AuthorizationFinalizeAmountParamsFleetReportedBreakdown as AuthorizationFinalizeAmountParamsFleetReportedBreakdown, + AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel as AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel, + AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel as AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel, + AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax as AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax, + AuthorizationFinalizeAmountParamsFuel as AuthorizationFinalizeAmountParamsFuel, + ) + from stripe.params.issuing._authorization_increment_params import ( + AuthorizationIncrementParams as AuthorizationIncrementParams, + ) + from stripe.params.issuing._authorization_list_params import ( + AuthorizationListParams as AuthorizationListParams, + AuthorizationListParamsCreated as AuthorizationListParamsCreated, + ) + from stripe.params.issuing._authorization_modify_params import ( + AuthorizationModifyParams as AuthorizationModifyParams, + ) + from stripe.params.issuing._authorization_respond_params import ( + AuthorizationRespondParams as AuthorizationRespondParams, + ) + from stripe.params.issuing._authorization_retrieve_params import ( + AuthorizationRetrieveParams as AuthorizationRetrieveParams, + ) + from stripe.params.issuing._authorization_reverse_params import ( + AuthorizationReverseParams as AuthorizationReverseParams, + ) + from stripe.params.issuing._authorization_update_params import ( + AuthorizationUpdateParams as AuthorizationUpdateParams, + ) + from stripe.params.issuing._card_create_params import ( + CardCreateParams as CardCreateParams, + CardCreateParamsPin as CardCreateParamsPin, + CardCreateParamsShipping as CardCreateParamsShipping, + CardCreateParamsShippingAddress as CardCreateParamsShippingAddress, + CardCreateParamsShippingAddressValidation as CardCreateParamsShippingAddressValidation, + CardCreateParamsShippingCustoms as CardCreateParamsShippingCustoms, + CardCreateParamsSpendingControls as CardCreateParamsSpendingControls, + CardCreateParamsSpendingControlsSpendingLimit as CardCreateParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._card_deliver_card_params import ( + CardDeliverCardParams as CardDeliverCardParams, + ) + from stripe.params.issuing._card_fail_card_params import ( + CardFailCardParams as CardFailCardParams, + ) + from stripe.params.issuing._card_list_params import ( + CardListParams as CardListParams, + CardListParamsCreated as CardListParamsCreated, + ) + from stripe.params.issuing._card_modify_params import ( + CardModifyParams as CardModifyParams, + CardModifyParamsPin as CardModifyParamsPin, + CardModifyParamsShipping as CardModifyParamsShipping, + CardModifyParamsShippingAddress as CardModifyParamsShippingAddress, + CardModifyParamsShippingAddressValidation as CardModifyParamsShippingAddressValidation, + CardModifyParamsShippingCustoms as CardModifyParamsShippingCustoms, + CardModifyParamsSpendingControls as CardModifyParamsSpendingControls, + CardModifyParamsSpendingControlsSpendingLimit as CardModifyParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._card_retrieve_params import ( + CardRetrieveParams as CardRetrieveParams, + ) + from stripe.params.issuing._card_return_card_params import ( + CardReturnCardParams as CardReturnCardParams, + ) + from stripe.params.issuing._card_ship_card_params import ( + CardShipCardParams as CardShipCardParams, + ) + from stripe.params.issuing._card_submit_card_params import ( + CardSubmitCardParams as CardSubmitCardParams, + ) + from stripe.params.issuing._card_update_params import ( + CardUpdateParams as CardUpdateParams, + CardUpdateParamsPin as CardUpdateParamsPin, + CardUpdateParamsShipping as CardUpdateParamsShipping, + CardUpdateParamsShippingAddress as CardUpdateParamsShippingAddress, + CardUpdateParamsShippingAddressValidation as CardUpdateParamsShippingAddressValidation, + CardUpdateParamsShippingCustoms as CardUpdateParamsShippingCustoms, + CardUpdateParamsSpendingControls as CardUpdateParamsSpendingControls, + CardUpdateParamsSpendingControlsSpendingLimit as CardUpdateParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._cardholder_create_params import ( + CardholderCreateParams as CardholderCreateParams, + CardholderCreateParamsBilling as CardholderCreateParamsBilling, + CardholderCreateParamsBillingAddress as CardholderCreateParamsBillingAddress, + CardholderCreateParamsCompany as CardholderCreateParamsCompany, + CardholderCreateParamsIndividual as CardholderCreateParamsIndividual, + CardholderCreateParamsIndividualCardIssuing as CardholderCreateParamsIndividualCardIssuing, + CardholderCreateParamsIndividualCardIssuingUserTermsAcceptance as CardholderCreateParamsIndividualCardIssuingUserTermsAcceptance, + CardholderCreateParamsIndividualDob as CardholderCreateParamsIndividualDob, + CardholderCreateParamsIndividualVerification as CardholderCreateParamsIndividualVerification, + CardholderCreateParamsIndividualVerificationDocument as CardholderCreateParamsIndividualVerificationDocument, + CardholderCreateParamsSpendingControls as CardholderCreateParamsSpendingControls, + CardholderCreateParamsSpendingControlsSpendingLimit as CardholderCreateParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._cardholder_list_params import ( + CardholderListParams as CardholderListParams, + CardholderListParamsCreated as CardholderListParamsCreated, + ) + from stripe.params.issuing._cardholder_modify_params import ( + CardholderModifyParams as CardholderModifyParams, + CardholderModifyParamsBilling as CardholderModifyParamsBilling, + CardholderModifyParamsBillingAddress as CardholderModifyParamsBillingAddress, + CardholderModifyParamsCompany as CardholderModifyParamsCompany, + CardholderModifyParamsIndividual as CardholderModifyParamsIndividual, + CardholderModifyParamsIndividualCardIssuing as CardholderModifyParamsIndividualCardIssuing, + CardholderModifyParamsIndividualCardIssuingUserTermsAcceptance as CardholderModifyParamsIndividualCardIssuingUserTermsAcceptance, + CardholderModifyParamsIndividualDob as CardholderModifyParamsIndividualDob, + CardholderModifyParamsIndividualVerification as CardholderModifyParamsIndividualVerification, + CardholderModifyParamsIndividualVerificationDocument as CardholderModifyParamsIndividualVerificationDocument, + CardholderModifyParamsSpendingControls as CardholderModifyParamsSpendingControls, + CardholderModifyParamsSpendingControlsSpendingLimit as CardholderModifyParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._cardholder_retrieve_params import ( + CardholderRetrieveParams as CardholderRetrieveParams, + ) + from stripe.params.issuing._cardholder_update_params import ( + CardholderUpdateParams as CardholderUpdateParams, + CardholderUpdateParamsBilling as CardholderUpdateParamsBilling, + CardholderUpdateParamsBillingAddress as CardholderUpdateParamsBillingAddress, + CardholderUpdateParamsCompany as CardholderUpdateParamsCompany, + CardholderUpdateParamsIndividual as CardholderUpdateParamsIndividual, + CardholderUpdateParamsIndividualCardIssuing as CardholderUpdateParamsIndividualCardIssuing, + CardholderUpdateParamsIndividualCardIssuingUserTermsAcceptance as CardholderUpdateParamsIndividualCardIssuingUserTermsAcceptance, + CardholderUpdateParamsIndividualDob as CardholderUpdateParamsIndividualDob, + CardholderUpdateParamsIndividualVerification as CardholderUpdateParamsIndividualVerification, + CardholderUpdateParamsIndividualVerificationDocument as CardholderUpdateParamsIndividualVerificationDocument, + CardholderUpdateParamsSpendingControls as CardholderUpdateParamsSpendingControls, + CardholderUpdateParamsSpendingControlsSpendingLimit as CardholderUpdateParamsSpendingControlsSpendingLimit, + ) + from stripe.params.issuing._dispute_create_params import ( + DisputeCreateParams as DisputeCreateParams, + DisputeCreateParamsEvidence as DisputeCreateParamsEvidence, + DisputeCreateParamsEvidenceCanceled as DisputeCreateParamsEvidenceCanceled, + DisputeCreateParamsEvidenceDuplicate as DisputeCreateParamsEvidenceDuplicate, + DisputeCreateParamsEvidenceFraudulent as DisputeCreateParamsEvidenceFraudulent, + DisputeCreateParamsEvidenceMerchandiseNotAsDescribed as DisputeCreateParamsEvidenceMerchandiseNotAsDescribed, + DisputeCreateParamsEvidenceNoValidAuthorization as DisputeCreateParamsEvidenceNoValidAuthorization, + DisputeCreateParamsEvidenceNotReceived as DisputeCreateParamsEvidenceNotReceived, + DisputeCreateParamsEvidenceOther as DisputeCreateParamsEvidenceOther, + DisputeCreateParamsEvidenceServiceNotAsDescribed as DisputeCreateParamsEvidenceServiceNotAsDescribed, + DisputeCreateParamsTreasury as DisputeCreateParamsTreasury, + ) + from stripe.params.issuing._dispute_list_params import ( + DisputeListParams as DisputeListParams, + DisputeListParamsCreated as DisputeListParamsCreated, + ) + from stripe.params.issuing._dispute_modify_params import ( + DisputeModifyParams as DisputeModifyParams, + DisputeModifyParamsEvidence as DisputeModifyParamsEvidence, + DisputeModifyParamsEvidenceCanceled as DisputeModifyParamsEvidenceCanceled, + DisputeModifyParamsEvidenceDuplicate as DisputeModifyParamsEvidenceDuplicate, + DisputeModifyParamsEvidenceFraudulent as DisputeModifyParamsEvidenceFraudulent, + DisputeModifyParamsEvidenceMerchandiseNotAsDescribed as DisputeModifyParamsEvidenceMerchandiseNotAsDescribed, + DisputeModifyParamsEvidenceNoValidAuthorization as DisputeModifyParamsEvidenceNoValidAuthorization, + DisputeModifyParamsEvidenceNotReceived as DisputeModifyParamsEvidenceNotReceived, + DisputeModifyParamsEvidenceOther as DisputeModifyParamsEvidenceOther, + DisputeModifyParamsEvidenceServiceNotAsDescribed as DisputeModifyParamsEvidenceServiceNotAsDescribed, + ) + from stripe.params.issuing._dispute_retrieve_params import ( + DisputeRetrieveParams as DisputeRetrieveParams, + ) + from stripe.params.issuing._dispute_submit_params import ( + DisputeSubmitParams as DisputeSubmitParams, + ) + from stripe.params.issuing._dispute_update_params import ( + DisputeUpdateParams as DisputeUpdateParams, + DisputeUpdateParamsEvidence as DisputeUpdateParamsEvidence, + DisputeUpdateParamsEvidenceCanceled as DisputeUpdateParamsEvidenceCanceled, + DisputeUpdateParamsEvidenceDuplicate as DisputeUpdateParamsEvidenceDuplicate, + DisputeUpdateParamsEvidenceFraudulent as DisputeUpdateParamsEvidenceFraudulent, + DisputeUpdateParamsEvidenceMerchandiseNotAsDescribed as DisputeUpdateParamsEvidenceMerchandiseNotAsDescribed, + DisputeUpdateParamsEvidenceNoValidAuthorization as DisputeUpdateParamsEvidenceNoValidAuthorization, + DisputeUpdateParamsEvidenceNotReceived as DisputeUpdateParamsEvidenceNotReceived, + DisputeUpdateParamsEvidenceOther as DisputeUpdateParamsEvidenceOther, + DisputeUpdateParamsEvidenceServiceNotAsDescribed as DisputeUpdateParamsEvidenceServiceNotAsDescribed, + ) + from stripe.params.issuing._personalization_design_activate_params import ( + PersonalizationDesignActivateParams as PersonalizationDesignActivateParams, + ) + from stripe.params.issuing._personalization_design_create_params import ( + PersonalizationDesignCreateParams as PersonalizationDesignCreateParams, + PersonalizationDesignCreateParamsCarrierText as PersonalizationDesignCreateParamsCarrierText, + PersonalizationDesignCreateParamsPreferences as PersonalizationDesignCreateParamsPreferences, + ) + from stripe.params.issuing._personalization_design_deactivate_params import ( + PersonalizationDesignDeactivateParams as PersonalizationDesignDeactivateParams, + ) + from stripe.params.issuing._personalization_design_list_params import ( + PersonalizationDesignListParams as PersonalizationDesignListParams, + PersonalizationDesignListParamsPreferences as PersonalizationDesignListParamsPreferences, + ) + from stripe.params.issuing._personalization_design_modify_params import ( + PersonalizationDesignModifyParams as PersonalizationDesignModifyParams, + PersonalizationDesignModifyParamsCarrierText as PersonalizationDesignModifyParamsCarrierText, + PersonalizationDesignModifyParamsPreferences as PersonalizationDesignModifyParamsPreferences, + ) + from stripe.params.issuing._personalization_design_reject_params import ( + PersonalizationDesignRejectParams as PersonalizationDesignRejectParams, + PersonalizationDesignRejectParamsRejectionReasons as PersonalizationDesignRejectParamsRejectionReasons, + ) + from stripe.params.issuing._personalization_design_retrieve_params import ( + PersonalizationDesignRetrieveParams as PersonalizationDesignRetrieveParams, + ) + from stripe.params.issuing._personalization_design_update_params import ( + PersonalizationDesignUpdateParams as PersonalizationDesignUpdateParams, + PersonalizationDesignUpdateParamsCarrierText as PersonalizationDesignUpdateParamsCarrierText, + PersonalizationDesignUpdateParamsPreferences as PersonalizationDesignUpdateParamsPreferences, + ) + from stripe.params.issuing._physical_bundle_list_params import ( + PhysicalBundleListParams as PhysicalBundleListParams, + ) + from stripe.params.issuing._physical_bundle_retrieve_params import ( + PhysicalBundleRetrieveParams as PhysicalBundleRetrieveParams, + ) + from stripe.params.issuing._token_list_params import ( + TokenListParams as TokenListParams, + TokenListParamsCreated as TokenListParamsCreated, + ) + from stripe.params.issuing._token_modify_params import ( + TokenModifyParams as TokenModifyParams, + ) + from stripe.params.issuing._token_retrieve_params import ( + TokenRetrieveParams as TokenRetrieveParams, + ) + from stripe.params.issuing._token_update_params import ( + TokenUpdateParams as TokenUpdateParams, + ) + from stripe.params.issuing._transaction_create_force_capture_params import ( + TransactionCreateForceCaptureParams as TransactionCreateForceCaptureParams, + TransactionCreateForceCaptureParamsMerchantData as TransactionCreateForceCaptureParamsMerchantData, + TransactionCreateForceCaptureParamsPurchaseDetails as TransactionCreateForceCaptureParamsPurchaseDetails, + TransactionCreateForceCaptureParamsPurchaseDetailsFleet as TransactionCreateForceCaptureParamsPurchaseDetailsFleet, + TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData as TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData, + TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown as TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown, + TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel as TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel, + TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel as TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel, + TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax as TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax, + TransactionCreateForceCaptureParamsPurchaseDetailsFlight as TransactionCreateForceCaptureParamsPurchaseDetailsFlight, + TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment as TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment, + TransactionCreateForceCaptureParamsPurchaseDetailsFuel as TransactionCreateForceCaptureParamsPurchaseDetailsFuel, + TransactionCreateForceCaptureParamsPurchaseDetailsLodging as TransactionCreateForceCaptureParamsPurchaseDetailsLodging, + TransactionCreateForceCaptureParamsPurchaseDetailsReceipt as TransactionCreateForceCaptureParamsPurchaseDetailsReceipt, + ) + from stripe.params.issuing._transaction_create_unlinked_refund_params import ( + TransactionCreateUnlinkedRefundParams as TransactionCreateUnlinkedRefundParams, + TransactionCreateUnlinkedRefundParamsMerchantData as TransactionCreateUnlinkedRefundParamsMerchantData, + TransactionCreateUnlinkedRefundParamsPurchaseDetails as TransactionCreateUnlinkedRefundParamsPurchaseDetails, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel as TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging as TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging, + TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt as TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt, + ) + from stripe.params.issuing._transaction_list_params import ( + TransactionListParams as TransactionListParams, + TransactionListParamsCreated as TransactionListParamsCreated, + ) + from stripe.params.issuing._transaction_modify_params import ( + TransactionModifyParams as TransactionModifyParams, + ) + from stripe.params.issuing._transaction_refund_params import ( + TransactionRefundParams as TransactionRefundParams, + ) + from stripe.params.issuing._transaction_retrieve_params import ( + TransactionRetrieveParams as TransactionRetrieveParams, + ) + from stripe.params.issuing._transaction_update_params import ( + TransactionUpdateParams as TransactionUpdateParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "AuthorizationApproveParams": ( + "stripe.params.issuing._authorization_approve_params", + False, + ), + "AuthorizationCaptureParams": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetails": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleet": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFlight": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFlightSegment": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFuel": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsLodging": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsReceipt": ( + "stripe.params.issuing._authorization_capture_params", + False, + ), + "AuthorizationCreateParams": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsAmountDetails": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleet": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetCardholderPromptData": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdown": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownFuel": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownNonFuel": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownTax": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFuel": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsMerchantData": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsNetworkData": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessment": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessmentCardTestingRisk": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationData": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationDataAuthenticationExemption": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationDataThreeDSecure": ( + "stripe.params.issuing._authorization_create_params", + False, + ), + "AuthorizationDeclineParams": ( + "stripe.params.issuing._authorization_decline_params", + False, + ), + "AuthorizationExpireParams": ( + "stripe.params.issuing._authorization_expire_params", + False, + ), + "AuthorizationFinalizeAmountParams": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleet": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetCardholderPromptData": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdown": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFuel": ( + "stripe.params.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationIncrementParams": ( + "stripe.params.issuing._authorization_increment_params", + False, + ), + "AuthorizationListParams": ( + "stripe.params.issuing._authorization_list_params", + False, + ), + "AuthorizationListParamsCreated": ( + "stripe.params.issuing._authorization_list_params", + False, + ), + "AuthorizationModifyParams": ( + "stripe.params.issuing._authorization_modify_params", + False, + ), + "AuthorizationRespondParams": ( + "stripe.params.issuing._authorization_respond_params", + False, + ), + "AuthorizationRetrieveParams": ( + "stripe.params.issuing._authorization_retrieve_params", + False, + ), + "AuthorizationReverseParams": ( + "stripe.params.issuing._authorization_reverse_params", + False, + ), + "AuthorizationUpdateParams": ( + "stripe.params.issuing._authorization_update_params", + False, + ), + "CardCreateParams": ("stripe.params.issuing._card_create_params", False), + "CardCreateParamsPin": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsShipping": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsShippingAddress": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsShippingAddressValidation": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsShippingCustoms": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsSpendingControls": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardCreateParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._card_create_params", + False, + ), + "CardDeliverCardParams": ( + "stripe.params.issuing._card_deliver_card_params", + False, + ), + "CardFailCardParams": ( + "stripe.params.issuing._card_fail_card_params", + False, + ), + "CardListParams": ("stripe.params.issuing._card_list_params", False), + "CardListParamsCreated": ( + "stripe.params.issuing._card_list_params", + False, + ), + "CardModifyParams": ("stripe.params.issuing._card_modify_params", False), + "CardModifyParamsPin": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsShipping": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsShippingAddress": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsShippingAddressValidation": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsShippingCustoms": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsSpendingControls": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardModifyParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._card_modify_params", + False, + ), + "CardRetrieveParams": ( + "stripe.params.issuing._card_retrieve_params", + False, + ), + "CardReturnCardParams": ( + "stripe.params.issuing._card_return_card_params", + False, + ), + "CardShipCardParams": ( + "stripe.params.issuing._card_ship_card_params", + False, + ), + "CardSubmitCardParams": ( + "stripe.params.issuing._card_submit_card_params", + False, + ), + "CardUpdateParams": ("stripe.params.issuing._card_update_params", False), + "CardUpdateParamsPin": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsShipping": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsShippingAddress": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsShippingAddressValidation": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsShippingCustoms": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsSpendingControls": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardUpdateParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._card_update_params", + False, + ), + "CardholderCreateParams": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsBilling": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsBillingAddress": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsCompany": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividual": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividualCardIssuing": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividualCardIssuingUserTermsAcceptance": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividualDob": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividualVerification": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsIndividualVerificationDocument": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsSpendingControls": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderCreateParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._cardholder_create_params", + False, + ), + "CardholderListParams": ( + "stripe.params.issuing._cardholder_list_params", + False, + ), + "CardholderListParamsCreated": ( + "stripe.params.issuing._cardholder_list_params", + False, + ), + "CardholderModifyParams": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsBilling": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsBillingAddress": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsCompany": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividual": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividualCardIssuing": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividualCardIssuingUserTermsAcceptance": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividualDob": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividualVerification": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsIndividualVerificationDocument": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsSpendingControls": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderModifyParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._cardholder_modify_params", + False, + ), + "CardholderRetrieveParams": ( + "stripe.params.issuing._cardholder_retrieve_params", + False, + ), + "CardholderUpdateParams": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsBilling": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsBillingAddress": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsCompany": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividual": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividualCardIssuing": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividualCardIssuingUserTermsAcceptance": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividualDob": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividualVerification": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsIndividualVerificationDocument": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsSpendingControls": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "CardholderUpdateParamsSpendingControlsSpendingLimit": ( + "stripe.params.issuing._cardholder_update_params", + False, + ), + "DisputeCreateParams": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidence": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceCanceled": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceDuplicate": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceFraudulent": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceMerchandiseNotAsDescribed": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceNoValidAuthorization": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceNotReceived": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceOther": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsEvidenceServiceNotAsDescribed": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeCreateParamsTreasury": ( + "stripe.params.issuing._dispute_create_params", + False, + ), + "DisputeListParams": ("stripe.params.issuing._dispute_list_params", False), + "DisputeListParamsCreated": ( + "stripe.params.issuing._dispute_list_params", + False, + ), + "DisputeModifyParams": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidence": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceCanceled": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceDuplicate": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceFraudulent": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceMerchandiseNotAsDescribed": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceNoValidAuthorization": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceNotReceived": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceOther": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceServiceNotAsDescribed": ( + "stripe.params.issuing._dispute_modify_params", + False, + ), + "DisputeRetrieveParams": ( + "stripe.params.issuing._dispute_retrieve_params", + False, + ), + "DisputeSubmitParams": ( + "stripe.params.issuing._dispute_submit_params", + False, + ), + "DisputeUpdateParams": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidence": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceCanceled": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceDuplicate": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceFraudulent": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceMerchandiseNotAsDescribed": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceNoValidAuthorization": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceNotReceived": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceOther": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceServiceNotAsDescribed": ( + "stripe.params.issuing._dispute_update_params", + False, + ), + "PersonalizationDesignActivateParams": ( + "stripe.params.issuing._personalization_design_activate_params", + False, + ), + "PersonalizationDesignCreateParams": ( + "stripe.params.issuing._personalization_design_create_params", + False, + ), + "PersonalizationDesignCreateParamsCarrierText": ( + "stripe.params.issuing._personalization_design_create_params", + False, + ), + "PersonalizationDesignCreateParamsPreferences": ( + "stripe.params.issuing._personalization_design_create_params", + False, + ), + "PersonalizationDesignDeactivateParams": ( + "stripe.params.issuing._personalization_design_deactivate_params", + False, + ), + "PersonalizationDesignListParams": ( + "stripe.params.issuing._personalization_design_list_params", + False, + ), + "PersonalizationDesignListParamsPreferences": ( + "stripe.params.issuing._personalization_design_list_params", + False, + ), + "PersonalizationDesignModifyParams": ( + "stripe.params.issuing._personalization_design_modify_params", + False, + ), + "PersonalizationDesignModifyParamsCarrierText": ( + "stripe.params.issuing._personalization_design_modify_params", + False, + ), + "PersonalizationDesignModifyParamsPreferences": ( + "stripe.params.issuing._personalization_design_modify_params", + False, + ), + "PersonalizationDesignRejectParams": ( + "stripe.params.issuing._personalization_design_reject_params", + False, + ), + "PersonalizationDesignRejectParamsRejectionReasons": ( + "stripe.params.issuing._personalization_design_reject_params", + False, + ), + "PersonalizationDesignRetrieveParams": ( + "stripe.params.issuing._personalization_design_retrieve_params", + False, + ), + "PersonalizationDesignUpdateParams": ( + "stripe.params.issuing._personalization_design_update_params", + False, + ), + "PersonalizationDesignUpdateParamsCarrierText": ( + "stripe.params.issuing._personalization_design_update_params", + False, + ), + "PersonalizationDesignUpdateParamsPreferences": ( + "stripe.params.issuing._personalization_design_update_params", + False, + ), + "PhysicalBundleListParams": ( + "stripe.params.issuing._physical_bundle_list_params", + False, + ), + "PhysicalBundleRetrieveParams": ( + "stripe.params.issuing._physical_bundle_retrieve_params", + False, + ), + "TokenListParams": ("stripe.params.issuing._token_list_params", False), + "TokenListParamsCreated": ( + "stripe.params.issuing._token_list_params", + False, + ), + "TokenModifyParams": ("stripe.params.issuing._token_modify_params", False), + "TokenRetrieveParams": ( + "stripe.params.issuing._token_retrieve_params", + False, + ), + "TokenUpdateParams": ("stripe.params.issuing._token_update_params", False), + "TransactionCreateForceCaptureParams": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsMerchantData": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetails": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleet": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFlight": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFuel": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsLodging": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsReceipt": ( + "stripe.params.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateUnlinkedRefundParams": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsMerchantData": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetails": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt": ( + "stripe.params.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionListParams": ( + "stripe.params.issuing._transaction_list_params", + False, + ), + "TransactionListParamsCreated": ( + "stripe.params.issuing._transaction_list_params", + False, + ), + "TransactionModifyParams": ( + "stripe.params.issuing._transaction_modify_params", + False, + ), + "TransactionRefundParams": ( + "stripe.params.issuing._transaction_refund_params", + False, + ), + "TransactionRetrieveParams": ( + "stripe.params.issuing._transaction_retrieve_params", + False, + ), + "TransactionUpdateParams": ( + "stripe.params.issuing._transaction_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfe65e7c8c53a0afeeb0943e4fc16149837e129d GIT binary patch literal 24674 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 PZUy>Z9$W#n6}SHZGfUmA literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9895dff5355d2edadbda0ed7bfdaf53bb38e4a2 GIT binary patch literal 5985 zcmbtY%WoUU8DEmi1lksZ5CY%z_2ph)c|u^rh?WY(~qLxcj`HFrd9wcKT9 zcV)2!iXQ4~(VNwq4m~93#g_oR^e^Z|3-&+^(Du+%Z#K;IkW;^Jc9&XGlr6^uIFH{v zcfQ~EnE87?pAq0^|F5F|>x>}$2P@$(85CaBV}kHR&;%`J2(8#=EQaN{5pN|n6TF-- z#8z@M*^)M;R%$a96XL>6K@)#3Xh{#j;b;cXYy{16 zGzVxtg623{0JIoE^BkQ3bTWb#I64LBbObGOv;^o(1fAe$8PM4XI?2&FK<6Xq6h|w7 zE=162jxGYa6hTX!9pkoW*e z5gD-nPlUJ@j!h!ck*Xg*leO50E*@#^=g{QiejoQq9`n*C@o8K4J_vr z}Cb4TU ztKKHHHb0x1Zrd)7A3hBwJTbr5TDwEjunnHbP_XYn@>uAVRt^$g>0DPl_beVy%FiUB z^7g?4Z~mRG_)duA=k~?@`+rJ%xz(HfM*7{Pe)P9BGSoK^E3|ywsvZQtQ&+lEV;$A z+G`Bco7)bPwhW$MI{iSG7);#4^u1FL+OV`H5P+qOpm6%3_eg{2ZHJ|3P)JjF zq+U(YBAgbTz+@5=Bt4zR1ldhzFezigB|nEHJYSwHK*9bEB*3w3`Ed58m%Y^$Z-wN^ z&mGR)_Hv(f#m_VlmR=WDW+vAyb@YAmLIN8j_DEh zRUGgE?4#G)>OIo7s6(`Cl&CwJ^~hvXG=P+cAqIQQZMlY_*o5xt4Z=!;Z8%glZMA_$ zpXF>~Yz_KAjd$kTs#m3x`G^t4C>8P8`Pu&j3ihuc0V*zD=*b&EoTXvnlva9jv6rhu zOFHvBA(o(71YTu)Ud^BD$+w|xet6XMGK@N$Soh?c&^R4w^qGe{7|*;dXc=bSshnx( zGzV^UFlxZd0Wxr`^gJxa(i+uw2~~8B$(9D52toi>a80{S8v2$_G;B$^aN<}f?2>K0 z0e;VPTMr4Xe>2_|a0|c|a3gSOEVrqNIQnEBj}?!g5z!4z+yd z%&1o?%q)vVScJaBe||t~ERc zu35$@pjDJFl0zfB+k-#E3j-|(iQA^veQ zJh`}k!<%@kE4~$);bMgcWS@HS`f-get?b+0^x3X>HX=w|cf26?pyic<93totWsd|I z_Bp{Vo*>lEVR=?kDR@d`v`#UwQ5u#;SPDWfs)NfcM`RxDkoRN#z+tj{7`ikJUkZX*!f1YFupM|V1*&8jAur0E0#O_sErZ4hbRH4UO_5CXLg z7i2Z4Qqpt{m4`_|2itAK01?CFs?3V;mO%09rL=U@bqFi!Eoj$)JWZ6d$>bf~u$u6M z!SYyoq&kkWZMl>s4Sa*4U*gV_ZFtjw2N>55hl#GKJ8TkDpr7r8dw(@+#s$K7Jp7D$ zP_R+QfHmN-Y;WP+uJ~@q2$1$!uYA5Mo(~c9-oCSLu zCPx$uXQG(I;bqc32L(7PuzB~r$*9eP2a$xATkML95yik^<3FnoEiY4y$Wt2kx{-%8 zZqg!kt{$Bv+=W(QQkK<--GIj+etD8Zs=fd87&Gz$DNa z&=mh&Y|^hNWX~a{jn9*m6Ia3wr7+=dRs1mlFH!s!!NW@)dQl$w@MwZNGHw<*%ghC!nuy5<%Y6Z|{`pEw zewywJko7;r@|Qum9Fu!uzMp`+|9&Z`K;B=If(qpQsi8_HXo0+6fq_r;zQD)N#pJ)j k#E|trxB&R=z5rSOK}?29r!PR(FN?7=PdncUknv;xKl-+;3jhEB literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11a9952370af4bbb4c6f1bfb3e9e94a2faf16d7d GIT binary patch literal 16221 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_decline_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_decline_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c9ba3511e767a6605b6e75e500fbcf9d2b367aa GIT binary patch literal 766 zcmYjP&ubJh6i(*%)@@7mu(+s5FJ-`PXbbJ72$n@XlvNZjQ%Z=N&<;D3nI_q?TReEs zzoGT!Rs2)DSbC9Mdhq0JVOtM9napg#zaJ&4O zF@0`~Q$PWQ8OUJ*p|zdN$=$@wy~L}qoB4T=1bLW*5IEokpx!4yeFnd~b)F;|2XXkv zf*9(BH|%K0qP`GXOhVfHp=5eiO?8UxrKO3sULZm0e^60XDmU8x*2$D-3 zuu(}kJ!#Ll?5(Wqf3Pg~q!Lda8?~>aoGC(yBE2}&5yqV43}ZcqabD12X6+`%M?;d; zCn7YJg&nPSO#;1$G2y&WRe6c=H!wA4;N~MbEOLep_y~2G9H^p1FAK%8)t#akr2GKw zkp6&iijEmSMp^nEm1ENg-{`EZBWY&0TAB;wfJtP^q$NXT)f7sl9NKtH{%;)9x^rCL z>Xc*AutcqjjL6ui&)`?Hb>^MD{n9vZE?;=d6UXtRNdOkxKiiw<3tJc7R^<|RZ)1CL zL$_)I9W3f6$3^|-!oHvm)VMT!gl9vlxh&Nl%tnfFX@7?Z>|r&ziq(>ZRgHVbx{0>y mSw9sm1ECT5z^I7}A-oO%+_(e}FTwg%5W(o{qibNcD*7LX7SV+O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caa55f9860106c9f16af46fabff09dd43c512b6c GIT binary patch literal 656 zcmYjPy=xRf6o0c{x5mpwK|CT>!DfrxplL(EplBgc6brW*#_VueZg*xgGaK$~Z1itP z>}y^-fXDp3Q@$YpznpM&;!CjHL2wKO z6r_Th*+#wyvanl! z*xCc7%Xi$Rc|310>I<%UZMsCv8!n5zY|y2QNnQ)ax)sK1RkW4EL&gqUUU`jnQ_vBT zE;LqmYm9LzmF?pi#=gK3b#U>X9;jN-shrbC!py8{=u>4ywYjU*tdvu_%lBtO7W7ES zBU+VjX|uoz<<{i>18PbuHXAhHQ(-8kDH}nXzFb-w(>i~~|L=%l6W9{-Mw4ct2d+*> zQoQCil8^9nI6jF^UVXaueYo)>+Bge>IMr)chHe65pKQXkUkg)yFWL>gOYEY-+`j#r zUck&&NaL30XVWJhxuAXI8;CB_Z9mN&eG5hWSYYlVISUCP=LwLlQy8B@_9ux*`gwE? H$a?R8bvv<; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_finalize_amount_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b9ae37e782e00c1076346c21a41de8bbacdf476 GIT binary patch literal 3740 zcmbtX&2JM&6yNpEuGioBaAFclpb!!nl(=mwwW5R;8UjejAW9GQWxIGM$u{fVWo9?T zTzV-|{{zw+w}Sc)^w@hZSiVFfRjt%hZ;4`h;M6y>UdKtShEhxW=I!sjnVos_zWi%0 zmzLm1|DLpe9FwF!`Ahs$yUgAnz&w>K$&wwZA=hM?^9d)>P-=?c6$drcn%dB6S|eFY z%2GnQAzA1<$x^ZWlM<~{(*>#ln#9Q-ni8lEXsQoQ3p5RArVq^sGz)0156ucR4``te z%?We}(BVEbFVGP{NBhu1vsfPci*K_mv-~~$FvK*t;|I3qQb5pcn+9ctC2!jSCZ@wO zRWIOLHo+E4-EaEXTC(dwJvwMayQh}+?!)_22}?EEl4^-BC9GhC)d@iPgEdRO3}Z^d zN#GM*Ua^#}6!j1>2Xr)!G?QhWy?Zqb);wZAHu+YUZP#?{$M|Z)3*F$ZNz4Xi8s79x z*J9ZfE;URcV>8E2Ty`)Hn7Sf{^T(@)*kNb|XchLQ8-{B(uwk&YVKh7|bU2?ijEAA= zL=vLGAqWD(6dDj#Fbvamy+E9Vg0^D2!3${*6r|VRSJu1+uB^J7l_gBq1JAGA^aAY6 zUGuzk+g+_(GwbWvwJICf-KaSBgNok-!?+9c?|)FCaA|WsD4465R^VHlXWQuPP9mY|JDM~) z-bQ2bOSbf~^l2;eSsQ&8Lz(fHIfk_C`mI{w1BV|;EBYt3^kOzsk|;Rj1*V6yRg4>f!N z8y4UYKa<=);F>MN^;|=|_#vsUnH00!!Pnsd8nLbsK)|t&-fWBau@B+zI*vgx*|6)F6?>l#i0M+Z&f|+^DRx$RI`Afx#dfM?jSPY1$S@}( zoCpUma*iibGR}#(;uDdO5V*(r%hGpr>IZ{6y{L zDg|p@q?fUJI!c_edPvU?dx$FhO)DqKBz%meEMjk9V%QebJquzT@+`}TF7Yb#6Ee;$XJHxBn7_0mA71>3Pp$)0zD3&H%%l*qV&GG$&|p{ ztd`Y*cPp;-P)PB^3k%!t#S;OO%B z;)5@53M2b;)E=-QK&T+u@u5ez;BUr4ML07IvN9JMB#YO4Hv zv~_B(jpq97%jXV06#>bAJC!)6)>pmN{XmDFZ@*tu`)YV>m!!z1dO1b%@L@J)yH*H| zPLtPPE35}b-Lo(og6_)=?4TK&s;n~2vN2ROrh35|q}*KSI@q)z-}+8S*--D5;MLGE zMNaN2(9nkoh}UB1_zF!uceP~^wr4DI44TY{9uwhQ&6f}tUetgm&RCT#|gpIxhhHe6Z+Xj!N zt&*YmLve(M*hF#-W(*Bv5W@SJ8M8)_FqFp$LyeMYyYw%uVbnDXx&= z3K>v15h?pD< zztSXm;Ww%DyR_Jn7CYLItUu3pBp5m~lfZw~kznXtD$4pV6CDYL&ish1|7>?87&;da k;N^}4Lnp7v`ZmgS6c{@rdNcus&iE`WbnBG_gGgWh0GC^yKmY&$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_increment_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c6dee2daf5ebe16dac0bc3ee1358eb5f81ad6ee GIT binary patch literal 776 zcmYjPJ8u&~5Z=9)&%q(Qgh^zYR9s=7AfiBuEMXx55;6!xbIt1P8zn2>?Ot~GBAXJy zZ%F7ULHrb|$PGFv6&0N&6N*&q-r0hYX6Bp6&d$v4_sz`>q)GnSp^t2Yei~y{NNIN)w;uVL^Kysvc= zK|^C}g>CRxQQLTCPT-cE$AvoNg1(DQ6VKULKn6^`ibb5s(t~Lpv!uL6*8vh|ykM%l zP2~!bF=tBfG>u0o41;Fr6T;#Q2q`xR$#_zv2Db<~D&n+`2(wV(Xi?fyiE@jOm@%%Z zCZx``slLM*ah`rfOPz);--m}hgYbY&!zUmois#`ot|09WIG<2<5Dwz;1XvOt13L~= zItufdo{a7F?mq}6RnX0KLVN%+)Hl)`!n~R>q*4~I@*XRY12v%9b?*I#(3y)$>V*T&s@U!1c}ckXm6kGQ$6GYlGKyKbjP zMExBIum6KEk6n6dmh0~7U0tsY0#gM{nomQqRh|9|GOyN~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4c7dbd9a7044e0801f19cc885dd527741e762eb GIT binary patch literal 1466 zcmb7E&2JPp6!*+{zBaolh|t|lfUW|Ej#@HmxspgF2oR0Zs?bAMm8@aMY(|+cY;TlB z?X8u1%#E#j;n=Ew3KvFmL6%StJ#mYa&;zGF&+M#F)em)~`T6_#b>#QvXldZcOou4L)tr$pe%^x z(rzYHRK#c~-TTv=hBu>;7}bl^IA0N+{0#jkh@znuqM`mJq6Wo%;HVjD*P(UaX7q*$ zjd=`in8he_!B{mnkF*xNJ!k9%)2!$$7$B$N=@A|%Pe zNv!NPA&(|OTzi-Wdz1zjOuj=%kfs@oR!2+-!<7pXW=e6tpc6p!=39R+OQ=6i5B-~z z?~5$=?_`3;S8rt5J|yek2uAymm486f13!))`1urymtNcW=wqLQSgz&}5R57JVbv(7 zeqPnmk2s&G@g#V=*d&H(lR9K0pE4J6r~qyS;y(d=k6yISAB~FEYKd2mb=`E1Ep+z6 zY`Zu!DDj|Smiy29n?+}<#9Ixu^4^RW=PsA{a>I0bGd#QZqg%AsOT6B&?d}mTmexwV z)-dM>PmN;bN{O#D42-m&5AGJdPmA_WiFYcVU2L-b`)hC?-2eX?EJSZCgxg5Dx)@W_ zv*e|J*P+zMLK|K>^S3ysK(gs^ou&UsKf@(*Xlr?DJ12Fg<05}Qf z+|hR7^h(@o3Ik_zuWy6kDUdu<#{FmLlajw@FWQ)BIUJZW!A;7VrY1(TGY1dw&?r&(b cK%1x5Kyzm4DT3zomUc#So__TjK~tsuCqRI9!~g&Q literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a1a309e19b0a5d26fc81be84cf4f98f08388627 GIT binary patch literal 764 zcmYjPL2DE-6i#MlXJ+fRrFvMpC`d15z;3XG_EH2(Q4e($#mkfu;wEl~otaFNY}qM- z7yS*bH?QJP@nY#ka_Pa7w}rJHdNP^Wf`Rw)zL&iBzW0*v^Ye4SEcv&SOdSAzS#Yx& zGh_P17^i>&3R9557(#11sgt>}n|ZNUVK;4Le(YyK96;cJr+|7N0c|k&&8_pqVd+P~ zZwn%*7hbWW5tHggp%R|U$kE@>B-OWiT-m#cV6f4l||*C5rT-K!+ITBx4xsIgB$-N2#@27$1#D zTAzr(6c%=}+BFIEBE}@oxvHv5jK6}ZIRn=p&>_zl8suZN%j8h;0zKo3rE5E!50iX= zc1VB7a*B>wevH!OEh*Zw6Ds-&=H;usm8KYdoUX-mP`9Lgl`Y4!Bwo5EUaqWG1hgs oU61;aXd4KP$h$^OTnOQn58%cnxOWNG|M(#czbsq6bWT%T|W7JC+) z0S8WUC`dwx!(Q$ce&W~I&x0aNLINH<10H+;9wPbbH~C34i+Zi!&ghZq<{_R;P@99& zWKwAB30`E{*!#vn8W+qI@?n$O=p_#`f-Zo%}5w`AI?8N## z=b!n#pxS&gF~?G6Z&UZ>A?i{J{xVf*p{w>#iZ_`mkXI2-%T(||FRo(7L|PzY)e2*U z2ql?-`baQoQV!+F4 z6PM4@|9fPrX_7Us`sGZuTwPAZR&>{@kMMKt&ijM8=Y{b+g3i73;QZC6_V?B9kDyz7 z)%tbPpx3H4nxFfYyxt&_%?g#uaTmKDZqR^L2p9w{+VGR(1zxEK)hMa|aH*uiw1y_hV&c8R;kgZe(8^gnk)g@%*_m+tbPk zN>Pe)RNxq6qdU1%xUt*nZtfL+>|^Ah7bx{Uq0|Tb-L>&?PzO=xw=p8ztRBE|1ya2( zRmPdri1#X!O3NDquFPj9AU(99me2E`*;8$wAV4urQS7`!;DQJKJ&hWIAjP{{E*ZQt zM;wFHZsau^&nk7qMfM>vg%4m1Lc*IwB!z4On3M@in^j?9niRZZY7m7@NGVGSptM=0 zwBTu#8@)^Eah2ruN0>zkPqW6AN;GSfCX8{_7LwZA&6xUzX4(N=e2=|NQNMZu9cNQ%60~l zNm-eAn*2W}T}))X`eiLTrdz{8P4baupV7~5@6;PjwTM_>gbt!k)3f#axt~RkId0(@si!r_m5Z<{&y-O7R2|^s6J-9+zw9)?n9r?n< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_authorization_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..200bbc2c689abb4f6b129e6293006f6cc641276b GIT binary patch literal 724 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7cea76e24379f1cee47f9860e3be6dc74502ddc GIT binary patch literal 649 zcmXw1y>1jS5FYQ}E#Z=Y1e`!r5zQ7kE2NE5gh)`J1A)?PV=d>=Wp%su#`c}=BuaRO z9FKr_6e>i6R!T)h7wHH^D(rP)$ur-0{%8Dsb8`di(f^*5Cj{WP6K+p@1J;KYoC60= zDyT_Lh{Hh@)L|ZWIIN;N&SL@ryaXP70v;pz7JC0YSteQUj}tP|ZoR{^8EW&UF{KpR zzC^D}Z7jb#lEx`Zg?#K?J-vwo>t|Lz2ZWq($b%EW5F?Bq+gEon;pD*bWsrsK!xx3( z$5@qfR1Ur^R8i|T!9`ODKFWG+%9to>WUSp_td@LMIoxOLY*tiWquc~kWJw!pquOo8 z3L&H^y3!f@3Tvx_>yPwQ)<`E}L61>Sjcn*EX|UQol5$##2|X&tQxu%eQOs#oexS|L zoJz4j+hl(2E_z5wQ0%*Y15TUORZYLN0xks zU;V)1jS5FYQ}9pRDyLYzQ|BBHq>XF=L1ML5O>yuuA)t&>VAV823 zDv}f8aa2ZCoW~uG%cM&4lt2V8K_s6*q)5KS!9UNMY}EVXg%N2t4)J)7#=fa-p`>vy z$?L*c$8R1e>y?E@F$u1LUd4gcV<(>iLQVwa(R;uc6HM>BSAQ`RWY_T~8pZ9MXIzUH zyeK_?%Qde|o8hA7QXGtWZJ#m8D`c!)W2{nQUV1!W?0C-0pwYg4ojB6Q#_D#HF)pRD zysMkBuds4DxNPW=s*q0Qf<8wxv#O@Al*Mv;U#VFkr*xlBW+(+cL3u*U;sdQ4d!*#f z_{mdh3X9vdGvHG+)TJqEq;*#=EsU9ae>QO~u#c{nfP#8lH@fF5^rY{ux#!4d_%#?V zljXZFH+~GZekNPzQIz)e=Cz^keHhY=nGTy^Dy%~LIk%Z@YL_)Meme*Z7Z#=Q`wCO( y5^wmRUF2I1UG{gw9QX8HC%V4`=Ak3!F(Kq41F~}l!!sED%@WdIKDq$MI`982f2$_| literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..486843923372dca4d9c50be78df5230d94c14edc GIT binary patch literal 1642 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 EA0H(z3;+NC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c7aa64bde617a8a5dc94129f5b12372e97793ed GIT binary patch literal 642 zcmXw1KW`H;6o0;dIZE0BLPQ|MP_blaEa+NwC`d4%f`V9Xv5xpDJ>|~6+D??);WIRR z1jI*SLM-T{PE2f-LK!+?pHoYI@Av%vzvu7U+go6d{`aUD6M)}NxH<6#tdA@>2M(N+ zP?3xfhl4Vx!Yu4?SVmQx#RLL)1w8r$JVx>@^!{1WB*WexCk#ouGsd$yYV)=>g%sMp zL~jahEWdpsjZ+p1`NX?=x`_kpr&c}(gp6>=f)9WpMi@V|ukK>P$)V*tPoRroKI#bI9;Gv(6abQ>&Bc) zaWH!Joa(~her*l%DQard6gASiE0-2p&z(P;*jAX@^uoM$R5z;U3Unm3S3j`iGyLig zR?+JHms>yjdq1PS%OHqTwR>aeS|9i1e1Of%8j{AOjFyWzVEwUV7N3Wv|E=S zN|$)Y1??i=vFJKI^kY0y_pNBZ66nX4T!w^@s|3iw1q?1=_&142x_WX2mUZ6$0TKSI AM*si- literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_return_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_return_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cba2776c378eb79bc22f3d66818e94c6b31f3493 GIT binary patch literal 647 zcmXw1y>1jS5FYQ}9pRFI6mbGkMKoLFERr_5A|OG50t(P=Wp%su#`ZMdK*$J(Ecgf*VubNy`|2(xoa|fP1ZmiAy~q_m zLNiywp?A5;E8QlzsB^&&(_Y(WOym_Z)~+#DNj@(f9x!$?&r7dSZU8E>qz$!E?IvTn z5Ypsb<&1rWmDRz`XL>9vq*Jk=FHz5otm$iMu-rM2a#n~bJ;*0B6r7%-IHhIriPnud zmSS)8e3$CN;7)A~@+oR+(-bw*x+|9!TF;$7o7fhZ>bmjR8;t5k^<0gP^zGG;EIEf? zgW)n-zW;LX$6)(sw0#u>abIoT8M^L=KGDbq?Y6F@hVj@6bG?SBIO)RL=^5OSRW*}H_{C8U3oi1e4^Yp|^I{ty4+ BtyKU3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_ship_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1741e01dbe68dc8aa204b880ab09ea5792aeed92 GIT binary patch literal 643 zcmXw1y>1jS5FYQ}E#Z5JPjBPE>V=ih0U;wCvfv|Nh!Mt5?5n$&aI$ZC6AZ(4>s7A! z$+V~)|B$P^(rto^Iv4zC*lSb9L|!3d?HXg1&8r_ z*cq`EM;Q(J?4f|}YiMUAxX%B6+YbLY>-wgskbFCKaIsBToxRp>}+uYPRF7x>j5 zETiSg*Ly$u+drf2t00I|wRvagdLQ^SBc}W&nDnbqZq99Dn%ZXdjX(4P!-YYi-M;)( zy2KkUXczf`MK|fbpW}ggWJUXzKtHqODkOwlCqVWtVQ>ktn>a4X(_8$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ac860c81bbbe903d61725ad0b0f8cc878735024 GIT binary patch literal 647 zcmXw1y>1jS5FYQ}9pRFI6mbGkMKoLFEJzz&ksv{V0wU0CV{Oi(%j$ORjqQtWMN6I` z$0Hyfg$mK2l~PgBMLI%}3VWSc^2|4${~3Q@Uta@z^uH&?2LkZh33n&H1*@?I7r=p& z5-O4r;&4y~RhWex4$G*DvzR~tuYgCNfyYR`h2B3)nk4Q0aY9PkjrVvuM{VBLrjSD0 zm*`EQjpg?brE$taA)k0xPjBPE>Y0@<03jnBvfv|Nh!Mt*?W?<(aI$B46Qp6gb&xB5 zG(WBiB{LoYB~7!=y= z%+IAuyy1d&ksnxe)8F%x9IGuW+W!RlsU=q-A>=v%vU>@`OGy7F5$P|-*I-%a{U72M Btvvt$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_card_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36c7c6f8e499f8cb554873102c2b649c86048a0a GIT binary patch literal 12102 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 Ckr>th literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b605ac98e8029c58d5ef023270b3530b11b915f5 GIT binary patch literal 13355 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 Nn)}Lsjo?#l`(MNIgOLCL literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0bd7444a83d6940ff0fb95d0ceefababf0387aa GIT binary patch literal 13271 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:a&UAC-J?97lnvX? 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 DNp%eZ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_cardholder_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1052b1dd1685587c63ea2833a25eddc435500297 GIT binary patch literal 654 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 E0Kx_LR{#J2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54ed56d111fac2bb06b4f2a70cd97f963f997743 GIT binary patch literal 5861 zcmcIoO>7&-72YM6Lmd3fe@*J2E^*vH@WuPZ+{V!&&vBn~8mIAPuEKBgJhmg{NF}-*tq9u! zdykf5mH2kNlGsjE#BGu1BHV|ZCj5%iVub&F)RDEFWM~}F1QC67h@m2&$pD&S=n$Z( z0GeiK8qiDt%`h|zXfA+e89EGTK7i&JIs)iu03Bv%0nl>+G|$lUfQ|*w5r&QfIuSre z8Ah85UZHf-Tg)lDbiJB8`XjJU+oi@cixRYmZ$D8N@$FBG zxk#^#2^zC8X3a^r&yX)C%jwE+h|ph_JL8Vq;nso!qi9&q?W zLe(8`GTkH)Z8l6WWtHkrU?018rIcmOQ0o;40nEKlcg2jB@?dj5>*E)Xejh)v6ED>>=WB>i zuPyX(2tQfUE3il^0kN~HLN#{I1iipctBSefB!wDU{|-@~%X$TBEn33<1xQ8Dbab3R zJ=r(-j^kWChH(=yB)^5f`2t9|VVs+5&0T93Ry)F~cjS0-rS`~5M_BQo-XjV*HGrlT zU#acM<&Ln-#yRJRYY0Eb72urh92s8YGh#~nM{Erra zge$3c`_9gAVEE4VfOEE;v69jGBoeef_UL}h1Pe`X6bt>0At`0Q-A6;;SyJ^Vj4s0- zFf2Kh3`WusH)J_=7K@$qI`pD%BY6i%xRy7NjpPsTH+O*yrsZ%Wn^j-O} zb)G4%;6lPr?LV}~QXg%H6_`DW4%gXzSS3aBcWiusgnh~&6u$bWzW;w zql&$x(l7CNNrk1EMnV$pxjqVIp929^4y?eBV7(N{YxtX+Kn7Oez}iCb;oAB?8l-2& zCrNpwkN(0xY5WAuA|3r6?1NrK!qj^QTH#jtG4??M*N11c$`GaYW|okc=U64q7_R4W z;GDKfA~?5djffPbd0^XFKaOkUiEeF4->NWCit{PgQ%K-=CS(ftn}IhlqQY257z-qM z?6f5n>@nxEs0if^yG4`@=Ngelp@SWViW%;X*hQ6dZxe5Jd10s8#B%fX{t90sY4E(ee9A^=}Oo8bb^_6-=8$j(h83P@obg#tNI49zLhXni{zEAKC6=D>$i zh8DSkqe~m*Pf5e-8Z=UrB2~IWHWXBOvvYeEB2iYlH*Y@kcHX?V-<#h%ofd+JzyCa$ zx(NNHCe35doP!_1d5K~a;}m7Mhq3aF)X2=9S^H*cWp>ZboSu`pJr^SbeT!o2XB68M z|7PladR|Q(pe}Xi)E{|)|F;SWuw49sJ{nRkzAHsizc(sryqWYxUnkLamJuDifcZ;AQ4hzcXWU2BjPWWkYQ@G)7=0kro)L3S9L;9j znsawX>^W)Pb>_s2>!?|zH|I^HugItswB^!f!potcs>1Ih7G?bD=}*vYMk7JvpORci zx34F%L-RPv2V{pnC>WIv-7BL!mUfzCiI9t2L`0$+NB`ZgOe;4*WSpHbp)T$+C$9OKeh8#(~AxBbgNGNcHfo!sB9{MCuI+7N&Fe`0hJwf|Pok}Fyb>xAk1gcSNhVd`d(ju@374z0;0Jt1^Y z(3~sD)(X{yz?G`vT%H{P>q(rY6StorCbTKhVmb=vIYp9Xe;R VH(oqMFdS~+<1iV$Lon3G{s&EiXA}Sc literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93cfd93a4e2e64809ea48a96a91eea2b489b9f5a GIT binary patch literal 5545 zcmcIoO>i4Y6`qks(&*2UEGL%bpP0mnBa=vu!#cafyClIe3piR}7bvuqnwrdX;vteo z=^42!702bsdBceuS-9+h1IMksaGEJ#gaYl(igO9C)wi$C5Iu$P1`Sue-ng zfBn7pdit-)WQ>EK@vpr0tu_E$ZfcqY&3LkN5i12?5+GACs3=IPsA)<%I7%Bo99YEs@jR6`T zKobm20Gb>?lMI~#G&O)uF*FTmW&lkwbQ;j?0Gej#44~%*&R|))-BS9j}0Y*Y9zXfR&5H;W+K^Gxm5<$$t1s7LC4iZMB z6)A{Tc3U$VO_My(Rqb)>M>3Ubh831;db4g?^FEdL_cfK&6=I3R&4tN9L$0gsytBm* zS63hY3itG(VbW{MARby`jhM13n{pW@6(y-I*N7xpF-fZFYO{*@gd{y{%2m6DMqq_j zP=i&ZBuTEexxqus>Co^a7cvEgQS>Q+y<#UMKCPT)_FKSA{{K~$a{vY-aMV-GsWC=mpe z5rL725rzn===F*^y<#2`caVgKBpqbRMSz$o#2h^B;%df0rV(jn3o|qUnRaQIGp}&b zrQ3I9;9M0fMpT?!dws&L+s#H*Q)H7^QPs`1Z%o*EhssUlC-5-#*vq%?OxXPap~@cE zhGq~j`@06vQ=!@;*vCTcv`PYYOR^!UZf*PagyWa>pUG8Cz1svjQ?1QR#5!NsrG11Y zc@S@JOgtz!D1~VIu*?K5jXI_FwFyUf&)g%_3h9^>M4E?_rt>HkP%NTYLU94bG6*YY z5W24^Z@?twLYSs;#te#S6zFB>42m#{^C+0bs4#PuCB7)QbPx41QCSl7(P`iJ5+0P-HJm*C5lPFf?;?lROPyD+ga$SHWkzH z73{Kca(!@4FF)X5ROsOZ7TPJJ#*nu zyaQG=GhjtNQ`m-uoANiT1E_heVY&48ZgpN@KMmt*Kb0%m7Rzi`DJv%5gko|i^c`9i&xIfWr*nS2=(Gv{~$E0%I zkQFqevCj7#&NV`eHxNVd5&Vs3ApD7OZn?93qdT+F6E<8H;K`M`)9XE9-GzLP+y|P! z@t~-MuEGBt*P-TY=hzYoA?xxO{h!`9P7i=-wM=iqY@|u8v4pB)ri9AD(nv3l6{jw zPde?mEc>3td?&>-q&HA(fbiGyJ6Mh45AZkkK}@D)AJ+iT+)8KVjc#tUCv3XxJdK{YRYpux*?`QIX!<=hH3o+}; z*gbpq-+`?no#;1Fpp&E5Q4~>>K=|um8>>kGfzja!anF43Z~xgK+d0)?_wJi|AznBSm~qG(a7TC^K4e)jO9Ysnzf%;ig1Bo z4`z~XznIY=G_b;OCxsUmDnP-0=*ifKL=H?+H}GxE{#Ik3ZXz~gZ!ihWt)O5R2NoEa z-)4>oO@a}LZG0q(o`_raBh)(-DF)A+obekFM?s$FzYKHy%`dpcFSxh6+}r(dniroJ z`y3?wD{t}Qi$b4+q<_G#@#62H07<{X=b-RbpM#{oDMJ4HeGZcT`8+TF8E{DY-v;1Q d&B14&%`f^KB>f@`{i5Z}0KliMFA---{14mpO2+^I literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94d33acb44d8ff83525fb4b3b5848e8fd0ae76a0 GIT binary patch literal 648 zcmXw1KW`H;6o0;d2_=y@aCg!*SRFcW2^=^n zp&~gU9!F(V#d+M~xJ;@vPYFcu3V8Afc#7m(9Q^ZakqtV3yf7fm)(Kur(b%`O6-pZS zlDrYdI(~notXB$+{4BTzx{d>@7f!wegq(25qf@{b6HK4FSAQ|%DtW$HLT8 zizjHcz!|2Z&-i)m2?jrJ4Ji6c#HtZud$ zE2LDmXiI18E3BLjZa>m literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_submit_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_dispute_submit_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fecec2edfbd962732567d7a770d57c8108f20795 GIT binary patch literal 752 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 R90q@~gmgcTF2RY``ybNyyX*h} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84a004e4a3f12b6783032d8721f822875258fd22 GIT binary patch literal 1380 zcmai!&2QX96u`&pS=+mtqzx(Lt0`?0h@7f1&}-X66$uDYh-f&lLK->iNjk(HyEC&P z%YhScL*mx0#35J2h5v&~Enm<`hyy2Xk&<%gsc-D{(nv_PZW zy0e`sW5ooGbZd8z(P)G9RIhSU$&p8N_A|_%Ad0$Hgu0E-5w$6v2S%Hbbr;5#Ax_0c zyfNnPh}dIt(Gu4@YK|3zo0Xa=*17gqcowx0Y46) zDu*h~f{#)~8a;M?uW?f^483rTotN`yT`n`sH>82H^pf0eEE@ z4YIPN0h6+C_LJ;l?MYM?pTtmoQrWI&1JQzDN&zY&NFAs#+_+R7(x7WigOCuV<=d1tY}i#2&;X}Ei`{Pc@_dbPl-|IuelALrAX1>UUD zo7Ye5{K`s!S84(-+-KJ}^SMv*iLC-}m0T><@%{fLcn_9edkN}mQMUiU_OY0PZMw}Q z6lFi`$4bwDp2eYpHcV=`?K|Qv<9^nNIU~wr#(QZRiv=^kYD5|0HKUo&mSPnYxdH-; zd3kZTkzc-1;2U+O3-6rl=JRU>UV9}+vv=EX>)Gl!*NLcp7bLCz7s6b8?WjQpr&~4E zbTuLLSWzxbyOk|gMk!n{uTHm&>SClXyt`E+-xu$KodvJF1>)4UEbF<0tUG_A*}u@e b9Njy2u3Fv+KSwZ}-}fxamsjAB5aEw(6y~-ue&pg5^szmmGTPjSA8Or@XP(t3^VhmiEnizxO=P^XC2D{xvpM zNAU3frrm`GLVru6d@2LwWDk@#$U%b!1?#_<%ybo0nBL9=*M~ik6k~&2j9M}rOi7TzEcKI&K%7wr4yYD zcS@)=eQ@`HA3i_Wf7?mN%?z8Rr!jRjwUE~DXZU^zP2E0hr=QGcc)mog%pT2tl}@f^ zc(sJ4=MOj18;coU%n>$Qp5z=k2crU=Y=HYxa+Y+}N`ee&HKgkh$%&fiX7zux-AJD^ z7>r0XwnDgXMm9qy5zT=SyD>CzV~5(#&^0h}*P2;jQ}UG8q_{4HY&|A9%x0v>YcMCZ zTcvme3SR{Q_X_ti+es&_3|nOt+jB>AR(j=Oh98!Yto0>PMIxEw;$q8hJ6~*=LrOkl zR8wPZaErRjp)0rSz87C`u$vHa;lbp)`35VX@G%f@u!*Y~zB<6f+a8W ENA5V`hyVZp literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea6603f6433c4db01abe20408d82b93636eaf6a1 GIT binary patch literal 1312 zcmah|Pj4JG6t{Q&Z)TG&TQw!LNG%)~p=Kz(wj8QTR8WN~l*;8=^`-69j2+QTC=tzv}G|# z8y?he<=4v zN6Q&MD8ci6E&B4d(6qgBQ;2=WXXVYR-lx1NA5#9XY}x&?U+6u-uWeubxKxnmD?JdZ z8C4}b!+KiwF6fdeHMjRke>y*;aS4KOY=($uZ}$tCS%)p8FxC42kI`Yi`80g`Hvc@zBSG<4OD zide3Jxgs@_85J{G^?R%)t*Bj6&4}@;@1^J^t28w^r}{e~_g$&X84e}94-B~=tb=@+ zvDJJ7R8r5Sq`Y33Na#H(P3{&#xn_D{&VtEK*w(6A(t%|#-;2jb#NfbRRt#c(>V zm+5u?g+7t*0T07e9|9}`jPZ*Y;cI`O%|FqNXXwUpoZ|H7^Fd-InQYR+1N}&v$u+Qm$CBOH3e*fR|xApZkaL4?8C`JU}mltkMx&q662hM;4 zCnZ!QC&c5ZjH)<~TO5~3mF6jd2%ZB^-UCmOe2s&Do-MLL=eHLIq}e#e(AeW3*b}437$3RHn&rUKf%d4mwSjFa!F6+dqn!ZpL%k2ZDCPI$sK{1-3 z^(Q}55}|9fM+ZI0xJ(4l0E6VYwkPp0e<%S=gIl&Pq)7JwtggAmr;~<_2!MCA4Wgq9lD6^u9ynT(tZ<7 zW*4<9BTV9M5E#xaO5-;g#?&U>@Il+icO1Iz?uEhb>w8XgzYWYIM=oPR$W;bp_X7GC RF!+-tr2Bbz1&+1e{{W9=x?TVP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_personalization_design_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf1294083d71646cc23709a218d87cb740158964 GIT binary patch literal 1815 zcma)7&2QX96d&8OUhhY`Nwy7bngq3Knz-t&0|*JEmP1krB%&xP>19zha@Lc?#A~}V z-YQ#h1d0Ek=`BYP7jE462e`!YrJ4%|PMioz04XQl*gLC@6e(ERH}C!4n|U+uYk!@X zs3Q3IKePUy!2K=-^_7Oq=~uwKMjrCC0QIzv*3&z>CS^S^dboporB115c1#WF=u_kw z-yjcD^GBoD-zn#42~cwkwQ{r!s5ORG1{J&dhumoE0zdJ)iNNbVPi#Y!*ZqVtHxRXr zD0xa>^nFG>QP~>A)RTtY!d*e}P&oYsnAeD+j^?3`{tQvW({2Gqv8O+RwIUH?h+u`# z5;Y|@#7hbv?KKrb%M@OHYwv# z=m!2PH}RwJ3FZE7_$>C^gl@Xb?eX)*Fgjl@Ej|C5CrnhjF7rqb?MAOY8rNNU)SAnf zPuUhdNJJeDkpfAiWYUA!4Lwl}qG-P#lYKf6R*xnw+`|<(bbC}Z;=KX)yKX?X`=J+5 z@$gEAn~d&IM#C=Uq85({&4jrj2OT^^Ioz--!XiZaB1BXP=|x^YkbIqx7kxJRl6FhK}KygYS$5xH|oH&%m1V7#_F8OAt-7)5#*bZ?Z_L5`cO#x1d6z} zM_q5E8Vb2;!!EHK@|81^yd#M$J$6%)+mhrln3vqUimU*`*MUG@Ausdobjr!FqoUYc zI9_nl>6HwxC`iWo3ai4A^l^Ex<&7=|8|ILf&lue{*fgj`)#p%^J8nNnE_v82m|XfW zxi>#x4H!NF1RgedJ;T?>%0L=z*i~UBgBaQ&@4%uVrwW9?jG-Zi`No<2?6_#ZaI%+vq? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25f72632cae4886934b403b2641203770003bc17 GIT binary patch literal 987 zcmYk4y-yo46u|BKa4sPMRkV;og%Gf0fK!1HQ502b2Sib;E?KN2XM)9@@35VeNL9PE zOD8tct!vf4qH`BcSt?6ahfdv)C>@w;-zBJ)&VKLb_ulz^e5=(eKriukj(&9k_+^yw z(t5tGn))~gAqZgvV%UPv$W~;-#xON4xuN}4dCiL*VwwL0Rb%- zf|m6X5SuvnH6v~axAa*y1Ql$=ty^9i5&M>meVtq4g|4w0S)%`V?mgn3;r()>qU!rc zeL>qn)a_$ee zVtmpKqT+@l{c2?k$<-9b0b_}dYkGk(ck(OBBsT-_8C>Zd+`RRVl9>1%cIrPS;#elB z|1^;#T5TrDv3|VY4BE#!PrpZ4&yVPVpZ4WZ!Zy|(uKPlFbv4xnL5B!m|COf1PxIpV zREVze$LXki_#m$zj&uQWVYHU^xu;)|Z$=QW_4XcopI#Vs=yHs}G#P zi;v~3x-@i_#yvvjezoz)*@)t#ZUGv*UBXPt|M z^=xJ%t85OP&7AZ3@pJYXo|-LETEn~;Y@8I6&CRqbq#L6%EDC$4P%t@_gb7pfyv%t+ yiX7)mxxbXwb{silPP#t=MH`hQPx%WQ_iVTAQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_physical_bundle_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14d155c611236886aa836f1b5783b0a04cba4bf5 GIT binary patch literal 663 zcmXw1y>AmS6o0<2gp#%(AtF$xiX}s1(XLg73JC^Osv?#Xl68%rl2h*NtL;R&8TcDo zHde%+!h~4RNu8M3Dupt1!ak>#{NC@`@5Ar+{C#tC1MJfOp62ffz;9>Vt#}PqBMUBo z11ANPBqhY*pa{w^4O<)*Q5mN(fdF0tk3IsAk$ek%e45nBp!3HW1JZ1r;`to4c~hBO z3T;oK*SR)U-#?bdUFHh;*oS(#&I7Aw*1iCQlyFFccYq;A7(cP6Zezm9q1AOT2%DXg zX|3~dRvgU*FYpwN%5i}wnaWDtB)F_H!H)->rpuVfN@T3rV62pUUO3!i?0lXT{zf?> zRAfaHYNMKM#xfzK$=VJW`wA<22e%*SRF+65Vo6`1o*7xuSJGgycO>O37ZZAvjb|u0 zU7%RdB0r;5ZKhHj44>~)og3V%tV1?IO>LRHLRz)YrMcE~7tgA7Q|zqmim7#5%sURN zT6Nr8o#@)FA6xMWe)am7(dFCE_kQ$te@464K@fM<_MM|+q3;V0ZN_#wO#1OC$91rNQ!aA{CzH$%@)TX@SQZ8JZx=(c<486Bxd*0lc%^o|wRAtB@@0djB!{VN#! OO(N3$GP(h)+UWo6ZL~)K literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44578ac7654f8ad0e253ea7adc8d6c1cb8e6d93b GIT binary patch literal 1376 zcmai!O^Xyq7{{x-tKVjKR>fU+XV;*p5E^kCBk`mjREUC^4Z0pO1d4X59GmSot7?`V z@n&+Lo9oT1_yO`Ea1OG|bcg`qfi!PyMI==yp2@9`Wyb z{JV?L-@4I0b|Vgd0r3)1M2!Tc#=tPNHWM?o23Do51gG}EPMv|1x&zlhCi($U{41h1 zGu~SDJOi(y4p5i5bLvmL!2d_51cq9=&z_E%kXwa}^GpE2_hKOfOS$)A$#|5gg?=t| zR?Hby{`RC`^maUy!+McAHY=jTDYRcAh6V;j1M?wb7Q@uI2GmE)re+Tm5UVB3Y6zYa zr)CYe=iF_GGbim>cTPO&>8vKx*L>0m7Syrre1~QFWIshbN`=D1h|_25U*KDuMUv6y zaVC{JtQ)G!G8$(i@`ydoIa3bXE24}lJBia+swE*KE_HwO80r;ZNmSQXlm=B}_1Laus17CTBWKqfpQ5{0koQ@N%7YTVfj*_Ow5|XQ9ghW}E!$5sm zgm4EA$T0+E!JfG`&>M6J5q%toPx6$7qiip{&BTt(i||e^S#s%Sp6|eZ!<*3%YC^+Z zmhFZ~{3t9Y@=2au*}VK+DB$id6_5~(mY9=Sic0FP&0@lR zSi1@y2=M~KZ|KiX_r=`<)3m(<2QBs9^}a8=S7-QYi*>mrLj~ik(Zu>-9H-93Pnjw^B(c3(w!>SI| z?XGL3m*yKfR44gHt21r*7KFG10V?gCoZc$EwHaP(3({GcJ}CX(4EI{%FaJ+Yy@;N_ zA9U1eef^uHu`$W(Zw1$XdgaJT0dA;Gc%p6)wkKI8v_~sT)(3&FUG0o|=bxYEqj#+~ z{td2=W57>bgm7RPhVj8c#+CPI^)Gb2MAwg;(}p+Aju5<#ZX7qf{hvP|cvZXp4~^ej APXGV_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..491552143c4e19cf42a2b393b8231fe8e0f50cdc GIT binary patch literal 738 zcmXw1J#W)M7=F)RaZ6HE5fp)#x_M|UTFO*0L`X1{g7{dxoJ{T|wPO2R-#NrP{Dy{~ zfcPmaR9(;^#K6QBDU_iTcXoP`pL^c-?%t2*_19i+6Z8`Q?j}D7z;9z*FLzB=BTdeL z0V647BqGFcE44B^vKwxvPUc2#=0zR>3!VUTJ^*u(e6iaYQK$BT&L3k0L~Xsq(+Y)r zUdV*!LVKK}M99EWoufoz8K>&TF_-36QX(6-Fs_oZ&iup6nl6UosxQsKQJe(JC&H`I`@mMA^R2_yXN@Qw7 zRHDF~Y3d0X%Ss#vzVa!};|wWPo0MjpRjJ`!N>8geZBI&1CoCNe$`-OzHz|$toa+## zZ%Rue@n=|Rgsb=A3C}Q`@abcSoF0lYA16;;}B8g)_`&VVb-Ri&~!W ze1CXgcn|DadcD|Ii11`@~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35e9460d441c03c2e66611bf58463f3d3a18aa8d GIT binary patch literal 644 zcmXw1y>1jS5FYQ}9pRFIK%78S5zQ4j3(`g@A|xnKKnXP4SW9+vS>3L^v3;l89-bk` zBOo4y3eljIQc=-GIzo|(@%m!PGv9drXZ(G0a|7s@e@}`N2JqVnwV9N%R+t4y2VqRwP~H0rf|A!Jse5bcH#mC9$O!vi7CXIber+V!s^B5i1_ZnuTV zq*ONR3K!xltVjnp4L?&A@`+sVmuRL|)%>-xSneJwH7(?XA7-aiOU~yg=e#UF^188S zO74xHzu=~@xLcD!HbKKFO;IDSyK;G9%*^=<>v|D--Hh<+aoy;itI&}?UGs>@XZST3 zE~DkimpeZOJ3phHt00K`di&PU^*;1z#uTwzg;0JM+6}r*Y*SNK-}rqm2wYf{#x2ZG zrAxf!f_9Pb5xVK``#B!yha}Qx0`ru}Rmd2-PJr!Q!tfGCf0Kyym*Z<7)_MO22V|^h literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_token_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12b26fa87416bb092bfa314a3be5ab5aa1280b32 GIT binary patch literal 698 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78f1d78341a6b4852e301fa0c320479ac40da5b3 GIT binary patch literal 14987 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 UOZd86sZ8ws{NPt5e6cY87ag_iQ2+n{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47e3a4ad6a75c79a369d6d73b6cc3cd018aa2a2a GIT binary patch literal 1437 zcmb7E&ubhv6qaT*zt&zSA^x?tNtYx9mLwh$pF*7;;?U+0oYJ@ymV%h<$m_xLE0Q*N z(;nNqZ`smIjxGIDddV=CA}Brd)SJOh4mtH{W@p<%Xvn~RdiwOu=)I?J^=rG`Lhy(; zYtdIOLVxN>^H|g1^lJ!Spb&*PMhWg?tYafK60>hsu^E%Z>RXB3w-cxDU}T`rP)NQ* zp~dhoX8oPMTd_8<4s&L#H+Fm8Us}?`YT*m^bi{;wl*=ef1u*1cBxKK2&cjGD9>i*H zH;638K_V0x z1UytNjR#pAGXA{#PT>w`fn?#gQ7V-)s3)q;(lAPg^a zlB;u+25FkfpgKuPIjNQ)H?EEKGdcxCZ@=*mvV{4=^vJ)@#G%Y`|3M~MeDhwG9YS9I zyz!Nuf5ClUeeAqS0nV(lp^CKZf`h6<@=_!q& zsk9bs=40+b1{Hwyk@ykdd-Pjt>3C4I)=IK=Vi=ZtVxtQilbzyxw` zr2 z5X2J9V)I3v?2?9M4cZr6`<<_9Skq9|v!SC)4P1vnJOF@ma4#P36z*zCR-3lK$viH+ zPDwfq<1M~NQ*WZbzuRl6mD(bkl-Jh`&FXuG>kC8KV03UyZPW|(gt8;aQlT%S%C>bO z4#;csRGI&`nz!zD{pa|EUjrS6pSS^VVq%P6+X!#{j#mCacMEj)%`_;blLS*A8!)WptgcWMya z;4`dz1jI+-!n6zWWd}~&ipn_bgq?K4lAqu2J-_#U@7doL7Z-q8@^2^o?Evu8g6q|o zE3-#NIRyj|n1LK75L(^IoZL;^+)KO)yICXm6F(1<00IX*2E_XaNQ1(!Zk;CyOFs&J zSr9?J^nxCbs8r7im2xH{M|*o|UukbYmCB%CKUGxVOyB5nW$&hfl75}3mh-e=wq@`s zpdf(+B+hF689~Or<|m3%ja0&Txy?= z3(Uy7&YZ}>+S=iJOYuM|asQqXhdRuu!UQYaivk@Y#Bfd#(hCUXoQyK7w-7oW;jH$E zz?2nsuG%#T^fE%2F|Kem1BAYSnelEYsw2)eyAL*EX$H4mm$3U}&3 lKNM{Pq1p0|5mOgJc(TTfQ>(X2*U}x1m>us{{ffD&sG2c literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57f506ef51fb8328caed580befb4ed729a72fb97 GIT binary patch literal 708 zcmYLGO=}b}7=ANfJFUBFRa_K7XfMv88?@l5^iTvn$SPGq<`Uvg+zvaFOp{F6J$TdK z(Df&XKgCn&MFx8EaFB^s7qe zf-8drFLR}hyfzfte&&*8BNyuUDi1858v6toq$q>bdk4&C0SoUL)Dnv_v}@#=#XBp+ zv&hU(f~NmgQm*L8mOWq}Yo5KPl9sB8*tDWNYkIOp2`xp<^)QK>m=I1&Mo6D3G<{cmU@EkyB*NWN+Cw#wo>it7x04NL5H{6}D|>Lau(p+(HffvrmeDTb mUAN*rdDoc8ka}R)!bb>QM1XeAp??m^pD0H0oL_(uZS+6gV88YN literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/issuing/__pycache__/_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11529dd7113cbddda6dfd935be5b692505527b8d GIT binary patch literal 656 zcmYLHy>AmS6o0<293@Rbs)&l1DwYh5MY~oVDkK|~6+D?>AEbuq9 zY^)W33KL>MCv{?Cs}#!63HzK1OMdV7{J!7wxApZkut)!WSiBZZS~}ci>~zXYuTgFaDzc;r zwNcFmV_XPncw0VW7qGNCxcNX&WQBAr=JYA*iIFvZE)AADhf+=oF{X!nG(nNm8HyP# zi}$o%m=h`XhEH~>E)4F})_{*uQ=6u!k=AXww9tC${F(XR5mT#{m^T{M3)OLTI+EI} zA6W7Ues=rk(fRAocfNPGe?;3?K@g{Eg&epA^3Kka;>7@+V1{K;%+e0bnp)8{9Wl9Ng6SiSzGSehmc0_Ob z8M=N1@oRYV;?j%c;=z-*h4l~gWU{lxzn@KPJGii;F?L2nH!x#zhGwrE*Uk=!>VM|1$OHawVu}l(@pDN00vS>LFyd= z=Cgo>cP;9KMHFt^yJ>Oi%@N-rRgi>c%4_MAwPD-*F{Nd$e}p7(UT zws!KyHF2!8eE7hs6BFl56PrUiNyEe#3z9R8%>u@GK?j+$TNs}WNLIhd$kNKdD&yM% zW(i{=M4^deR~UZ;Q~L(4-lEeYXQ(HJXrHORE=u&Q&@5ZuD~diBJ+w!3%Wp}t<+5pmH3RxOnGE~lnLR_hV%g6fv)Oau(8`mKlWhI-gOQ#xE zRASY8@U68n3PvwKG{>#g%V2fld0{+>z*75bdvknq>oVAyLGsphZYPONq^r`>N%yJh zv6pKEv!P}}xv8c5uj<7(x|)31S+i2Nt#uV|*ZbU+cdQGosC!mTd (import_target, is_submodule) +_import_map = { + "EarlyFraudWarningListParams": ( + "stripe.params.radar._early_fraud_warning_list_params", + False, + ), + "EarlyFraudWarningListParamsCreated": ( + "stripe.params.radar._early_fraud_warning_list_params", + False, + ), + "EarlyFraudWarningRetrieveParams": ( + "stripe.params.radar._early_fraud_warning_retrieve_params", + False, + ), + "ValueListCreateParams": ( + "stripe.params.radar._value_list_create_params", + False, + ), + "ValueListDeleteParams": ( + "stripe.params.radar._value_list_delete_params", + False, + ), + "ValueListItemCreateParams": ( + "stripe.params.radar._value_list_item_create_params", + False, + ), + "ValueListItemDeleteParams": ( + "stripe.params.radar._value_list_item_delete_params", + False, + ), + "ValueListItemListParams": ( + "stripe.params.radar._value_list_item_list_params", + False, + ), + "ValueListItemListParamsCreated": ( + "stripe.params.radar._value_list_item_list_params", + False, + ), + "ValueListItemRetrieveParams": ( + "stripe.params.radar._value_list_item_retrieve_params", + False, + ), + "ValueListListParams": ( + "stripe.params.radar._value_list_list_params", + False, + ), + "ValueListListParamsCreated": ( + "stripe.params.radar._value_list_list_params", + False, + ), + "ValueListModifyParams": ( + "stripe.params.radar._value_list_modify_params", + False, + ), + "ValueListRetrieveParams": ( + "stripe.params.radar._value_list_retrieve_params", + False, + ), + "ValueListUpdateParams": ( + "stripe.params.radar._value_list_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd0b3b01d4f53d0fac2d7444a188a3789fec8f4f GIT binary patch literal 2903 zcmbVM&2Jk;6rbI-H+K9PJI;rbxFL=NCW;qIg*Z?onkKYri7G-tT_LSD*=f4Uj@OzU zCvoLSQN^Lh-g*IvBUKLkAzY|>DXVg*;DW@#C6uC^cr)w7cH-iMx7y#n*?Di?n>X`* zKPD1`2*mq4Z?B{g`jrn31;#@5|A5a!WFbp(5Rr6A;=1g}M9~!qVTCTkSaCumtcQuJ zt71On43LN(5qj8(l0kh?=&BPVaXl{d0VhF{dQ#{SCq>eFTIf+{h-CB($?91#9(0CD zPR|KF=8TY0eUyypV`3b4#z|h!3q9dXkV$<~=t*aa6!Zekd?8r*07a>XT%zX zXUrP6^47#RDg7K)ypT2dHPWZ+Q}wA*;dj3AlH@0BQgtaah-=jx%zu1->&Bw7aAk4f z+STPxO0qw(Xi}%XM9rG@rAaGxW&OJCu^T2eiRaJ!$K(RVCc_r2dG3VOXP8kNZ{lDX zFv)#kIyKB!4%~W7T*eM&ZIAIIkE;xmV_w~pU7oT(+U41?o5E`*+B=!(vN*O2+0PzL zcdVN4@w2^Rd*h$FmVLW^wDES9$HH_L>t@x08n=ApyB9ntYZaHP;&jT?v`ktyFh4-! zHa|gQD>y>Kfl3>J*-}Zq`@yLlY3t-VoacKwZ}I~T;;f0Aa25|soOOrC`F=5MxCF+D zK&Nv%5$&B*MLSl*-o@`IgGjMQ{pR{bI~J&Ky`h=mCUsO#>ldL%R(+$?#N9iJlA>Xt z6smF<;1J;u<-i%3#yG?|Bse5Fq&RRErb8Su9I^mw62PH^KvCe`-vxMxqKLsakOmqD z0iA(MG?TRi65WDer>+!U(+rQ6!hYsl?4SK z^^erWgMz+j4hkw7=@Hro711exgUE+LkAFlp7;=L0egJ@`kffI?l4gHFbI+CZD_IGv zFC#L5dJ&L*WQ!xF%qlYj1K8#*Cwe WH};|-p-65&6b~1hVbEw9a{d>*O{1>> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_early_fraud_warning_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_early_fraud_warning_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9284c62d5c46e466c9420a6d1e9deb14d7fad52c GIT binary patch literal 1367 zcmah}Id2m|6rMf3Hg-rzf@2a1lth4wWW`ZNkuYb00^$(J&1mACIIHZH*$HG34FdXf zgpLx#PocqbgGNFWRCJLND5!X|2#`YI>I zV-14+hY-9%9`dvRg<4zFWUL2zXta$yHUcxW+E!?{Z4K$@I`YgH$g`;S-cUK(rJS{a zEm3>OI+@cff0L4?CPwbi%`KYpTM75$C8HG@iz6#Bmy155o+#hT66#&?JG`TE zD;#Wu_IF_Z3Q^S7Jk-|jBWh5y0UWhFZ3)IQFrGeOjDi_z%pqedZlJV=d}+YgL#D`I z`h#&Kla-qlF@2S=AiKuMmiK_L$d9`6aJLB~VJhs-I$>S<wHYRv_al#+zFtP%BLOKo}`!;wZ)>iegUkUkGDn=1Y+N9omNw{e0%G$02pQ(YAYq zrW-s?+#4~c!9pvJH(+PCMLHW$wEKugkKDjtb(4&*$I*qwbLZXE=X4qj_0740sZH&gyLVrgd)3*#Ia{#R`cB$AGTk?)3uf}v z8>2Td-#6#~!LWK!)!$uv50(#e?a-t8A3pnsk29-ji`m0XCG;*AMwe5e2M`3Dt~6~n zDoY-da7==<0h^RCA>p`${8UpiI#IwG2+|t>&~;~g=W@@P>YGzVTPl+~cYEbV-)t02 zdEyX_+C=7GX_iG@*30xna&98(iax553Xyi?Q}Y)~qfSkxlkB>4w|_(H z&8zsQcoHu%(32-`g|!}fGMQ`xc^`S7zxVQeb#(>o(f{t}i~#(0%Jqqt!eZA7ryxL( z0!oq*;^d$R$}kH%IV_?w&SC-qJO>ed0udwm7W()sX_8^@k5h)ET|2&D`MHxC&?1O{FK6+eCErBub zI;tDhbKN?U+Ng9Vxef zHZe_Y5%?k8_6ozfL8;v${e-&0Yc6S*`IeQg(j7n3U3JH*_LG5rV97;D2)RsvY@fs6 R9EN|Bh@@ZSC0N!){|6POwqgJP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d7b2bc97a97b027e3fa5623445d1cd5314157ad GIT binary patch literal 1038 zcmY*YJ5L-j5cWQA?~VgfkOz<#qB%vd3bZH%puB`glqe~#v3%>{u-F&24{>Re{05FL zZIqvq3eg}p6sgi3x{!h@_U;`bD|z;tv1dHfEfvEchQ4g#iP8p{a^!#S!w^5pw zntTWQT@dn3E?Jg}rmfsf7D?r9F(I{9*c1)pUV&SlR)ebCyaq6A=MeKq{DI2O3Fj z?x;$XbyLZEsvdQP%o5<3QRP8GSgdL+$AnT2La5sUa)K$enZ!5a`lCQ|U4h#q-NPg* zLjHHCsu@nO?B$?>1SFwE66K~Of$e5h1sEHMv8rL5WV9O_Jc03km&BtTM_;3+FeYi5 zNm4WtV_wk=ar1b%eo=^dC~ysk<6{+c0~lOnn*ias+Tz z&Hy)qqI}&D%|t<4!J@iVS}+_+^HB7(l*AT17gaql;fp&SX>=8=mHm3g7qx2XCFZpl dIF@By`p8;6NB7Us${+u+74)|+k^U9l{{YiPCCvZ; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a93c5d0a8e39cc18187083809ca82a5df02fdda GIT binary patch literal 476 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d52ebfbf92db30a6671bc87ab61af1e062e6c18 GIT binary patch literal 651 zcmXw1Piqu06n~k2JJxNhATElh;$;urpuLtJil7InQc+&PvS)edh+D0u+~FQCX;O-@BLoh|M&8Jb8`dSG5;Qx?+L(fFWj7T4ORyZoPz*C zDyT_8h{sVC)o~GbIIfa9Em8szJO`0{0+Ay576<<#TV%uDA1@3^yLF6bQ#AHfV@oBC zdr4lF#yWocNLjBeHHwqq8t6I>tR6f091sd3porcA#+YFGz`gp5nIQX)FQQ@G4&L!< ziazo&T3zA{UvtfC(`GntxD-djUYj!}d5w&<8;sRTOe>H3jGaw+6*St?^FC4z54aQ&l4!%Q=09W@1%CUnq;!?x9kXQjX~%KbfEubcS+9tMUVF z7WP!hz0s4W)RY!?8)v}BXsAn5Hb|SUT&lU?nzEVihE=W|rq}(jU@>YIy621ZBzM=` zcjPnt>JOI5^39i9Kl(dAlby>bN^`w^W9Zu-giIqBvD*k!VI|tnyUpyPafOH8?*@V4 z+@dsoZ(%T9;w>Mvi+snS>wG_q@<88nqWe=|9yxLu6GE;sAbS@uxPal`EFt+)UV&qs F_kX^iuWA4Q literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/__pycache__/_value_list_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..909de2d4b10140425181f1deeb4ab396c4dc936f GIT binary patch literal 773 zcmX|8y>AmS6u0ku*K5;IzCTilp<>C<5EYjVF7T*E6ad8SOj(}XJ%!l2~2Fi{4YTbUb@ z^9(xe$V7}e$e3ASEGtAWb$FGrlO9j!igcbDUukL97~^?fXs(kYSByzFt8~77K{LCf z^Y`?q$bcT^1G)?9SQjOIUT8=+cZ%XT$q(rc?;b-gXdm)EO_Kv!4)sxyKissXe=WMBf`XKdEtJ zeL~i!o)<*Z5H)X)$mq@4@_2P)LN;o4tu?wgQlFoW24`F2OYI41*NUys9j~+|q*XEU zTK$<$d&z`)SlY2F4=Ojzl{v#;pdnYzr^-MX*3aZshpH;qEjo|3=e|FYw`_{-QtppW aeT?zH5aGK&(4*hsWgLxO{6Y4pp8f}K@y4J4 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_list_params.py new file mode 100644 index 00000000..9a16bf6c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class EarlyFraudWarningListParams(RequestOptions): + charge: NotRequired[str] + """ + Only return early fraud warnings for the charge specified by this charge ID. + """ + created: NotRequired["EarlyFraudWarningListParamsCreated|int"] + """ + Only return early fraud warnings that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + payment_intent: NotRequired[str] + """ + Only return early fraud warnings for charges that were created by the PaymentIntent specified by this PaymentIntent ID. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class EarlyFraudWarningListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_retrieve_params.py new file mode 100644 index 00000000..b218981e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_early_fraud_warning_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class EarlyFraudWarningRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_create_params.py new file mode 100644 index 00000000..1299e35d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_create_params.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class ValueListCreateParams(RequestOptions): + alias: str + """ + The name of the value list for use in rules. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + item_type: NotRequired[ + Literal[ + "card_bin", + "card_fingerprint", + "case_sensitive_string", + "country", + "customer_id", + "email", + "ip_address", + "sepa_debit_fingerprint", + "string", + "us_bank_account_fingerprint", + ] + ] + """ + Type of the items in the value list. One of `card_fingerprint`, `card_bin`, `email`, `ip_address`, `country`, `string`, `case_sensitive_string`, `customer_id`, `sepa_debit_fingerprint`, or `us_bank_account_fingerprint`. Use `string` if the item type is unknown or mixed. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: str + """ + The human-readable name of the value list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_delete_params.py new file mode 100644 index 00000000..448eeaa3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ValueListDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_create_params.py new file mode 100644 index 00000000..d9be1d85 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_create_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ValueListItemCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + value: str + """ + The value of the item (whose type must match the type of the parent value list). + """ + value_list: str + """ + The identifier of the value list which the created item will be added to. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_delete_params.py new file mode 100644 index 00000000..6f7b8a6b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ValueListItemDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_list_params.py new file mode 100644 index 00000000..5a76612d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ValueListItemListParams(RequestOptions): + created: NotRequired["ValueListItemListParamsCreated|int"] + """ + Only return items that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + value: NotRequired[str] + """ + Return items belonging to the parent list whose value matches the specified value (using an "is like" match). + """ + value_list: str + """ + Identifier for the parent value list this item belongs to. + """ + + +class ValueListItemListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_retrieve_params.py new file mode 100644 index 00000000..746958c6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_item_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ValueListItemRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_list_params.py new file mode 100644 index 00000000..911490ef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_list_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ValueListListParams(RequestOptions): + alias: NotRequired[str] + """ + The alias used to reference the value list when writing rules. + """ + contains: NotRequired[str] + """ + A value contained within a value list - returns all value lists containing this value. + """ + created: NotRequired["ValueListListParamsCreated|int"] + """ + Only return value lists that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + + +class ValueListListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_modify_params.py new file mode 100644 index 00000000..31a60cbc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_modify_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class ValueListModifyParams(RequestOptions): + alias: NotRequired[str] + """ + The name of the value list for use in rules. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: NotRequired[str] + """ + The human-readable name of the value list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_retrieve_params.py new file mode 100644 index 00000000..f7b2434f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ValueListRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_update_params.py new file mode 100644 index 00000000..e8cbd9f1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/radar/_value_list_update_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import NotRequired, TypedDict + + +class ValueListUpdateParams(TypedDict): + alias: NotRequired[str] + """ + The name of the value list for use in rules. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + name: NotRequired[str] + """ + The human-readable name of the value list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__init__.py new file mode 100644 index 00000000..5e72faca --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__init__.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.reporting._report_run_create_params import ( + ReportRunCreateParams as ReportRunCreateParams, + ReportRunCreateParamsParameters as ReportRunCreateParamsParameters, + ) + from stripe.params.reporting._report_run_list_params import ( + ReportRunListParams as ReportRunListParams, + ReportRunListParamsCreated as ReportRunListParamsCreated, + ) + from stripe.params.reporting._report_run_retrieve_params import ( + ReportRunRetrieveParams as ReportRunRetrieveParams, + ) + from stripe.params.reporting._report_type_list_params import ( + ReportTypeListParams as ReportTypeListParams, + ) + from stripe.params.reporting._report_type_retrieve_params import ( + ReportTypeRetrieveParams as ReportTypeRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ReportRunCreateParams": ( + "stripe.params.reporting._report_run_create_params", + False, + ), + "ReportRunCreateParamsParameters": ( + "stripe.params.reporting._report_run_create_params", + False, + ), + "ReportRunListParams": ( + "stripe.params.reporting._report_run_list_params", + False, + ), + "ReportRunListParamsCreated": ( + "stripe.params.reporting._report_run_list_params", + False, + ), + "ReportRunRetrieveParams": ( + "stripe.params.reporting._report_run_retrieve_params", + False, + ), + "ReportTypeListParams": ( + "stripe.params.reporting._report_type_list_params", + False, + ), + "ReportTypeRetrieveParams": ( + "stripe.params.reporting._report_type_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b07d7e67a960442c779ca5cd94a9aca36a4564aa GIT binary patch literal 1695 zcmbVL&u`R56rS;{z25A4cL`abDJk152TaAf5X7OPl^{(@1&UCh2dqjXCmsbW{-yD3 z$fAuDAr2h5p-QdPBPf3g7Z8_V!2z|G-j;4DRZe|lZxTe2n(!=t^WMC9^XAQb@3CQw zAduwmaqlM`q2HvjEnsIdxC_GrAU45>5k3hv@e6@!tAS=~nZMu{ z1Krkxl3mJd)gKAUb~)2EzY-X>k?BRh8r19>=sJ8Q_(t5aTXBt_i*}unq~KQXBKttM z)~%WKKjeW-oElybM_kY#ayveg6W4ECouSj0W~MKHKlh!fq>XtdSIl?9Y0ezMt~%Ta zlJwXIr!yxLj3*FzaA(OCFA>AI@efSq8@rJG@Q!z$3GT6#VLEV)<*w`9nC)%{^G9~) z--}UhpH5(tn6=~V%x#`k;)P3XnyZv|Lb{lhMe{YYrgGcbOOy{Ky%RIFml!^*>7BSQ z|1VBJz4X0gXZIBJpKL|0!lQFdLQ#U`B`-;k+~s9}MGUYl1yBh5gLQxhsDuQJx%AK{ zp!}#Hw1(FdAy;M6!yCgL)<{p`N{?JaLZ;2Vq=z;jM#?qRLPDM;ljD#cBOwoy$;NQJ zgKwc#as%DMCZ03Zv`n`N>%?4UO^ZuRI70ALzs$NboJTyZUI5!$=m?hCW+5$vPQX%4 zI2=}|6)&MlXCdc&s^w!Mt8Id81=h_dVAfK&YJJO+Wf8^JrARRU)Ws-T2KHDNoyBDq zy4DH{S1jLKu;Q+`8HH2r(`T&26YNwB3!EjE44Gu*+_HA~XHn{fo}jcHccCOYEP+yf z2oCWT{K*dh>!`1kORX2J_CxWsb@pkcd2jaql^2c4U(Y>joV+*ty!Pql;fedk?+3>> z>xVY$V*{0pRr`n-)qnodQT@oD2t)X2^V#U+lgebDfVGuWVCOsICi~!A^mi0pVQ7x8r z5I5kWvUhxh2B0F|0NB#c=QR6t~ v8~PRUnbz0I2?<9fv?MeoOi1`#dp$K#Q`XC`&m+AtC{)x|Uj>aHgEapFC8z{t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7913cbea2de423432dff0c48e87735260ee8fbd GIT binary patch literal 11827 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 R#Bfy|h4y**8i*l{_Al==HiiHI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_run_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5bd93f4f770a88525e22eadd0c9a8d1c83bc1db GIT binary patch literal 655 zcmXw1KWh|06o0e-?u?g2K|B%zZw!;b5 zO4~^zCuntnb9|HOtTJtai#n6}@u=7Kg^*c=LbMw~R4Q*uhX+EOHCgF3+RZ>mMB30; z-EIq!NvUks6)(hBSd$K}Kk`#mA)m?xe~xBmRn1>2i{L5QziGu&-S<}Ebi81kWJBWN>kLx>#kg`yEa?|;i1rtBg|_1KL$HLqn*nji2Hi`*3gY$=(CL}Vz(8c{93e|d7Ic}O{snV_q`x+ zVNn{lJ3pK*@s1jS5FYQ}E#Z=Y6mbGkMKo9BERr_5B0_=!1r$QFjkRP)m(}gs8`~G%6?E_n zIUWJ=C{&0Bt(1z2F47T-RE*b&CC_~0`JeIk_4PHNWBxrUj~T#kC)}O*7OchuE}(#d zRZz2xF^7XHsKYGma9BlkoW%?RcnL-H35pomx6u1%$s!r{{y1UC+KnSTo1w998e1x9 z=p}kx8cY2Cp|Va{YAjB?tEabdVD*gT3qZ(N0a@@KFvJMs$MothCI#Ckz6ge4yLE(( z()M`KpbP&t*LiK)1m{gIi^E~BO@)wojY70*Le#35RSx%sIGg2_*Jw8Y9T90mV|BYJ zL@uSWc~`j*UtvW$xcSIWRgHWi=llhlsZ|Ysr7TuE2TDy#IpGKS$rNS5&rzQ9s{Fv4 zg*{brZ}fbZo6_P=Lk9T-4W~3^gS_d=<+|&^MGzheOZ|w78WP@Q)GTz*Rq04d*E}Nf z8GiK#%V_!T%e^1{?Vr*1RS?9f-n=t({SSPq5k>CyA(UT;cGGSXN3YRF7bv7+C_dq=qBCwvmEO!66r^Qc}nCeWQ<)W!1gX-a0$b|NyO6S_!@|H-v0qt CDXzN! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_type_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/reporting/__pycache__/_report_type_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..255a6b84e60f4adcabbea0f8df72fe240befc337 GIT binary patch literal 657 zcmXw1&1w`u5U!rTUE?M(Ag+q1;AIclMsp201VIlHWmS;5G-IaN3_H_3>F!;2FG4_{ zA?qWEkK#$Z$Ush>yam>H$jR#Iq@k<6>iVzh@9XPpK*#)hSiENdznyS%;%l(lCvXNi zrHnZoltC4yVT;2us^T$i9W%KTQ_Np!3HG1J-Pe@MMa{zN&4Z zq@kDSWnnDw+lR_JWuY-Y@~)m<$AQ&jlFtAkWjUn5JHQYlj33aeyO`u`kN6@Ogw6dC z)=JyAiyB90b%8T{o$0JHO@i|}llkGG({zQ9S%pG0YeG~ipOy~yggBXIrPpXT1RW7+ zLSuEaDMTivvRPZb5MN}Y~A=QETu zUKSsCy|Bkh?hcQ1W{xVv=`Eu(=Z~JGoeGvq4S8v`Jx*7C+x* (import_target, is_submodule) +_import_map = { + "ScheduledQueryRunListParams": ( + "stripe.params.sigma._scheduled_query_run_list_params", + False, + ), + "ScheduledQueryRunRetrieveParams": ( + "stripe.params.sigma._scheduled_query_run_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1cbafd13405513e32e483a8650f93d40749a3e5 GIT binary patch literal 1126 zcmbVK&1(}u6o0dm-6l;^)7oln5lhp9tC+_Uc}$BZ{C~tHSgnfHro#f`E$&vCjdT2 zLJzddw2R0*g))>$6f2lihp+RliMDZ0;zhscor-H0nCyjR52CnC)I3(j z$SgLSGqsHi|LiEbIsZ5d9Sal&k`)rw+66WlqQ|hE+nt)36!w${0~ZdILSD`==y z-#c44ea4cG;->;Muq#|z@l33EN~ptOT8ufKqZlg$4J?OspU;>W#0QMyFYhARf|iy} zo`Iy5p;JaHNsk-f(y0U5R{Gm8BuCnbjGk}l$ce+~{u_GpK)C<_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0de44b621280cbaae0391c36501c870a7daea16 GIT binary patch literal 811 zcmX|9J5L-j5VrSq%j3x7h#(<~BA~f~TP3uJ0!2y+L=sS%ZLEbI?pC+!U2Gq^DU}+ zdK1BzA#*w~c@3jl6c_k5<~WT-b+` z0Z8?>P)W`uGR|%y6`pf@xzff&Kzw9ejhx0I*CFa>1V~6@5?UV!*x)=y4&0b-;W?uj z&u~-Ty5k#D#=c`}Uq>?|x9ycH2S+`K2Pwqw2OviK1Fmy>7l|m7WfORu@Gd)q<6J=L z!LW#UT)JtJC8}JIDiTWDqhkePukDvUV?4@$v2vENEZ1=n&og#1h*Dz_y2qt0l_>8q z7IB`dsOk%20>1-I30L39H9~UxG3ezP1YJH1UV-eZya?Xp3et_8Jn!Sn!A^A4$0UPO z;HN>F90tWm^>V)1dGRukiGqy+FGO9C0X~=%5ENBqXzONCz+_!KCWzHDG2kr4`kA@b zDMq4!c~rtjAa_xGCcj$G&gHnZHgVRjEX(z;Jkne~cg_#K&Wz_*C(dfk&M$qD>A$|aLzhY2$=EH@(~^gNWF8WmWx>CywEFc>P}QqNV@ zSd;EU9khzPi0IbeGGDPRmQkg+<_Hl_5&BXskUEM1cJU++HkFFH2_kIMT$aWC5> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/sigma/__pycache__/_scheduled_query_run_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddc3db2b7e03993837bdab2d898afe17f8024621 GIT binary patch literal 668 zcmXw1y>HV%6o2Qhn3A?2AtDeGQpJ*?IYHN|LxltbDv*lB%gMw~i52_o-kqa(r+-7s z#)|k;m=FuH)QO3$QYb?w-r31X_ulW_`+o1fZ*Ok_9sTcdDj2|TD{PLx2CE|i7mz^0 zGRRrPn8i-!=l~Y_*nzboE0b=kTjPxb!YhKi~P$-}~w9T|15+s@;vDox`9@IiiT|ibT=vNZAE6 zfvHRCpc}&dP7t^>D79T=H=#E1jt$yIzDMXbJnUwAq#lq+pA7U9BG)cs>?Qzqa0P=a Q82$}B7JiX8K& (import_target, is_submodule) +_import_map = { + "CalculationCreateParams": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsCustomerDetails": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsCustomerDetailsAddress": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsCustomerDetailsTaxId": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsLineItem": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsShipFromDetails": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsShipFromDetailsAddress": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationCreateParamsShippingCost": ( + "stripe.params.tax._calculation_create_params", + False, + ), + "CalculationLineItemListParams": ( + "stripe.params.tax._calculation_line_item_list_params", + False, + ), + "CalculationListLineItemsParams": ( + "stripe.params.tax._calculation_list_line_items_params", + False, + ), + "CalculationRetrieveParams": ( + "stripe.params.tax._calculation_retrieve_params", + False, + ), + "RegistrationCreateParams": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptions": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAl": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAlStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAm": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAo": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAoStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAtStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAu": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAuStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAw": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAwStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsAz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBaStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBb": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBbStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBd": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBdStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBf": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBfStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBgStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBh": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBhStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBj": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBs": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBsStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsBy": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCaProvinceStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCd": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCdStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCh": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsChStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCl": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCm": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCo": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCv": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCy": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCyStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsCzStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsDe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsDeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsDk": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsDkStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEc": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEs": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEsStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsEtStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsFi": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsFiStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsFr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsFrStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGb": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGbStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGn": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGnStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsGrStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsHr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsHrStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsHu": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsHuStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsId": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIn": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIs": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIsStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsIt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsItStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsJp": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsJpStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsKe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsKg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsKh": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsKr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsKz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLtStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLu": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLuStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLv": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsLvStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMd": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMk": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMkStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMrStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMtStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMx": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsMy": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNl": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNlStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNo": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNoStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNp": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsNzStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsOm": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsOmStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPh": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPl": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPlStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPt": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsPtStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsRo": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsRoStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsRs": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsRsStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsRu": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSe": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSeStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSgStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSi": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSiStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSk": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSkStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSn": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsSrStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsTh": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsTj": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsTr": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsTw": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsTz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUg": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUs": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUsLocalAmusementTax": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUsLocalLeaseTax": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUsStateSalesTax": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUsStateSalesTaxElection": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUy": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUyStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsUz": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsVn": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsZa": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsZaStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsZm": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsZw": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationCreateParamsCountryOptionsZwStandard": ( + "stripe.params.tax._registration_create_params", + False, + ), + "RegistrationListParams": ( + "stripe.params.tax._registration_list_params", + False, + ), + "RegistrationModifyParams": ( + "stripe.params.tax._registration_modify_params", + False, + ), + "RegistrationRetrieveParams": ( + "stripe.params.tax._registration_retrieve_params", + False, + ), + "RegistrationUpdateParams": ( + "stripe.params.tax._registration_update_params", + False, + ), + "SettingsModifyParams": ( + "stripe.params.tax._settings_modify_params", + False, + ), + "SettingsModifyParamsDefaults": ( + "stripe.params.tax._settings_modify_params", + False, + ), + "SettingsModifyParamsHeadOffice": ( + "stripe.params.tax._settings_modify_params", + False, + ), + "SettingsModifyParamsHeadOfficeAddress": ( + "stripe.params.tax._settings_modify_params", + False, + ), + "SettingsRetrieveParams": ( + "stripe.params.tax._settings_retrieve_params", + False, + ), + "SettingsUpdateParams": ( + "stripe.params.tax._settings_update_params", + False, + ), + "SettingsUpdateParamsDefaults": ( + "stripe.params.tax._settings_update_params", + False, + ), + "SettingsUpdateParamsHeadOffice": ( + "stripe.params.tax._settings_update_params", + False, + ), + "SettingsUpdateParamsHeadOfficeAddress": ( + "stripe.params.tax._settings_update_params", + False, + ), + "TransactionCreateFromCalculationParams": ( + "stripe.params.tax._transaction_create_from_calculation_params", + False, + ), + "TransactionCreateReversalParams": ( + "stripe.params.tax._transaction_create_reversal_params", + False, + ), + "TransactionCreateReversalParamsLineItem": ( + "stripe.params.tax._transaction_create_reversal_params", + False, + ), + "TransactionCreateReversalParamsShippingCost": ( + "stripe.params.tax._transaction_create_reversal_params", + False, + ), + "TransactionLineItemListParams": ( + "stripe.params.tax._transaction_line_item_list_params", + False, + ), + "TransactionListLineItemsParams": ( + "stripe.params.tax._transaction_list_line_items_params", + False, + ), + "TransactionRetrieveParams": ( + "stripe.params.tax._transaction_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8b88fa7d91a2a6ea080a2cdaecfd0465bc0b3eb GIT binary patch literal 18777 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 C(fcU? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_line_item_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_line_item_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bf11dbd29d0fda23890d35773fc4b5d396fe0b2 GIT binary patch literal 770 zcmYLHyKfUQ7`N}7Yx)SU6tz%+P}?O#Yw-|M#ZW3ir6@u?mRl@0_cgV0=ewSrDjAVr zV_<99x+4A*rYH;Y!ob89DU_iT_FYme`Sb7leg2;I_gZZM*`@y86`u$~znn5#l_{7! zwcr#*D8eyHaEP(PUhE})=qDs37&Y@0g(Ero4B> z&rKQsikbNm$GGCmz2`h`_hPO^Dw{&WzJ|mV`ikc~QKkkm60*Y%;4sa>1klg8j7%jK ziO}Yn(mdDB&JQ)@twz;U8IwE##>@g^NgDNHhnE;T?(w*^kk8pV3gLii zTJaJ6sNX+R!}`XEY>YjxQXL1Vwt7a+-h7!KF0GHq`ixy#`K*SEYa_BYV{Sh<_lL`y zBeGdAd3_eXWuGI^gUohS&f#XMFz9QL%07@PMwh#9Sypw+p(4PtMVHl`a^lbO6{}*q dmHPr?A7gwGAiVk$J^2&dz}55p3uKSN^&e1U%u)aV literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_list_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_list_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98ac615f864931e13e96d4d5e96336b8273438f4 GIT binary patch literal 815 zcmYLHJ8u**5VrSqm&b)if)WUdP?F|~WCdxX6afj4P6qK3F8wsg5?#(I&80SezOO;HoAt8JnBW;OR!%dP<#8`Hc$TrF9#5@DnrALurDb`G zF)l=|tNRsW5`P3;iO^rkB|>ujAw0-42)m*mJ_B{A^CEnaYe+YC^ZXER4tIIy5Q_|t zK^%u^vKJNueUOW-&Bsqdm1x)~@Br_E3h~0EfUu}K3pMYDtnL zy{s+wu1Q*DUO;qR-?o3TBbU&mxYa`x7cQmrDj;<0oGhM`=AYm;t)IQWBB-k9e_xB- A(EtDd literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_calculation_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02e270dbfa2d35b4fc98d06d560039f4b986f76c GIT binary patch literal 652 zcmYLHy>AmS6o0<293@Rbs)&l1DwYh5MY~oV3K9&cpdtotu}tnMJ>|~6+D?>+75;{n zjkV%WVL~kEq)tq1l|mUhVV_fB$?yH1-}ig|w!Xdw_UOM4i+2RzmlJMJyaLMu3(g>i zoRm7BIvJ<1PE@E+#qIw|o%{!e;9! zFGtgoyClbGRDm;m%@wb7liE)4F})_{*uQ=6u!k=AXw)bKfFqyOD7wQ7fXgJHc;9ap0xslEDv zC7ajG_M4PEzrpJ-?!wku)M??kzQH;Gx)wr=10eJ?Pa z8x-0t&d;Sy+;c(O$oDL|N%#FE57ed=?WY3$$dap&5OSRW*}H`PB@F%~5lO%FuEDa_ F`yZ_GuY~{r literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f2c583742ddfe1d90cc2a51a8f66a9c5be345a4 GIT binary patch literal 41317 zcmeI5d3;pm)yF5vWJtmuFf6hOD1dS`Z7w3mOUv zP%exW#)}$?;=zU>zb=Xu$3qRFc%Ozo@sfs;fS`!03|J-6 zkku#JX9OYoTY|sQ(z^>EEmSsTd}J9N8M4ZpBl|M#OSGR=;?RCf`x70Y(f&*a5*?(` z0Za!IE!XHkrbCDh)#xCm#}Td2=wPP9hz{3iInxnDM{0Bk)8mPb(&$j8qlu2u=y6QP z5*??}3Z^Fz9k0=0OeYYXsL|m}Pb7MhMn^E6M0B!7M>4G>Iz^+$Go4Cwnnp)4olbOy zMn^NPB05u}W0;;y^c0PbWqK;n(=FGqz(C7(F&m=laqvM&LMf7ZqPGEWt(b*cE z$aD_Txf(r@={%zIHF^@$1webgf2bGOZ_izD7@G`U#>JX!I1O7ZPpI z=&4LUNpzh?Phr(CFDr zTZnGd=s8R`5shhdHq$uKghuBuZ6(^K(YZ`7A!=)M9@8Yzlt$+>Z6~@}qYIdBA-Ywg z3z>Eh-KNoMrk4`EOrwjKewyfZjV@+-IngULx`gRxi0;tnQl?iD-Ko)KOs^t(wMLgS zy@u$u8ePHkI-=KWbS2Xph~B8t8m2c9y;-BROg~F>mqzQD-a_({R+{iGzRIy=yMuvWcobO7c?4W`gNi&YSd!-647sH zw2A3AiSE~EGt+Mo{kBFoF#QhEmo?hL^t(h~(db5|uM&Mtqnnt1kLc?fjWPW`(Kj?2 zXZi!8Z)!Bb^goCm&}b{uPNHvVw2kROqCeE=B}{)r^v4>tnf@oyLmEvo{Rz>uMpI1x zi|9`^+RpU9iT+HZo0KW-YNr3(8Q4`24QTutaAF0lDbzIADoqh< zf|}+!r731jNYh-eG<{g3uOl}oO(|>2v}0~mn!c>*r)h3dn*OXAplNPant`ktq-j2@ zG=o`Fu4#5D%@EcM)ik##&2g-$&@{Iy%`nys*EF{&%?Q?v)HJs%&GD=mrD;B=G^1HF zM$_z8nz5`Ir)lm`niE(vUeoMRnhC6#sA=w0niE-blBT&!X(q8|vZndG(p0i$il(_+ zX{NGfnx?r&X{NJghNih!X{uN=Q`3AwX-;O%DVpX!r8$)~r)iq|mF9HToS|tRP?|GY zGfUHaQEAR%&DomfL8Uo|HM2F%LrOD;HFGu1!%8!cHS;yimy~7!YZhvny-HKfnnjvs zpVBO5%@R%Xh|(-&%`#2%sM0KF%?eHPn9{6dO^v4c@~(o8+R1eVfxz!^wOUz_9EWxbW{TU6pc&P+6-imEB6cL6Ocy0ux1{?< z8dEKst#Fgw8c+9WY;8}Z?2hzFxelt%7^tMA2dV?Yt(h#PL)O-|NFtgpqra4oWH^$l zt1L^Ggu{tQ+zN-&W#MqVHQF9SxnDSZNqZ!g(b&Zlv5k8Z>7tfIDm^e9jwBMTDULfy z)UF_ZzF?9vz4r(`diwpsy5C}RVuQzDr{@H z3paA|!WsRHwhkM&SXh)$A-RskRe?i;D|T(!(|*hL`;rHSP3asw^<~n4aBJ&-xK#_$Gsa9l>Ll!Ht#34%+ zS>}-CimY(RN=0fMQmaUvL(WxXl|#-`WVJ)qD6-Ze^@^PDkWVObfkQ4-q`@JdRAik) zKBdS-4hbuAu|pz?tanJGB2kA}iZnT-S&-UWir5ZG zDw1+YyCRz%vPF@t4(U*2n?o*DyYadx!xf+C~~7iZc^lChkRC%T@JZLky{;dn~YAQirnRp&nt4b zL+(-JUWa@^k^3BSzakGf|~_9^m+LmpM+F^7Cvk;fhKgd$Hm zV?t&Ou$HdlgvW|aox>i-7L1=K-L??)*H!squ4r0 z)=9B-2U&MWt*fao8^wKDO}*17?wxANNuxL?)if^~#q+Y7=4GRJURKk*Y!uJSYMZQW zaRxV&^=7d(^-iO_cW7QVis$7bnhjC$Y*@63tT##HUfh^2v>L_M6p1B{WHHS&OFYvS z(`>NBvtco+Y-*9VatV!-Ch<5~O6y>=cpY3y8Eh73a4B6tHj6Jhmr~r# z;<%TQ^#-{$?NS@WyVP=8Pg=z5$#Tj`i#R9Cspnh7J-?zYUAVDL+Vd+Zl1<`BR?_(1 zBp%-@Y1P~$UNu)z?`#tH&PrNOHi_4h8rmCT;=Q4U@*NZByN1R|Ogv6%XpN1D*VtN$ zJ1&m9md0RQJO*p2=i}m@ucb9ME?#46sW0Q=zO1Eu$Hn=s-AdM5rQ^GncB!~{m#U-j zoe+=jI@;$G;(fl3cJ73D=dPn!oDk3AI+_g$@oYGk&N%3Pt?(A$DjFwk;&HNy=6suY z&aa{jwuv*iipEKsc$}=JeB0uDucp1&7VpKYY0lf?IlqQxaZ)^s*HFHb;(V{65t|f` z*fn%kkQAR4tf4ud6wmoJv~wrLJNFt|A(G-1Vl9oTlz3FFrE8Lu_?l!bMUs+7LRX_H z@zv;BnwKf@ysW2j(k>n+_0;q2;-0Uk@!c*S-}SU=wu@KIdTM36xRvMAIN2;7Ck>R7 zZQ`6X(8{(=ys|Y=UvAq{S6OVA3(K9vC{evt-`E;Jl-6zkG~7&cw%Kg5S9Ocq)866+WH{A5Vp2?vK35nm;!%llEHg zhhDNiH&7hSeE21p`M^s@koNR(bXa<(>|+iKtTie6;7P=erc07XOTiR<7^iMuDEHX` zK5x?f6ajA8_gCrTK!;DHSM;%t0V58Ktmzz3doWmgbS>yxzH3Tn+3178(M&QY893OS zgo&i_CgJEOfA|e2N&vs%R8$$X-yzd|h3Wn+iS_h(n`pSXwKbZwe?v4~(H4s|TH)5F zaI(FvE!GiEHg2%uIUC9CGo1&)1^d~LM&cxi8aZmx-aZFruI!v#(>cm%X{KGUH@B;Y zojV?_k#=tEXy~B=S zwfqGAjk9Iy@3O(WrgfH$Js2FTjbK=sBkf^NpM=<@J>4qpY1C>%yzT92AanRWdiq0D zo~NhT2I5_BPXn0)5aq8(z5N{I)u6aCWaCOjoWGPOfBS;zU`uN``NGb!>Vv^*Z7ktvb1p=q{_k}7z9Rb%^e5df8IQzb z;iMIdS#~Ds%q;wXwB2VR4zwZufvAU30jt}DLnWuaUsO0cbU0909C|NApUTTjPFR}5 z6m?nl&NYQ96n9y>r^}A9xS>`XB2-8PcX0zUhwo#^hcJrs40*PJ7>oei#SO?DKo9db z%}@TeNb`qUZHVFC`~jK6_mRI+LH^hVVuCk+K;{5M(_{wP)di8+7)>*RZ6Kz=^${5J zz64};-NUZKVbY<$Fe2?b)M`VV?Cm-rbND{GuD_t`*am{Wd8iM4Aaei+?O6LdeZJdt z(t8RWCeGh_Y5q{F4N>jQACNhGANd<3$RFE4(6Ps(>IeZ`a8zRUb+d$Aa{Pg?*nFA2zFZ*oc3_tmEF1j)s@<+&0?vry=Z9~v^0Rwgb zt>!fd$lM0e@>hY13L$cz5U@?gknHHm2Ff*%*|jKr**pI%YKwUKHc5vcYPBKg+j#o$ z12Tv2WB83gHuCKJYy&}Gj?;%9kU0QR{<4SP*?#iZ?9E@E;fJbi2>P;|KKy{pZ4eE= zQAl5&;m0-*^i4E<_yL(+i_(`p{BY4A9)26V>B~KFQ7eDoo4#JA4?l2o_&$c;SmZCy z@M9YY`UaOi{D8~>h`Mer+SLV-`^1TDAfATnBQWMg3&`xchg~)rNS% z+jT(Z@O^aM1VPua4a9f7T?b?iU<`$JtP>}`A+nH+@^u~CK)eChZr1^sU5mOdd(m1% z6{cs&Zd6uBR@tqaTM~`V-kBcUrbsxc?p#(D*^`l59-F^GQ*%#FIJY4VQY(|V7Nl$4 zVdD>#ETn7Q;o7w>z0KLT{6P7<&a(LjgY&hkbR2BX$8geky8`ztG3`4FDaJ_@W4h#M z^mW;{qj2SIS3sbq%)}Xq5{_i?HiGU)2)7jmUzxeNnlXfpIV@2(WiO6P$c=P{Rf|sz zQL7E{TZ}UIsvO81{zTGbXBDdo{>N1TXBhYWrXx>z7Du*$_zMDXugZbU0rW6`%P2Z= z{=}OLYPBK$>dhaJIeZ`an<>a2+du@1Joy7M2OwIZR-j#ZHW#*m=nL2G3I)^)*EIsy zYy(m5bq&-D*L4EdYy&aE>l&yRu2%_Mvkk;JuWO)QxLz%A%{CB|ysm-Fu4j_QyH0rD z8Q?nz*}KtNI!ruGJG>_nAJMVL*lSR=4KV|4aIfHi%xw@&m06gjc}}6(2I4HZcCX-o z%&vQwzVoRq;`D9vl|EE$LoD>B56IjGQTomiq>pVNYQ5;x z0+|C4bzKbY%5%oSHV}az8N2%yklA$)yDmW$N*9i$3Gc|yeLoSk+7NvZzT0&`=J0)V z-Gzd#V;hKa1mJcZkU0QR{<0U|Hb43Ew{oCr8)5|7;4ZvC<~E3i-#Vl(&%(<#5EJ3r zU3h`au4htE-i=dqpTVZXq{DBSzx1JM8)CXQeL&_mh|(7pq>pVNW_i;GWOm)d^rify zuiIzD@|<;|Y8zsKH+?|nHi*);wGFY(+jBtXHi&wzNzij_1JUg5IiOy+J{~Q~({pSC(dOwnvsY24 zWuNDaqUyz+*6kuM_hyM&ZHO(1+}SM6kxwK$?>d|F0%apQEYB$p+d%AqZ+D*rG6x_^ zUG_e?%}?sOUEt+esZg~IaUI&=?vp^~Hi*W19O)~B$o-KZwt=`EuHAhS$n08_zU+~A znUD0XXp^3%p;jB>9)$0VJVxg5Cz7#n__ZN*d4?a`KnjAV*#_cSuWO)QxZXjB=W8|FK)mF24b%(QI|Z)U2I6I}YoK1ZzFOd# zZ6Lnybq&-D*VhVMvkk;sUe`co*P<07dx5>4DwOU`HU1V@RBc221Z{8^SRiv7#*oIl zOn9#b_||a;7Kl6xEZac*8m`?17Rcd+vzaroU8424V3$I8nxOG z6A-?8QUhcTe);z$19Mz4P!{--E<76$hQf`E89Ta1lR6(1v0x9 zr7!y)#Df&EIDO*p;GVmHEfw`(AC_!CLv&0NmydN=ZyXS-$_i2D(MyIljB0}yrH z!)RBYNyj!2d*Rxh??7hPJ?y%@RH3-*x_uro_fCgeZHOnlT?b?i-$&QoCFnY~fq22& zbwK6-dYHdQeB|%kxcBlVcm7bT4e>2+{(#Kk`^eutg8Z=!#2eoH0ht334gJT^t~^7Z zZ6FT9wLA2Idg1zUforybNPAranO%!UP4@ZGlkg#YXvr#n`wgnLA%1~2xcd!|xecP8 zdjNwb&-oGCK>Pu&-Tem0?0O~z2iPPur^b%Fu5FdEc2V`!8D18qJ z(#JLsfsiMCKxWrHOy4u)LYltS-L~sIXFI6chA2fF+|dVQZi6U&dj;uZ8;GIa^Z}V& zi_({Uw)3o?^oif=L#;N%XoT;c?Esm>_p#(Ziu~m{+hH4s$q2wb+W|5MAnLm3(5^0s z+*dbj15pLnM_|lXH$c5`{Q@e=DF|+rIlyWp=ujq z4%*;OIv{f!L_PN;22GwNpKTzP!L_^O1DRcm(w9ByzTqc*-M+b>`#cM^+7Ra7GXZ@=Q9mfmnwC+(`#y4nUN@?BTbcS|lER{yqkbs%?ly@9<+p*!fqaN{7c# z;aJ-~zX|j#(wArWu?V@l<(V{%-F55ud0N3u44`g;N8u-}@$17B!xaY*Ta#5=daVx@i7Y-nE_!CLv z9rHQwO}vDz%d>E>4a7YNz+E_i%mIi-&1+~^o~~mXhzH@??K+@dxPD#Wnr$E+^|}V? zh3hv2uGt3SDX(jwUbuc!;F@h9p7**2>V@kA0@rK%M;!t^`T>C=7HS7Swz7U~+9 zsVj!pTu*V5eootxS4TI)Qr4PC%t~@~d~`U8*Qk!3(EJ+K!PiNohi8ElZn7-<2RNM1{VMz9envAtM1;CI>mee@H7EQ>q)l$5 zSM(5(5fcxURMV4BMtYxoQgOnel6izHytv=MD_8K7Q0U<(IZXPNzgHM6J^uZoP+vMW zL=O%f;5;}K5txVDaME~(8#WUjCU|nntH@cujqP?zGD^P{PtRnnv!@~(I4*N(H4-J* zvG|ahc(^|yYGV0u2ZP6H&u@WIkD~YXZn~Ihs>EyvGzdoAHhHJU0IawpP8IA^?7QJbf4|4o^eYL=vBI*N%|rC zm=*RMam;z+K6l47Z#WEyfk;E88dRhAGnZx&S3iwm>Wu8+&wt<+00NhhRAaeks36w^= zx*#%bH@zLrHV`x5`Us49?gI6~^-obz9@lIGak|$vklA(ibP|o4pHYRa7jYVlLO7kK3S%C{tS_Cl(+9fDWM`;;KGf`TBQVm2M z#43o@5Njd$NkQkM#1Fl>0408YO9M&^P{BHsE`nH$mlvb79%4COMp3FksRzlKf8}WuUT%bT8%lAME<>pe zrR^wP0kH#OC&bkd*Fszm(E+;~QMwGJn^D3CT`+#%$Xq*)M~=0>L*{UPI}1h&LeKgg5~4 z7Q_!Behk4U&^Te`^FEtTeGWl^J=jij3F2oEyz;({(k~$}YrCC7{;gzoyfxY$v*z0G zl9v7pB>zma@x7vgf`Si1fr3+i9vJiUz?{y&oUYK&f|5Pky8`s*{TYF(S%-qt-p0?! zEb1Jvn14?Oh4+h#ibIEsLsf+b0#m!nSA+^m4h5^aicsik=vPuuvbUovK!3U_f(0c{ zQknjA4amhw3HxK(=*N;5)Cp(hI{*LhC8<-7!EbC5dr5wDo3czk=}*^4;?McXt=?X} zPQPVIPI9$f!u5D^`I6Y^$CABqtV-g^RZp%M{$0NG*mC)j*!Yb{x7YplrmW{skJ&HJ z6@y-n9)EAR9%nAUI@f*a$Ld^{K?{WnAz;Y>r@~4*ph|#*XhqfKhFT_Pk`woZ?Vx0D_im(H z*Q$R?mquACOI3$X-H<39nEHH|pjz_td%ySL=il?!Mq>)Wl7E-tXD&j&j4@eYm+NK^ zjw=+Q2q!4TA;w0x5-YVsyVUK(N!`#*Nk}lV&_0TscPMf>{$f`pLa$Gn-fv?xv7R~M z7hNvZ%RyazC5iSR+PqcQWUIrY zZUQQS6xEf-&6@Tp%~;AQ)l-zFx$%Qur}U!BlFB0pG^lN8OwUrvvMh&eLocPmDP3`< zgqi7QbORFI^@2{G@}Qmdf)`w#tGoyfa>bL)y*xjMPJ=zxI)_IEmpr=+lK3 zJ6lh;0||rLEFgfjxeVaexZpuiG7%`&3#j;yC7J+DwDN8hec{9Pr7((&K)gra=T-)C zIJZ7>)~_wg^{)wPEDoH(>yNczeQo5dP0;$n2RWQx9y!YsNg7W!!%L-0w}1Mdr%pa_Y}{h;k4wj zWW0LIqN!Y#UjpsU->qi!T&#eJVaq2Vu5FC*EkSta2U_@vw*QcM><`}FA~?$Ie`5Uh AqyPW_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c17950d85f3eac9916a722c64c7870a4aa0d55b5 GIT binary patch literal 819 zcmYjP&rcLF6mI7i!!L3102=hbh3tWCSgwl)Vj>4bgYh!PG?kWRvNP?_mUWjHPx?22 ze}eH(@gm`3CNUm7c_TqQaPoC#7k$aJ-~0Od=IfXDWp;K7L6|@H(xH#gPnV1%9D&PC z04Inejx&_w1Y?K2%**}6udts5d6fPW*DPiOXBN z;_yfq`?RpBk_MPyJ2kfHl@r^k6`Ez`^p3KwD%FDTxohJXHAI(Nz?>j~63kKJy+Fd} z_%3iF;9dvzNnk`MBFBw*f6Vh>#DtD<(#pkM(FF~fIZ00xPxpt-o*!v?xgyn@ zl~-?5Y0GK0XVbo*`?BnAbO{P@95AynPqf0w494&GxZvpev|m{Q4dL1{TfX|DKD z=I{)qhes@{Pjm$G$~j7zl*(4p45d17tPf&8p-X`1`j{N3T#&9DkVnGwtSZQsvLajE zRH~QCF4<&zJs~;i3)v@G`kE9&d!XccYpqQTSiV|70qY7wplezPQdDmzmJJBi|2gA? zf;F^0ZxurwgMeyrz&JlYpl^+(ulLu^8twC-ec^dwd=a79#na&Q`Nzq#ndS3fdCWrL zQs?aU#(A(&QF?ydZl@WS3$>aSNT>#es(NCyn}Ra3!vY>x+tH{KDh5_aL862O!yF##4xBmhbJmI4N literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_registration_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..774b798bd31d0e6699b1034696413e2b41198838 GIT binary patch literal 654 zcmYjPy=xRf6o0c{x5i7NARY#>2sT&b22C4M1VIala$>X1ux1~Z<#uN_GjqosSnA)9 z*x8DIij~;NLMkh}z!{5FzS&8@fq5VE-uu0;`L@2k26W8dtukW(znpS&;%i~GPr@k_ zP_PPWmNDk!pbF|R3p+WiqB_oE1_3;WBKiPDjO=UZ7*A$s?5oC> zN*a2JUY5oZzkR5zGnN{QBOmJNH4dyElYR;a87m+Q-U5agVf=tz-NmF}d&HN)Fl@KR zI3ZY_yDVe0y2LrY&UId!Ho--c%i?g@Yf~X)UZW80nh>=rW|fosLY&O<%3HJ>gN}%_ zApy3VLgZ2^+aVhvzQBrXaP^)as~Y)4F8DJvQ>z;OLRqYK4wRafa>5VtqbbUQ&r!~K zRleiR(jF_hJ9_ezo6_P=Lk{@_4W~3^gS_d=@oqidk%wh82(8jmVSP83BNid{^5Exrh<| zhK4@@@u#p5WkI(vFtJ4{W$487B`G}V?C*X4-n-||U)R=_5rqEpAUbvt`e~Cz_;Yae z1i&TYh~pR~IKbKYI>+?zALW%8i0RMbyJ2gXs%M5#Q>I5XloQ!LTLjrn-5wq^Qm`}O-s znqq~uP1G0ktxA(35QB_KK74d51l2A6SF{W|xSFQSoWLI|luDKeN{eMmla%*ji&rVV z=&^WqqO9k|9ZH#$sVPU(lq%~%;li+=(G@^+GbHC}B1lIL$f3|(lV;>7H6q?QNYid4 zJLG`1yFzl(7qU;{=nctobDqk_yLFAn`p+5KE3Kik z^W7|06&RpgmH=q$=STFtw)ySh-nh0u@%E>V<5#8uTC0z|(Th*j@#@yZ+gh+7+-#25 zTNAHUQfgz-&RP_hJcIFP7p~0`Dh5VK4X>n?XT{bd6)ehB&7!i)T|hUL=FHls>K>#R fKD`Oc)WsNI2ME`Hpw<|*eg~_#GRm(JY-ROd*!%WvF77$2|4Uhgx_qa@j~ky_xepvLM$h)7LDOC*9+QbgduUPg{*l34ND?u<8D z-$CNoTbCP05Pu4ntoBlkgg9{G7L+ZAp7>@Qhi%wm$>03uH?QygYok#`@QJ@$0do-g zLrsd$x&Y_j19*-oqDF{%M%OSDE`_C@*)=sbL)^2vR?qI*y>ho~pc48NQT#2U7BhY^ z^Lx6EW^G{0tbEB<_^F>Ol*S@0BJFqUF6yHl1+dn`?Z=umtf)8HWc!sA{~$hT*)+w8#WhpCVb zEs)Iyi5F41Hf#S5^XQXv zo@BfNk81(>h=lUzcj!fP^|bZTsJSu58)v1G<(%25u`=~)Ar_Q zert@kG{vtM*UgUlhp_y5)FIwF?mD8@RP1%+nMHNfGu*MbsvXF;3LE%gUj!#iR)VO2 zOF?wNIAk8#&xqd#6#1E~gY{&e9eF1~%%!7deoPs}j?XDguPHIFgbEW^HOLo~SX5$3 z32o6^3aR(CSOy?m5a6nX_6uk3^xDTG=iy&wY0*AMCCfgubEnO*mGIfmwWJkPU%wDO`$kt>*6nW9KHt6 zOY8?}Cd+=@k5ZmVD-0rbCm-(0S`v%Y3w7|N1u%siu&;VX=YWpxAcBnZ$Wp=BmF+JIxYk8F`bL&nJWpQWgo-yYn>H#+G4w-U4)T>om}IzMdbi zoCkS#+v4xT2?Kud35YY(FpQTrGVc9`mVZZ^BeXfO>xMJjnjjb^YgNPfabtpDn6xn9 UZzc$aNpr<;e){Ysf1gh5T3n1o8TlMp;#cQh{i>{B59)(Q6wl(K#8EZg4K~5IVa!kUUt`(-IHgC zc?86xP$3$0QYtFCNG24in7wsY+L>>5{%7|4`uZBsG5?+w9~i)IC)}TS1(pW{t{{h; zl~A#iF^7XPsKPXCaacxGoW=|Scm;X%8S)s}x6u2i$vhc!{y1U4nvD~@n4qz5Yg;I3 z=p}kn7)$)&v9eBCXw1*NtEa0tuzW%C6(FQ6hctK(7-EF+Q+jn5lbr1np9h1m**ZmQ z3pp|;Xmx>8e3$90GEIWBI+OYFpwo1PkXeO7G;2asDxZ`N_k_5ZWTn?=Hv%0IX+mRl zvnfO-rLtLDyAWStNjkWj@pDxnAITX%LNm6i=C75-a_3N~F;&42v$HYEoKI0sd0Bko z_1vB-xi@^d%S~Z%rzV4Jgoaa^qDEe~<#Ly>Ht_6hDebiu!c?k=9l!14&RI3g8e)gQ5mvBMA)D1p>FIo1t0`H1BK^rbvc& z5=5Y5yJw5Kb!^c;rHchE!7Uv+b#q~*L#Dnvny%t1CBS#T``zbzzxVF9Mx%=0cJ%Y9Z46~T6xC`Dac#1C= zOEH<E{x0+AmxqUe z&t&ZwFo|_%4^DLmiM$>oL{{1fh)YBOZY`}NMDDC*m^N z>$7olbAmU|N+ruVvr%Jpgh%^7R>t*P6MU;+m)fW8t?}aa1aE69T`9JkullDj{I2St zx7J-NYRzb`m1h>!s%N-kr4?8V`Bq^=KkV~hz+@$e3b+zPhb)E6BL^Ar`+y=plXdW( z9I#_=5X7l;RL_qo1MSkLy6J*4*OXB*rC6CoWtNm#Rz`btT_JV8HXi`sE*J>aQv0>D zaC+_W*m?4oSz5NwQOUB;>^x`-tXQHFFnID~17@3U@HJ~bVHDqQ7r*#;X zAOC-fKA|*aoXfJ8gFRSx#Z&Fy71z|(djH!1cmoW$)_6F<4`(i}Ce6S25JqM%4yBuy zs6~yUXfK(6%e$C!S=g6z@PAh6QrC|{vC7uPU+y?*8;+OQ4@4%*e%y~lnn^1RB6dG- z9>`h}bK!+rd}#p`kOTJB$mkr<%Fm0DIz=CK7XS~zK#Z!_U;5)}Yl2%vNi^3+%i~6S zg4+dC|L`Rr*KSPkjrTK4?a}^t@#X~Ie9xRb57iy^I#p?lEP+QMe?}Jb4q-#VBCZ~o zJdw3Kwz{=0a-F_fXzj_n8SvJ5l)qow=^a>Mz|S9pIWrBzcw-}D^>?&2Mq5+6ZaAaO iDS~FYUNxMb07ElvVZh%`5j4~0s^R?n#Tx{TzV<(Opp?@9 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_from_calculation_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_from_calculation_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d7c383cc1061296585793f0d4413191f99367db GIT binary patch literal 889 zcmYjPOK;RL5Vn(Sn(c#9vAhbXQiYIm=vvTg#i6Z$16mM|OOR@rWZH%%PHKCr-7|3E z4|IFu2;!%3s`i2`Ar73lRVwAs6LzxO){@8Hd@~tOKF{}=nMq`p{5PL&G!Xi2o$)e$ zwT@TKv5yjz;0)zB!q{Rbb8{^r&tqKUpAPW-V> zi1noxu-gTxo|P&sxC|Zbt*5cl-qTbn6QAl7%BG|OlDIBVTW{nXzcXMT0g7;fBIh*% z7rX?o7`BO^0Y11l4Yu3x&KW;p^4v}5Ld-pj1*2?l#Mp`ri*4un-YdblWU*~{O#oBy zNEG=R%i?avEcu)XmP&5 zDAkjc=0(!YES{!xx686o#Fa|uSxOn_g{m%oS!MAK@PzCE-y>Q2mXv+9UGU}h{Rc#*3YJQfz_vgV zb9Gt*DXYIEiuDLp=Zes{l7wy=P3Q#$Xr13K`y#L%T4T3-W6VeNW3DyyT1Sr42#$O- zb7SBQULG_Lrx%Cb;+UPCAKV?t&ufF;LHqDhIP}7C?7 z)(HcBy>7luMLl-3sOL`D;ncqBmqv?9y-G(tS2GlP3b?crT8mu$Ld#aJ%3m|+G+3!0 m>!Fx8E;d`g)d|2JtNb literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_reversal_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_create_reversal_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc03f081ce318b7ffd8f5850e78054d06bfe0471 GIT binary patch literal 1822 zcmah}J8#@Z5MCaak9$d$tU$J&kt`q}42wt%1S#wkmf$>mJ_nZ591tuv$Cbp0FE3Yu zu8or4;8W)+NRTG~BaIH%1lzbsl}>=pE?i}nkIUJJAOf77{bsl`oSAR`Y&L5Mp7hOv z|E7V^-)d7nMxk6Bf${=*$kPH8Y8_2edL^iYdPfg&2WNXdFha9qhE~T4?T)RX3i<+h z_$TBUO#5BW&+1e&)CAOG_86^Ys10a!0PCp`*#Er|kJ5OU08!_;Hjv6^Xa~ zu8_Fpr^3;t)$#@7G?4XnER?U$nJ25ydI|HCV>eGAm$=wm`~u1g#85}`P^a=OVmiaj zxCy9wndxcwV67_LDv-(;!Ja%|#>b!dx1ky?<7e3S%hq1@xT+IDFKcWE<|0N}>ob58sqAruS zuL!%d? zm(zsMD2fHm1_ZoyKN4KEnwubgLl+>?+aKNiIArc#bnI@k^gzUk`(-RxaOXiBA3#Fx z1KK@ck>?(<=*SKH@7<&)_T%X8=EtA7DU|0<0uFSKr7lGE6Xrr?p!%+$$L?e`NH^;d z;YE{3?zfrrxZ+$UY*5lu5I>{88uNYJ-#M)g8tX&6eqN~<_PL2>m-{<|nYAHaE0LL{ z{`T40*Mp@;gKMoJZk71-LVu&5zTD~`pKcDOoFR5fOMUii_ST@bF~l1sw74?F%jM?U z^^vNfN@OFIjm(1DE-R50U{z@t}cB~cQF3|T=|+3>mb^Wad`>e`{(RSB_6_?s+wK) z&w0Aawe2+Id`^x{82{|vCUJgobCtd{MNg4GXJqD8VVpaE!6XK^kOX9A+dY7zOAhO2Q8)Awa%`rC(g>RhrRnPny`0U7<}guycF4 zc>^aMp&+rf{ayjdwrH7F=~LQC0CW*MeueoYR1(uHXi6* zXFj4IjfZ_bXsiy&>L>^*)lr1%OMTLR`=vIRUm22>sXD*-Sr6uxhh%xG+z#+MPoOFz-GKhZ5*J>R)RZX3J)1C|8LfB*mh literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_list_line_items_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/__pycache__/_transaction_list_line_items_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9781f2c5ddd88119460c70ba361dacec2eda9ba GIT binary patch literal 815 zcmYLHJ5L-j5VrSq$K%KYB1ni(1T>NR&sjMJ&S(uwvJ{*aqFTQPQV_ zbhJ_aLH2jbRH@RPL`XrE@%oNf^7xx?JmZ=1{Ajht2`>HjLHa!)NOl4 zgElWqlNM4V6Ktj0;5o5f7;8)wB)iVl$zdFF8KZtmfW$N*vG{>8@@4Q{2ONE8(5|rwxep{trAj;U7MQCYAcoS!a%NH2_ujfgKb%uzlHKPeC7=qGZnt1KG-EQ5@pSY*XwWVv_6x zAmS6o0<293@Rbs)&l1DwYh5MY~oVDkK|~6+D?>+75;{n zjkV%WVL~kEq)tq1l|mUhVV_fB$?yH1-}ig|w!Xdw_UOM4i+2RzmlJMJyaLMu3(g>i zoRm7BIvJ<1PE@E+#qIw|o%{!e;A@ z;zIM0OLB}x6*$9JT=7ab3C?RS@}ohgNf{HoLdKdk#wwXlONYCRolbe_HOfsvMV2(7 zHmccRj0+(RZ_8)w0+v<>Hy`MUtdNeyoIXW8F|wx5rNMINP|8Um#`KVnCMa?`LouUe z@t)QTb0Wpw@X0RKg~6TL8t^e{YSR=o(z-2|8a}7Y{O^XTRXfZZ4C{sJxEdWv?bQz~ z`2;_^{qyMj_2)a^yW2ma?W-V&Q?+qx=(_LwL_-^~T?vzZC&~@HNz9_Qb^F%udx7EH zpwMn{elBg|o(tMWzGu-*y6-1>pf;^&KNaXlmRyB|kn04<-X-)eVelu3NcyFB4VJau F{{ZNkud@IE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_create_params.py new file mode 100644 index 00000000..f1815268 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_create_params.py @@ -0,0 +1,299 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class CalculationCreateParams(RequestOptions): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: NotRequired[str] + """ + The ID of an existing customer to use for this calculation. If provided, the customer's address and tax IDs are copied to `customer_details`. + """ + customer_details: NotRequired["CalculationCreateParamsCustomerDetails"] + """ + Details about the customer, including address and tax IDs. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + line_items: List["CalculationCreateParamsLineItem"] + """ + A list of items the customer is purchasing. + """ + ship_from_details: NotRequired["CalculationCreateParamsShipFromDetails"] + """ + Details about the address from which the goods are being shipped. + """ + shipping_cost: NotRequired["CalculationCreateParamsShippingCost"] + """ + Shipping cost details to be used for the calculation. + """ + tax_date: NotRequired[int] + """ + Timestamp of date at which the tax rules and rates in effect applies for the calculation. Measured in seconds since the Unix epoch. Can be up to 48 hours in the past, and up to 48 hours in the future. + """ + + +class CalculationCreateParamsCustomerDetails(TypedDict): + address: NotRequired["CalculationCreateParamsCustomerDetailsAddress"] + """ + The customer's postal address (for example, home or business location). + """ + address_source: NotRequired[Literal["billing", "shipping"]] + """ + The type of customer address provided. + """ + ip_address: NotRequired[str] + """ + The customer's IP address (IPv4 or IPv6). + """ + tax_ids: NotRequired[List["CalculationCreateParamsCustomerDetailsTaxId"]] + """ + The customer's tax IDs. Stripe Tax might consider a transaction with applicable tax IDs to be B2B, which might affect the tax calculation result. Stripe Tax doesn't validate tax IDs for correctness. + """ + taxability_override: NotRequired[ + Literal["customer_exempt", "none", "reverse_charge"] + ] + """ + Overrides the tax calculation result to allow you to not collect tax from your customer. Use this if you've manually checked your customer's tax exemptions. Prefer providing the customer's `tax_ids` where possible, which automatically determines whether `reverse_charge` applies. + """ + + +class CalculationCreateParamsCustomerDetailsAddress(TypedDict): + city: NotRequired["Literal['']|str"] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired["Literal['']|str"] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired["Literal['']|str"] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired["Literal['']|str"] + """ + ZIP or postal code. + """ + state: NotRequired["Literal['']|str"] + """ + State, county, province, or region. We recommend sending [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code value when possible. + """ + + +class CalculationCreateParamsCustomerDetailsTaxId(TypedDict): + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + Type of the tax ID, one of `ad_nrt`, `ae_trn`, `al_tin`, `am_tin`, `ao_tin`, `ar_cuit`, `au_abn`, `au_arn`, `aw_tin`, `az_tin`, `ba_tin`, `bb_tin`, `bd_bin`, `bf_ifu`, `bg_uic`, `bh_vat`, `bj_ifu`, `bo_tin`, `br_cnpj`, `br_cpf`, `bs_tin`, `by_tin`, `ca_bn`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `ca_qst`, `cd_nif`, `ch_uid`, `ch_vat`, `cl_tin`, `cm_niu`, `cn_tin`, `co_nit`, `cr_tin`, `cv_nif`, `de_stn`, `do_rcn`, `ec_ruc`, `eg_tin`, `es_cif`, `et_tin`, `eu_oss_vat`, `eu_vat`, `gb_vat`, `ge_vat`, `gn_nif`, `hk_br`, `hr_oib`, `hu_tin`, `id_npwp`, `il_vat`, `in_gst`, `is_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `ke_pin`, `kg_tin`, `kh_tin`, `kr_brn`, `kz_bin`, `la_tin`, `li_uid`, `li_vat`, `ma_vat`, `md_vat`, `me_pib`, `mk_vat`, `mr_nif`, `mx_rfc`, `my_frp`, `my_itn`, `my_sst`, `ng_tin`, `no_vat`, `no_voec`, `np_pan`, `nz_gst`, `om_vat`, `pe_ruc`, `ph_tin`, `ro_tin`, `rs_pib`, `ru_inn`, `ru_kpp`, `sa_vat`, `sg_gst`, `sg_uen`, `si_tin`, `sn_ninea`, `sr_fin`, `sv_nit`, `th_vat`, `tj_tin`, `tr_tin`, `tw_vat`, `tz_vat`, `ua_vat`, `ug_tin`, `us_ein`, `uy_ruc`, `uz_tin`, `uz_vat`, `ve_rif`, `vn_tin`, `za_vat`, `zm_tin`, or `zw_tin` + """ + value: str + """ + Value of the tax ID. + """ + + +class CalculationCreateParamsLineItem(TypedDict): + amount: int + """ + A positive integer representing the line item's total price in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes are calculated on top of this amount. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + product: NotRequired[str] + """ + If provided, the product's `tax_code` will be used as the line item's `tax_code`. + """ + quantity: NotRequired[int] + """ + The number of units of the item being purchased. Used to calculate the per-unit price from the total `amount` for the line. For example, if `amount=100` and `quantity=4`, the calculated unit price is 25. + """ + reference: NotRequired[str] + """ + A custom identifier for this line item, which must be unique across the line items in the calculation. The reference helps identify each line item in exported [tax reports](https://stripe.com/docs/tax/reports). + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive"]] + """ + Specifies whether the `amount` includes taxes. Defaults to `exclusive`. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID to use for this line item. If not provided, we will use the tax code from the provided `product` param. If neither `tax_code` nor `product` is provided, we will use the default tax code from your Tax Settings. + """ + + +class CalculationCreateParamsShipFromDetails(TypedDict): + address: "CalculationCreateParamsShipFromDetailsAddress" + """ + The address from which the goods are being shipped from. + """ + + +class CalculationCreateParamsShipFromDetailsAddress(TypedDict): + city: NotRequired["Literal['']|str"] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired["Literal['']|str"] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired["Literal['']|str"] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired["Literal['']|str"] + """ + ZIP or postal code. + """ + state: NotRequired["Literal['']|str"] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ + + +class CalculationCreateParamsShippingCost(TypedDict): + amount: NotRequired[int] + """ + A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) representing the shipping charge. If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes are calculated on top of this amount. + """ + shipping_rate: NotRequired[str] + """ + If provided, the [shipping rate](https://stripe.com/docs/api/shipping_rates/object)'s `amount`, `tax_code` and `tax_behavior` are used. If you provide a shipping rate, then you cannot pass the `amount`, `tax_code`, or `tax_behavior` parameters. + """ + tax_behavior: NotRequired[Literal["exclusive", "inclusive"]] + """ + Specifies whether the `amount` includes taxes. If `tax_behavior=inclusive`, then the amount includes taxes. Defaults to `exclusive`. + """ + tax_code: NotRequired[str] + """ + The [tax code](https://stripe.com/docs/tax/tax-categories) used to calculate tax on shipping. If not provided, the default shipping tax code from your [Tax Settings](https://dashboard.stripe.com/settings/tax) is used. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_line_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_line_item_list_params.py new file mode 100644 index 00000000..8c988d49 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_line_item_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CalculationLineItemListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_list_line_items_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_list_line_items_params.py new file mode 100644 index 00000000..f2f7ea58 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_list_line_items_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CalculationListLineItemsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_retrieve_params.py new file mode 100644 index 00000000..ac247ea4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_calculation_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CalculationRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_create_params.py new file mode 100644 index 00000000..cca7d5c2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_create_params.py @@ -0,0 +1,1892 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List, Union +from typing_extensions import Literal, NotRequired, TypedDict + + +class RegistrationCreateParams(RequestOptions): + active_from: Union[Literal["now"], int] + """ + Time at which the Tax Registration becomes active. It can be either `now` to indicate the current time, or a future timestamp measured in seconds since the Unix epoch. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + country_options: "RegistrationCreateParamsCountryOptions" + """ + Specific options for a registration in the specified `country`. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired[int] + """ + If set, the Tax Registration stops being active at this time. If not set, the Tax Registration will be active indefinitely. Timestamp measured in seconds since the Unix epoch. + """ + + +_RegistrationCreateParamsCountryOptionsBase = TypedDict( + "RegistrationCreateParamsCountryOptions", + { + "in": NotRequired["RegistrationCreateParamsCountryOptionsIn"], + "is": NotRequired["RegistrationCreateParamsCountryOptionsIs"], + }, +) + + +class RegistrationCreateParamsCountryOptions( + _RegistrationCreateParamsCountryOptionsBase, +): + ae: NotRequired["RegistrationCreateParamsCountryOptionsAe"] + """ + Options for the registration in AE. + """ + al: NotRequired["RegistrationCreateParamsCountryOptionsAl"] + """ + Options for the registration in AL. + """ + am: NotRequired["RegistrationCreateParamsCountryOptionsAm"] + """ + Options for the registration in AM. + """ + ao: NotRequired["RegistrationCreateParamsCountryOptionsAo"] + """ + Options for the registration in AO. + """ + at: NotRequired["RegistrationCreateParamsCountryOptionsAt"] + """ + Options for the registration in AT. + """ + au: NotRequired["RegistrationCreateParamsCountryOptionsAu"] + """ + Options for the registration in AU. + """ + aw: NotRequired["RegistrationCreateParamsCountryOptionsAw"] + """ + Options for the registration in AW. + """ + az: NotRequired["RegistrationCreateParamsCountryOptionsAz"] + """ + Options for the registration in AZ. + """ + ba: NotRequired["RegistrationCreateParamsCountryOptionsBa"] + """ + Options for the registration in BA. + """ + bb: NotRequired["RegistrationCreateParamsCountryOptionsBb"] + """ + Options for the registration in BB. + """ + bd: NotRequired["RegistrationCreateParamsCountryOptionsBd"] + """ + Options for the registration in BD. + """ + be: NotRequired["RegistrationCreateParamsCountryOptionsBe"] + """ + Options for the registration in BE. + """ + bf: NotRequired["RegistrationCreateParamsCountryOptionsBf"] + """ + Options for the registration in BF. + """ + bg: NotRequired["RegistrationCreateParamsCountryOptionsBg"] + """ + Options for the registration in BG. + """ + bh: NotRequired["RegistrationCreateParamsCountryOptionsBh"] + """ + Options for the registration in BH. + """ + bj: NotRequired["RegistrationCreateParamsCountryOptionsBj"] + """ + Options for the registration in BJ. + """ + bs: NotRequired["RegistrationCreateParamsCountryOptionsBs"] + """ + Options for the registration in BS. + """ + by: NotRequired["RegistrationCreateParamsCountryOptionsBy"] + """ + Options for the registration in BY. + """ + ca: NotRequired["RegistrationCreateParamsCountryOptionsCa"] + """ + Options for the registration in CA. + """ + cd: NotRequired["RegistrationCreateParamsCountryOptionsCd"] + """ + Options for the registration in CD. + """ + ch: NotRequired["RegistrationCreateParamsCountryOptionsCh"] + """ + Options for the registration in CH. + """ + cl: NotRequired["RegistrationCreateParamsCountryOptionsCl"] + """ + Options for the registration in CL. + """ + cm: NotRequired["RegistrationCreateParamsCountryOptionsCm"] + """ + Options for the registration in CM. + """ + co: NotRequired["RegistrationCreateParamsCountryOptionsCo"] + """ + Options for the registration in CO. + """ + cr: NotRequired["RegistrationCreateParamsCountryOptionsCr"] + """ + Options for the registration in CR. + """ + cv: NotRequired["RegistrationCreateParamsCountryOptionsCv"] + """ + Options for the registration in CV. + """ + cy: NotRequired["RegistrationCreateParamsCountryOptionsCy"] + """ + Options for the registration in CY. + """ + cz: NotRequired["RegistrationCreateParamsCountryOptionsCz"] + """ + Options for the registration in CZ. + """ + de: NotRequired["RegistrationCreateParamsCountryOptionsDe"] + """ + Options for the registration in DE. + """ + dk: NotRequired["RegistrationCreateParamsCountryOptionsDk"] + """ + Options for the registration in DK. + """ + ec: NotRequired["RegistrationCreateParamsCountryOptionsEc"] + """ + Options for the registration in EC. + """ + ee: NotRequired["RegistrationCreateParamsCountryOptionsEe"] + """ + Options for the registration in EE. + """ + eg: NotRequired["RegistrationCreateParamsCountryOptionsEg"] + """ + Options for the registration in EG. + """ + es: NotRequired["RegistrationCreateParamsCountryOptionsEs"] + """ + Options for the registration in ES. + """ + et: NotRequired["RegistrationCreateParamsCountryOptionsEt"] + """ + Options for the registration in ET. + """ + fi: NotRequired["RegistrationCreateParamsCountryOptionsFi"] + """ + Options for the registration in FI. + """ + fr: NotRequired["RegistrationCreateParamsCountryOptionsFr"] + """ + Options for the registration in FR. + """ + gb: NotRequired["RegistrationCreateParamsCountryOptionsGb"] + """ + Options for the registration in GB. + """ + ge: NotRequired["RegistrationCreateParamsCountryOptionsGe"] + """ + Options for the registration in GE. + """ + gn: NotRequired["RegistrationCreateParamsCountryOptionsGn"] + """ + Options for the registration in GN. + """ + gr: NotRequired["RegistrationCreateParamsCountryOptionsGr"] + """ + Options for the registration in GR. + """ + hr: NotRequired["RegistrationCreateParamsCountryOptionsHr"] + """ + Options for the registration in HR. + """ + hu: NotRequired["RegistrationCreateParamsCountryOptionsHu"] + """ + Options for the registration in HU. + """ + id: NotRequired["RegistrationCreateParamsCountryOptionsId"] + """ + Options for the registration in ID. + """ + ie: NotRequired["RegistrationCreateParamsCountryOptionsIe"] + """ + Options for the registration in IE. + """ + it: NotRequired["RegistrationCreateParamsCountryOptionsIt"] + """ + Options for the registration in IT. + """ + jp: NotRequired["RegistrationCreateParamsCountryOptionsJp"] + """ + Options for the registration in JP. + """ + ke: NotRequired["RegistrationCreateParamsCountryOptionsKe"] + """ + Options for the registration in KE. + """ + kg: NotRequired["RegistrationCreateParamsCountryOptionsKg"] + """ + Options for the registration in KG. + """ + kh: NotRequired["RegistrationCreateParamsCountryOptionsKh"] + """ + Options for the registration in KH. + """ + kr: NotRequired["RegistrationCreateParamsCountryOptionsKr"] + """ + Options for the registration in KR. + """ + kz: NotRequired["RegistrationCreateParamsCountryOptionsKz"] + """ + Options for the registration in KZ. + """ + la: NotRequired["RegistrationCreateParamsCountryOptionsLa"] + """ + Options for the registration in LA. + """ + lt: NotRequired["RegistrationCreateParamsCountryOptionsLt"] + """ + Options for the registration in LT. + """ + lu: NotRequired["RegistrationCreateParamsCountryOptionsLu"] + """ + Options for the registration in LU. + """ + lv: NotRequired["RegistrationCreateParamsCountryOptionsLv"] + """ + Options for the registration in LV. + """ + ma: NotRequired["RegistrationCreateParamsCountryOptionsMa"] + """ + Options for the registration in MA. + """ + md: NotRequired["RegistrationCreateParamsCountryOptionsMd"] + """ + Options for the registration in MD. + """ + me: NotRequired["RegistrationCreateParamsCountryOptionsMe"] + """ + Options for the registration in ME. + """ + mk: NotRequired["RegistrationCreateParamsCountryOptionsMk"] + """ + Options for the registration in MK. + """ + mr: NotRequired["RegistrationCreateParamsCountryOptionsMr"] + """ + Options for the registration in MR. + """ + mt: NotRequired["RegistrationCreateParamsCountryOptionsMt"] + """ + Options for the registration in MT. + """ + mx: NotRequired["RegistrationCreateParamsCountryOptionsMx"] + """ + Options for the registration in MX. + """ + my: NotRequired["RegistrationCreateParamsCountryOptionsMy"] + """ + Options for the registration in MY. + """ + ng: NotRequired["RegistrationCreateParamsCountryOptionsNg"] + """ + Options for the registration in NG. + """ + nl: NotRequired["RegistrationCreateParamsCountryOptionsNl"] + """ + Options for the registration in NL. + """ + no: NotRequired["RegistrationCreateParamsCountryOptionsNo"] + """ + Options for the registration in NO. + """ + np: NotRequired["RegistrationCreateParamsCountryOptionsNp"] + """ + Options for the registration in NP. + """ + nz: NotRequired["RegistrationCreateParamsCountryOptionsNz"] + """ + Options for the registration in NZ. + """ + om: NotRequired["RegistrationCreateParamsCountryOptionsOm"] + """ + Options for the registration in OM. + """ + pe: NotRequired["RegistrationCreateParamsCountryOptionsPe"] + """ + Options for the registration in PE. + """ + ph: NotRequired["RegistrationCreateParamsCountryOptionsPh"] + """ + Options for the registration in PH. + """ + pl: NotRequired["RegistrationCreateParamsCountryOptionsPl"] + """ + Options for the registration in PL. + """ + pt: NotRequired["RegistrationCreateParamsCountryOptionsPt"] + """ + Options for the registration in PT. + """ + ro: NotRequired["RegistrationCreateParamsCountryOptionsRo"] + """ + Options for the registration in RO. + """ + rs: NotRequired["RegistrationCreateParamsCountryOptionsRs"] + """ + Options for the registration in RS. + """ + ru: NotRequired["RegistrationCreateParamsCountryOptionsRu"] + """ + Options for the registration in RU. + """ + sa: NotRequired["RegistrationCreateParamsCountryOptionsSa"] + """ + Options for the registration in SA. + """ + se: NotRequired["RegistrationCreateParamsCountryOptionsSe"] + """ + Options for the registration in SE. + """ + sg: NotRequired["RegistrationCreateParamsCountryOptionsSg"] + """ + Options for the registration in SG. + """ + si: NotRequired["RegistrationCreateParamsCountryOptionsSi"] + """ + Options for the registration in SI. + """ + sk: NotRequired["RegistrationCreateParamsCountryOptionsSk"] + """ + Options for the registration in SK. + """ + sn: NotRequired["RegistrationCreateParamsCountryOptionsSn"] + """ + Options for the registration in SN. + """ + sr: NotRequired["RegistrationCreateParamsCountryOptionsSr"] + """ + Options for the registration in SR. + """ + th: NotRequired["RegistrationCreateParamsCountryOptionsTh"] + """ + Options for the registration in TH. + """ + tj: NotRequired["RegistrationCreateParamsCountryOptionsTj"] + """ + Options for the registration in TJ. + """ + tr: NotRequired["RegistrationCreateParamsCountryOptionsTr"] + """ + Options for the registration in TR. + """ + tw: NotRequired["RegistrationCreateParamsCountryOptionsTw"] + """ + Options for the registration in TW. + """ + tz: NotRequired["RegistrationCreateParamsCountryOptionsTz"] + """ + Options for the registration in TZ. + """ + ua: NotRequired["RegistrationCreateParamsCountryOptionsUa"] + """ + Options for the registration in UA. + """ + ug: NotRequired["RegistrationCreateParamsCountryOptionsUg"] + """ + Options for the registration in UG. + """ + us: NotRequired["RegistrationCreateParamsCountryOptionsUs"] + """ + Options for the registration in US. + """ + uy: NotRequired["RegistrationCreateParamsCountryOptionsUy"] + """ + Options for the registration in UY. + """ + uz: NotRequired["RegistrationCreateParamsCountryOptionsUz"] + """ + Options for the registration in UZ. + """ + vn: NotRequired["RegistrationCreateParamsCountryOptionsVn"] + """ + Options for the registration in VN. + """ + za: NotRequired["RegistrationCreateParamsCountryOptionsZa"] + """ + Options for the registration in ZA. + """ + zm: NotRequired["RegistrationCreateParamsCountryOptionsZm"] + """ + Options for the registration in ZM. + """ + zw: NotRequired["RegistrationCreateParamsCountryOptionsZw"] + """ + Options for the registration in ZW. + """ + + +class RegistrationCreateParamsCountryOptionsAe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAeStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAeStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAl(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAlStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAlStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAm(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAo(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAoStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAoStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAtStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsAtStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAu(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAuStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAuStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAw(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsAwStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsAwStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsAz(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBa(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBaStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBaStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBb(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBbStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBbStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBd(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBdStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBdStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBeStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsBeStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBf(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBfStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBfStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBg(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBgStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsBgStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBh(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBhStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBhStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBj(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBs(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsBsStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsBsStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsBy(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCa(TypedDict): + province_standard: NotRequired[ + "RegistrationCreateParamsCountryOptionsCaProvinceStandard" + ] + """ + Options for the provincial tax registration. + """ + type: Literal["province_standard", "simplified", "standard"] + """ + Type of registration to be created in Canada. + """ + + +class RegistrationCreateParamsCountryOptionsCaProvinceStandard(TypedDict): + province: str + """ + Two-letter CA province code ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)). + """ + + +class RegistrationCreateParamsCountryOptionsCd(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsCdStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCdStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsCh(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsChStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsChStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsCl(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCm(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCo(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCr(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCv(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsCy(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsCyStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsCyStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsCz(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsCzStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsCzStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsDe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsDeStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsDeStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsDk(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsDkStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsDkStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsEc(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsEe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsEeStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsEeStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsEg(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsEs(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsEsStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsEsStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsEt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsEtStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsEtStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsFi(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsFiStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsFiStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsFr(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsFrStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsFrStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsGb(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsGbStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsGbStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsGe(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsGn(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsGnStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsGnStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsGr(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsGrStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsGrStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsHr(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsHrStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsHrStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsHu(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsHuStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsHuStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsId(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsIe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsIeStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsIeStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsIn(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsIs(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsIsStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsIsStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsIt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsItStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsItStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsJp(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsJpStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsJpStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsKe(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsKg(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsKh(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsKr(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsKz(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsLa(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsLt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsLtStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsLtStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsLu(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsLuStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsLuStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsLv(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsLvStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsLvStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsMa(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMd(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsMeStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMeStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsMk(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsMkStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMkStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsMr(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsMrStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMrStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsMt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsMtStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsMtStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsMx(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsMy(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsNg(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsNl(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsNlStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsNlStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsNo(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsNoStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsNoStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsNp(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsNz(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsNzStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsNzStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsOm(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsOmStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsOmStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsPe(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsPh(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsPl(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsPlStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsPlStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsPt(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsPtStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsPtStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsRo(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsRoStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsRoStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsRs(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsRsStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsRsStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsRu(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsSa(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsSe(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsSeStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsSeStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsSg(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsSgStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsSgStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsSi(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsSiStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsSiStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsSk(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsSkStandard"] + """ + Options for the standard registration. + """ + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration to be created in an EU country. + """ + + +class RegistrationCreateParamsCountryOptionsSkStandard(TypedDict): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsSn(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsSr(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsSrStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsSrStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsTh(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsTj(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsTr(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsTw(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsTz(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsUa(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsUg(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsUs(TypedDict): + local_amusement_tax: NotRequired[ + "RegistrationCreateParamsCountryOptionsUsLocalAmusementTax" + ] + """ + Options for the local amusement tax registration. + """ + local_lease_tax: NotRequired[ + "RegistrationCreateParamsCountryOptionsUsLocalLeaseTax" + ] + """ + Options for the local lease tax registration. + """ + state: str + """ + Two-letter US state code ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)). + """ + state_sales_tax: NotRequired[ + "RegistrationCreateParamsCountryOptionsUsStateSalesTax" + ] + """ + Options for the state sales tax registration. + """ + type: Literal[ + "local_amusement_tax", + "local_lease_tax", + "state_communications_tax", + "state_retail_delivery_fee", + "state_sales_tax", + ] + """ + Type of registration to be created in the US. + """ + + +class RegistrationCreateParamsCountryOptionsUsLocalAmusementTax(TypedDict): + jurisdiction: str + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. Supported FIPS codes are: `14000` (Chicago), `06613` (Bloomington), `21696` (East Dundee), `24582` (Evanston), `45421` (Lynwood), `48892` (Midlothian), `64343` (River Grove), and `68081` (Schiller Park). + """ + + +class RegistrationCreateParamsCountryOptionsUsLocalLeaseTax(TypedDict): + jurisdiction: str + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. Supported FIPS codes are: `14000` (Chicago). + """ + + +class RegistrationCreateParamsCountryOptionsUsStateSalesTax(TypedDict): + elections: List[ + "RegistrationCreateParamsCountryOptionsUsStateSalesTaxElection" + ] + """ + Elections for the state sales tax registration. + """ + + +class RegistrationCreateParamsCountryOptionsUsStateSalesTaxElection(TypedDict): + jurisdiction: NotRequired[str] + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. Supported FIPS codes are: `003` (Allegheny County) and `60000` (Philadelphia City). + """ + type: Literal[ + "local_use_tax", "simplified_sellers_use_tax", "single_local_use_tax" + ] + """ + The type of the election for the state sales tax registration. + """ + + +class RegistrationCreateParamsCountryOptionsUy(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsUyStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsUyStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsUz(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsVn(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsZa(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsZaStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsZaStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ + + +class RegistrationCreateParamsCountryOptionsZm(TypedDict): + type: Literal["simplified"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsZw(TypedDict): + standard: NotRequired["RegistrationCreateParamsCountryOptionsZwStandard"] + """ + Options for the standard registration. + """ + type: Literal["standard"] + """ + Type of registration to be created in `country`. + """ + + +class RegistrationCreateParamsCountryOptionsZwStandard(TypedDict): + place_of_supply_scheme: NotRequired[Literal["inbound_goods", "standard"]] + """ + Place of supply scheme used in an standard registration. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_list_params.py new file mode 100644 index 00000000..7573e1e6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class RegistrationListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["active", "all", "expired", "scheduled"]] + """ + The status of the Tax Registration. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_modify_params.py new file mode 100644 index 00000000..30bbc04f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_modify_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class RegistrationModifyParams(RequestOptions): + active_from: NotRequired["Literal['now']|int"] + """ + Time at which the registration becomes active. It can be either `now` to indicate the current time, or a timestamp measured in seconds since the Unix epoch. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired["Literal['']|Literal['now']|int"] + """ + If set, the registration stops being active at this time. If not set, the registration will be active indefinitely. It can be either `now` to indicate the current time, or a timestamp measured in seconds since the Unix epoch. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_retrieve_params.py new file mode 100644 index 00000000..63ce7607 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class RegistrationRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_update_params.py new file mode 100644 index 00000000..4d824007 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_registration_update_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class RegistrationUpdateParams(TypedDict): + active_from: NotRequired["Literal['now']|int"] + """ + Time at which the registration becomes active. It can be either `now` to indicate the current time, or a timestamp measured in seconds since the Unix epoch. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + expires_at: NotRequired["Literal['']|Literal['now']|int"] + """ + If set, the registration stops being active at this time. If not set, the registration will be active indefinitely. It can be either `now` to indicate the current time, or a timestamp measured in seconds since the Unix epoch. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_modify_params.py new file mode 100644 index 00000000..52f9780f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_modify_params.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SettingsModifyParams(RequestOptions): + defaults: NotRequired["SettingsModifyParamsDefaults"] + """ + Default configuration to be used on Stripe Tax calculations. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + head_office: NotRequired["SettingsModifyParamsHeadOffice"] + """ + The place where your business is located. + """ + + +class SettingsModifyParamsDefaults(TypedDict): + tax_behavior: NotRequired[ + Literal["exclusive", "inclusive", "inferred_by_currency"] + ] + """ + Specifies the default [tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#tax-behavior) to be used when the item's price has unspecified tax behavior. One of inclusive, exclusive, or inferred_by_currency. Once specified, it cannot be changed back to null. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + + +class SettingsModifyParamsHeadOffice(TypedDict): + address: "SettingsModifyParamsHeadOfficeAddress" + """ + The location of the business for tax purposes. + """ + + +class SettingsModifyParamsHeadOfficeAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_retrieve_params.py new file mode 100644 index 00000000..2d136233 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class SettingsRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_update_params.py new file mode 100644 index 00000000..1d0bb94a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_settings_update_params.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class SettingsUpdateParams(TypedDict): + defaults: NotRequired["SettingsUpdateParamsDefaults"] + """ + Default configuration to be used on Stripe Tax calculations. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + head_office: NotRequired["SettingsUpdateParamsHeadOffice"] + """ + The place where your business is located. + """ + + +class SettingsUpdateParamsDefaults(TypedDict): + tax_behavior: NotRequired[ + Literal["exclusive", "inclusive", "inferred_by_currency"] + ] + """ + Specifies the default [tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#tax-behavior) to be used when the item's price has unspecified tax behavior. One of inclusive, exclusive, or inferred_by_currency. Once specified, it cannot be changed back to null. + """ + tax_code: NotRequired[str] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + + +class SettingsUpdateParamsHeadOffice(TypedDict): + address: "SettingsUpdateParamsHeadOfficeAddress" + """ + The location of the business for tax purposes. + """ + + +class SettingsUpdateParamsHeadOfficeAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_from_calculation_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_from_calculation_params.py new file mode 100644 index 00000000..233bb0f0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_from_calculation_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class TransactionCreateFromCalculationParams(RequestOptions): + calculation: str + """ + Tax Calculation ID to be used as input when creating the transaction. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + posted_at: NotRequired[int] + """ + The Unix timestamp representing when the tax liability is assumed or reduced, which determines the liability posting period and handling in tax liability reports. The timestamp must fall within the `tax_date` and the current time, unless the `tax_date` is scheduled in advance. Defaults to the current time. + """ + reference: str + """ + A custom order or sale identifier, such as 'myOrder_123'. Must be unique across all transactions, including reversals. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_reversal_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_reversal_params.py new file mode 100644 index 00000000..a86a4b2c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_create_reversal_params.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransactionCreateReversalParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + flat_amount: NotRequired[int] + """ + A flat amount to reverse across the entire transaction, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) in negative. This value represents the total amount to refund from the transaction, including taxes. + """ + line_items: NotRequired[List["TransactionCreateReversalParamsLineItem"]] + """ + The line item amounts to reverse. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + mode: Literal["full", "partial"] + """ + If `partial`, the provided line item or shipping cost amounts are reversed. If `full`, the original transaction is fully reversed. + """ + original_transaction: str + """ + The ID of the Transaction to partially or fully reverse. + """ + reference: str + """ + A custom identifier for this reversal, such as `myOrder_123-refund_1`, which must be unique across all transactions. The reference helps identify this reversal transaction in exported [tax reports](https://stripe.com/docs/tax/reports). + """ + shipping_cost: NotRequired["TransactionCreateReversalParamsShippingCost"] + """ + The shipping cost to reverse. + """ + + +class TransactionCreateReversalParamsLineItem(TypedDict): + amount: int + """ + The amount to reverse, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) in negative. + """ + amount_tax: int + """ + The amount of tax to reverse, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) in negative. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + original_line_item: str + """ + The `id` of the line item to reverse in the original transaction. + """ + quantity: NotRequired[int] + """ + The quantity reversed. Appears in [tax exports](https://stripe.com/docs/tax/reports), but does not affect the amount of tax reversed. + """ + reference: str + """ + A custom identifier for this line item in the reversal transaction, such as 'L1-refund'. + """ + + +class TransactionCreateReversalParamsShippingCost(TypedDict): + amount: int + """ + The amount to reverse, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) in negative. + """ + amount_tax: int + """ + The amount of tax to reverse, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) in negative. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_line_item_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_line_item_list_params.py new file mode 100644 index 00000000..03900a6e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_line_item_list_params.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransactionLineItemListParams(TypedDict): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_list_line_items_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_list_line_items_params.py new file mode 100644 index 00000000..bd1d9ab6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_list_line_items_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransactionListLineItemsParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_retrieve_params.py new file mode 100644 index 00000000..07744dd9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/tax/_transaction_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransactionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__init__.py new file mode 100644 index 00000000..45d47198 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__init__.py @@ -0,0 +1,857 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.terminal._configuration_create_params import ( + ConfigurationCreateParams as ConfigurationCreateParams, + ConfigurationCreateParamsBbposWisepad3 as ConfigurationCreateParamsBbposWisepad3, + ConfigurationCreateParamsBbposWiseposE as ConfigurationCreateParamsBbposWiseposE, + ConfigurationCreateParamsOffline as ConfigurationCreateParamsOffline, + ConfigurationCreateParamsRebootWindow as ConfigurationCreateParamsRebootWindow, + ConfigurationCreateParamsStripeS700 as ConfigurationCreateParamsStripeS700, + ConfigurationCreateParamsTipping as ConfigurationCreateParamsTipping, + ConfigurationCreateParamsTippingAed as ConfigurationCreateParamsTippingAed, + ConfigurationCreateParamsTippingAud as ConfigurationCreateParamsTippingAud, + ConfigurationCreateParamsTippingBgn as ConfigurationCreateParamsTippingBgn, + ConfigurationCreateParamsTippingCad as ConfigurationCreateParamsTippingCad, + ConfigurationCreateParamsTippingChf as ConfigurationCreateParamsTippingChf, + ConfigurationCreateParamsTippingCzk as ConfigurationCreateParamsTippingCzk, + ConfigurationCreateParamsTippingDkk as ConfigurationCreateParamsTippingDkk, + ConfigurationCreateParamsTippingEur as ConfigurationCreateParamsTippingEur, + ConfigurationCreateParamsTippingGbp as ConfigurationCreateParamsTippingGbp, + ConfigurationCreateParamsTippingGip as ConfigurationCreateParamsTippingGip, + ConfigurationCreateParamsTippingHkd as ConfigurationCreateParamsTippingHkd, + ConfigurationCreateParamsTippingHuf as ConfigurationCreateParamsTippingHuf, + ConfigurationCreateParamsTippingJpy as ConfigurationCreateParamsTippingJpy, + ConfigurationCreateParamsTippingMxn as ConfigurationCreateParamsTippingMxn, + ConfigurationCreateParamsTippingMyr as ConfigurationCreateParamsTippingMyr, + ConfigurationCreateParamsTippingNok as ConfigurationCreateParamsTippingNok, + ConfigurationCreateParamsTippingNzd as ConfigurationCreateParamsTippingNzd, + ConfigurationCreateParamsTippingPln as ConfigurationCreateParamsTippingPln, + ConfigurationCreateParamsTippingRon as ConfigurationCreateParamsTippingRon, + ConfigurationCreateParamsTippingSek as ConfigurationCreateParamsTippingSek, + ConfigurationCreateParamsTippingSgd as ConfigurationCreateParamsTippingSgd, + ConfigurationCreateParamsTippingUsd as ConfigurationCreateParamsTippingUsd, + ConfigurationCreateParamsVerifoneP400 as ConfigurationCreateParamsVerifoneP400, + ConfigurationCreateParamsWifi as ConfigurationCreateParamsWifi, + ConfigurationCreateParamsWifiEnterpriseEapPeap as ConfigurationCreateParamsWifiEnterpriseEapPeap, + ConfigurationCreateParamsWifiEnterpriseEapTls as ConfigurationCreateParamsWifiEnterpriseEapTls, + ConfigurationCreateParamsWifiPersonalPsk as ConfigurationCreateParamsWifiPersonalPsk, + ) + from stripe.params.terminal._configuration_delete_params import ( + ConfigurationDeleteParams as ConfigurationDeleteParams, + ) + from stripe.params.terminal._configuration_list_params import ( + ConfigurationListParams as ConfigurationListParams, + ) + from stripe.params.terminal._configuration_modify_params import ( + ConfigurationModifyParams as ConfigurationModifyParams, + ConfigurationModifyParamsBbposWisepad3 as ConfigurationModifyParamsBbposWisepad3, + ConfigurationModifyParamsBbposWiseposE as ConfigurationModifyParamsBbposWiseposE, + ConfigurationModifyParamsOffline as ConfigurationModifyParamsOffline, + ConfigurationModifyParamsRebootWindow as ConfigurationModifyParamsRebootWindow, + ConfigurationModifyParamsStripeS700 as ConfigurationModifyParamsStripeS700, + ConfigurationModifyParamsTipping as ConfigurationModifyParamsTipping, + ConfigurationModifyParamsTippingAed as ConfigurationModifyParamsTippingAed, + ConfigurationModifyParamsTippingAud as ConfigurationModifyParamsTippingAud, + ConfigurationModifyParamsTippingBgn as ConfigurationModifyParamsTippingBgn, + ConfigurationModifyParamsTippingCad as ConfigurationModifyParamsTippingCad, + ConfigurationModifyParamsTippingChf as ConfigurationModifyParamsTippingChf, + ConfigurationModifyParamsTippingCzk as ConfigurationModifyParamsTippingCzk, + ConfigurationModifyParamsTippingDkk as ConfigurationModifyParamsTippingDkk, + ConfigurationModifyParamsTippingEur as ConfigurationModifyParamsTippingEur, + ConfigurationModifyParamsTippingGbp as ConfigurationModifyParamsTippingGbp, + ConfigurationModifyParamsTippingGip as ConfigurationModifyParamsTippingGip, + ConfigurationModifyParamsTippingHkd as ConfigurationModifyParamsTippingHkd, + ConfigurationModifyParamsTippingHuf as ConfigurationModifyParamsTippingHuf, + ConfigurationModifyParamsTippingJpy as ConfigurationModifyParamsTippingJpy, + ConfigurationModifyParamsTippingMxn as ConfigurationModifyParamsTippingMxn, + ConfigurationModifyParamsTippingMyr as ConfigurationModifyParamsTippingMyr, + ConfigurationModifyParamsTippingNok as ConfigurationModifyParamsTippingNok, + ConfigurationModifyParamsTippingNzd as ConfigurationModifyParamsTippingNzd, + ConfigurationModifyParamsTippingPln as ConfigurationModifyParamsTippingPln, + ConfigurationModifyParamsTippingRon as ConfigurationModifyParamsTippingRon, + ConfigurationModifyParamsTippingSek as ConfigurationModifyParamsTippingSek, + ConfigurationModifyParamsTippingSgd as ConfigurationModifyParamsTippingSgd, + ConfigurationModifyParamsTippingUsd as ConfigurationModifyParamsTippingUsd, + ConfigurationModifyParamsVerifoneP400 as ConfigurationModifyParamsVerifoneP400, + ConfigurationModifyParamsWifi as ConfigurationModifyParamsWifi, + ConfigurationModifyParamsWifiEnterpriseEapPeap as ConfigurationModifyParamsWifiEnterpriseEapPeap, + ConfigurationModifyParamsWifiEnterpriseEapTls as ConfigurationModifyParamsWifiEnterpriseEapTls, + ConfigurationModifyParamsWifiPersonalPsk as ConfigurationModifyParamsWifiPersonalPsk, + ) + from stripe.params.terminal._configuration_retrieve_params import ( + ConfigurationRetrieveParams as ConfigurationRetrieveParams, + ) + from stripe.params.terminal._configuration_update_params import ( + ConfigurationUpdateParams as ConfigurationUpdateParams, + ConfigurationUpdateParamsBbposWisepad3 as ConfigurationUpdateParamsBbposWisepad3, + ConfigurationUpdateParamsBbposWiseposE as ConfigurationUpdateParamsBbposWiseposE, + ConfigurationUpdateParamsOffline as ConfigurationUpdateParamsOffline, + ConfigurationUpdateParamsRebootWindow as ConfigurationUpdateParamsRebootWindow, + ConfigurationUpdateParamsStripeS700 as ConfigurationUpdateParamsStripeS700, + ConfigurationUpdateParamsTipping as ConfigurationUpdateParamsTipping, + ConfigurationUpdateParamsTippingAed as ConfigurationUpdateParamsTippingAed, + ConfigurationUpdateParamsTippingAud as ConfigurationUpdateParamsTippingAud, + ConfigurationUpdateParamsTippingBgn as ConfigurationUpdateParamsTippingBgn, + ConfigurationUpdateParamsTippingCad as ConfigurationUpdateParamsTippingCad, + ConfigurationUpdateParamsTippingChf as ConfigurationUpdateParamsTippingChf, + ConfigurationUpdateParamsTippingCzk as ConfigurationUpdateParamsTippingCzk, + ConfigurationUpdateParamsTippingDkk as ConfigurationUpdateParamsTippingDkk, + ConfigurationUpdateParamsTippingEur as ConfigurationUpdateParamsTippingEur, + ConfigurationUpdateParamsTippingGbp as ConfigurationUpdateParamsTippingGbp, + ConfigurationUpdateParamsTippingGip as ConfigurationUpdateParamsTippingGip, + ConfigurationUpdateParamsTippingHkd as ConfigurationUpdateParamsTippingHkd, + ConfigurationUpdateParamsTippingHuf as ConfigurationUpdateParamsTippingHuf, + ConfigurationUpdateParamsTippingJpy as ConfigurationUpdateParamsTippingJpy, + ConfigurationUpdateParamsTippingMxn as ConfigurationUpdateParamsTippingMxn, + ConfigurationUpdateParamsTippingMyr as ConfigurationUpdateParamsTippingMyr, + ConfigurationUpdateParamsTippingNok as ConfigurationUpdateParamsTippingNok, + ConfigurationUpdateParamsTippingNzd as ConfigurationUpdateParamsTippingNzd, + ConfigurationUpdateParamsTippingPln as ConfigurationUpdateParamsTippingPln, + ConfigurationUpdateParamsTippingRon as ConfigurationUpdateParamsTippingRon, + ConfigurationUpdateParamsTippingSek as ConfigurationUpdateParamsTippingSek, + ConfigurationUpdateParamsTippingSgd as ConfigurationUpdateParamsTippingSgd, + ConfigurationUpdateParamsTippingUsd as ConfigurationUpdateParamsTippingUsd, + ConfigurationUpdateParamsVerifoneP400 as ConfigurationUpdateParamsVerifoneP400, + ConfigurationUpdateParamsWifi as ConfigurationUpdateParamsWifi, + ConfigurationUpdateParamsWifiEnterpriseEapPeap as ConfigurationUpdateParamsWifiEnterpriseEapPeap, + ConfigurationUpdateParamsWifiEnterpriseEapTls as ConfigurationUpdateParamsWifiEnterpriseEapTls, + ConfigurationUpdateParamsWifiPersonalPsk as ConfigurationUpdateParamsWifiPersonalPsk, + ) + from stripe.params.terminal._connection_token_create_params import ( + ConnectionTokenCreateParams as ConnectionTokenCreateParams, + ) + from stripe.params.terminal._location_create_params import ( + LocationCreateParams as LocationCreateParams, + LocationCreateParamsAddress as LocationCreateParamsAddress, + LocationCreateParamsAddressKana as LocationCreateParamsAddressKana, + LocationCreateParamsAddressKanji as LocationCreateParamsAddressKanji, + ) + from stripe.params.terminal._location_delete_params import ( + LocationDeleteParams as LocationDeleteParams, + ) + from stripe.params.terminal._location_list_params import ( + LocationListParams as LocationListParams, + ) + from stripe.params.terminal._location_modify_params import ( + LocationModifyParams as LocationModifyParams, + LocationModifyParamsAddress as LocationModifyParamsAddress, + LocationModifyParamsAddressKana as LocationModifyParamsAddressKana, + LocationModifyParamsAddressKanji as LocationModifyParamsAddressKanji, + ) + from stripe.params.terminal._location_retrieve_params import ( + LocationRetrieveParams as LocationRetrieveParams, + ) + from stripe.params.terminal._location_update_params import ( + LocationUpdateParams as LocationUpdateParams, + LocationUpdateParamsAddress as LocationUpdateParamsAddress, + LocationUpdateParamsAddressKana as LocationUpdateParamsAddressKana, + LocationUpdateParamsAddressKanji as LocationUpdateParamsAddressKanji, + ) + from stripe.params.terminal._reader_cancel_action_params import ( + ReaderCancelActionParams as ReaderCancelActionParams, + ) + from stripe.params.terminal._reader_collect_inputs_params import ( + ReaderCollectInputsParams as ReaderCollectInputsParams, + ReaderCollectInputsParamsInput as ReaderCollectInputsParamsInput, + ReaderCollectInputsParamsInputCustomText as ReaderCollectInputsParamsInputCustomText, + ReaderCollectInputsParamsInputSelection as ReaderCollectInputsParamsInputSelection, + ReaderCollectInputsParamsInputSelectionChoice as ReaderCollectInputsParamsInputSelectionChoice, + ReaderCollectInputsParamsInputToggle as ReaderCollectInputsParamsInputToggle, + ) + from stripe.params.terminal._reader_collect_payment_method_params import ( + ReaderCollectPaymentMethodParams as ReaderCollectPaymentMethodParams, + ReaderCollectPaymentMethodParamsCollectConfig as ReaderCollectPaymentMethodParamsCollectConfig, + ReaderCollectPaymentMethodParamsCollectConfigTipping as ReaderCollectPaymentMethodParamsCollectConfigTipping, + ) + from stripe.params.terminal._reader_confirm_payment_intent_params import ( + ReaderConfirmPaymentIntentParams as ReaderConfirmPaymentIntentParams, + ReaderConfirmPaymentIntentParamsConfirmConfig as ReaderConfirmPaymentIntentParamsConfirmConfig, + ) + from stripe.params.terminal._reader_create_params import ( + ReaderCreateParams as ReaderCreateParams, + ) + from stripe.params.terminal._reader_delete_params import ( + ReaderDeleteParams as ReaderDeleteParams, + ) + from stripe.params.terminal._reader_list_params import ( + ReaderListParams as ReaderListParams, + ) + from stripe.params.terminal._reader_modify_params import ( + ReaderModifyParams as ReaderModifyParams, + ) + from stripe.params.terminal._reader_present_payment_method_params import ( + ReaderPresentPaymentMethodParams as ReaderPresentPaymentMethodParams, + ReaderPresentPaymentMethodParamsCard as ReaderPresentPaymentMethodParamsCard, + ReaderPresentPaymentMethodParamsCardPresent as ReaderPresentPaymentMethodParamsCardPresent, + ReaderPresentPaymentMethodParamsInteracPresent as ReaderPresentPaymentMethodParamsInteracPresent, + ) + from stripe.params.terminal._reader_process_payment_intent_params import ( + ReaderProcessPaymentIntentParams as ReaderProcessPaymentIntentParams, + ReaderProcessPaymentIntentParamsProcessConfig as ReaderProcessPaymentIntentParamsProcessConfig, + ReaderProcessPaymentIntentParamsProcessConfigTipping as ReaderProcessPaymentIntentParamsProcessConfigTipping, + ) + from stripe.params.terminal._reader_process_setup_intent_params import ( + ReaderProcessSetupIntentParams as ReaderProcessSetupIntentParams, + ReaderProcessSetupIntentParamsProcessConfig as ReaderProcessSetupIntentParamsProcessConfig, + ) + from stripe.params.terminal._reader_refund_payment_params import ( + ReaderRefundPaymentParams as ReaderRefundPaymentParams, + ReaderRefundPaymentParamsRefundPaymentConfig as ReaderRefundPaymentParamsRefundPaymentConfig, + ) + from stripe.params.terminal._reader_retrieve_params import ( + ReaderRetrieveParams as ReaderRetrieveParams, + ) + from stripe.params.terminal._reader_set_reader_display_params import ( + ReaderSetReaderDisplayParams as ReaderSetReaderDisplayParams, + ReaderSetReaderDisplayParamsCart as ReaderSetReaderDisplayParamsCart, + ReaderSetReaderDisplayParamsCartLineItem as ReaderSetReaderDisplayParamsCartLineItem, + ) + from stripe.params.terminal._reader_succeed_input_collection_params import ( + ReaderSucceedInputCollectionParams as ReaderSucceedInputCollectionParams, + ) + from stripe.params.terminal._reader_timeout_input_collection_params import ( + ReaderTimeoutInputCollectionParams as ReaderTimeoutInputCollectionParams, + ) + from stripe.params.terminal._reader_update_params import ( + ReaderUpdateParams as ReaderUpdateParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ConfigurationCreateParams": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsBbposWisepad3": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsBbposWiseposE": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsOffline": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsRebootWindow": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsStripeS700": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTipping": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingAed": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingAud": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingBgn": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingCad": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingChf": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingCzk": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingDkk": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingEur": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingGbp": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingGip": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingHkd": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingHuf": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingJpy": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingMxn": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingMyr": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingNok": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingNzd": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingPln": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingRon": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingSek": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingSgd": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsTippingUsd": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsVerifoneP400": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsWifi": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsWifiEnterpriseEapPeap": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsWifiEnterpriseEapTls": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationCreateParamsWifiPersonalPsk": ( + "stripe.params.terminal._configuration_create_params", + False, + ), + "ConfigurationDeleteParams": ( + "stripe.params.terminal._configuration_delete_params", + False, + ), + "ConfigurationListParams": ( + "stripe.params.terminal._configuration_list_params", + False, + ), + "ConfigurationModifyParams": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsBbposWisepad3": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsBbposWiseposE": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsOffline": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsRebootWindow": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsStripeS700": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTipping": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingAed": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingAud": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingBgn": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingCad": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingChf": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingCzk": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingDkk": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingEur": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingGbp": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingGip": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingHkd": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingHuf": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingJpy": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingMxn": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingMyr": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingNok": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingNzd": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingPln": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingRon": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingSek": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingSgd": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsTippingUsd": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsVerifoneP400": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsWifi": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsWifiEnterpriseEapPeap": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsWifiEnterpriseEapTls": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationModifyParamsWifiPersonalPsk": ( + "stripe.params.terminal._configuration_modify_params", + False, + ), + "ConfigurationRetrieveParams": ( + "stripe.params.terminal._configuration_retrieve_params", + False, + ), + "ConfigurationUpdateParams": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsBbposWisepad3": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsBbposWiseposE": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsOffline": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsRebootWindow": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsStripeS700": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTipping": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingAed": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingAud": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingBgn": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingCad": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingChf": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingCzk": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingDkk": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingEur": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingGbp": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingGip": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingHkd": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingHuf": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingJpy": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingMxn": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingMyr": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingNok": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingNzd": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingPln": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingRon": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingSek": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingSgd": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsTippingUsd": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsVerifoneP400": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsWifi": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsWifiEnterpriseEapPeap": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsWifiEnterpriseEapTls": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConfigurationUpdateParamsWifiPersonalPsk": ( + "stripe.params.terminal._configuration_update_params", + False, + ), + "ConnectionTokenCreateParams": ( + "stripe.params.terminal._connection_token_create_params", + False, + ), + "LocationCreateParams": ( + "stripe.params.terminal._location_create_params", + False, + ), + "LocationCreateParamsAddress": ( + "stripe.params.terminal._location_create_params", + False, + ), + "LocationCreateParamsAddressKana": ( + "stripe.params.terminal._location_create_params", + False, + ), + "LocationCreateParamsAddressKanji": ( + "stripe.params.terminal._location_create_params", + False, + ), + "LocationDeleteParams": ( + "stripe.params.terminal._location_delete_params", + False, + ), + "LocationListParams": ( + "stripe.params.terminal._location_list_params", + False, + ), + "LocationModifyParams": ( + "stripe.params.terminal._location_modify_params", + False, + ), + "LocationModifyParamsAddress": ( + "stripe.params.terminal._location_modify_params", + False, + ), + "LocationModifyParamsAddressKana": ( + "stripe.params.terminal._location_modify_params", + False, + ), + "LocationModifyParamsAddressKanji": ( + "stripe.params.terminal._location_modify_params", + False, + ), + "LocationRetrieveParams": ( + "stripe.params.terminal._location_retrieve_params", + False, + ), + "LocationUpdateParams": ( + "stripe.params.terminal._location_update_params", + False, + ), + "LocationUpdateParamsAddress": ( + "stripe.params.terminal._location_update_params", + False, + ), + "LocationUpdateParamsAddressKana": ( + "stripe.params.terminal._location_update_params", + False, + ), + "LocationUpdateParamsAddressKanji": ( + "stripe.params.terminal._location_update_params", + False, + ), + "ReaderCancelActionParams": ( + "stripe.params.terminal._reader_cancel_action_params", + False, + ), + "ReaderCollectInputsParams": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectInputsParamsInput": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectInputsParamsInputCustomText": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectInputsParamsInputSelection": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectInputsParamsInputSelectionChoice": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectInputsParamsInputToggle": ( + "stripe.params.terminal._reader_collect_inputs_params", + False, + ), + "ReaderCollectPaymentMethodParams": ( + "stripe.params.terminal._reader_collect_payment_method_params", + False, + ), + "ReaderCollectPaymentMethodParamsCollectConfig": ( + "stripe.params.terminal._reader_collect_payment_method_params", + False, + ), + "ReaderCollectPaymentMethodParamsCollectConfigTipping": ( + "stripe.params.terminal._reader_collect_payment_method_params", + False, + ), + "ReaderConfirmPaymentIntentParams": ( + "stripe.params.terminal._reader_confirm_payment_intent_params", + False, + ), + "ReaderConfirmPaymentIntentParamsConfirmConfig": ( + "stripe.params.terminal._reader_confirm_payment_intent_params", + False, + ), + "ReaderCreateParams": ( + "stripe.params.terminal._reader_create_params", + False, + ), + "ReaderDeleteParams": ( + "stripe.params.terminal._reader_delete_params", + False, + ), + "ReaderListParams": ("stripe.params.terminal._reader_list_params", False), + "ReaderModifyParams": ( + "stripe.params.terminal._reader_modify_params", + False, + ), + "ReaderPresentPaymentMethodParams": ( + "stripe.params.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsCard": ( + "stripe.params.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsCardPresent": ( + "stripe.params.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsInteracPresent": ( + "stripe.params.terminal._reader_present_payment_method_params", + False, + ), + "ReaderProcessPaymentIntentParams": ( + "stripe.params.terminal._reader_process_payment_intent_params", + False, + ), + "ReaderProcessPaymentIntentParamsProcessConfig": ( + "stripe.params.terminal._reader_process_payment_intent_params", + False, + ), + "ReaderProcessPaymentIntentParamsProcessConfigTipping": ( + "stripe.params.terminal._reader_process_payment_intent_params", + False, + ), + "ReaderProcessSetupIntentParams": ( + "stripe.params.terminal._reader_process_setup_intent_params", + False, + ), + "ReaderProcessSetupIntentParamsProcessConfig": ( + "stripe.params.terminal._reader_process_setup_intent_params", + False, + ), + "ReaderRefundPaymentParams": ( + "stripe.params.terminal._reader_refund_payment_params", + False, + ), + "ReaderRefundPaymentParamsRefundPaymentConfig": ( + "stripe.params.terminal._reader_refund_payment_params", + False, + ), + "ReaderRetrieveParams": ( + "stripe.params.terminal._reader_retrieve_params", + False, + ), + "ReaderSetReaderDisplayParams": ( + "stripe.params.terminal._reader_set_reader_display_params", + False, + ), + "ReaderSetReaderDisplayParamsCart": ( + "stripe.params.terminal._reader_set_reader_display_params", + False, + ), + "ReaderSetReaderDisplayParamsCartLineItem": ( + "stripe.params.terminal._reader_set_reader_display_params", + False, + ), + "ReaderSucceedInputCollectionParams": ( + "stripe.params.terminal._reader_succeed_input_collection_params", + False, + ), + "ReaderTimeoutInputCollectionParams": ( + "stripe.params.terminal._reader_timeout_input_collection_params", + False, + ), + "ReaderUpdateParams": ( + "stripe.params.terminal._reader_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6dac71f2c79ad3037d4a1839950d3966231b8b50 GIT binary patch literal 16101 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 SjLTK^aDr;s(tZse75)#T$Q)Au literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c7a119c89a764dcbcf4c3e875318d54fdfdced0 GIT binary patch literal 10832 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..069340d1fdde34aaec098753b7c83993cf219e31 GIT binary patch literal 486 zcmYjNu};G<5Ve!GYD?P@1RsEup|zkZVkk&30b=Z8ndV5NCU$B&72O#64_#Ri5r zkE2{N+jkBLXt-gLrRpm1i#ny8r9f%Xq%;*_o><(Xbeglo{XCAmS6u|8}-!=V65wxXW2%)x1hSq|vRfkdu22>D;B?Fe5b5g55`)WH?voOKV z*06O&{3%RP7Iac4CbmkY44tsgNrk0*A3ys&zk7Z^>h&q$mifEFcM<@8d1t(wU#;t1 zr_MnJGAKX}n-F?C5>XyEXaZ8>W!)z-(*wq^RDF5gxN{KS&(tZQi4uIQ__(4z2 ziOoHwj@|uukG76o`S_H{Q!Mx)E_(Jz$?dJD&#>W^Z5HkT?J$GgwY*@ssQwwds&g)> zz@+tmSBP+JA>qtc(bE&Ih)UF)VLmwV8T_1k+&6={^&winilU@;m4f|oPqW=M8C+ckg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a741ed138d9d7b82a026db2d1b4f09a6146c17d4 GIT binary patch literal 11078 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_configuration_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb6a1000672cdceab9c7003e815bd504f963fc90 GIT binary patch literal 661 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 QfG?{Y(_8u)(@SUb-y_H7tN;K2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_connection_token_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_connection_token_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..522df206e8ad39c3ce632f4487e981ef5803e77c GIT binary patch literal 708 zcmX|8J8u**5FYRAHsO*Z1v(K>iqLRH&Voo(QHlf!3KS5KW*ckS9bHzpYj12{bXxD!P-7P^7}%%`uW^K7TVF&*R71+A0`Pe>byZ7vPt@EXBVCi+uym zA%&FWP>_fai=Esl+{kUPn|p;H`2-wz0jc*1QXk28lg~;NRKcM0+rj~<*Wcpl1eJbW z>P&ED81Gf4w6S-NgtpF1Vw%|KrQGI$#WTa4142Ynh@4|U7d`av8`d5SQnF|4isc*D zFpgy^ci`0z4h83!*k9j^G4ex+vBo#Cj0;r58&RdVPGm@TBwX3wOdyK`L3*F>UjD3TJ@xjeUdLjy>BR-|iQH`}I=}Vz8 z-#HLsobeGoh!ay&O3#p=(LDP=%SxXJzB_#Kl&VbQPH6(-5h`lF$x5VUQ#jQqi;TxP zWy$~cn6~|~q-l_~fy1(r9b2nap*iZYQJ>*ww?Fe{@4l>Dbhj_P?YZOl;XHue=IqhM z`qrhl)iCnz@~NFmzb#?NWV=cx+FeS!s5;P9X*z0$ve8}`PBn667v4^+DWzwVHkmgJ qx(WB%8Sl$`=1R;_4~?3;gplh1$nF*NuVC;e2ub*Lcn!uhum1tWSH9Q) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d220345f0dc164ce6e8a3db5cdcd88442d5c1963 GIT binary patch literal 2420 zcmdUx&u`pB6vxNwS+Dn3LXtu@n{Lvig~W)&Y9pnWHneFZkcbvUfx}jnW!BTw#J@Ur zLKYAg;DR{x*5#HX75@TfE?i>m1B`T>kb$U>InAXjQh61Q_s&XrrTi(6RqWhd_{EyXRg z3a;8xC6q(&APawstUQr^mXoMIT zNFMBvFnT|TY~KsD9K#!SJ7Rd#4kJxwg-tsm)O1+6=||kxro>{!k2(RdxMMpBE73uW z=;&AIKSBhxBn!22A0r}L(iAX)t=u(ei=4;}jBfK*eGtvJF-XH!buRF_1iWkx2;2lsuCG_?X#4Y7=2u##c8 zzO~~Juq%e~V8?WL0ER&ekWMyg7^dg>k%%?~9~tJPyi6XWBT)4GOZ~p@5`D|t(>F-C z9r=O&t{)L+Y2Ej?ZEs6oH{099v-Dl!?dp#GsUCD9h+}2>@)bRVcXcTM2Xl*rI!tW` zL=VJ%>F^f2wr4uJ;S9FZXp8+c5{KoWLwO|&QNaj*0r?L7UacKWt;W@>J$&^rm&>b% z3YwTXn0Y%MztO`tQgm+iVD@G_vEIY$DVouKnur@qJ-n2XiJ5LY9-r^w`IOWy?ytm? z3q8D$lBrAkx8mAj4=<*qTI=HO?H`MAWq9Oh{h+=Yj|_)ZnS2<=<>?-t7DMSw`Z#A7 zDTUj|iNARZ#EbK$QPJp>RfMd7 z5#9rV%`Cn8upO7`JzP(-J2LjoW@?{EAnf#MGT!Lkj>qPDcLbwDQ79o literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..683f0e72a4c6f9970ebb96e42e8a3f8db7b85d04 GIT binary patch literal 476 zcmXv~!A=4(5N&sX0D>o@i63CH2WXV5;Xp|AVAOcz(o{Nu4c&HW3z2yBAMh85pW+V~ zuAaP^ARai`ZgCDX@3n6xGw;3GtRolZ_cUF(`svAkl=onB=D-qh#IZmb9$<_jbcJ~I zf_M!0Ee^Utv?wLzFHaJ@K74@b42-?YZK|Xh22IF#Pc{t)mI%-QbL84_60MJJ)R6g> zJ_xXI&os--Z4$4mluDKXrRzGSnc_3yaf8z7jEV5GLK{DM_e{nr12U3Nqz`6dRZgyz z1<~p$HA&@&^w@9$l9M^eIT7h2$rpC4WT$<8K}>3)l{*0&fg#4~GzXFwYY+=MOC=M8 ziv5<97i-cWXy*&0pr;V`Y2Vk_qllY$DD+@ZK{JyR0W%~_cDyAc~mqVIJB!? hhMT*(>8N+m9J}-#V~n>IggZYKjBBsmEpnyk`vWJNe7XPt literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef22219ed81008a0b0ed3e2f28e16e1987b236c3 GIT binary patch literal 794 zcmX|9y-yTD6rb6zTi^~9FrXM>fMyGrC@rBNCRz|Q8k=n<%k2Q0+nrfv<_OzsZ^zl$ z8WaB!tIIWJ6DljaOArex-|XBm$-eo$-`n>+KRcaS1V{aQlKt=y`fZfy@h9MBAHWq# zQHpa^;22|ro!lwh*lnfR)J0B2pnfDkt=BIcM?is@bmYeX- zJ>Qxz?maX0^$b(_QBW@)if&@+G9|rDWKyWQ!+4tUQ+mu!gk*KVF3W_cwV!82rt5j7 z6RC|oInhiWMPVIM%9DaoTF+8ih_s&@+@|!rpXAme&1h>^X<08&ns6?3lU7kGVGCf& zxc-K20HV8!oQZ;wQ+`QaGS$gAOX~wQ zT-qFYn`6iE!*PH*s{?QF{>#j;y)p7OrfhrVvl`B=jl8uf^XS=EceuPY^0pdAE=|K9 zMXh?p7PmvCeIQiW7b4C2>p)i}^lGQ`&?=N&YQ~j$M$JHNxr-)f6L}fXUASjgurF6Z h#qg=8AjU4n_%=Xz_ZqESqv&t&0EdJ1TLf3*{U80J)A;}Z literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..266a893d978a51380b24a2964586e500fe035f12 GIT binary patch literal 2454 zcmdUx&u`pB6vxNAvtI8HCnPECX46fYACMZ+xNS%((KfVEB#;OTqQGIR$};O|>c+o1 zc0ybbC%7OEy*1ppR{RxQxNup^mufCOaN-szTMjw##$KRfW zU9_dPB%mDn02%muWE6<-Yd)Q;T}r43v`C}@Ehkh0S{kC2gqDF;hG;dcD)L`^Iz?b3 zpOFVU#1B640@HPTCCBiF*$EilH2pxyv*M;15UN|O(sBdtYf@sc(&wQ^4DQ%T!%DRu zBRc#Y`i~JoZNWh8+!u)C4Pg=(!A9;Hv?WgReS!z1&?n-66#GOvMoPy>`538WgcOL# zXX?*Z&A1`=$;g0YD~@s!zNU<^Gn;Nl=ezTKASp;-ZTtKe4iEdzA)bWBc4!i@=I#7nN6HeqAKy>#vIml3Qcl08p%jE9ZkWq8_e!&>j01G&Q_n*_R{2RbWw_gsgx zlp>R~WEo9kWlghPW5*(3S2gXyj&AV)G>sNvf7z&}>5k(DNwhvtUNS5X6F)(RV4|aM z)O)T?)GcRE-5~yU;CkwZZa}OH>#nl3erZ1?fOU6Vu)4_oML}F}{(ZGc(GVyq-ybUJ&clS_9GZogQ%1SdsOFodi~24qmo1Cl@HGbrzYPvMwPQt)9>k!S^$ zXSibqAuD#=9Veh6D_EvOE~U+7R`Fav&@HXw8iWW;}m$yI|4&1Mu z7G31vrOi%8b7{eK_#MccK@26M6bEN^p3 z>VTt`BC}e0DlTa>{SeUH^h5-Tjvtfh zp_x=zlKCWn7hj1Z>00`yutrrFA;9HtfE?rnL3l1AVfh(qK10_dbiF5@7o`2Q9)hO# erBD~7Uz8q#rnh<)Y_o@;>8)`)e9rCU>HY!R05v!O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11da3c722fcca8081d9b454ce3dd28ae47523750 GIT binary patch literal 651 zcmXw1y>1jS5FYQ}E#Z=YgmMB=MKo9BEJz!rh>)O&0t$j+3#{dKbg^#N-q^m=Z9xam zkmC^$k3xlL&`PPO=pr4VNQJ$=Sn|v_p8pwt-`v~)d-T6Y{2c-K?S$JCufgijf(t01 zASF~JBgEmL45}~-I~po=D@ATwyWxuAZ*r!0L&WF90DU1!Tcnzz`#hAKF)UF)7G_YRKU*{^XberI!&P8!D?6oOlBCn9Kc7w4>7PHdfK4a&zy!0C7MxY`~+E5$S zZZnn(Ax#%qGxil$RtGm9>6xsMPQ-#fM?E#NrZ1(za_>mWDHjuZl#iz<3OYwIrzQVD z>&Bc(u|InHjB0LhueJvH1U0p3c#X8~%B2QX#YJ9HR<8SDYTXd?CZoDhJy)e8sl9r~ zlF#s~KUhY~H(&1j=4Bf+p?Y9N`=>xZw&W@#gj^>;_Ag;@3B$ihMAGH^Yp|^I F{twIKuWSGS literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_location_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c4a81ed07209f26823ffe10581c38e7c8f93410 GIT binary patch literal 2391 zcmdUx&u`pB6vxNAW3TsDLXyI6HqGxqV~NylAgQ1~Xrf9W5h6q>hpj5htcTQ%f7SMe zxFEymkm4;f2$do& zZJ8nQb&FQF-S7i)ziax$pydxEj~L9clLnD$77;r73Hpx^L2bc6?ZPcYiiR)=j9{a1 z1==zr#f;zq5i=qUNGT)o2~s{mDkn%aCqyI?n<<;EmUE+?k&yw(R~%&|dO;bZXSUpq z9-6Lm%QN(lys!JZ9nh)M=!RkVBnW6p&y3mUc)hDTI;~}%+AizOJ>UJFN$W%Y_sj>Q zS$b}tJ9p>vAoOXY<2s+1J6)egthsx{_f3NYv}TxrXX%mV=r*Ba!@YFv@uv~2CXszl zcZ>(E;bmCbZ^K%z&Vk&avQ0uAHb$qSch_~uwo;<9#+T7FTG2GyHM$l7yQXRPySl{! z&@^9y{iUOtraO)s@@NB~n9(9k{1_d9iJp9>-gRxF?l}AE4HE2zuBX1^hQwOgblqLk z*-shgB=|y(nv1=~*W<=og4c31xzt-)i<|2S zUe8gzd4LaYep`-f3khDx>1eChT8~GDL#s7bXIv zTUy682o=E$$@XK(Z?MN|GGWp3x67YmR*T75Cj7}~n8jA%vI<6Efk0j>FFx$Vl~#gV z`F4&>9!$jb=>$*bq}F&C#MP+;Pd%HAPaoWj$L13}{|uir5EjGfDfkBN{5L6J=kg#; zC6=a0R?2=241bQvJd*_`i%gc7ybMBd=zi*K`>!zY)MoS1Ox}a*=nIg4bF-m3t1lf( zY`Xm{p#RDC!-vB^Y`?z@E~oE4AI!vJvnWh>9Wb=5RH+n39vq{7k=@~^?^sGSvL6yB zfd9R~XP+u*NwI@4Jr;Ql@!awyjwk(zd?h{hulXx5LVzpS068oQg7BAwgqdH_)fipv oOUr_M@J1g&)Bi|l3i5YKA3@V!KMS_mN6_@IF+2K$**y5a0h)IAd z8uyaCDvWjf_JOiqS!fia;2P+499TYf@);oHL_i+B1B@}j^nrWz7c)V29iK;oxVe9b zT%dl&2Z&-<0&tLM*AV?#E~X8 zRyXU6aVeGMZS{W(PnC|n@1f`%SC{Jiv ze4zE*9x1sq+-Sg5fef#Gax(X&_9R4-z*{B L#m7r6X9fgx*25a*}$q> z8p@#S$i+V+*C5(&dNNl%r%)5nEU^aYghDMqb0cV8p%Z}SN6>;o3xF0!(4s<1fR;zl zQhTym`CBes)kNtIdDJ3|f7j$*6tZeY;8m}|1-|VuUe!hRw#Nx|e34&|xQz8EaYgQ4 zyGdLb*ho@HEbc$--2vx0BB-vpsGj)&5uIRS%mOMeV!GO8xaSbTZl;gueMBc&Vi4nj z!uw-bj5Ze|LwjD%n%a?w^wjZ?|KN+D}_!Cr?U+9ceQMPR-3?uF+;%uAB?0-dj zVA1=ZY7e7;)HcKI+A3jNJZjc%M4b5NmZNCP3pZ=aPGgINZtXD%AJ=?uqtgMtcunc(m}YMszom7CVsuAZf9&i&cqr*BHc@t|_rTp6%mV*XkoVC5DM= zp2F5d;?u*+z0zVl3ht3@F7gfK+gv_aG}ZFi!zZ{)q|#t-h#VWZXAXboUbMOC6OrZW z&Oo;Y2^`NC*{~H5>NSMXgklqVTxO7C-e&0V79|3!|Asm2E>I;c!!VtcrXtO>G*X2E zZ$y!=v`9?}9+5_s=BV@}G0Mzz~kwo!9DH+ujWBs)yAHJ zxe|sCkSP~YD}4bDTLvS^Jl?q*S59{E$&{3-69Q18ma$ZLQk8|u#1tHwbVWM>;ofLuo{wgL{5 zA_M}UWlVh=7ni$uc_bqlIzA)$ulHvJy+1t#3^);n{T>h61Jr+{+MmM|BICJmMrE7S z3mn>(d$JLQu5=B?+diSEA!@yvJ(%6FysFycc8#2$N^=V?CaVp3TKT8f2j!c2_GD+_ z%XsFiIDfH=FQ$0D^z`Nk337_@B;0_J4@r=P?Qeyl@Kp~4v8Te)^>G{r+ zowJwYg)8y&)h@o8lJVg_D9k)#ael6g=SE19)2&y_VkSA>7U4Kk-ywFCe27pT0)z>j z5Kc>Vv?fPyB|&WH;Ur}8lO^eZDh+wkCFfp2dTQq?^{UdUH1?&H5=vvPtU1Y3!8k-S%6qzIIxa3TT1Hc=9qZARlelg-F;ADOwE zcpEAx_ysXtN)Qbt|AB_pHr7apf{M<_8;Vq%nY$Y~ktM`Rd*+<)&g-1-JM-(};v9mX z`sXd)j}ZFP1hZc-bxtHW&k#k_5h!0Kg8uJp!#&6uve zT^0{{U$?VnE1WfP$POw}P~EPYy)iFpIAS-6bc}I9a)z;Eq_EO;G&n`rH{&-rTyX{y~EUgT~_I5WzEFKR$1=zqMvS& zY@Zc0eZq<-so;BQHG~|C&F%*urV1F?s9*x=GnK-wykco(vrmDWoEJo-SlU8CTDDSn zmQHSK1)(Wcw;IY8+{c<29Q6s9Z_&|(caP%he|v5xJV9;{9*1raABSl1;-PRfrg`djkF=)LVxXJ_p1%;;F}{y;}-n`3`-hOAsZq@(5a zvA;e;+Lw;vTflGo6u-@R=BTsDy9{66ByUQ9V+n8*Prd__pul-KC~C|E?{g^ZZW5lA zwf3O5Y}Rk)Yj&|)b-_`~V48eaMxCo;|LQ5NnVGxEyk2eEpbM z$ZPuWd=p@H0FAB8^VXE#5&HS;s8ccTJudahR_8iA~5h7>v rceMHkx;a8OCt=%(pMO0;Fih5#o%rX^CkTeg`@R$Z^6?7}1`jXCFlPZQXj^GMXLU^%vrP+cVtI@ zc)o@gp}`6;`-q`7j!@frhL|1UtH3cQvX;TtfnhEqnj7-=kS7r1XuouQqUJVP7%{P$ z@t3hkH^MSyT&{BoxDkplE!4vQB8J}@(^bt*B}I+xD#G^ikVmSSSK2f-;w`_XJW6?( zGD_75rD+!R677#ty3-4j>O|=Fs4+@I&NCUBno%ko&Dw<&AJ70?boMsb%2F0|`ChQb zifx(Y!NW|lWML)CwqxE6R>ICU<5957_->HIFM_<3TNz(kymdP$V#yYA2nf5Z2tYN? zS&*CT1Ia`h^DqghFomkp5-Giy4s3O?7V}bg@E!x&DeeKhLC2Ffj=j4-ZEK1QkmZs- zv0SfDP-Eu6Ie7A}emFXR>-Y#x&?EiwOPx# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28174f528152a6b1e6ab9f7ae3b812d3fa185adb GIT binary patch literal 884 zcmZWny-yTD6rb6z+k*pwLD55r!Gc^OY=lG_Vu3_02pWvd5;7TXpT~y%VrC$mvDDs< z^G`7TDK=iNG1E|3*^wX?RKD50i-nWSoA>*@d2i-@e4CgUBe>+BX3QNzei|@Z?ohdW zhRPXKkKzMU&`Hx>}Jt4Ng`h9#G85uXtt zA&p3Ay&+(O1MVGU%?2-`>v+};U$V$p|1tK6iJYOAJ7iqE?-{*YYx(-d4)6%XQvqDT zD=v5{wFjpK&m!$6d><0+CwZHjtll+;N$f5z?!7nZ?Mfvc-bb;g{S*|BxZ-+RKnIf+ zr4MW85p1_=+Gi}|DKMtT7)$f$I5B#Iv7=+2R2EUgUkTGDZKJ=QVvJ{5uF61?u`lEj zZRENe9ONkko$NH&1bL|PB6yK2NR~G8{4mZs!3J+1LKX!lkevicydM-@b&zMP%a2w9 ziG5fq@B;6E4Dgw_fS@Q753oaNobe=JSPrZTYnNqVm3g`7in{rs5k77iqWDODG-i8F z@Ac<;zp*fI7A`Ey^)EcqnEfRC<8uRNZp2JAdk^}P^8;u8AM?HWxIeizaMniDZS-iC zK-?TXw%w}h+3Ksy__cD-SYAz;B>_>I8~5IGn2wI#|X!? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5b0a7324e9fd8403f3dc38d3fc8c9aad2ed3422 GIT binary patch literal 472 zcmXv~u}%U(5Z%240tglsnpjwxTmc)UH5Palfo0Xlwg}dEjcOhQSKj0r2;wBqVWCk~v++v9_DKnb-A7+e`f{=muHX4ISc=2PE;IlOzD=omXje zYooAJ``0=h$1FUCCqq#B*FtlVD_ zD*~kJB&6&9PQU{{aehQF<)db&Wqx=JECFe=eZ(ZoRHtqhd%Z#^+TY_v0dn)uEL7krS5UBIYaUSg7zk!5 z6Fr^+E%rnXRF;zFyyDp~Wf~HywB!X)b@%2?v-Ayr6R6K3vQ5+cKDd1Vk`JutquaQ* znZN<>1J$DfOdIlq=ex8A10lhLa9FTBF+s{Ru1%DRKC|64ZG{>vrTH-Hfiw$BGpX%H zHo(@}9*e;s9x8xX2^5to~Co+h4^TYT)sC_Mp_!prey|FFCKK@y}&HDS8 zU3>ufL7ehlT#Pi9c5CC-W~}f)-Y77D?ShJ{V#P(-yBPDyc+S#z)&rViUum_tQH*4S zUoQu1sJA%0An(sydLJ!L-Kc%}lh>#>K6$OP;W23i;dI3fqG?FZT|H9crL~E_Hgzk~ zzHsCp{r0*(ZmmxI)j4e~zf|Mq#fg7$P8L^=*2W80CjONN{_i`T$ShZRZ(yF~#igRUxzgT76XN;6GFF8@Q#lk4HRQ_n zrR-JJwXz_qR=Jd4N9#*;uj=#9@+Wj1eAOi!rk>+CpF`qoeIUyp$>x9IbtiiH>@&fs G-2D}NA5>@n literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12b6cdd79d80ca1174f7fb64b3619a40366cd9b7 GIT binary patch literal 812 zcmYjPO;1!Y6m8$vyn%s_q()QkS+j~z>`+a6+ilF6xn&E~`$WIeY%pE(| zuh2Oql1LhnmZG{*Rk`>|pZQ6P$JnKL#zN(4vFIea;gR1LwsQ=W#0g zk@0JsANEBw%BTu5QAYg2HZAI$izG?4D23wuE4juTxgD^BGzQj9j@dfoJ)LH3Gu03+ zuBB-&OuB4M?Drs%>hBl@2#v^q3iafd^OTWDu_0JyP J5M0XBe*qs!+P?q* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_present_payment_method_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76afa762e19a899a656898b927593f79485bb96e GIT binary patch literal 1793 zcmbtU&2QX96d!-A*WQn0o0LtHR#6Ba!a|J&l~6$mNJ*tOYPv)%9N5dqU5^qg{_5Bp zWe;#kk>J)_!;K>q7yb_}vG!7pgg9{G7PMOqJ@viux>~A=AYsYB`OR;hpWn=TZ+>ky zYXqM3?Og!Q#0ST3^q99iTHPpJA zo5a%}60gFPpS8kI*OaOOYL!)As+LquP^~GoCe<3K^(nPJXxPm^(VeY`nY-*kpQYL7 zN#@5<3W~ntrW-f=?gpaXi8HkFIrD_|#UNqc4ZoN5ihv57L`OysVg8sf(p5at zRlg)mWBMX!tl}x_Fj}B^>O|3ADy2=ORG7i4Xf?4kO5Kwxcr#0dnVvOeSwnqLw;N*R zE^|G`cR5R0lPAtVxibHha$PQ^8RuBKPsj+6JpbO=k3;6{MMusJ zmL6nr;@pZe7F^wo;{!k1b2i=H0gF86kVS`1;NN$W0i1MnZS8{(ofInRY61rC9!ni? z?I+AhWDXqIW#~t4;7~5pRc??bMZ#z(GX_&k*;+E-7Q`dL1d@IY@GW`Tx_q*gw^oMw z%9*NG%rk@3+o$dIytXmaH%e)K`E>bqKDRT}cS@;w=|n%d_k)!;R)_j(skYyIYF__K zQ`^Rfs1@VPC|y3C0sRLKjLeT?jQ1kNkrEzinat#cG0i6sjRdnKoVnW$b#-bGOXxW!VQmg1$ z_Jd5I+`jzxKjV3Bt{3;fr~EzmLV-8k0yxtYMR{fr<=Ss#;dio;lZ~;lq?kW`GbS*M fKWQoEPals74C8lo#r(w{6Bx!b$iI4qT<+@y0(hpl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_payment_intent_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_payment_intent_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e3e925c850ad498f1b2e235c4549bb6e6d3524e GIT binary patch literal 1610 zcmb7Ey>A>v6rcUxvoGg3<~V|)=&%)`E$mh7ND(MW;Y5N6=deO(t{JUwCYOP{s$UP*H|MV3Mx7yUno-XX7<()V+pa+zIk8s_4~bfKV7)6fZ&sV zzRSuGq2IJof8Ja<5um(41QCm))aqN7)@^R5PTw)Q!`;;Dd#T^|)1V(%$VML_;(m#U zN3HLjYMp*)ygqmX8k~9?#v6jS@el99cp+N+T~CZG)p|&uj;Jg@ElQSW5lV#+n zV271dBwQ`_@=|9pL5XTS8W)t@V}o)~ZC%OvInc>A*e?)8eT$&J{W+ozb*Xn5y!xj; zv2MZGK-2@>p6d>A=22IB#$M#B?n9aoDt1Lapi=H8!mEhz;h@3= zp&VHXwS;k!WqFwx7%~11oj?q|{yKh=r!*dB2k|{B_shJ9Kh8_a*SGV0pJl^%I~nZL zjKt4q_AKUXFD}OAlRVqnxV{-nU|_v~gk(r%4BN1R#)Y|k4BVtFOL&Zh0SedGcoPj= zrEe5t(a0*VpI4?%o|j+&iA_wciC8k6Sg)LlKcZ7)3bQTv^#+c`D5N8!ys9J}qG zAlvhgeaI1S)r*~91{}g?%Yay?W#IiyJ@pOs9&zeopuyZ@iUCT+InD9v98%8;Ou>Xv zLo{JaC|f__&y%rK0cR<|N7UjdlLZ~H#|(_6g!BA4Kt`A>crsR3XqM~&y@Qb~fhd6o zNj9LI8y?kypyfzpcqF)L%6(Sgk`)Eerf&SNB6~ES70jpiqENInf=gOl)WX!0ZVTcP z2<7hOITy>?UeUtf-PW4Erx6+@NkIUO?e5FY&(SB7_jV@j2UGV!&E49@w`8)qHFdXY z&+?VSyOWFEsoSkRD_0N63JRAsv5=} z@jfJ5@XMPZjvdRgUirw{`UQ1(2!`3}+gA9){TYH`w&_~oj~~23 IFqmun1+?p$qW}N^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_setup_intent_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_process_setup_intent_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70846eea10ed3058cc2326b5a1dd97bfbff35143 GIT binary patch literal 1166 zcmaJ=&1)1f6i;?$XJ-3h)w;H7EoBeFQrba#^$QhL&{bN!EMiC}X*)ENnI^NfdsqAu z)Pvwr@#6pC#bqxN5D%Wb65PbUQ>G-va&^K!g zzv@8Qdj!f0#1O**CAf{T)hnWsIBloU9pNU`b~W+ZUgEcXj4J3RV(wGKsvN&}$~f(y zKs`Wx?*B$>-Jn_fZe5z#99iaD9j^0xSstfS1LEF^b>4K0e<#klqQZ=}(%gE*iZfGt z(9Jlz5l4AcCMo40Biefa_6x*O8#C0dJVe}K_!MB=WtEGt))239kNXxI;LZ?d?f|I{ z5Fbu?R`2@Fz|1al%DB3((uixl!t+jcTjpHm_opDh;CZ-_COll1 zJK+tkH}f2dG3)j+gGnVV&H5zSl$--?ew?h%HhFLe?NafPv`3s>28Wu8epzB!I=Km+s4zSGC?)qwh9`XnpR}+}+-ZR^M$6p~;hdw_X@(dKmlPQ#A|Qe@+!I zXQj$;F&~wtqb9(~%y3Cpf$^xLbD&L;h{}iyQIOnfdg{2%G-<^ND=g>6T}@M=>eimJ zqNv8sViB_tXTZ|-EcD!1c*}Z?rM|m#sCb*b)f_QXCCQ6GYVoj0TD~l0pNR4DZU%Q& z-tw{1Abba=Slj1U3`RKzKDd{Z+sJ>_br4)EC+o7BgIx^2o(Hk(V2pow2rqp>Q(w`g c9=f#e9mT<$$NLDD{c|o3J~V$ISc)cp0g7-nhX4Qo literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_refund_payment_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_refund_payment_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f6809d9becbf1d789e9c0f4d362e05c4dd14085 GIT binary patch literal 1365 zcmaJ>&u<(x6!y$`y|ZbO7HAq8wg{~vg^}2dAXTMG6^FJG2%%5~xU7&YXXfo@lo`*| z_D0zwQuzxwbbAZ8A~^7Wa9Zu9@}&n(+=4dc&=dCjSP`i((mX$Z@AG@le$W1WZEXda zPyW4?{OBX}hn+NEt5z1@8RaR8QS78Ba|VuMbvJc0Z{THkfXlg;wlXpxS$oiSkc&P; zF@A#L7C66nm7jrMqQszWXfM&u#1A@uT1w#P^#gc32C2R(RFZQUxEeo9BBk+{iBx8G zWj|Mzk_d=(=bK3Zv9(84gi7LiviQ{~PZ6Mj6QhCqEdmelO@l!zcJ7(6V-Zp#?h;@Th)pu! z>JbwxlbWzBA9JNibi~96G=bBC@mTvAC>Art^m;Xm zkNz{rrMM4rK1@b>qxRA`k1F_@fD;fBs1l6JA&C88Mf;R;mI0-Dh0-jK$Enp{WXvMSYc0#(A#F%%mZDQVC(ZPS_f1e3<9y&uC$E^!oeoD9<1q@zd}j$YYfk z;pe%6w0}R(j}tx$@3ZI_cpRPpKMB+1Ff1nODCc{-AAb_cL_xnW1U3R0nkY#DVNsrI zs6b>1XK6@9dG=B04rRE6hbf@+TvHKrdD|r`~L}JICE~*KPUd1g*XM z1_V#Pe%6_-_U5?P@UCu6x2N*#!SwXm?rc4n^)L%i`?^M7(1oUAJPx3R`AjJ6>#Bv1LV>OxJ4GWhwebk#8Ge zjI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fd21c22e2cf84a9aa3b7d0759cc250e9a331425 GIT binary patch literal 647 zcmXw1KW`H;6o0;d2_)K>1Sy8 z2#Alugjmo?otW4vg)(%)KDUa${G6#Yo~*oPxMq(NGEbZkI+o5s_83bvD`aUYFfw%J>(}-l!DGt&S_bEr1jFC zD!D&={(_pq;$H0x_yi4gX^I+Y-Ihx&>Z*{uq)fNnI2PJr!C+V~b;sA}N!MNT$dPmS z)$6a4)w?hEe)M*KCc9Trly>#@ouTi(9}*2+#C97@g>`5@>n5|y+SMIee;5RY3yaeD zorSryiMM>vHu3|9Zn_6yk|Vw2ME9S-JayzMCWKsPK=v=8e+h%XSwgz2(KR^MdjAJI C+pT&4 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_set_reader_display_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_set_reader_display_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b1c158e10921d06e3ee2db4ad5c5e53d08c6c32 GIT binary patch literal 1462 zcma)6y>App6ra8QygPr#7vl&;5dy>_;U#gAfG{9p2}q1V7@BKF%gxBFygR$h%pq?L z6f}qq=qN$_DQP%e6ODu@sOT*DNI}J$*;`~I6jt)&2y=clvQ!t#FVGscDR3#&Q`Ob};6SMr|QE*Al)& zyI|4B2hr_3qtPbYj#jDIl6etb$|X%tT*&jSgl$F_;@%czB)Uu4-6&0NMMWuZ=WKcD z*WV%mJfA3FL%c~v1Xm{ojS7=t1PWvci_-{mlRp+z)-I{Iz}42JqU248#h3sbaT?46 z^lz*4`o}*8ty4qi)J~(}20I>_Jn+2m0H3cf`(B|z zVrwj=`&r6bT#x#D#f38PVZUpH_ClZQR#8E(&pBniQXTu2vTF&WmnF?qD+Lb&g-{Q+ zjJK65L9P^3=2JR@X>De-nbT%g8!cj`ubnW-f6!BtZby4M6k`^^5i4MT#i`kQS8AeW zJFh$E1~cb}&iNW@bsldFnu|4g!12WNy}$MlsW1IHktbngf5+@4a$ny##L!tfq00}z zG3CWs-e*#^2^Br48(pO;fFfoxk>z^meaXQ=I8||A*!UuIeW$tjI5^@67|0wF`MXYY zt}}Gz>&f)on39S+eRw@=tA(n9m!M3|%YyUjY2o^fP#&}(G(^=$v(*ICZAqEX?~my! zBMtXqdsWd!5EI+}cs~Ybs@^@z55r~)e&Tm9JGNz6A3S6&zd;Lc(aHd=jJydecz$+- XU>N;81AaL|FpQ1@@S^;nag)X;=8<1T literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45fea34839c1e92643a4f338f25dce97c73c7f0f GIT binary patch literal 786 zcmYjPO=}cE5bd6?oy0`(0}@3dQPbHhEodg1Yg@|ttWpE-haSORHbiG@&Obze3d~Uvy+IH| z0_j~B^%pXZea4iJcX;$)JofQ%(oLJiZD1Vq&amGH;4fu8v`>`~(D$@nGtDZ~WH73k z%}-%`~Nz;zQx_45j-+Cc+z?ISM*) zriqQ!%?(PKl*+PJ4@$L{{u4TL7F~QGd#VDmD@WuRn1NL_d7&(b-iA_xQtpxs)*pc6 zB-5$`f0M> zhV|{Mdau-6;IrJS==OoCun^k+1jS5FYQ}9pRFIggAi^#fj#MoE6eWDFPB8p@0H3+gQ$dbXnc5y|I1KT@Mux zknjc|9)$|gpp{Zl(M38!kqUdAV97Jzcsw)yX8dh+bp_lqfA1Fu1mKr9u2*^mmOBod zfB->Cs7OwT$59zoaUQogE|V(FQvwk@1ChK3ks|pThxj~OWW&yHZwyJZwvR_MH1<_( z3nh&^NnRGlI(>6bS???~ig5@H@+uE3A36I35ON|QkKO^sm|%L(o%)TLAlptaqG8+& z_K^$JZ;J}m%)XHI%sx?NiDO^&HP^f{O@{NDOR+cXG+o9duaL23g|SMBS?O_)v7;F; zgGc*z=){R8HdZ(5jBzQI?$=a|> z@f4+?$0(0!Ssc)MVGotu8f`wNrm(nCy9<1RhPpCEjkIo`OD*cEki4W!x7?TwVwY74LVq;2L~4qbM)LuYsN9cQ}V2Ihei=P@DV YA_KB@2K_S_{>c*3{rvC(oNA;00Vt}v4gdfE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/__pycache__/_reader_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26ab560556430d98bf82cec1b2d6a8c497b6a3d8 GIT binary patch literal 772 zcmYjPOG_L<5bmDW?&_K)Ca}1K5WJXyXk!BLq8>zu2a#anWki~GyU=0hWlyg-l4J54 zG(REar{v{MNJit?`cXmSxs=Df{?&@#8o-cEAGXyRF-3dE3A>U0gHFuKS zZenspB#|^CF%4*J1r{~671^;9II$bJu@`uhSmYIv_In~7@IK=_V?nKOeeZ`!eXDe~ z!>%r!-7wd_UDkF(4N64i>|Uz(;jAAjkY(d-k%2TDyXMr?CiBSc4kA|sNI)eCtOEiz zIN&ZIY8*UC*KutiF0Bb-|3jP!;u@sz{8~A`4?==E$fVHlS|}0cr3V+8NaST}Lhx{D z>F8aqRq00J7^2J0|F~g#h|OnDFdUWj7_`7yVh@McIZs3koR>44$EoZ`CU0_n))!IL zQ64f;4u;Y;SF|`6Ns?-z!!*e`|3q%FNA3!Cn#RCRk_)yCc~7Sq+etM<%UfyM3zHMJ zCAvLGBs+)XoJHX=%L;v(CNEZ2pR*i=Ue0iXIDwquHDLxU8-FarCy2vDM2xGk61+c_ zf>-U8tWXWZ(1aR#Zj}2#zBb#}&h?v*jX`s9=q!#b%dL+*(rn+fpAKgIq2o`XR_CVk za&T{L=&X$)^h@i~BSm|UKRD9-5HXij5v%C6w nCGVzcV@c8TM;JynrSy+S=;Lo>V?Z{3dQDotUid|D8K3?Oe4xxc literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_create_params.py new file mode 100644 index 00000000..4172b802 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_create_params.py @@ -0,0 +1,591 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ConfigurationCreateParams(RequestOptions): + bbpos_wisepad3: NotRequired["ConfigurationCreateParamsBbposWisepad3"] + """ + An object containing device type specific settings for BBPOS WisePad 3 readers. + """ + bbpos_wisepos_e: NotRequired["ConfigurationCreateParamsBbposWiseposE"] + """ + An object containing device type specific settings for BBPOS WisePOS E readers. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + name: NotRequired[str] + """ + Name of the configuration + """ + offline: NotRequired["Literal['']|ConfigurationCreateParamsOffline"] + """ + Configurations for collecting transactions offline. + """ + reboot_window: NotRequired["ConfigurationCreateParamsRebootWindow"] + """ + Reboot time settings for readers. that support customized reboot time configuration. + """ + stripe_s700: NotRequired["ConfigurationCreateParamsStripeS700"] + """ + An object containing device type specific settings for Stripe S700 readers. + """ + tipping: NotRequired["Literal['']|ConfigurationCreateParamsTipping"] + """ + Tipping configurations for readers. supporting on-reader tips + """ + verifone_p400: NotRequired["ConfigurationCreateParamsVerifoneP400"] + """ + An object containing device type specific settings for Verifone P400 readers. + """ + wifi: NotRequired["Literal['']|ConfigurationCreateParamsWifi"] + """ + Configurations for connecting to a WiFi network. + """ + + +class ConfigurationCreateParamsBbposWisepad3(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationCreateParamsBbposWiseposE(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image to display on the reader + """ + + +class ConfigurationCreateParamsOffline(TypedDict): + enabled: bool + """ + Determines whether to allow transactions to be collected while reader is offline. Defaults to false. + """ + + +class ConfigurationCreateParamsRebootWindow(TypedDict): + end_hour: int + """ + Integer between 0 to 23 that represents the end hour of the reboot time window. The value must be different than the start_hour. + """ + start_hour: int + """ + Integer between 0 to 23 that represents the start hour of the reboot time window. + """ + + +class ConfigurationCreateParamsStripeS700(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationCreateParamsTipping(TypedDict): + aed: NotRequired["ConfigurationCreateParamsTippingAed"] + """ + Tipping configuration for AED + """ + aud: NotRequired["ConfigurationCreateParamsTippingAud"] + """ + Tipping configuration for AUD + """ + bgn: NotRequired["ConfigurationCreateParamsTippingBgn"] + """ + Tipping configuration for BGN + """ + cad: NotRequired["ConfigurationCreateParamsTippingCad"] + """ + Tipping configuration for CAD + """ + chf: NotRequired["ConfigurationCreateParamsTippingChf"] + """ + Tipping configuration for CHF + """ + czk: NotRequired["ConfigurationCreateParamsTippingCzk"] + """ + Tipping configuration for CZK + """ + dkk: NotRequired["ConfigurationCreateParamsTippingDkk"] + """ + Tipping configuration for DKK + """ + eur: NotRequired["ConfigurationCreateParamsTippingEur"] + """ + Tipping configuration for EUR + """ + gbp: NotRequired["ConfigurationCreateParamsTippingGbp"] + """ + Tipping configuration for GBP + """ + gip: NotRequired["ConfigurationCreateParamsTippingGip"] + """ + Tipping configuration for GIP + """ + hkd: NotRequired["ConfigurationCreateParamsTippingHkd"] + """ + Tipping configuration for HKD + """ + huf: NotRequired["ConfigurationCreateParamsTippingHuf"] + """ + Tipping configuration for HUF + """ + jpy: NotRequired["ConfigurationCreateParamsTippingJpy"] + """ + Tipping configuration for JPY + """ + mxn: NotRequired["ConfigurationCreateParamsTippingMxn"] + """ + Tipping configuration for MXN + """ + myr: NotRequired["ConfigurationCreateParamsTippingMyr"] + """ + Tipping configuration for MYR + """ + nok: NotRequired["ConfigurationCreateParamsTippingNok"] + """ + Tipping configuration for NOK + """ + nzd: NotRequired["ConfigurationCreateParamsTippingNzd"] + """ + Tipping configuration for NZD + """ + pln: NotRequired["ConfigurationCreateParamsTippingPln"] + """ + Tipping configuration for PLN + """ + ron: NotRequired["ConfigurationCreateParamsTippingRon"] + """ + Tipping configuration for RON + """ + sek: NotRequired["ConfigurationCreateParamsTippingSek"] + """ + Tipping configuration for SEK + """ + sgd: NotRequired["ConfigurationCreateParamsTippingSgd"] + """ + Tipping configuration for SGD + """ + usd: NotRequired["ConfigurationCreateParamsTippingUsd"] + """ + Tipping configuration for USD + """ + + +class ConfigurationCreateParamsTippingAed(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingAud(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingBgn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingCad(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingChf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingCzk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingDkk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingEur(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingGbp(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingGip(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingHkd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingHuf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingJpy(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingMxn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingMyr(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingNok(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingNzd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingPln(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingRon(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingSek(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingSgd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsTippingUsd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationCreateParamsVerifoneP400(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationCreateParamsWifi(TypedDict): + enterprise_eap_peap: NotRequired[ + "ConfigurationCreateParamsWifiEnterpriseEapPeap" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-PEAP authentication method. + """ + enterprise_eap_tls: NotRequired[ + "ConfigurationCreateParamsWifiEnterpriseEapTls" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-TLS authentication method. + """ + personal_psk: NotRequired["ConfigurationCreateParamsWifiPersonalPsk"] + """ + Credentials for a WPA-Personal WiFi network. + """ + type: Literal["enterprise_eap_peap", "enterprise_eap_tls", "personal_psk"] + """ + Security type of the WiFi network. Fill out the hash with the corresponding name to provide the set of credentials for this security type. + """ + + +class ConfigurationCreateParamsWifiEnterpriseEapPeap(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ + username: str + """ + Username for connecting to the WiFi network + """ + + +class ConfigurationCreateParamsWifiEnterpriseEapTls(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + client_certificate_file: str + """ + A File ID representing a PEM file containing the client certificate + """ + private_key_file: str + """ + A File ID representing a PEM file containing the client RSA private key + """ + private_key_file_password: NotRequired[str] + """ + Password for the private key file + """ + ssid: str + """ + Name of the WiFi network + """ + + +class ConfigurationCreateParamsWifiPersonalPsk(TypedDict): + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_delete_params.py new file mode 100644 index 00000000..e9d95e0b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ConfigurationDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_list_params.py new file mode 100644 index 00000000..c9e68efc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_list_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ConfigurationListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + is_account_default: NotRequired[bool] + """ + if present, only return the account default or non-default configurations. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_modify_params.py new file mode 100644 index 00000000..0c7d6ca3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_modify_params.py @@ -0,0 +1,599 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ConfigurationModifyParams(RequestOptions): + bbpos_wisepad3: NotRequired[ + "Literal['']|ConfigurationModifyParamsBbposWisepad3" + ] + """ + An object containing device type specific settings for BBPOS WisePad 3 readers. + """ + bbpos_wisepos_e: NotRequired[ + "Literal['']|ConfigurationModifyParamsBbposWiseposE" + ] + """ + An object containing device type specific settings for BBPOS WisePOS E readers. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + name: NotRequired[str] + """ + Name of the configuration + """ + offline: NotRequired["Literal['']|ConfigurationModifyParamsOffline"] + """ + Configurations for collecting transactions offline. + """ + reboot_window: NotRequired[ + "Literal['']|ConfigurationModifyParamsRebootWindow" + ] + """ + Reboot time settings for readers. that support customized reboot time configuration. + """ + stripe_s700: NotRequired["Literal['']|ConfigurationModifyParamsStripeS700"] + """ + An object containing device type specific settings for Stripe S700 readers. + """ + tipping: NotRequired["Literal['']|ConfigurationModifyParamsTipping"] + """ + Tipping configurations for readers. supporting on-reader tips + """ + verifone_p400: NotRequired[ + "Literal['']|ConfigurationModifyParamsVerifoneP400" + ] + """ + An object containing device type specific settings for Verifone P400 readers. + """ + wifi: NotRequired["Literal['']|ConfigurationModifyParamsWifi"] + """ + Configurations for connecting to a WiFi network. + """ + + +class ConfigurationModifyParamsBbposWisepad3(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationModifyParamsBbposWiseposE(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image to display on the reader + """ + + +class ConfigurationModifyParamsOffline(TypedDict): + enabled: bool + """ + Determines whether to allow transactions to be collected while reader is offline. Defaults to false. + """ + + +class ConfigurationModifyParamsRebootWindow(TypedDict): + end_hour: int + """ + Integer between 0 to 23 that represents the end hour of the reboot time window. The value must be different than the start_hour. + """ + start_hour: int + """ + Integer between 0 to 23 that represents the start hour of the reboot time window. + """ + + +class ConfigurationModifyParamsStripeS700(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationModifyParamsTipping(TypedDict): + aed: NotRequired["ConfigurationModifyParamsTippingAed"] + """ + Tipping configuration for AED + """ + aud: NotRequired["ConfigurationModifyParamsTippingAud"] + """ + Tipping configuration for AUD + """ + bgn: NotRequired["ConfigurationModifyParamsTippingBgn"] + """ + Tipping configuration for BGN + """ + cad: NotRequired["ConfigurationModifyParamsTippingCad"] + """ + Tipping configuration for CAD + """ + chf: NotRequired["ConfigurationModifyParamsTippingChf"] + """ + Tipping configuration for CHF + """ + czk: NotRequired["ConfigurationModifyParamsTippingCzk"] + """ + Tipping configuration for CZK + """ + dkk: NotRequired["ConfigurationModifyParamsTippingDkk"] + """ + Tipping configuration for DKK + """ + eur: NotRequired["ConfigurationModifyParamsTippingEur"] + """ + Tipping configuration for EUR + """ + gbp: NotRequired["ConfigurationModifyParamsTippingGbp"] + """ + Tipping configuration for GBP + """ + gip: NotRequired["ConfigurationModifyParamsTippingGip"] + """ + Tipping configuration for GIP + """ + hkd: NotRequired["ConfigurationModifyParamsTippingHkd"] + """ + Tipping configuration for HKD + """ + huf: NotRequired["ConfigurationModifyParamsTippingHuf"] + """ + Tipping configuration for HUF + """ + jpy: NotRequired["ConfigurationModifyParamsTippingJpy"] + """ + Tipping configuration for JPY + """ + mxn: NotRequired["ConfigurationModifyParamsTippingMxn"] + """ + Tipping configuration for MXN + """ + myr: NotRequired["ConfigurationModifyParamsTippingMyr"] + """ + Tipping configuration for MYR + """ + nok: NotRequired["ConfigurationModifyParamsTippingNok"] + """ + Tipping configuration for NOK + """ + nzd: NotRequired["ConfigurationModifyParamsTippingNzd"] + """ + Tipping configuration for NZD + """ + pln: NotRequired["ConfigurationModifyParamsTippingPln"] + """ + Tipping configuration for PLN + """ + ron: NotRequired["ConfigurationModifyParamsTippingRon"] + """ + Tipping configuration for RON + """ + sek: NotRequired["ConfigurationModifyParamsTippingSek"] + """ + Tipping configuration for SEK + """ + sgd: NotRequired["ConfigurationModifyParamsTippingSgd"] + """ + Tipping configuration for SGD + """ + usd: NotRequired["ConfigurationModifyParamsTippingUsd"] + """ + Tipping configuration for USD + """ + + +class ConfigurationModifyParamsTippingAed(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingAud(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingBgn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingCad(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingChf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingCzk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingDkk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingEur(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingGbp(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingGip(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingHkd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingHuf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingJpy(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingMxn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingMyr(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingNok(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingNzd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingPln(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingRon(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingSek(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingSgd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsTippingUsd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationModifyParamsVerifoneP400(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationModifyParamsWifi(TypedDict): + enterprise_eap_peap: NotRequired[ + "ConfigurationModifyParamsWifiEnterpriseEapPeap" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-PEAP authentication method. + """ + enterprise_eap_tls: NotRequired[ + "ConfigurationModifyParamsWifiEnterpriseEapTls" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-TLS authentication method. + """ + personal_psk: NotRequired["ConfigurationModifyParamsWifiPersonalPsk"] + """ + Credentials for a WPA-Personal WiFi network. + """ + type: Literal["enterprise_eap_peap", "enterprise_eap_tls", "personal_psk"] + """ + Security type of the WiFi network. Fill out the hash with the corresponding name to provide the set of credentials for this security type. + """ + + +class ConfigurationModifyParamsWifiEnterpriseEapPeap(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ + username: str + """ + Username for connecting to the WiFi network + """ + + +class ConfigurationModifyParamsWifiEnterpriseEapTls(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + client_certificate_file: str + """ + A File ID representing a PEM file containing the client certificate + """ + private_key_file: str + """ + A File ID representing a PEM file containing the client RSA private key + """ + private_key_file_password: NotRequired[str] + """ + Password for the private key file + """ + ssid: str + """ + Name of the WiFi network + """ + + +class ConfigurationModifyParamsWifiPersonalPsk(TypedDict): + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_retrieve_params.py new file mode 100644 index 00000000..95f024ac --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ConfigurationRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_update_params.py new file mode 100644 index 00000000..d7891bf1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_configuration_update_params.py @@ -0,0 +1,598 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ConfigurationUpdateParams(TypedDict): + bbpos_wisepad3: NotRequired[ + "Literal['']|ConfigurationUpdateParamsBbposWisepad3" + ] + """ + An object containing device type specific settings for BBPOS WisePad 3 readers. + """ + bbpos_wisepos_e: NotRequired[ + "Literal['']|ConfigurationUpdateParamsBbposWiseposE" + ] + """ + An object containing device type specific settings for BBPOS WisePOS E readers. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + name: NotRequired[str] + """ + Name of the configuration + """ + offline: NotRequired["Literal['']|ConfigurationUpdateParamsOffline"] + """ + Configurations for collecting transactions offline. + """ + reboot_window: NotRequired[ + "Literal['']|ConfigurationUpdateParamsRebootWindow" + ] + """ + Reboot time settings for readers. that support customized reboot time configuration. + """ + stripe_s700: NotRequired["Literal['']|ConfigurationUpdateParamsStripeS700"] + """ + An object containing device type specific settings for Stripe S700 readers. + """ + tipping: NotRequired["Literal['']|ConfigurationUpdateParamsTipping"] + """ + Tipping configurations for readers. supporting on-reader tips + """ + verifone_p400: NotRequired[ + "Literal['']|ConfigurationUpdateParamsVerifoneP400" + ] + """ + An object containing device type specific settings for Verifone P400 readers. + """ + wifi: NotRequired["Literal['']|ConfigurationUpdateParamsWifi"] + """ + Configurations for connecting to a WiFi network. + """ + + +class ConfigurationUpdateParamsBbposWisepad3(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationUpdateParamsBbposWiseposE(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image to display on the reader + """ + + +class ConfigurationUpdateParamsOffline(TypedDict): + enabled: bool + """ + Determines whether to allow transactions to be collected while reader is offline. Defaults to false. + """ + + +class ConfigurationUpdateParamsRebootWindow(TypedDict): + end_hour: int + """ + Integer between 0 to 23 that represents the end hour of the reboot time window. The value must be different than the start_hour. + """ + start_hour: int + """ + Integer between 0 to 23 that represents the start hour of the reboot time window. + """ + + +class ConfigurationUpdateParamsStripeS700(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationUpdateParamsTipping(TypedDict): + aed: NotRequired["ConfigurationUpdateParamsTippingAed"] + """ + Tipping configuration for AED + """ + aud: NotRequired["ConfigurationUpdateParamsTippingAud"] + """ + Tipping configuration for AUD + """ + bgn: NotRequired["ConfigurationUpdateParamsTippingBgn"] + """ + Tipping configuration for BGN + """ + cad: NotRequired["ConfigurationUpdateParamsTippingCad"] + """ + Tipping configuration for CAD + """ + chf: NotRequired["ConfigurationUpdateParamsTippingChf"] + """ + Tipping configuration for CHF + """ + czk: NotRequired["ConfigurationUpdateParamsTippingCzk"] + """ + Tipping configuration for CZK + """ + dkk: NotRequired["ConfigurationUpdateParamsTippingDkk"] + """ + Tipping configuration for DKK + """ + eur: NotRequired["ConfigurationUpdateParamsTippingEur"] + """ + Tipping configuration for EUR + """ + gbp: NotRequired["ConfigurationUpdateParamsTippingGbp"] + """ + Tipping configuration for GBP + """ + gip: NotRequired["ConfigurationUpdateParamsTippingGip"] + """ + Tipping configuration for GIP + """ + hkd: NotRequired["ConfigurationUpdateParamsTippingHkd"] + """ + Tipping configuration for HKD + """ + huf: NotRequired["ConfigurationUpdateParamsTippingHuf"] + """ + Tipping configuration for HUF + """ + jpy: NotRequired["ConfigurationUpdateParamsTippingJpy"] + """ + Tipping configuration for JPY + """ + mxn: NotRequired["ConfigurationUpdateParamsTippingMxn"] + """ + Tipping configuration for MXN + """ + myr: NotRequired["ConfigurationUpdateParamsTippingMyr"] + """ + Tipping configuration for MYR + """ + nok: NotRequired["ConfigurationUpdateParamsTippingNok"] + """ + Tipping configuration for NOK + """ + nzd: NotRequired["ConfigurationUpdateParamsTippingNzd"] + """ + Tipping configuration for NZD + """ + pln: NotRequired["ConfigurationUpdateParamsTippingPln"] + """ + Tipping configuration for PLN + """ + ron: NotRequired["ConfigurationUpdateParamsTippingRon"] + """ + Tipping configuration for RON + """ + sek: NotRequired["ConfigurationUpdateParamsTippingSek"] + """ + Tipping configuration for SEK + """ + sgd: NotRequired["ConfigurationUpdateParamsTippingSgd"] + """ + Tipping configuration for SGD + """ + usd: NotRequired["ConfigurationUpdateParamsTippingUsd"] + """ + Tipping configuration for USD + """ + + +class ConfigurationUpdateParamsTippingAed(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingAud(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingBgn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingCad(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingChf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingCzk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingDkk(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingEur(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingGbp(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingGip(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingHkd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingHuf(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingJpy(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingMxn(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingMyr(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingNok(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingNzd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingPln(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingRon(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingSek(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingSgd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsTippingUsd(TypedDict): + fixed_amounts: NotRequired[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: NotRequired[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: NotRequired[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + +class ConfigurationUpdateParamsVerifoneP400(TypedDict): + splashscreen: NotRequired["Literal['']|str"] + """ + A File ID representing an image you want to display on the reader. + """ + + +class ConfigurationUpdateParamsWifi(TypedDict): + enterprise_eap_peap: NotRequired[ + "ConfigurationUpdateParamsWifiEnterpriseEapPeap" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-PEAP authentication method. + """ + enterprise_eap_tls: NotRequired[ + "ConfigurationUpdateParamsWifiEnterpriseEapTls" + ] + """ + Credentials for a WPA-Enterprise WiFi network using the EAP-TLS authentication method. + """ + personal_psk: NotRequired["ConfigurationUpdateParamsWifiPersonalPsk"] + """ + Credentials for a WPA-Personal WiFi network. + """ + type: Literal["enterprise_eap_peap", "enterprise_eap_tls", "personal_psk"] + """ + Security type of the WiFi network. Fill out the hash with the corresponding name to provide the set of credentials for this security type. + """ + + +class ConfigurationUpdateParamsWifiEnterpriseEapPeap(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ + username: str + """ + Username for connecting to the WiFi network + """ + + +class ConfigurationUpdateParamsWifiEnterpriseEapTls(TypedDict): + ca_certificate_file: NotRequired[str] + """ + A File ID representing a PEM file containing the server certificate + """ + client_certificate_file: str + """ + A File ID representing a PEM file containing the client certificate + """ + private_key_file: str + """ + A File ID representing a PEM file containing the client RSA private key + """ + private_key_file_password: NotRequired[str] + """ + Password for the private key file + """ + ssid: str + """ + Name of the WiFi network + """ + + +class ConfigurationUpdateParamsWifiPersonalPsk(TypedDict): + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_connection_token_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_connection_token_create_params.py new file mode 100644 index 00000000..5035f7e4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_connection_token_create_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ConnectionTokenCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + location: NotRequired[str] + """ + The id of the location that this connection token is scoped to. If specified the connection token will only be usable with readers assigned to that location, otherwise the connection token will be usable with all readers. Note that location scoping only applies to internet-connected readers. For more details, see [the docs on scoping connection tokens](https://docs.stripe.com/terminal/fleet/locations-and-zones?dashboard-or-api=api#connection-tokens). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_create_params.py new file mode 100644 index 00000000..72a48400 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_create_params.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class LocationCreateParams(RequestOptions): + address: NotRequired["LocationCreateParamsAddress"] + """ + The full address of the location. + """ + address_kana: NotRequired["LocationCreateParamsAddressKana"] + """ + The Kana variation of the full address of the location (Japan only). + """ + address_kanji: NotRequired["LocationCreateParamsAddressKanji"] + """ + The Kanji variation of the full address of the location (Japan only). + """ + configuration_overrides: NotRequired[str] + """ + The ID of a configuration that will be used to customize all readers in this location. + """ + display_name: NotRequired[str] + """ + A name for the location. Maximum length is 1000 characters. + """ + display_name_kana: NotRequired[str] + """ + The Kana variation of the name for the location (Japan only). Maximum length is 1000 characters. + """ + display_name_kanji: NotRequired[str] + """ + The Kanji variation of the name for the location (Japan only). Maximum length is 1000 characters. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phone: NotRequired[str] + """ + The phone number for the location. + """ + + +class LocationCreateParamsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class LocationCreateParamsAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class LocationCreateParamsAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_delete_params.py new file mode 100644 index 00000000..d7f8582c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class LocationDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_list_params.py new file mode 100644 index 00000000..44de1fd8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_list_params.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class LocationListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_modify_params.py new file mode 100644 index 00000000..f4c76e27 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_modify_params.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class LocationModifyParams(RequestOptions): + address: NotRequired["LocationModifyParamsAddress"] + """ + The full address of the location. You can't change the location's `country`. If you need to modify the `country` field, create a new `Location` object and re-register any existing readers to that location. + """ + address_kana: NotRequired["LocationModifyParamsAddressKana"] + """ + The Kana variation of the full address of the location (Japan only). + """ + address_kanji: NotRequired["LocationModifyParamsAddressKanji"] + """ + The Kanji variation of the full address of the location (Japan only). + """ + configuration_overrides: NotRequired["Literal['']|str"] + """ + The ID of a configuration that will be used to customize all readers in this location. + """ + display_name: NotRequired["Literal['']|str"] + """ + A name for the location. + """ + display_name_kana: NotRequired["Literal['']|str"] + """ + The Kana variation of the name for the location (Japan only). + """ + display_name_kanji: NotRequired["Literal['']|str"] + """ + The Kanji variation of the name for the location (Japan only). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phone: NotRequired["Literal['']|str"] + """ + The phone number for the location. + """ + + +class LocationModifyParamsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class LocationModifyParamsAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class LocationModifyParamsAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_retrieve_params.py new file mode 100644 index 00000000..107563bb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class LocationRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_update_params.py new file mode 100644 index 00000000..bd0083cb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_location_update_params.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class LocationUpdateParams(TypedDict): + address: NotRequired["LocationUpdateParamsAddress"] + """ + The full address of the location. You can't change the location's `country`. If you need to modify the `country` field, create a new `Location` object and re-register any existing readers to that location. + """ + address_kana: NotRequired["LocationUpdateParamsAddressKana"] + """ + The Kana variation of the full address of the location (Japan only). + """ + address_kanji: NotRequired["LocationUpdateParamsAddressKanji"] + """ + The Kanji variation of the full address of the location (Japan only). + """ + configuration_overrides: NotRequired["Literal['']|str"] + """ + The ID of a configuration that will be used to customize all readers in this location. + """ + display_name: NotRequired["Literal['']|str"] + """ + A name for the location. + """ + display_name_kana: NotRequired["Literal['']|str"] + """ + The Kana variation of the name for the location (Japan only). + """ + display_name_kanji: NotRequired["Literal['']|str"] + """ + The Kanji variation of the name for the location (Japan only). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + phone: NotRequired["Literal['']|str"] + """ + The phone number for the location. + """ + + +class LocationUpdateParamsAddress(TypedDict): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class LocationUpdateParamsAddressKana(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ + + +class LocationUpdateParamsAddressKanji(TypedDict): + city: NotRequired[str] + """ + City or ward. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Block or building number. + """ + line2: NotRequired[str] + """ + Building details. + """ + postal_code: NotRequired[str] + """ + Postal code. + """ + state: NotRequired[str] + """ + Prefecture. + """ + town: NotRequired[str] + """ + Town or cho-me. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_cancel_action_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_cancel_action_params.py new file mode 100644 index 00000000..13541d52 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_cancel_action_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReaderCancelActionParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_inputs_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_inputs_params.py new file mode 100644 index 00000000..e66b3c06 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_inputs_params.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderCollectInputsParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + inputs: List["ReaderCollectInputsParamsInput"] + """ + List of inputs to be collected from the customer using the Reader. Maximum 5 inputs. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + + +class ReaderCollectInputsParamsInput(TypedDict): + custom_text: "ReaderCollectInputsParamsInputCustomText" + """ + Customize the text which will be displayed while collecting this input + """ + required: NotRequired[bool] + """ + Indicate that this input is required, disabling the skip button + """ + selection: NotRequired["ReaderCollectInputsParamsInputSelection"] + """ + Options for the `selection` input + """ + toggles: NotRequired[List["ReaderCollectInputsParamsInputToggle"]] + """ + List of toggles to be displayed and customization for the toggles + """ + type: Literal[ + "email", "numeric", "phone", "selection", "signature", "text" + ] + """ + The type of input to collect + """ + + +class ReaderCollectInputsParamsInputCustomText(TypedDict): + description: NotRequired[str] + """ + The description which will be displayed when collecting this input + """ + skip_button: NotRequired[str] + """ + Custom text for the skip button. Maximum 14 characters. + """ + submit_button: NotRequired[str] + """ + Custom text for the submit button. Maximum 30 characters. + """ + title: str + """ + The title which will be displayed when collecting this input + """ + + +class ReaderCollectInputsParamsInputSelection(TypedDict): + choices: List["ReaderCollectInputsParamsInputSelectionChoice"] + """ + List of choices for the `selection` input + """ + + +class ReaderCollectInputsParamsInputSelectionChoice(TypedDict): + id: str + """ + The unique identifier for this choice + """ + style: NotRequired[Literal["primary", "secondary"]] + """ + The style of the button which will be shown for this choice. Can be `primary` or `secondary`. + """ + text: str + """ + The text which will be shown on the button for this choice + """ + + +class ReaderCollectInputsParamsInputToggle(TypedDict): + default_value: NotRequired[Literal["disabled", "enabled"]] + """ + The default value of the toggle. Can be `enabled` or `disabled`. + """ + description: NotRequired[str] + """ + The description which will be displayed for the toggle. Maximum 50 characters. At least one of title or description must be provided. + """ + title: NotRequired[str] + """ + The title which will be displayed for the toggle. Maximum 50 characters. At least one of title or description must be provided. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_payment_method_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_payment_method_params.py new file mode 100644 index 00000000..f402dc90 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_collect_payment_method_params.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderCollectPaymentMethodParams(RequestOptions): + collect_config: NotRequired[ + "ReaderCollectPaymentMethodParamsCollectConfig" + ] + """ + Configuration overrides for this collection, such as tipping, surcharging, and customer cancellation settings. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + payment_intent: str + """ + The ID of the PaymentIntent to collect a payment method for. + """ + + +class ReaderCollectPaymentMethodParamsCollectConfig(TypedDict): + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. + """ + enable_customer_cancellation: NotRequired[bool] + """ + Enables cancel button on transaction screens. + """ + skip_tipping: NotRequired[bool] + """ + Override showing a tipping selection screen on this transaction. + """ + tipping: NotRequired[ + "ReaderCollectPaymentMethodParamsCollectConfigTipping" + ] + """ + Tipping configuration for this transaction. + """ + + +class ReaderCollectPaymentMethodParamsCollectConfigTipping(TypedDict): + amount_eligible: NotRequired[int] + """ + Amount used to calculate tip suggestions on tipping selection screen for this transaction. Must be a positive integer in the smallest currency unit (e.g., 100 cents to represent $1.00 or 100 to represent ¥100, a zero-decimal currency). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_confirm_payment_intent_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_confirm_payment_intent_params.py new file mode 100644 index 00000000..e7bdba44 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_confirm_payment_intent_params.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ReaderConfirmPaymentIntentParams(RequestOptions): + confirm_config: NotRequired[ + "ReaderConfirmPaymentIntentParamsConfirmConfig" + ] + """ + Configuration overrides for this confirmation, such as surcharge settings and return URL. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + payment_intent: str + """ + The ID of the PaymentIntent to confirm. + """ + + +class ReaderConfirmPaymentIntentParamsConfirmConfig(TypedDict): + return_url: NotRequired[str] + """ + The URL to redirect your customer back to after they authenticate or cancel their payment on the payment method's app or site. If you'd prefer to redirect to a mobile application, you can alternatively supply an application URI scheme. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_create_params.py new file mode 100644 index 00000000..6e6d550d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_create_params.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class ReaderCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + label: NotRequired[str] + """ + Custom label given to the reader for easier identification. If no label is specified, the registration code will be used. + """ + location: NotRequired[str] + """ + The location to assign the reader to. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + registration_code: str + """ + A code generated by the reader used for registering to an account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_delete_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_delete_params.py new file mode 100644 index 00000000..a9ac7242 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_delete_params.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions + + +class ReaderDeleteParams(RequestOptions): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_list_params.py new file mode 100644 index 00000000..6f77b07a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_list_params.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class ReaderListParams(RequestOptions): + device_type: NotRequired[ + Literal[ + "bbpos_chipper2x", + "bbpos_wisepad3", + "bbpos_wisepos_e", + "mobile_phone_reader", + "simulated_stripe_s700", + "simulated_wisepos_e", + "stripe_m2", + "stripe_s700", + "verifone_P400", + ] + ] + """ + Filters readers by device type + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + location: NotRequired[str] + """ + A location ID to filter the response list to only readers at the specific location + """ + serial_number: NotRequired[str] + """ + Filters readers by serial number + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["offline", "online"]] + """ + A status filter to filter readers to only offline or online readers + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_modify_params.py new file mode 100644 index 00000000..da2d79c9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_modify_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired + + +class ReaderModifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + label: NotRequired["Literal['']|str"] + """ + The new label of the reader. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_present_payment_method_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_present_payment_method_params.py new file mode 100644 index 00000000..000061f7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_present_payment_method_params.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderPresentPaymentMethodParams(RequestOptions): + amount_tip: NotRequired[int] + """ + Simulated on-reader tip amount. + """ + card: NotRequired["ReaderPresentPaymentMethodParamsCard"] + """ + Simulated data for the card payment method. + """ + card_present: NotRequired["ReaderPresentPaymentMethodParamsCardPresent"] + """ + Simulated data for the card_present payment method. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + interac_present: NotRequired[ + "ReaderPresentPaymentMethodParamsInteracPresent" + ] + """ + Simulated data for the interac_present payment method. + """ + type: NotRequired[Literal["card", "card_present", "interac_present"]] + """ + Simulated payment type. + """ + + +class ReaderPresentPaymentMethodParamsCard(TypedDict): + cvc: NotRequired[str] + """ + Card security code. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Two- or four-digit number representing the card's expiration year. + """ + number: str + """ + The card number, as a string without any separators. + """ + + +class ReaderPresentPaymentMethodParamsCardPresent(TypedDict): + number: NotRequired[str] + """ + The card number, as a string without any separators. + """ + + +class ReaderPresentPaymentMethodParamsInteracPresent(TypedDict): + number: NotRequired[str] + """ + The Interac card number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_payment_intent_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_payment_intent_params.py new file mode 100644 index 00000000..267333ce --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_payment_intent_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderProcessPaymentIntentParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + payment_intent: str + """ + The ID of the PaymentIntent to process on the reader. + """ + process_config: NotRequired[ + "ReaderProcessPaymentIntentParamsProcessConfig" + ] + """ + Configuration overrides for this transaction, such as tipping and customer cancellation settings. + """ + + +class ReaderProcessPaymentIntentParamsProcessConfig(TypedDict): + allow_redisplay: NotRequired[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. + """ + enable_customer_cancellation: NotRequired[bool] + """ + Enables cancel button on transaction screens. + """ + return_url: NotRequired[str] + """ + The URL to redirect your customer back to after they authenticate or cancel their payment on the payment method's app or site. If you'd prefer to redirect to a mobile application, you can alternatively supply an application URI scheme. + """ + skip_tipping: NotRequired[bool] + """ + Override showing a tipping selection screen on this transaction. + """ + tipping: NotRequired[ + "ReaderProcessPaymentIntentParamsProcessConfigTipping" + ] + """ + Tipping configuration for this transaction. + """ + + +class ReaderProcessPaymentIntentParamsProcessConfigTipping(TypedDict): + amount_eligible: NotRequired[int] + """ + Amount used to calculate tip suggestions on tipping selection screen for this transaction. Must be a positive integer in the smallest currency unit (e.g., 100 cents to represent $1.00 or 100 to represent ¥100, a zero-decimal currency). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_setup_intent_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_setup_intent_params.py new file mode 100644 index 00000000..373e2ec0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_process_setup_intent_params.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderProcessSetupIntentParams(RequestOptions): + allow_redisplay: Literal["always", "limited", "unspecified"] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + process_config: NotRequired["ReaderProcessSetupIntentParamsProcessConfig"] + """ + Configuration overrides for this setup, such as MOTO and customer cancellation settings. + """ + setup_intent: str + """ + The ID of the SetupIntent to process on the reader. + """ + + +class ReaderProcessSetupIntentParamsProcessConfig(TypedDict): + enable_customer_cancellation: NotRequired[bool] + """ + Enables cancel button on transaction screens. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_refund_payment_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_refund_payment_params.py new file mode 100644 index 00000000..9d1a0297 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_refund_payment_params.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired, TypedDict + + +class ReaderRefundPaymentParams(RequestOptions): + amount: NotRequired[int] + """ + A positive integer in __cents__ representing how much of this charge to refund. + """ + charge: NotRequired[str] + """ + ID of the Charge to refund. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + payment_intent: NotRequired[str] + """ + ID of the PaymentIntent to refund. + """ + refund_application_fee: NotRequired[bool] + """ + Boolean indicating whether the application fee should be refunded when refunding this charge. If a full charge refund is given, the full application fee will be refunded. Otherwise, the application fee will be refunded in an amount proportional to the amount of the charge refunded. An application fee can be refunded only by the application that created the charge. + """ + refund_payment_config: NotRequired[ + "ReaderRefundPaymentParamsRefundPaymentConfig" + ] + """ + Configuration overrides for this refund, such as customer cancellation settings. + """ + reverse_transfer: NotRequired[bool] + """ + Boolean indicating whether the transfer should be reversed when refunding this charge. The transfer will be reversed proportionally to the amount being refunded (either the entire or partial amount). A transfer can be reversed only by the application that created the charge. + """ + + +class ReaderRefundPaymentParamsRefundPaymentConfig(TypedDict): + enable_customer_cancellation: NotRequired[bool] + """ + Enables cancel button on transaction screens. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_retrieve_params.py new file mode 100644 index 00000000..172fa8d8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReaderRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_set_reader_display_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_set_reader_display_params.py new file mode 100644 index 00000000..448aa891 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_set_reader_display_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderSetReaderDisplayParams(RequestOptions): + cart: NotRequired["ReaderSetReaderDisplayParamsCart"] + """ + Cart details to display on the reader screen, including line items, amounts, and currency. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + type: Literal["cart"] + """ + Type of information to display. Only `cart` is currently supported. + """ + + +class ReaderSetReaderDisplayParamsCart(TypedDict): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + line_items: List["ReaderSetReaderDisplayParamsCartLineItem"] + """ + Array of line items to display. + """ + tax: NotRequired[int] + """ + The amount of tax in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + total: int + """ + Total balance of cart due in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + + +class ReaderSetReaderDisplayParamsCartLineItem(TypedDict): + amount: int + """ + The price of the item in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + description: str + """ + The description or name of the item. + """ + quantity: int + """ + The quantity of the line item being purchased. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_succeed_input_collection_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_succeed_input_collection_params.py new file mode 100644 index 00000000..0872d72a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_succeed_input_collection_params.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class ReaderSucceedInputCollectionParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + skip_non_required_inputs: NotRequired[Literal["all", "none"]] + """ + This parameter defines the skip behavior for input collection. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_timeout_input_collection_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_timeout_input_collection_params.py new file mode 100644 index 00000000..4a25a66b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_timeout_input_collection_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReaderTimeoutInputCollectionParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_update_params.py new file mode 100644 index 00000000..25b94dc2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/terminal/_reader_update_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + label: NotRequired["Literal['']|str"] + """ + The new label of the reader. + """ + metadata: NotRequired["Literal['']|Dict[str, str]"] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__init__.py new file mode 100644 index 00000000..475021d1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__init__.py @@ -0,0 +1,389 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.test_helpers import ( + issuing as issuing, + terminal as terminal, + treasury as treasury, + ) + from stripe.params.test_helpers._confirmation_token_create_params import ( + ConfirmationTokenCreateParams as ConfirmationTokenCreateParams, + ConfirmationTokenCreateParamsPaymentMethodData as ConfirmationTokenCreateParamsPaymentMethodData, + ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit as ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit, + ConfirmationTokenCreateParamsPaymentMethodDataAffirm as ConfirmationTokenCreateParamsPaymentMethodDataAffirm, + ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay as ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay, + ConfirmationTokenCreateParamsPaymentMethodDataAlipay as ConfirmationTokenCreateParamsPaymentMethodDataAlipay, + ConfirmationTokenCreateParamsPaymentMethodDataAlma as ConfirmationTokenCreateParamsPaymentMethodDataAlma, + ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay as ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay, + ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit as ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit, + ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit as ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit, + ConfirmationTokenCreateParamsPaymentMethodDataBancontact as ConfirmationTokenCreateParamsPaymentMethodDataBancontact, + ConfirmationTokenCreateParamsPaymentMethodDataBillie as ConfirmationTokenCreateParamsPaymentMethodDataBillie, + ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails as ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails, + ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress as ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress, + ConfirmationTokenCreateParamsPaymentMethodDataBlik as ConfirmationTokenCreateParamsPaymentMethodDataBlik, + ConfirmationTokenCreateParamsPaymentMethodDataBoleto as ConfirmationTokenCreateParamsPaymentMethodDataBoleto, + ConfirmationTokenCreateParamsPaymentMethodDataCashapp as ConfirmationTokenCreateParamsPaymentMethodDataCashapp, + ConfirmationTokenCreateParamsPaymentMethodDataCrypto as ConfirmationTokenCreateParamsPaymentMethodDataCrypto, + ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance as ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance, + ConfirmationTokenCreateParamsPaymentMethodDataEps as ConfirmationTokenCreateParamsPaymentMethodDataEps, + ConfirmationTokenCreateParamsPaymentMethodDataFpx as ConfirmationTokenCreateParamsPaymentMethodDataFpx, + ConfirmationTokenCreateParamsPaymentMethodDataGiropay as ConfirmationTokenCreateParamsPaymentMethodDataGiropay, + ConfirmationTokenCreateParamsPaymentMethodDataGrabpay as ConfirmationTokenCreateParamsPaymentMethodDataGrabpay, + ConfirmationTokenCreateParamsPaymentMethodDataIdeal as ConfirmationTokenCreateParamsPaymentMethodDataIdeal, + ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent as ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent, + ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay as ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay, + ConfirmationTokenCreateParamsPaymentMethodDataKlarna as ConfirmationTokenCreateParamsPaymentMethodDataKlarna, + ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob as ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob, + ConfirmationTokenCreateParamsPaymentMethodDataKonbini as ConfirmationTokenCreateParamsPaymentMethodDataKonbini, + ConfirmationTokenCreateParamsPaymentMethodDataKrCard as ConfirmationTokenCreateParamsPaymentMethodDataKrCard, + ConfirmationTokenCreateParamsPaymentMethodDataLink as ConfirmationTokenCreateParamsPaymentMethodDataLink, + ConfirmationTokenCreateParamsPaymentMethodDataMbWay as ConfirmationTokenCreateParamsPaymentMethodDataMbWay, + ConfirmationTokenCreateParamsPaymentMethodDataMobilepay as ConfirmationTokenCreateParamsPaymentMethodDataMobilepay, + ConfirmationTokenCreateParamsPaymentMethodDataMultibanco as ConfirmationTokenCreateParamsPaymentMethodDataMultibanco, + ConfirmationTokenCreateParamsPaymentMethodDataNaverPay as ConfirmationTokenCreateParamsPaymentMethodDataNaverPay, + ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount as ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount, + ConfirmationTokenCreateParamsPaymentMethodDataOxxo as ConfirmationTokenCreateParamsPaymentMethodDataOxxo, + ConfirmationTokenCreateParamsPaymentMethodDataP24 as ConfirmationTokenCreateParamsPaymentMethodDataP24, + ConfirmationTokenCreateParamsPaymentMethodDataPayByBank as ConfirmationTokenCreateParamsPaymentMethodDataPayByBank, + ConfirmationTokenCreateParamsPaymentMethodDataPayco as ConfirmationTokenCreateParamsPaymentMethodDataPayco, + ConfirmationTokenCreateParamsPaymentMethodDataPaynow as ConfirmationTokenCreateParamsPaymentMethodDataPaynow, + ConfirmationTokenCreateParamsPaymentMethodDataPaypal as ConfirmationTokenCreateParamsPaymentMethodDataPaypal, + ConfirmationTokenCreateParamsPaymentMethodDataPix as ConfirmationTokenCreateParamsPaymentMethodDataPix, + ConfirmationTokenCreateParamsPaymentMethodDataPromptpay as ConfirmationTokenCreateParamsPaymentMethodDataPromptpay, + ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions as ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions, + ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay as ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay, + ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay as ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay, + ConfirmationTokenCreateParamsPaymentMethodDataSatispay as ConfirmationTokenCreateParamsPaymentMethodDataSatispay, + ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit as ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit, + ConfirmationTokenCreateParamsPaymentMethodDataSofort as ConfirmationTokenCreateParamsPaymentMethodDataSofort, + ConfirmationTokenCreateParamsPaymentMethodDataSwish as ConfirmationTokenCreateParamsPaymentMethodDataSwish, + ConfirmationTokenCreateParamsPaymentMethodDataTwint as ConfirmationTokenCreateParamsPaymentMethodDataTwint, + ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount as ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount, + ConfirmationTokenCreateParamsPaymentMethodDataWechatPay as ConfirmationTokenCreateParamsPaymentMethodDataWechatPay, + ConfirmationTokenCreateParamsPaymentMethodDataZip as ConfirmationTokenCreateParamsPaymentMethodDataZip, + ConfirmationTokenCreateParamsPaymentMethodOptions as ConfirmationTokenCreateParamsPaymentMethodOptions, + ConfirmationTokenCreateParamsPaymentMethodOptionsCard as ConfirmationTokenCreateParamsPaymentMethodOptionsCard, + ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments as ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments, + ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan as ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan, + ConfirmationTokenCreateParamsShipping as ConfirmationTokenCreateParamsShipping, + ConfirmationTokenCreateParamsShippingAddress as ConfirmationTokenCreateParamsShippingAddress, + ) + from stripe.params.test_helpers._customer_fund_cash_balance_params import ( + CustomerFundCashBalanceParams as CustomerFundCashBalanceParams, + ) + from stripe.params.test_helpers._refund_expire_params import ( + RefundExpireParams as RefundExpireParams, + ) + from stripe.params.test_helpers._test_clock_advance_params import ( + TestClockAdvanceParams as TestClockAdvanceParams, + ) + from stripe.params.test_helpers._test_clock_create_params import ( + TestClockCreateParams as TestClockCreateParams, + ) + from stripe.params.test_helpers._test_clock_delete_params import ( + TestClockDeleteParams as TestClockDeleteParams, + ) + from stripe.params.test_helpers._test_clock_list_params import ( + TestClockListParams as TestClockListParams, + ) + from stripe.params.test_helpers._test_clock_retrieve_params import ( + TestClockRetrieveParams as TestClockRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "issuing": ("stripe.params.test_helpers.issuing", True), + "terminal": ("stripe.params.test_helpers.terminal", True), + "treasury": ("stripe.params.test_helpers.treasury", True), + "ConfirmationTokenCreateParams": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodData": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAffirm": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAlipay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAlma": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBancontact": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillie": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBlik": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBoleto": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCashapp": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCrypto": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataEps": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataFpx": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataGiropay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataGrabpay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataIdeal": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKlarna": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKonbini": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKrCard": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataLink": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMbWay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMobilepay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMultibanco": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataNaverPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataOxxo": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataP24": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPayByBank": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPayco": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPaynow": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPaypal": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPix": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPromptpay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSatispay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSofort": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSwish": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataTwint": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataWechatPay": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataZip": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptions": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCard": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsShipping": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsShippingAddress": ( + "stripe.params.test_helpers._confirmation_token_create_params", + False, + ), + "CustomerFundCashBalanceParams": ( + "stripe.params.test_helpers._customer_fund_cash_balance_params", + False, + ), + "RefundExpireParams": ( + "stripe.params.test_helpers._refund_expire_params", + False, + ), + "TestClockAdvanceParams": ( + "stripe.params.test_helpers._test_clock_advance_params", + False, + ), + "TestClockCreateParams": ( + "stripe.params.test_helpers._test_clock_create_params", + False, + ), + "TestClockDeleteParams": ( + "stripe.params.test_helpers._test_clock_delete_params", + False, + ), + "TestClockListParams": ( + "stripe.params.test_helpers._test_clock_list_params", + False, + ), + "TestClockRetrieveParams": ( + "stripe.params.test_helpers._test_clock_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb1cfd43175c442807b033588d558748b666753e GIT binary patch literal 8292 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

  • U2xc^ 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..606c75a70c3d12209510be6431101a8b2693e108 GIT binary patch literal 746 zcmX|9zi-n(6uz?^Hz}!73K9i`Ds{`yo}h@SLMW~HAs|BhShAe1_G@CrKD&44Dwzul zD?`J^iuhBQsxHV20~1@MP=-#tvlC8w&)@s}-qZWu-S?H1Wr9cly%l}(2>E4$#i`A~ z>;ZyP5|WU{B%wV@Ep}ojaeHp!^*l-(@`Qx$dlGu!eRHe2UTs`!`@e0_riJ$+(x&Yc zSGuWr4M%yTAS@bh#~FnCQDB0qrtOrm)$Y5Of zFv^6)X%!rTrJ&oc7j@31NPzQVne!wK^Vs4h=SR7S=YQM?8?`tWQl>_jD3uy>Ty2!X zWfNtEekC*X&9Hxz0n183%z!q00C5INGak&v^Fvh61C-AXD*e35-_FKr$qr|o zHT?+P2lAuYI(a^IoLYVAlh)eF%LQIppLmlupBrb*&2w*a!LHt(?3}eW&b^J2QP;3Z z*|LjQ;G1!Vl1lx>)hggHG9b0xQMDZV{HjUTEGipZM|4@=t=9ce-N2BdX?yKcmr{D+ V6T1GB-2daR()yQY7X&|L=|8fP#?k-) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_refund_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_refund_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..557f5e7207120cd7fc6f72cfffc6e06ca00323ee GIT binary patch literal 604 zcmXw1zi-qq6n;*e^jfZz9}-Z;3Wf}=1yr3XhN=h#bV3D|ELJ!_?xIU({NCsH#s0Rwz6O4nfA`CW1mJfdS0lLui#-oc zL4Y6?)FdY);HZk~IFD3b@bt@wBMAorZd?CY4$p@-VpCnc68gUgf2q})7Yg?2ixa+)!3-9!=2ecHp q;n78Jzx!oRo7}7~q1UPs1qlu)ARd=JU@h4pS!LJW+D?>kMDQCL zB>n*6r*J~Opp|;!#4S=Nhn}$4t)-dyK6@UXnIG%xt6+}$cPIbq0sOY)>V%hId1$~1 zWRQ^pN|F#_u~&GdpZE>-i=YgXkbnnIAPYW079#oXyZ9uUMcvjPOS+`K_7acBsPywn z=YlJ96Fke6Hg>Hiw0+DaW_=gx^kp7c?iqdp2nop`@!kOX7+`qY+*-jXBL~K=0JaSF zES~w@px%0I>OCq%fAlb$q`Z$WQkj;jj&NF~Jge8Q%-{ zk&O$B+l(EL)55(-I~y4oRr^ZI`Z{AN=R&7VQ^woRx&8)A;{X>Q=}?qN2YgB&qZ(;Z z(WgRVv2!HEDCYxul=er+Gde*&p+)|VRx>>me1G@;1FCY3JC$)r2dJp2l~+isrU9x= zUu=j)g;G)0u)b}RrLIrr{C2CEY}x->6&q3ajQR|}+MRhYfAwYMXM6iJ*j{*E7%w8& zymcDfY>3>rit2S+b;lLoWzubs3AaLN_ftoDR+(PhOg0>0IMv9N-Lo55^NSlcX_I-= ppo{pxjrdS*8A^<(yGAX1LdbapWd960XVCo{#U!4;JqKf&=>J`2z108! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd9d0fb9b0f530a43582a37b01413b13dc8188d9 GIT binary patch literal 739 zcmXw1y>AmS6o0<2q)7^Dp+rPX-7>TmRBTm;6bS|t5Fg7e)^Yb}Pr0+Nwp%r9NU*at z{0WFZg{jJdPU^(O7AX{=PT1$xlAnLS=l7o9hkvZDcEBw4caZ-h0KY7`S>ZKU?ip|f z8Dyk@lEj2q>=j<=$9{wTA}GT+B;dhQ$bwIhg-E{p&OeT((XjQ~k|C*Yy~3koRQg4w zbHSC-1kZD&&Dk9bZ7*|)S?XM!yp99Qk>O{65R(jI?=7H@0fzUD)^3b4vTM#2z?Q+@ zHTIo_(fC#~4TfR8@y2AZUx;+FFEP>hGLcEC>IhG(glBd4y%ZmiGo6=M2RtcpJZ#r( z#w=v4?l4x0?6|PF$Jo(vQn(vwTP6b|YF}wt-)1b~T=&HTzdcG(7hMK<$>VXjppAd2x0ol2L{sj#GL_N}; KjW59*jrV^mvBwAi literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5801b293f572f53e59f9eb695987932d83979b99 GIT binary patch literal 483 zcmXv~!A=4(5N&sX0D?C)@dHfu0F81r9*{&&XpAQ=&AOeyX1m*^Ekuqc`~&`i`YHZ^ z*{dgSCWr@4wp*OT%zN#d$;^9ix0}d>`aOC6pt`Q9=bxz zTO#HIe)FAfzI3^Mi7oc5v66E1If!Zh&Id7 z3Gf`GBD7?Y-IcO(S?Xlnd?BrQWvUsVEL)AqtnVp%PpN+;m!KMB^NPc*P{5HyL`BQMY zi{PBZB&I3JXh^BSPU>WC=vLTGz041NN*wZn#NI~|`#`_D);|meL96!1C@oqpy@8Wc zQ2JG&6Ok)qy!}LJJQogxHpWCk+_A1!PUDcv5cP8cB&0D3o%aM>@a`iAeoS}poHI;d zxhe15@UdKRJz3Ymuh6rK_|oZ*d;wxzJJ7 z56&fi1DcXteSOz}GB;XWAA9RFc5&si8ZE4iy|o#0@9|f6 zw7fa?HY-LpXW%;aH!K3p25AG}0>;M1& literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/__pycache__/_test_clock_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25ba2409bce753e39709284a1eab934a766b4f5d GIT binary patch literal 658 zcmXw1y>1gh5T3n1o8TlMAuJG8MB^e^k+e~YfCL2!D1eZzSslKSee&JzWp{1aHSi2E zkAQd-Dnx@$N<~E%$%G;mv$xJlJ2T(T|IB{h+}r><=HJ8OJp=gdz|D!*!s>{GbI2iQ zB~&bB%*jC+RACyna#%)HoW=|Scn*2=3Gx`(x6u2i$s!qa{x~pT&DJTNP0`p_wJnr1 z^b)-+j3s{iL|LaSH0DF^>ghTTtR53S2ZWU6kOuDnLyRzfK(Fp%lCwkNi(n8o{kN3k zX{m;jQ?$Ck8NSYRR+%Qjd7a7pWYB54LddK_A({;#DwR)5C-;Onn`WigXg32L5otnW zb+au*CZ)1jTf7ioVMRK){>aCwLOzmn{tV5;s+zx07R%jZr6z?O@#AbbL7DRz${8<< z54>L3v62USPxiSfEbi81kd4rAN>kLx>$Y5OsSPp4vPNyVXwlGhCG@&2;SKldh3>do z9qH0F_lbOlU%mb^TE6*m>ql?rXS8z}1aVhy-x#_n^nJoTir6kjD8Cu)#@-}$QB(bX z1b00UIJYQ`Tc4j#n|R9wZ6n_y>AHL9Cwips5u~pL<`I$0kTG_Z06VyV{sj#FCK2l{ K (import_target, is_submodule) +_import_map = { + "AuthorizationCaptureParams": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetails": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleet": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFlight": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFlightSegment": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsFuel": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsLodging": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCaptureParamsPurchaseDetailsReceipt": ( + "stripe.params.test_helpers.issuing._authorization_capture_params", + False, + ), + "AuthorizationCreateParams": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsAmountDetails": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleet": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetCardholderPromptData": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdown": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownFuel": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownNonFuel": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFleetReportedBreakdownTax": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsFuel": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsMerchantData": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsNetworkData": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessment": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessmentCardTestingRisk": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationData": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationDataAuthenticationExemption": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationCreateParamsVerificationDataThreeDSecure": ( + "stripe.params.test_helpers.issuing._authorization_create_params", + False, + ), + "AuthorizationExpireParams": ( + "stripe.params.test_helpers.issuing._authorization_expire_params", + False, + ), + "AuthorizationFinalizeAmountParams": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleet": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetCardholderPromptData": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdown": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationFinalizeAmountParamsFuel": ( + "stripe.params.test_helpers.issuing._authorization_finalize_amount_params", + False, + ), + "AuthorizationIncrementParams": ( + "stripe.params.test_helpers.issuing._authorization_increment_params", + False, + ), + "AuthorizationRespondParams": ( + "stripe.params.test_helpers.issuing._authorization_respond_params", + False, + ), + "AuthorizationReverseParams": ( + "stripe.params.test_helpers.issuing._authorization_reverse_params", + False, + ), + "CardDeliverCardParams": ( + "stripe.params.test_helpers.issuing._card_deliver_card_params", + False, + ), + "CardFailCardParams": ( + "stripe.params.test_helpers.issuing._card_fail_card_params", + False, + ), + "CardReturnCardParams": ( + "stripe.params.test_helpers.issuing._card_return_card_params", + False, + ), + "CardShipCardParams": ( + "stripe.params.test_helpers.issuing._card_ship_card_params", + False, + ), + "CardSubmitCardParams": ( + "stripe.params.test_helpers.issuing._card_submit_card_params", + False, + ), + "PersonalizationDesignActivateParams": ( + "stripe.params.test_helpers.issuing._personalization_design_activate_params", + False, + ), + "PersonalizationDesignDeactivateParams": ( + "stripe.params.test_helpers.issuing._personalization_design_deactivate_params", + False, + ), + "PersonalizationDesignRejectParams": ( + "stripe.params.test_helpers.issuing._personalization_design_reject_params", + False, + ), + "PersonalizationDesignRejectParamsRejectionReasons": ( + "stripe.params.test_helpers.issuing._personalization_design_reject_params", + False, + ), + "TransactionCreateForceCaptureParams": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsMerchantData": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetails": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleet": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFlight": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsLodging": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateForceCaptureParamsPurchaseDetailsReceipt": ( + "stripe.params.test_helpers.issuing._transaction_create_force_capture_params", + False, + ), + "TransactionCreateUnlinkedRefundParams": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsMerchantData": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetails": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt": ( + "stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params", + False, + ), + "TransactionRefundParams": ( + "stripe.params.test_helpers.issuing._transaction_refund_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..290ec0c7d58ae0f4b23814a8a82590b96606370d GIT binary patch literal 10622 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_capture_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11178c919e0029e57aa164fed6e45761de5b7c6d GIT binary patch literal 5935 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 Kd@DgEr22mef12w6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d836e7742c73e4dfdd552a727964757fb88f8c5f GIT binary patch literal 16171 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 AJOBUy literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_expire_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e710a8c0fd820dafa85e6338f93fe2f20acea48f GIT binary patch literal 626 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 OTe$J*;Tf{q;^<$o;LKwH literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_authorization_respond_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ecf72e652ebe3ad88e9c3ee0abb83f6aa622bbab GIT binary patch literal 669 zcmYjPzi-qq6n;)}X|D8C3PNf--j<;?zr<7_QB{Hg9jL&P#Y)eQJFAJE+P><-3XIGx z8!O^ZVL~h@3j-6|Nk3XvcUv?B;FouAXMm6q4q5ODFvN(HJs0f)b}+`3Err6hlz>%25gcc|oRp-Y!N#%YyHK1h=$VNB*FGS;jzRw_OzJYHk$ zWRe%lljumPqFHAwmr~hr3Yw^t*Yn~WwF@V zSL#^E5#7&+$0#{HMR`gKaYU=y)hzGr-nmPSu((sXAMz0z>QqIAv|7|pEgH+lSX8JD z6~;`w7|Z`}nCZ4-)>3w>TCeybz46=hop}#G)^EOjHVcAIGK-S8v9xViJICPopwL^WVZ#maJG%)_w aW+5TuA_lVg6Yl?s6Ow$|x&ZfCQ2znDsM5fA8hJ_r3R=?`vzT$Q}K6i_-w1U*1@r&H`LK zao{t`QH~2#;tXStgCZ!yEG(le!YDw`Q67Fkc?8k7u+7UlO(%_idn3g*ddam(1ADD6 z%@G{eTtRNTZ<-47Lq0HrHmB8#0%$=DD8o6*g0~1lh@i9SqP#$y<9&B`y?#B8AR?1qKewx^XQo%}~)UHxm%DgT- z?ooPNv!eZ?BFCY8mp0T!*&CEHA*7iTX%`)GVZNdZ7l5ulk&!Hc48@cjf*u=Lkr&cH zv3nrpn2RAfV1qG;oJ>GWNWtHcs&RdbM|%$*63q?lRxW@IK@-QtDHx2NAJ!_bn^O3_pG;l9&OKppp(pEv~lk= zJiEPf9_`FMYJHj7Ph%UKrgDVs7S>yX!qkA!Zri$Dk^h5Q#+x3^3*2((D%o#0`&4Z> f6FbrV{bnJ?_%cTL?oagiPn_W7bn_CqYo7WKm0!4w literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_deliver_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08864e674b5d1e0f2f7f1c047159460629b1cdc9 GIT binary patch literal 619 zcmXw1J8u**5FYO()^Z-*S+{F%Y~Sg&hk{>_ z<0l|~3KgP3+fY!^MLI%}3j3T`^7#Agna?w0f7{;P0yoURJK`Pz`0dHXNYBCQu>;4z zfs+bqQV`;CR7G`M#C1|61R{6_JpKSY!Q^Wk;)=9Q^X!i&Iq8y@!q`0OE)A7^jYl(~ zk$0PK+XneSjO-}H1bZ$3tGkXL142PK6wy1t7!yoyyInsqdSl#U~R!XUC zX@!!8u`jT4XK?n3PE?I_EEjZuW@=SKpDT;i-l0-cA;R~+87D#a4Z(6~KuQ}?z4H*9(Cov)9Gy`($7d-l#C8W1}aSCo(hyDluUZchU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_fail_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49168a840de435bab8714cdea3eaaf76abb6663e GIT binary patch literal 613 zcmXw1J8u**5FYO~mttGv8;=eD-+!ZGC+W+%W&{%KHT1wMDPqm`~gIQ$=5jK6=|F1*&k1G(j_mXv3b;88PxU_9!+I~ zqFa5_Y7~cZXon#u*b4zz+;jW{5DFroh~5Imm|(i;R{g|GkbURdD37}vPk1Aqa#?!+ zk~h3EU4}Ewl^EnJU5_!vD`c!&W2~yhwDh>o*wK`iVW&x)R^!j^Vq=?bgE6jDZMl`T zGK_tJh1-MkPjp;YNJnZ$57A6)t?BdHV!3@#*AuBm^ned1s02Mmbxce7j_THqYxQX7 z!9!}K#ck~Z_y`Sk$4HG-FRx228q3C5YHSRZ#!S5!8@hVfdskRMA$CW%&5FOSH-4I1 z&U}QQ{oC_o{`&Lk_x{$8Wa~7F(q6N1892zZF0-w6x}nbNfiRp|RK}MX9>I4$=wJ0{ sDR9l9^WJ`VyT{Ee>PPcVy6~$l2BFG%tP!&Na9%`W;WRa?uxrA}^*d2BzlO~z6b64;` z==vv!e~KsZB6I1%lefZJ4?US|+CW~uFM03FdoTIEzP<)-n12t7M+D%vCs(6)2^P;B zH~|5Ilu(h35RaoWs^ToJXhsP{Z~!9y2!bO07Kga3*Y?unk0&YV=>}eqtiXu3OtEjl0_~b1e?h zHd=c0Cf9jox&&t`mtvT%bbZccULoh*8s}9ln$qI|=SNLmh7(Pln)bJMv9Y?_;5?VI zwz(~8X*mB13wH(=pV_3Ykd5Vx?W396TCrEP#d2$}uBU|@v%P#YMJd=Z%41d*ADC+G zq?S*%cOElSSlm+1As?e*?wUd&Q_FOjMPvB{ONH97!kEU3@sX>C>t$&H2k&jw>J^`` zH-4Hs&U}JjgS&G&fBR+i$6)g(-8_q;USDrqIS$jLOKhv0a;WrXARK2FrSXM^Hu%>M w`qw>L3fyq$qQ4uu_d?%t)O{K-{x!~GLdbankbqD|P;8M{0Ynv1gh)`J6C%)TV=d>=oprmmv-U-|J@6ND z`~<{Lp+Yoh8;VrvA|0Vfg?&yedFDNP=Go)%kM;F6aKrq2C>|4lQ%|l(dIc8G9XJ6F zoK#Sgf)J0RDyrimu9G4m5Wy?p@h9L3Cg0j)nIA zZP}Ey=`x(@Qu0B*()AdVWsQt=YmC*3Pb-i6j2%tOD(p0g(`x+LU2JUAZ7^0!scdP5 zl7_KwuyA{D`Gt;EjdUbu^Z?DoDotN2i`DkNQWGIZbiW)V@|afQBh{@PEBSP1 z_X#z^;RR#|Vv7FRx228q3C5X>1G?#!S5!8@hU!afJmGVs~`gtoZACOKq@--+{>5OR?LdGH6G{ml~6n{Qr#bIa8KLl2=J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_card_submit_card_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d08f8b30aca752496cc42e755f5e4fa40fc86ca GIT binary patch literal 617 zcmXw1J#Q2-5FPJVF5yBzAil~732l*BKokinq6m?oKqo|?*~W6tqdV(%y_>Z!y6r*Y zALRH6h@V1*XpkEUD!NEVC{kgc6H6YyXU{y(jQwqWeGS~u{~pLk1mL$PS0lXyi(Lm! zL4Y77RHPup2q>cWfH5YR-gmoxVkXF*Te~Qa?d=!56^GNK zN*a&e@RnEFW;koO5`%oj_83#VLdNVGV^uAtrN@27j;Fi~CvD=?T7SEZwQ21JV_d1) za3gD_8T$eYcLo=q=(w(sj?|1Epq`kzp|5I#<<@>(Pox^reLkF^67&Ss2`%LjZ8|fq z)zj_APpFm#w;JcbN2sa0Mm9*BWxCX$Hf)S#gRQ1g>!}xGLst*e%hCc4-rG&ruK0w# z@l)S%<|F*<-<>D(!_TYV`v$X1c~Hhe~e-!f<9#X{zzv5kdV8UJ&)Zv$x=#bzzs6Zi2szJy-1`MPf3t-2=FiT-Ez8jVki??} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_activate_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff7b8c7f28d6769efbbe44edad6c04134887c6af GIT binary patch literal 647 zcmYjPyKWRQ6uq8THeo}8ka(4WW{Sk(p;QqPQ6wnPD&o;hW102UuC+7vWb9q-q=s+U z@CP71g$mK2X(*`ZA}ygvg*~&8u;lA=Y~OPq_SenL4RFK!y(jkxz%Ng(M!W*ceFqjG zK#&{?k`dx@kOxJWg+-J_1Oj*tB76@b!stub`DJk(r^#ha#gN7P7*yQRCpM`)-EBTJ-Zn=Z9zEE{89y3(jLX6nV5Xa5z-L|ZB2 zt5R9#yjRxMn$O=GKg}&?KERLu?X&3Y^~d#Z{hja8&Up~Ty=v>~;vh|$#MY$?)D?cC zBMj#jm2rJFU03|y==869)Cz1nblE%Tn)$T4>8SfsVEkL1hlG%e1jwDA@Z?Vtk>02D J0^HKN{sYT)ulxW2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_deactivate_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e45210d098f49fb9482eba2018ed656779d7a1e6 GIT binary patch literal 651 zcmYjPJ8u**5FYOplv9q=pr4VNQJ$dld$BO@3TEK{>J{gzP<)-n7{Ys9s&5}$#TS3V6p4K z2?!7*hk|5;cpT(G5oTc#Wf6e@o`DEIfQT^q5_WM}T*qnh+mnY4?!@YnKGzoWtplwmQjO>VA5KsS zIzu(1xqL^<+K#n)yuI^?8fkH>bO-nd4RvK?iL`95OD!79#+a8*9F@jQeKO|Re^Qxf zwK}&H%ewIGvaVLV0&n~@x1IS2Kl*o0qtn-CtKa&Y-=od*Ac%X_#`54GO`62kr7P7* zzu6InbBoHj-kPp2{(p4&uY1%cxZ%)cZ@+8j)9RL^?puNJ?{yv$LM{>@cYnf@KS@M- LpI%&mb8YB99Z|8g literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_personalization_design_reject_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e27913b71b4c8950b0695d7fee11bcb7706ebe84 GIT binary patch literal 1262 zcmah|&5j&35Vog(rf1WW>@bjoB|_SWL*|e)fosAcibMp_YPFEdTr8*C%$V)AJGLim zbB0Gi32y-61$YNeQ7$WAIB?=NtJ!eKi7Iy%C2+t}e|D8Wmp@lk|27_P5g7Kb9r++3 z_hhWDn8kK z2=)^q$edPWK6pSxB;fvc!Hb_rD|!p&5$J_=gzGMzC4P5b7^@Yp<+t2Pt?mjd7wSNK zElRh~4R5SZ#Zk*u@Su|`*`8rL~v zk5;_ycMRs-;NyH`o$(hK<4S24G+M@fCL7ozFMlYOx)H@f9TlMb(CN0gr=6&;-_iO| zszq^!mxn@C#bco!7qxs?w4GaO_3@3H9~Bnze7yw%UkF>kHL?{&8y;OaVI5nFx`p%< z(%KaUV`#mWELMeV!P_uhtUr3A?M#O15r**D4*~q; zp%;d?OIfm7mm$M`EER8Cqgx}n6FyhMeWT4`sGHwbP|t_JFddT(B+pOK^A%88xiUtm zvh#^{OJRH-CMJ}VuJdn0$VOwI@tQRd8N%0oRB}_n-3vV%ns-2zxrlHH0o9uwg!d4x z0QemEMhe56IC9WXCdaKY!g+*$ddFbu%r?RVA>?<8D|~wZblC#{DA0wS<19bUr|ZFR za_uA@|ROL@9ld5_0HOS4}`F9=LQ)Zc=vN*DkD literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_force_capture_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e34165bc9c9f731cd8d2248200b504ca43edd4d GIT binary patch literal 14901 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_create_unlinked_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd06a630596421d3c53d5ebeecdbdedb91f6f5e3 GIT binary patch literal 14937 zcmb_jOK>B{c?K5%2|hq_Nst8J)b46mw7tt%O5&&NvZPqCY|*l`F1t2KjR!LgV9deH zXl6hzRH@|P_~eUk-Xs@Qm|4RHzl_ss{dG4&pw)EY8BMk0(Fk5bD-7=)EZOg zL0u?N=b5?)>QaHaz|=aZ%LVEpQ&&J;El`)3dK1*O0=3T6bx<1x>M~O|K;0}*SD3m5 zYO_FHW$HGlI|b@ZrtX5eSD>yjbsyA&0(E_GczpEV#H!;NS^1Wiq{n4B_bo3KvF*#n z(=dHoyxaF;;mY}kgGjiqc~0tRvGAAXbLpcPw?8Y1(xVx-^ytQSOQI|)?#!1#oiB+h zu5ajT$YC2)P|6u)PSG^IV(6~vIh#@Dbe|eg2J^=Y^7)6c9VE7sdSUQtEbLT#H}JjS zOt^20c0X|6vSYiK$XUA=_JdSb96NSp&FROn2%LeO6^|o3aOGz|(J*g{*y-9q`kI~E zvfk5omP@yP_=!e%t4|{&;x&=lo}b9oNE0kqQBIF*vSwL<-4m827c8q6x_zInmn`eu zzU}LlvWL~ISe6|GVQSOr6Z9!3X&jT`#3Y$tls>{|>9>D((hYm!q!Tg)%zYN)MSSGBKzyj38_O*4V%iv3S$o>Xj7LsrFVrr2dMt0_jYbBa;v zoKn>)ol}gG=ajjLKCJdIsJzeoM4tsVjm6`oxQp8;*H1)G1SzS>Swf=( z-nk8H*?{eN@Ad^vKZaef)hDuU$VoSh5;%08PNe#7g>6{H!RExLh!rSg2r@Yz2!Lr2a{K9 z*~3D74`^*gVdz^J)<(ait6sg-3hhj8cp2RR(Nky%ztR@~*+edqQk!KQ(M@7OSG~~n z9Md%r7fECjgvsSrctLZqNCyVcq*gz%Se@k_E=jM!ECEnUp+?J!JfY4Toyn5z=745&v6r!@;;M;-f^uX5i6*4&{j2*MM&jrNG!1Cd^Y zF|5k4mZqbcAOZ~7>yeySGOG49&5V$Q?ev1Bqm=ZPX;H=*!8nX@nyzva>P>bhtkIVf z9f+e`fklu>hMCA+qQgTGH={m~gFK+G5fKj|{!1dD88jMNqRkj{PI@9G5vrMir+uI+ zV?wsxI=f8P>3$0#9B#?W>j(&a*+DK2SAXX?bm~wrz4d@N!7<<6C;}7(}3|l_u z!o4^t%t4%@B+FAxL{?&vI{V*rM}{#kwSkf@@qksX!cJVR@T1EO6Aq;z? z7u&F9RwG39<_ZcfjIW&%X>PQA(&0=?^&D#;E06nWbERS)Qnr8sVB&5XB9bB1L!S#$ zu{)$r@9ALEM=LIS&?>@G6K(7J?#jQB~T$W6484^hM6Mr+zC zbY^5)@=nJ?0)p7awF1b-hcOW=lCY2DJ=4&mj*plFx=v{ZwO_z}aFA=PrO7?m3p?=u zCP&_dGne&F=(iynVmF3h-zi@zC<2@Tr5rAJfi6HH#4A7wfC-}ISac|u<=F9S(;h+# zGz%-Bpcg5Fx;0tA_z*7?h6pbLyc8i4`FK(YyeE63JpMm=X1#PwTj-kE&2A?Sojh_T zy@PqNe@f&bki=zX<)UV`Q)Wn*w~}?xT-@wJ(b6t6zoqk^2zk*V=n9xUxK;*lB|tM$ z106IT_Q~HNUa%b5?1rrt(uGioo7}F+lZweFO|csip6F@Jcf%wiUyeWonS?-kganVi zX!-yG1PDNXeg?5R(n6!MW`uP(ls=VxNJGpd4-h|x;0|F0MnS7Uf}R z8*!LC%t>$*BECTAPpgYyXPm2VL06IVP%LN%h=X)tERiq$P+SOKSw3bAT}~;@B!qL2 z&#@dlA2?NvDI2INxQSzrW@GcdZM@XBy38|^eD+Pm+=bOxb_&Y~C?P!Z;p`A6@k^1> za2}_kB+YR2=uzI=>LUlC^<^QcVQ8ag2dLwb1r!qdJ*XOxn9@rwy^Jcwl2SzNtoM6% z5(bJP$mA#(CnlhkaxJ-n=7c5*R|h;rzCuA4@?Gvlp&>4P8=>pVra=?KsGB0tL~g}h zjqc=0#^|h8&EuI7HG6_q4^WFn^EY`PK19i?6%JT-D$}8fPjL{t-2DP|6+AWJ$`GUH z^09zMSau?hdx)5jW!r&(36Lhk8q}iA8{j>-M6@&3l?pk!2qX_j+X{KVu8D1rc3_vP zrT^S$lRnx$YbvKGxPE@LKjSq!6{QnUDl#)UHZw%u zRGB67&E7o5l#!5UY}WZKs1)M)a$Ogmc)Es@TU1NJ8zO8Qkne=GP=1Cy84Ym%aNAy| z%ib(^eq5-a8DmK5L?a^jRBl_|QA88r89?H-Qc;7WJGsZb3e_ZTH)Av>T20I6PN+57brd^b{C+Zh=^0l_75Y7jW1CO)Dbbu(+qnA zavb`i-{aTicUThDoN3pFs&ce0;fLg5mwoyXGoD0Ls16`jn!3)iq z1p@PjMCAcWT!{FYp8%y;)!bV!7^I>oe9e=XV;D;!?*Y_Qt(YpUfM4hZ4F#8rJA~IN zc|ul-nZptdi0`eA+ncj zpx~w|U?W`I&d9kCfK)x~$>jY_$aEFU8N1Mh>~Y;!3jOsz4DZQ zq&Y{4xyHcEf3PMQ#mhodDyhiN>cuQe2-2|S0N1D`dz9Lb;mXuD3v@2e!KsEo`9_m_kYLm^Ip;CpV;D2I;d|Kg z=1mKUomvz}sKSeChI0F(Xh7{iBEYYzC+$o=kjs|ZxNw}mbpthQm1zQKS@Sv0YS0cb z-6GtCF+&bC`5g`fps27l01qmFd7)z=_2BQ3O>sZkgrf99U|&R|f>y?xDN5rBti*E> z>9z&BAEi`?MUeyXI+f}(XcUjTUdsb+ucRScOtzG5bi{rc?Zv2_#$JRp5GewJW;6w? zU1MR=ftDb_3&{dW8S-_t1xnF&Lv6J{=^~4dQqV-?zM`VK0e=kuNQ=30jodez_f6_fYKp0A?S9a=U;qNa1-LpzWe|A4VNra1I?pQEx&ISnN$1{d~~L(8{# zRVHg(@0x06BDQV;DNuDqOJR%}zRi-G=V4YI1VagbbiJ*?Iihhqc#Nudav5nP>yf@+ zxj@P*Na2BmRLbAD@RaL;NTa+$xpo0Pq{O)pzunQfNuF6SSMunb^?z6QA_b=GePq9B z=K_G2$r#f(he}xkgmTzg#ll1M9`!3|NVf9k_>r!v3rVcDy!;7Em6!BLBc^ZMAv=1-mB!p>!7#~jL7-hQ$^ ztnXh|_6=omqR-8}C$A1yk1i`mrq9~`lXr$UpS!F)XDCZsKTU>GzQKi$O;u%<(Ho2`EP|T7whMIeeq1Ayp8A>TPt!7w#66osIy|f8AaHq*#N6Q zotK(w10)uf%{fleBtO9&Y+!Nos`e^Q5-k-@65*^;y?Ir84dnVLnR>qh^5Q6&4Czlm zUY;Z`{ks0fu=dT##?{>?FAY}?FDr)y#il7vSL`34<>M4vRF!Ifyn3T2E4c2N9m0#h zNr#Nyd={az>b?rdqvE58--=QFQ^)HzDH&E&%6~xSb9OkPxWk2ff?Lj^=@^X3nPr{Z zvfGerZ|Dm56`1K6_S^!w2ET#`7mm7RXqfI&yH8uU$^*(qHlsAR zbh(5*=62Qxcd7or>J7wG7{5piRPHiTph&><^W~?%lhpeGlriKdNhVP;TXF z=@c!5;}tqEM<~9aKz#eoRqY|#wnv{@KfqJJUj6#8_BtBZ3ylhBX$I5vu|1)WqQcr# z%?^v^XWPt?Q5+@Jee#oahLVAC)`w5l4QAo*zDHU)k3C6*&*TSd*a$}shLC<4oBHIb zaSF|)mN`T_+-2FMegRi;Pk%ApYqGCo0W`3naj!}5<(L1G1n}o90D!}o>4GwOoN?pm z{qnGJ=dyCg__j%}Io3z9oZdN|<*!Vz{QvLU26M-?_%Dc^r@udQ`8o_Yev1bE&hKx~ z(=ecMWzCq`?*K~^2L8}~EXzo*PLHckH_0(;B(5>*hPX&xH_AXR;rlS2F_*Bib5;8@ zkSUxh99&)4P}aLpAS=1k@YCgfFd_HMMEG3x;Kp$|J|p%wkn&)&P@RxQj^KF6|4)B0 z9d>fnA6qC5#pC@KE@Rqx{CG>++VY$n`H zA0JXoAmVbb@`uUUFO(w4!0_bMOcs>F0Q$}dJV%*IlRm$ z@h0(PNhO+8^S4vEoEKzO@}drb)1eUgwP!PZic;SZ9m-^7Em0RJ>cOQ_ZG|)Q!Rhh* zR4Zl3&Qcy(!KqN6kIRqi5iKRA5By%Flyq1sSI9M-;ac&q`4}EUO2}ef8?F{}7P9N5 ztEF$lwAs&+eHZ*}Xe&qJ1R9kZSObb3>MFy)VGi0Slywv7ICNeCHBJ;w zsMd=-FpAdaP!_}b2HQ~VrP=?;8)LRKh%#SdCm%tCki>|Ab~J)^_=4smf2hbOR|g1R`cc{U&@O`euy z&~>pXZc^OM91xOT9m}h?~+g% zFx9Cmg!h!I|9j<7#UC`v>2X8O!YWYBW}hRel1rs+I?WgGk*JteldE&Hc$4~t6xFV{ z3c;BjXBQk*a>NyL#KS=Z`z*#kR%R9x&wg}8zpZ^){jTgQ@jqZz_*Y8)6(1jzXJ%%8 zGh3Qz{zvKMVd>@T*}a+C&%be9!q@dz-mK2lemQ?#qVMY;EZoA~7p_bAx_)D3XQuWm zG~w&|i<>jGt4jU4jPL6g8~O&{*AHg(4Zg3}Ms5~#3%;*+niy>Rx`eOmKgNhW7>|4p huN+*L@OAxgriNa}*Cl*iZ&qfGes%nt626$%{|led+ZzA? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/__pycache__/_transaction_refund_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae14bacedffb2a43f3f871f1921ffd5f4ea32ffe GIT binary patch literal 678 zcmYLHy>1jS5Vm)Ho4s%+5`Gk*K}s4{D6#kvRYVa*f&!gT5}Iu+a~|%j+x2eN-srZ6 zh8N&?1jM6IMQM;53M#sjLMT$jzP$)bGyZ1$&5UR4AN~F+a!dbvARh+^{r1N7>MX(e z3kSX+fdtM_j#G?14zeH*(=aC~!6-nlkO)5_L4bS@+qksTbduvka*c*ew z9KdlcD-gDO)RZ9h<u>ES`WjrrxWd=!XW5yKEfib(vSYC)a^SH;@ zam};#q#`bVF-1vV7Y4HJ zy`q>%HKKcbH~}T-38)jA$@jEu%(zg`cAh+?S{m3c9f6NPQ&&rtK+8o7)POc@3|R@4 zrc&$LCu8P+!))1G%ik%RYQ^8%D=+$yQ=ib!-o}i~4!?F!dz)uua~=epcpjlU4`=%H z_SPBMT6n7U>(D_G*~m1dtJaQSy)_t24Jhp=(9XwyownkdM~eiv9J-8m+p)f^?m81Y c(f;A)A;$P3LipY<^!#rW<9H@7klPlaSDwkWz5oCK literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_capture_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_capture_params.py new file mode 100644 index 00000000..a1836506 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_capture_params.py @@ -0,0 +1,272 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class AuthorizationCaptureParams(TypedDict): + capture_amount: NotRequired[int] + """ + The amount to capture from the authorization. If not provided, the full amount of the authorization will be captured. This amount is in the authorization currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + close_authorization: NotRequired[bool] + """ + Whether to close the authorization after capture. Defaults to true. Set to false to enable multi-capture flows. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + purchase_details: NotRequired["AuthorizationCaptureParamsPurchaseDetails"] + """ + Additional purchase information that is optionally provided by the merchant. + """ + + +class AuthorizationCaptureParamsPurchaseDetails(TypedDict): + fleet: NotRequired["AuthorizationCaptureParamsPurchaseDetailsFleet"] + """ + Fleet-specific information for transactions using Fleet cards. + """ + flight: NotRequired["AuthorizationCaptureParamsPurchaseDetailsFlight"] + """ + Information about the flight that was purchased with this transaction. + """ + fuel: NotRequired["AuthorizationCaptureParamsPurchaseDetailsFuel"] + """ + Information about fuel that was purchased with this transaction. + """ + lodging: NotRequired["AuthorizationCaptureParamsPurchaseDetailsLodging"] + """ + Information about lodging that was purchased with this transaction. + """ + receipt: NotRequired[ + List["AuthorizationCaptureParamsPurchaseDetailsReceipt"] + ] + """ + The line items in the purchase. + """ + reference: NotRequired[str] + """ + A merchant-specific order number. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleet(TypedDict): + cardholder_prompt_data: NotRequired[ + "AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData" + ] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: NotRequired[ + Literal[ + "fuel_and_non_fuel_purchase", "fuel_purchase", "non_fuel_purchase" + ] + ] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: NotRequired[ + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown" + ] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: NotRequired[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleetCardholderPromptData( + TypedDict, +): + driver_id: NotRequired[str] + """ + Driver ID. + """ + odometer: NotRequired[int] + """ + Odometer reading. + """ + unspecified_id: NotRequired[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: NotRequired[str] + """ + User ID. + """ + vehicle_number: NotRequired[str] + """ + Vehicle number. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdown( + TypedDict, +): + fuel: NotRequired[ + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel" + ] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: NotRequired[ + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel" + ] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: NotRequired[ + "AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax" + ] + """ + Information about tax included in this transaction. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFleetReportedBreakdownTax( + TypedDict, +): + local_amount_decimal: NotRequired[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: NotRequired[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFlight(TypedDict): + departure_at: NotRequired[int] + """ + The time that the flight departed. + """ + passenger_name: NotRequired[str] + """ + The name of the passenger. + """ + refundable: NotRequired[bool] + """ + Whether the ticket is refundable. + """ + segments: NotRequired[ + List["AuthorizationCaptureParamsPurchaseDetailsFlightSegment"] + ] + """ + The legs of the trip. + """ + travel_agency: NotRequired[str] + """ + The travel agency that issued the ticket. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFlightSegment(TypedDict): + arrival_airport_code: NotRequired[str] + """ + The three-letter IATA airport code of the flight's destination. + """ + carrier: NotRequired[str] + """ + The airline carrier code. + """ + departure_airport_code: NotRequired[str] + """ + The three-letter IATA airport code that the flight departed from. + """ + flight_number: NotRequired[str] + """ + The flight number. + """ + service_class: NotRequired[str] + """ + The flight's service class. + """ + stopover_allowed: NotRequired[bool] + """ + Whether a stopover is allowed on this flight. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsFuel(TypedDict): + industry_product_code: NotRequired[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: NotRequired[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: NotRequired[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: NotRequired[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: NotRequired[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsLodging(TypedDict): + check_in_at: NotRequired[int] + """ + The time of checking into the lodging. + """ + nights: NotRequired[int] + """ + The number of nights stayed at the lodging. + """ + + +class AuthorizationCaptureParamsPurchaseDetailsReceipt(TypedDict): + description: NotRequired[str] + quantity: NotRequired[str] + total: NotRequired[int] + unit_cost: NotRequired[int] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_create_params.py new file mode 100644 index 00000000..42e6321a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_create_params.py @@ -0,0 +1,673 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class AuthorizationCreateParams(TypedDict): + amount: NotRequired[int] + """ + The total amount to attempt to authorize. This amount is in the provided currency, or defaults to the card's currency, and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + amount_details: NotRequired["AuthorizationCreateParamsAmountDetails"] + """ + Detailed breakdown of amount components. These amounts are denominated in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + authorization_method: NotRequired[ + Literal["chip", "contactless", "keyed_in", "online", "swipe"] + ] + """ + How the card details were provided. Defaults to online. + """ + card: str + """ + Card associated with this authorization. + """ + currency: NotRequired[str] + """ + The currency of the authorization. If not provided, defaults to the currency of the card. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + fleet: NotRequired["AuthorizationCreateParamsFleet"] + """ + Fleet-specific information for authorizations using Fleet cards. + """ + fraud_disputability_likelihood: NotRequired[ + Literal["neutral", "unknown", "very_likely", "very_unlikely"] + ] + """ + Probability that this transaction can be disputed in the event of fraud. Assessed by comparing the characteristics of the authorization to card network rules. + """ + fuel: NotRequired["AuthorizationCreateParamsFuel"] + """ + Information about fuel that was purchased with this transaction. + """ + is_amount_controllable: NotRequired[bool] + """ + If set `true`, you may provide [amount](https://stripe.com/docs/api/issuing/authorizations/approve#approve_issuing_authorization-amount) to control how much to hold for the authorization. + """ + merchant_amount: NotRequired[int] + """ + The total amount to attempt to authorize. This amount is in the provided merchant currency, and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + merchant_currency: NotRequired[str] + """ + The currency of the authorization. If not provided, defaults to the currency of the card. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + merchant_data: NotRequired["AuthorizationCreateParamsMerchantData"] + """ + Details about the seller (grocery store, e-commerce website, etc.) where the card authorization happened. + """ + network_data: NotRequired["AuthorizationCreateParamsNetworkData"] + """ + Details about the authorization, such as identifiers, set by the card network. + """ + risk_assessment: NotRequired["AuthorizationCreateParamsRiskAssessment"] + """ + Stripe's assessment of the fraud risk for this authorization. + """ + verification_data: NotRequired["AuthorizationCreateParamsVerificationData"] + """ + Verifications that Stripe performed on information that the cardholder provided to the merchant. + """ + wallet: NotRequired[Literal["apple_pay", "google_pay", "samsung_pay"]] + """ + The digital wallet used for this transaction. One of `apple_pay`, `google_pay`, or `samsung_pay`. Will populate as `null` when no digital wallet was utilized. + """ + + +class AuthorizationCreateParamsAmountDetails(TypedDict): + atm_fee: NotRequired[int] + """ + The ATM withdrawal fee. + """ + cashback_amount: NotRequired[int] + """ + The amount of cash requested by the cardholder. + """ + + +class AuthorizationCreateParamsFleet(TypedDict): + cardholder_prompt_data: NotRequired[ + "AuthorizationCreateParamsFleetCardholderPromptData" + ] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: NotRequired[ + Literal[ + "fuel_and_non_fuel_purchase", "fuel_purchase", "non_fuel_purchase" + ] + ] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: NotRequired[ + "AuthorizationCreateParamsFleetReportedBreakdown" + ] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: NotRequired[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + + +class AuthorizationCreateParamsFleetCardholderPromptData(TypedDict): + driver_id: NotRequired[str] + """ + Driver ID. + """ + odometer: NotRequired[int] + """ + Odometer reading. + """ + unspecified_id: NotRequired[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: NotRequired[str] + """ + User ID. + """ + vehicle_number: NotRequired[str] + """ + Vehicle number. + """ + + +class AuthorizationCreateParamsFleetReportedBreakdown(TypedDict): + fuel: NotRequired["AuthorizationCreateParamsFleetReportedBreakdownFuel"] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: NotRequired[ + "AuthorizationCreateParamsFleetReportedBreakdownNonFuel" + ] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: NotRequired["AuthorizationCreateParamsFleetReportedBreakdownTax"] + """ + Information about tax included in this transaction. + """ + + +class AuthorizationCreateParamsFleetReportedBreakdownFuel(TypedDict): + gross_amount_decimal: NotRequired[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + +class AuthorizationCreateParamsFleetReportedBreakdownNonFuel(TypedDict): + gross_amount_decimal: NotRequired[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + +class AuthorizationCreateParamsFleetReportedBreakdownTax(TypedDict): + local_amount_decimal: NotRequired[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: NotRequired[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + +class AuthorizationCreateParamsFuel(TypedDict): + industry_product_code: NotRequired[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: NotRequired[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: NotRequired[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: NotRequired[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: NotRequired[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + +class AuthorizationCreateParamsMerchantData(TypedDict): + category: NotRequired[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + """ + A categorization of the seller's type of business. See our [merchant categories guide](https://stripe.com/docs/issuing/merchant-categories) for a list of possible values. + """ + city: NotRequired[str] + """ + City where the seller is located + """ + country: NotRequired[str] + """ + Country where the seller is located + """ + name: NotRequired[str] + """ + Name of the seller + """ + network_id: NotRequired[str] + """ + Identifier assigned to the seller by the card network. Different card networks may assign different network_id fields to the same merchant. + """ + postal_code: NotRequired[str] + """ + Postal code where the seller is located + """ + state: NotRequired[str] + """ + State where the seller is located + """ + terminal_id: NotRequired[str] + """ + An ID assigned by the seller to the location of the sale. + """ + url: NotRequired[str] + """ + URL provided by the merchant on a 3DS request + """ + + +class AuthorizationCreateParamsNetworkData(TypedDict): + acquiring_institution_id: NotRequired[str] + """ + Identifier assigned to the acquirer by the card network. + """ + + +class AuthorizationCreateParamsRiskAssessment(TypedDict): + card_testing_risk: NotRequired[ + "AuthorizationCreateParamsRiskAssessmentCardTestingRisk" + ] + """ + Stripe's assessment of this authorization's likelihood of being card testing activity. + """ + merchant_dispute_risk: NotRequired[ + "AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk" + ] + """ + The dispute risk of the merchant (the seller on a purchase) on an authorization based on all Stripe Issuing activity. + """ + + +class AuthorizationCreateParamsRiskAssessmentCardTestingRisk(TypedDict): + invalid_account_number_decline_rate_past_hour: NotRequired[int] + """ + The % of declines due to a card number not existing in the past hour, taking place at the same merchant. Higher rates correspond to a greater probability of card testing activity, meaning bad actors may be attempting different card number combinations to guess a correct one. Takes on values between 0 and 100. + """ + invalid_credentials_decline_rate_past_hour: NotRequired[int] + """ + The % of declines due to incorrect verification data (like CVV or expiry) in the past hour, taking place at the same merchant. Higher rates correspond to a greater probability of bad actors attempting to utilize valid card credentials at merchants with verification requirements. Takes on values between 0 and 100. + """ + risk_level: Literal[ + "elevated", "highest", "low", "normal", "not_assessed", "unknown" + ] + """ + The likelihood that this authorization is associated with card testing activity. This is assessed by evaluating decline activity over the last hour. + """ + + +class AuthorizationCreateParamsRiskAssessmentMerchantDisputeRisk(TypedDict): + dispute_rate: NotRequired[int] + """ + The dispute rate observed across all Stripe Issuing authorizations for this merchant. For example, a value of 50 means 50% of authorizations from this merchant on Stripe Issuing have resulted in a dispute. Higher values mean a higher likelihood the authorization is disputed. Takes on values between 0 and 100. + """ + risk_level: Literal[ + "elevated", "highest", "low", "normal", "not_assessed", "unknown" + ] + """ + The likelihood that authorizations from this merchant will result in a dispute based on their history on Stripe Issuing. + """ + + +class AuthorizationCreateParamsVerificationData(TypedDict): + address_line1_check: NotRequired[ + Literal["match", "mismatch", "not_provided"] + ] + """ + Whether the cardholder provided an address first line and if it matched the cardholder's `billing.address.line1`. + """ + address_postal_code_check: NotRequired[ + Literal["match", "mismatch", "not_provided"] + ] + """ + Whether the cardholder provided a postal code and if it matched the cardholder's `billing.address.postal_code`. + """ + authentication_exemption: NotRequired[ + "AuthorizationCreateParamsVerificationDataAuthenticationExemption" + ] + """ + The exemption applied to this authorization. + """ + cvc_check: NotRequired[Literal["match", "mismatch", "not_provided"]] + """ + Whether the cardholder provided a CVC and if it matched Stripe's record. + """ + expiry_check: NotRequired[Literal["match", "mismatch", "not_provided"]] + """ + Whether the cardholder provided an expiry date and if it matched Stripe's record. + """ + three_d_secure: NotRequired[ + "AuthorizationCreateParamsVerificationDataThreeDSecure" + ] + """ + 3D Secure details. + """ + + +class AuthorizationCreateParamsVerificationDataAuthenticationExemption( + TypedDict, +): + claimed_by: Literal["acquirer", "issuer"] + """ + The entity that requested the exemption, either the acquiring merchant or the Issuing user. + """ + type: Literal[ + "low_value_transaction", "transaction_risk_analysis", "unknown" + ] + """ + The specific exemption claimed for this authorization. + """ + + +class AuthorizationCreateParamsVerificationDataThreeDSecure(TypedDict): + result: Literal[ + "attempt_acknowledged", "authenticated", "failed", "required" + ] + """ + The outcome of the 3D Secure authentication request. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_expire_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_expire_params.py new file mode 100644 index 00000000..cd6f2a85 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_expire_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AuthorizationExpireParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_finalize_amount_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_finalize_amount_params.py new file mode 100644 index 00000000..233ee6b2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_finalize_amount_params.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class AuthorizationFinalizeAmountParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + final_amount: int + """ + The final authorization amount that will be captured by the merchant. This amount is in the authorization currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + fleet: NotRequired["AuthorizationFinalizeAmountParamsFleet"] + """ + Fleet-specific information for authorizations using Fleet cards. + """ + fuel: NotRequired["AuthorizationFinalizeAmountParamsFuel"] + """ + Information about fuel that was purchased with this transaction. + """ + + +class AuthorizationFinalizeAmountParamsFleet(TypedDict): + cardholder_prompt_data: NotRequired[ + "AuthorizationFinalizeAmountParamsFleetCardholderPromptData" + ] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: NotRequired[ + Literal[ + "fuel_and_non_fuel_purchase", "fuel_purchase", "non_fuel_purchase" + ] + ] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: NotRequired[ + "AuthorizationFinalizeAmountParamsFleetReportedBreakdown" + ] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: NotRequired[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + + +class AuthorizationFinalizeAmountParamsFleetCardholderPromptData(TypedDict): + driver_id: NotRequired[str] + """ + Driver ID. + """ + odometer: NotRequired[int] + """ + Odometer reading. + """ + unspecified_id: NotRequired[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: NotRequired[str] + """ + User ID. + """ + vehicle_number: NotRequired[str] + """ + Vehicle number. + """ + + +class AuthorizationFinalizeAmountParamsFleetReportedBreakdown(TypedDict): + fuel: NotRequired[ + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel" + ] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: NotRequired[ + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel" + ] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: NotRequired[ + "AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax" + ] + """ + Information about tax included in this transaction. + """ + + +class AuthorizationFinalizeAmountParamsFleetReportedBreakdownFuel(TypedDict): + gross_amount_decimal: NotRequired[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + +class AuthorizationFinalizeAmountParamsFleetReportedBreakdownNonFuel( + TypedDict +): + gross_amount_decimal: NotRequired[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + +class AuthorizationFinalizeAmountParamsFleetReportedBreakdownTax(TypedDict): + local_amount_decimal: NotRequired[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: NotRequired[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + +class AuthorizationFinalizeAmountParamsFuel(TypedDict): + industry_product_code: NotRequired[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: NotRequired[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: NotRequired[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: NotRequired[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: NotRequired[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_increment_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_increment_params.py new file mode 100644 index 00000000..6190a139 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_increment_params.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AuthorizationIncrementParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + increment_amount: int + """ + The amount to increment the authorization by. This amount is in the authorization currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + is_amount_controllable: NotRequired[bool] + """ + If set `true`, you may provide [amount](https://stripe.com/docs/api/issuing/authorizations/approve#approve_issuing_authorization-amount) to control how much to hold for the authorization. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_respond_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_respond_params.py new file mode 100644 index 00000000..e3a9b0b7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_respond_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AuthorizationRespondParams(TypedDict): + confirmed: bool + """ + Whether to simulate the user confirming that the transaction was legitimate (true) or telling Stripe that it was fraudulent (false). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_reverse_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_reverse_params.py new file mode 100644 index 00000000..34241359 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_authorization_reverse_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class AuthorizationReverseParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + reverse_amount: NotRequired[int] + """ + The amount to reverse from the authorization. If not provided, the full amount of the authorization will be reversed. This amount is in the authorization currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_deliver_card_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_deliver_card_params.py new file mode 100644 index 00000000..7d3c7cee --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_deliver_card_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CardDeliverCardParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_fail_card_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_fail_card_params.py new file mode 100644 index 00000000..b93b5e4f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_fail_card_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CardFailCardParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_return_card_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_return_card_params.py new file mode 100644 index 00000000..795890f5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_return_card_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CardReturnCardParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_ship_card_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_ship_card_params.py new file mode 100644 index 00000000..f4fa20be --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_ship_card_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CardShipCardParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_submit_card_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_submit_card_params.py new file mode 100644 index 00000000..4497eaa9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_card_submit_card_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class CardSubmitCardParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_activate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_activate_params.py new file mode 100644 index 00000000..7ec37762 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_activate_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class PersonalizationDesignActivateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_deactivate_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_deactivate_params.py new file mode 100644 index 00000000..93367722 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_deactivate_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class PersonalizationDesignDeactivateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_reject_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_reject_params.py new file mode 100644 index 00000000..36e4cad3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_personalization_design_reject_params.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class PersonalizationDesignRejectParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + rejection_reasons: "PersonalizationDesignRejectParamsRejectionReasons" + """ + The reason(s) the personalization design was rejected. + """ + + +class PersonalizationDesignRejectParamsRejectionReasons(TypedDict): + card_logo: NotRequired[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_binary_image", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + """ + The reason(s) the card logo was rejected. + """ + carrier_text: NotRequired[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + """ + The reason(s) the carrier text was rejected. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_force_capture_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_force_capture_params.py new file mode 100644 index 00000000..e2818f72 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_force_capture_params.py @@ -0,0 +1,628 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransactionCreateForceCaptureParams(TypedDict): + amount: int + """ + The total amount to attempt to capture. This amount is in the provided currency, or defaults to the cards currency, and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + card: str + """ + Card associated with this transaction. + """ + currency: NotRequired[str] + """ + The currency of the capture. If not provided, defaults to the currency of the card. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + merchant_data: NotRequired[ + "TransactionCreateForceCaptureParamsMerchantData" + ] + """ + Details about the seller (grocery store, e-commerce website, etc.) where the card authorization happened. + """ + purchase_details: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetails" + ] + """ + Additional purchase information that is optionally provided by the merchant. + """ + + +class TransactionCreateForceCaptureParamsMerchantData(TypedDict): + category: NotRequired[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + """ + A categorization of the seller's type of business. See our [merchant categories guide](https://stripe.com/docs/issuing/merchant-categories) for a list of possible values. + """ + city: NotRequired[str] + """ + City where the seller is located + """ + country: NotRequired[str] + """ + Country where the seller is located + """ + name: NotRequired[str] + """ + Name of the seller + """ + network_id: NotRequired[str] + """ + Identifier assigned to the seller by the card network. Different card networks may assign different network_id fields to the same merchant. + """ + postal_code: NotRequired[str] + """ + Postal code where the seller is located + """ + state: NotRequired[str] + """ + State where the seller is located + """ + terminal_id: NotRequired[str] + """ + An ID assigned by the seller to the location of the sale. + """ + url: NotRequired[str] + """ + URL provided by the merchant on a 3DS request + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetails(TypedDict): + fleet: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleet" + ] + """ + Fleet-specific information for transactions using Fleet cards. + """ + flight: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFlight" + ] + """ + Information about the flight that was purchased with this transaction. + """ + fuel: NotRequired["TransactionCreateForceCaptureParamsPurchaseDetailsFuel"] + """ + Information about fuel that was purchased with this transaction. + """ + lodging: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsLodging" + ] + """ + Information about lodging that was purchased with this transaction. + """ + receipt: NotRequired[ + List["TransactionCreateForceCaptureParamsPurchaseDetailsReceipt"] + ] + """ + The line items in the purchase. + """ + reference: NotRequired[str] + """ + A merchant-specific order number. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleet(TypedDict): + cardholder_prompt_data: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData" + ] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: NotRequired[ + Literal[ + "fuel_and_non_fuel_purchase", "fuel_purchase", "non_fuel_purchase" + ] + ] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown" + ] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: NotRequired[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleetCardholderPromptData( + TypedDict, +): + driver_id: NotRequired[str] + """ + Driver ID. + """ + odometer: NotRequired[int] + """ + Odometer reading. + """ + unspecified_id: NotRequired[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: NotRequired[str] + """ + User ID. + """ + vehicle_number: NotRequired[str] + """ + Vehicle number. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdown( + TypedDict, +): + fuel: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel" + ] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel" + ] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: NotRequired[ + "TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax" + ] + """ + Information about tax included in this transaction. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownNonFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFleetReportedBreakdownTax( + TypedDict, +): + local_amount_decimal: NotRequired[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: NotRequired[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFlight(TypedDict): + departure_at: NotRequired[int] + """ + The time that the flight departed. + """ + passenger_name: NotRequired[str] + """ + The name of the passenger. + """ + refundable: NotRequired[bool] + """ + Whether the ticket is refundable. + """ + segments: NotRequired[ + List["TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment"] + ] + """ + The legs of the trip. + """ + travel_agency: NotRequired[str] + """ + The travel agency that issued the ticket. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFlightSegment( + TypedDict, +): + arrival_airport_code: NotRequired[str] + """ + The three-letter IATA airport code of the flight's destination. + """ + carrier: NotRequired[str] + """ + The airline carrier code. + """ + departure_airport_code: NotRequired[str] + """ + The three-letter IATA airport code that the flight departed from. + """ + flight_number: NotRequired[str] + """ + The flight number. + """ + service_class: NotRequired[str] + """ + The flight's service class. + """ + stopover_allowed: NotRequired[bool] + """ + Whether a stopover is allowed on this flight. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsFuel(TypedDict): + industry_product_code: NotRequired[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: NotRequired[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: NotRequired[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: NotRequired[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: NotRequired[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsLodging(TypedDict): + check_in_at: NotRequired[int] + """ + The time of checking into the lodging. + """ + nights: NotRequired[int] + """ + The number of nights stayed at the lodging. + """ + + +class TransactionCreateForceCaptureParamsPurchaseDetailsReceipt(TypedDict): + description: NotRequired[str] + quantity: NotRequired[str] + total: NotRequired[int] + unit_cost: NotRequired[int] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_unlinked_refund_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_unlinked_refund_params.py new file mode 100644 index 00000000..1fa13fae --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_create_unlinked_refund_params.py @@ -0,0 +1,632 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransactionCreateUnlinkedRefundParams(TypedDict): + amount: int + """ + The total amount to attempt to refund. This amount is in the provided currency, or defaults to the cards currency, and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + card: str + """ + Card associated with this unlinked refund transaction. + """ + currency: NotRequired[str] + """ + The currency of the unlinked refund. If not provided, defaults to the currency of the card. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + merchant_data: NotRequired[ + "TransactionCreateUnlinkedRefundParamsMerchantData" + ] + """ + Details about the seller (grocery store, e-commerce website, etc.) where the card authorization happened. + """ + purchase_details: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetails" + ] + """ + Additional purchase information that is optionally provided by the merchant. + """ + + +class TransactionCreateUnlinkedRefundParamsMerchantData(TypedDict): + category: NotRequired[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + """ + A categorization of the seller's type of business. See our [merchant categories guide](https://stripe.com/docs/issuing/merchant-categories) for a list of possible values. + """ + city: NotRequired[str] + """ + City where the seller is located + """ + country: NotRequired[str] + """ + Country where the seller is located + """ + name: NotRequired[str] + """ + Name of the seller + """ + network_id: NotRequired[str] + """ + Identifier assigned to the seller by the card network. Different card networks may assign different network_id fields to the same merchant. + """ + postal_code: NotRequired[str] + """ + Postal code where the seller is located + """ + state: NotRequired[str] + """ + State where the seller is located + """ + terminal_id: NotRequired[str] + """ + An ID assigned by the seller to the location of the sale. + """ + url: NotRequired[str] + """ + URL provided by the merchant on a 3DS request + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetails(TypedDict): + fleet: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet" + ] + """ + Fleet-specific information for transactions using Fleet cards. + """ + flight: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight" + ] + """ + Information about the flight that was purchased with this transaction. + """ + fuel: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel" + ] + """ + Information about fuel that was purchased with this transaction. + """ + lodging: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging" + ] + """ + Information about lodging that was purchased with this transaction. + """ + receipt: NotRequired[ + List["TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt"] + ] + """ + The line items in the purchase. + """ + reference: NotRequired[str] + """ + A merchant-specific order number. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleet(TypedDict): + cardholder_prompt_data: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData" + ] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: NotRequired[ + Literal[ + "fuel_and_non_fuel_purchase", "fuel_purchase", "non_fuel_purchase" + ] + ] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown" + ] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: NotRequired[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetCardholderPromptData( + TypedDict, +): + driver_id: NotRequired[str] + """ + Driver ID. + """ + odometer: NotRequired[int] + """ + Odometer reading. + """ + unspecified_id: NotRequired[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: NotRequired[str] + """ + User ID. + """ + vehicle_number: NotRequired[str] + """ + Vehicle number. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdown( + TypedDict, +): + fuel: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel" + ] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel" + ] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: NotRequired[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax" + ] + """ + Information about tax included in this transaction. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownNonFuel( + TypedDict, +): + gross_amount_decimal: NotRequired[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFleetReportedBreakdownTax( + TypedDict, +): + local_amount_decimal: NotRequired[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: NotRequired[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlight(TypedDict): + departure_at: NotRequired[int] + """ + The time that the flight departed. + """ + passenger_name: NotRequired[str] + """ + The name of the passenger. + """ + refundable: NotRequired[bool] + """ + Whether the ticket is refundable. + """ + segments: NotRequired[ + List[ + "TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment" + ] + ] + """ + The legs of the trip. + """ + travel_agency: NotRequired[str] + """ + The travel agency that issued the ticket. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFlightSegment( + TypedDict, +): + arrival_airport_code: NotRequired[str] + """ + The three-letter IATA airport code of the flight's destination. + """ + carrier: NotRequired[str] + """ + The airline carrier code. + """ + departure_airport_code: NotRequired[str] + """ + The three-letter IATA airport code that the flight departed from. + """ + flight_number: NotRequired[str] + """ + The flight number. + """ + service_class: NotRequired[str] + """ + The flight's service class. + """ + stopover_allowed: NotRequired[bool] + """ + Whether a stopover is allowed on this flight. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsFuel(TypedDict): + industry_product_code: NotRequired[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: NotRequired[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: NotRequired[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: NotRequired[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: NotRequired[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsLodging(TypedDict): + check_in_at: NotRequired[int] + """ + The time of checking into the lodging. + """ + nights: NotRequired[int] + """ + The number of nights stayed at the lodging. + """ + + +class TransactionCreateUnlinkedRefundParamsPurchaseDetailsReceipt(TypedDict): + description: NotRequired[str] + quantity: NotRequired[str] + total: NotRequired[int] + unit_cost: NotRequired[int] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_refund_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_refund_params.py new file mode 100644 index 00000000..d488f1d6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/issuing/_transaction_refund_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class TransactionRefundParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + refund_amount: NotRequired[int] + """ + The total amount to attempt to refund. This amount is in the provided currency, or defaults to the cards currency, and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__init__.py new file mode 100644 index 00000000..cc208d07 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__init__.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.test_helpers.terminal._reader_present_payment_method_params import ( + ReaderPresentPaymentMethodParams as ReaderPresentPaymentMethodParams, + ReaderPresentPaymentMethodParamsCard as ReaderPresentPaymentMethodParamsCard, + ReaderPresentPaymentMethodParamsCardPresent as ReaderPresentPaymentMethodParamsCardPresent, + ReaderPresentPaymentMethodParamsInteracPresent as ReaderPresentPaymentMethodParamsInteracPresent, + ) + from stripe.params.test_helpers.terminal._reader_succeed_input_collection_params import ( + ReaderSucceedInputCollectionParams as ReaderSucceedInputCollectionParams, + ) + from stripe.params.test_helpers.terminal._reader_timeout_input_collection_params import ( + ReaderTimeoutInputCollectionParams as ReaderTimeoutInputCollectionParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ReaderPresentPaymentMethodParams": ( + "stripe.params.test_helpers.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsCard": ( + "stripe.params.test_helpers.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsCardPresent": ( + "stripe.params.test_helpers.terminal._reader_present_payment_method_params", + False, + ), + "ReaderPresentPaymentMethodParamsInteracPresent": ( + "stripe.params.test_helpers.terminal._reader_present_payment_method_params", + False, + ), + "ReaderSucceedInputCollectionParams": ( + "stripe.params.test_helpers.terminal._reader_succeed_input_collection_params", + False, + ), + "ReaderTimeoutInputCollectionParams": ( + "stripe.params.test_helpers.terminal._reader_timeout_input_collection_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e82e0bf40dcef32b7d1110bb4b0edab2864cfe7 GIT binary patch literal 1658 zcmb_bL2ukd6rQoyUT@Z$gpxoTs1#*$F;UhkL~sG5HY79(L=kDF)rrCGV_P$` zZMND-QPo3_z4g*c9I5hCxKQ;Hta3nb;kIRIK{@fpvuS%M3PpXEzj@Do^X9!b-}|A_ z7(pQ7*;MS;5c*Xa$5I_CgA|mzC_)iV5W@k+N;eXNnSqHBHTh|<&7{Jtz+!e_vuaRf zPT-V&m88Z-f{{|Uk~(t(7j%30R3j&<-Lr!RHAN*FxrKt!ZoOOg+~3vV9xfU&%QG$s z%c4#~)rU)0*O$oR#ihm7m9;OuN-_Nn4I|3eITbXO>tUC{@->y)S+pMVkcndUB#*_A zN5$NK@fw~|v`%tfNhRfBd*}~&&*&W+opzhjXeG@%axqI1+Lm#a>O^07U5XjaI`Y+C z#*Gyrd7RT$Ue?!=R7kQ-lbmt^24`^^CN09tzK~ouhUB_4gq5uUQ}t%qGj6QDPBfwO zC$TDkw4Yb-f8$AA>A%Obxdlw%wgSaS?kE7RBCe?0#sJ4s0mX!Oun%w-)sTc$OAnm^ z_}SLK-E;-%5A=FR0j&S?*uVBu(ZoWZ6!fZuu9&_6|)W z{~ArN`ANL#=Uo_&^rP0f4}B3!I-i3>xJ8Apso-mJ_%9O+3{5Pbz-7gfkXGJ>^2o3p zLii*kbPir|8DJmvje4#5xY_z%K5Q;Lbf<4G-}&nC;;5QgoirXQV}`O%%}n_wLY7b4%B^3eUdhaOCP zX0CZ-MNM}Y>e3BuVvhf1Se89N08d>5zy|2Mrf2sZ kb6&xMf=?98X?QYsX3W^HKUqM|x(pl5U@z8wWOijN zXirY>IW_97$A(_|fAnIZOPEU!J@w`yrH7pQ-mEsLA=HH|>~G%u=FQvpDg9QjR|!1X z-z(w3Cgcy?l#ewP#@~YQlrX}yE{U|ZrlG8N^~h)&k=ZsQt8HmSC$|VQ9usDA>ldTA z+qM;J0c+2&6~$J7b!J#cu`aOH8P@I3d9^>$oTo{1H_UR+kd@sq=OXCJxmJ?jVZAQOHA)}#f^KmluG+e4k3RM@=%i~YCd{D*54KppjkGTua85x5gzP(j@5%GV`-2<9#@fhSJJWT`IkU-J^R&4+tZt3W zt&&&?` zCc*6Zh(BRF!0yr}?O?zPz wZRvNiH6&XTdqs18>Q4wPlP?>Z^Ya%I0?Xv8sX4!T69UWR9h4uuKv}u{572d%RsaA1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/__pycache__/_reader_succeed_input_collection_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17fa51b878bd0a071b38a5c8f96173dd406ee75b GIT binary patch literal 759 zcmYjP&ubJh6i(*XPHT%)g|;FJy~q@{LA^;UwiZ+`C>B;qoufX|J z2aXX(91B$89Al3I5maFwR#6^RaUNq7pqGe;9}tfq{t~v@JQ>AV^2?J9+i0iMCJSw6 zr!=6Lus3#Vvj>NRQUSL!Z$}OA?XoaMD{kY}P3U~x@nZxi#~kIsI|L!PO3Nwx`peO+NYuOCUi&_XMOj*k}OtDJa1cnWhJPT~dgs_pU zCDezw7`5*%*R-UR3JEA<#BxJxQJ_=BP$~fuicl%bEtZKtC06ci*LJGh4!@z{ zAAtBNOo#>D!ob8 z5yus(afxxjNtM)TnbujEVU(cfh^Oxn&mjAf#=NrAbc+0UAO&u-SHij?X>SaaJA#v` zFu>c@<3aMTf6w~oNz&<>jq8nrB5!loXkT`8 zz8MLHnFDEq@pvuaZ$$l@0WAe?d34#`kGJ{M-1gLeDP+T2ou?S%iyYy5Khfhqd4{{6 Lwl0t#mZ|>$oBFTT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_present_payment_method_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_present_payment_method_params.py new file mode 100644 index 00000000..74561c82 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_present_payment_method_params.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderPresentPaymentMethodParams(TypedDict): + amount_tip: NotRequired[int] + """ + Simulated on-reader tip amount. + """ + card: NotRequired["ReaderPresentPaymentMethodParamsCard"] + """ + Simulated data for the card payment method. + """ + card_present: NotRequired["ReaderPresentPaymentMethodParamsCardPresent"] + """ + Simulated data for the card_present payment method. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + interac_present: NotRequired[ + "ReaderPresentPaymentMethodParamsInteracPresent" + ] + """ + Simulated data for the interac_present payment method. + """ + type: NotRequired[Literal["card", "card_present", "interac_present"]] + """ + Simulated payment type. + """ + + +class ReaderPresentPaymentMethodParamsCard(TypedDict): + cvc: NotRequired[str] + """ + Card security code. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Two- or four-digit number representing the card's expiration year. + """ + number: str + """ + The card number, as a string without any separators. + """ + + +class ReaderPresentPaymentMethodParamsCardPresent(TypedDict): + number: NotRequired[str] + """ + The card number, as a string without any separators. + """ + + +class ReaderPresentPaymentMethodParamsInteracPresent(TypedDict): + number: NotRequired[str] + """ + The Interac card number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_succeed_input_collection_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_succeed_input_collection_params.py new file mode 100644 index 00000000..8d3fd43d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_succeed_input_collection_params.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReaderSucceedInputCollectionParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + skip_non_required_inputs: NotRequired[Literal["all", "none"]] + """ + This parameter defines the skip behavior for input collection. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_timeout_input_collection_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_timeout_input_collection_params.py new file mode 100644 index 00000000..8fbd7604 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/terminal/_reader_timeout_input_collection_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ReaderTimeoutInputCollectionParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__init__.py new file mode 100644 index 00000000..30b270ea --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__init__.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.test_helpers.treasury._inbound_transfer_fail_params import ( + InboundTransferFailParams as InboundTransferFailParams, + InboundTransferFailParamsFailureDetails as InboundTransferFailParamsFailureDetails, + ) + from stripe.params.test_helpers.treasury._inbound_transfer_return_inbound_transfer_params import ( + InboundTransferReturnInboundTransferParams as InboundTransferReturnInboundTransferParams, + ) + from stripe.params.test_helpers.treasury._inbound_transfer_succeed_params import ( + InboundTransferSucceedParams as InboundTransferSucceedParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_fail_params import ( + OutboundPaymentFailParams as OutboundPaymentFailParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_post_params import ( + OutboundPaymentPostParams as OutboundPaymentPostParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_return_outbound_payment_params import ( + OutboundPaymentReturnOutboundPaymentParams as OutboundPaymentReturnOutboundPaymentParams, + OutboundPaymentReturnOutboundPaymentParamsReturnedDetails as OutboundPaymentReturnOutboundPaymentParamsReturnedDetails, + ) + from stripe.params.test_helpers.treasury._outbound_payment_update_params import ( + OutboundPaymentUpdateParams as OutboundPaymentUpdateParams, + OutboundPaymentUpdateParamsTrackingDetails as OutboundPaymentUpdateParamsTrackingDetails, + OutboundPaymentUpdateParamsTrackingDetailsAch as OutboundPaymentUpdateParamsTrackingDetailsAch, + OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire as OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_fail_params import ( + OutboundTransferFailParams as OutboundTransferFailParams, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_post_params import ( + OutboundTransferPostParams as OutboundTransferPostParams, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_return_outbound_transfer_params import ( + OutboundTransferReturnOutboundTransferParams as OutboundTransferReturnOutboundTransferParams, + OutboundTransferReturnOutboundTransferParamsReturnedDetails as OutboundTransferReturnOutboundTransferParamsReturnedDetails, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_update_params import ( + OutboundTransferUpdateParams as OutboundTransferUpdateParams, + OutboundTransferUpdateParamsTrackingDetails as OutboundTransferUpdateParamsTrackingDetails, + OutboundTransferUpdateParamsTrackingDetailsAch as OutboundTransferUpdateParamsTrackingDetailsAch, + OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire as OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire, + ) + from stripe.params.test_helpers.treasury._received_credit_create_params import ( + ReceivedCreditCreateParams as ReceivedCreditCreateParams, + ReceivedCreditCreateParamsInitiatingPaymentMethodDetails as ReceivedCreditCreateParamsInitiatingPaymentMethodDetails, + ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount as ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount, + ) + from stripe.params.test_helpers.treasury._received_debit_create_params import ( + ReceivedDebitCreateParams as ReceivedDebitCreateParams, + ReceivedDebitCreateParamsInitiatingPaymentMethodDetails as ReceivedDebitCreateParamsInitiatingPaymentMethodDetails, + ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount as ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "InboundTransferFailParams": ( + "stripe.params.test_helpers.treasury._inbound_transfer_fail_params", + False, + ), + "InboundTransferFailParamsFailureDetails": ( + "stripe.params.test_helpers.treasury._inbound_transfer_fail_params", + False, + ), + "InboundTransferReturnInboundTransferParams": ( + "stripe.params.test_helpers.treasury._inbound_transfer_return_inbound_transfer_params", + False, + ), + "InboundTransferSucceedParams": ( + "stripe.params.test_helpers.treasury._inbound_transfer_succeed_params", + False, + ), + "OutboundPaymentFailParams": ( + "stripe.params.test_helpers.treasury._outbound_payment_fail_params", + False, + ), + "OutboundPaymentPostParams": ( + "stripe.params.test_helpers.treasury._outbound_payment_post_params", + False, + ), + "OutboundPaymentReturnOutboundPaymentParams": ( + "stripe.params.test_helpers.treasury._outbound_payment_return_outbound_payment_params", + False, + ), + "OutboundPaymentReturnOutboundPaymentParamsReturnedDetails": ( + "stripe.params.test_helpers.treasury._outbound_payment_return_outbound_payment_params", + False, + ), + "OutboundPaymentUpdateParams": ( + "stripe.params.test_helpers.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetails": ( + "stripe.params.test_helpers.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetailsAch": ( + "stripe.params.test_helpers.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire": ( + "stripe.params.test_helpers.treasury._outbound_payment_update_params", + False, + ), + "OutboundTransferFailParams": ( + "stripe.params.test_helpers.treasury._outbound_transfer_fail_params", + False, + ), + "OutboundTransferPostParams": ( + "stripe.params.test_helpers.treasury._outbound_transfer_post_params", + False, + ), + "OutboundTransferReturnOutboundTransferParams": ( + "stripe.params.test_helpers.treasury._outbound_transfer_return_outbound_transfer_params", + False, + ), + "OutboundTransferReturnOutboundTransferParamsReturnedDetails": ( + "stripe.params.test_helpers.treasury._outbound_transfer_return_outbound_transfer_params", + False, + ), + "OutboundTransferUpdateParams": ( + "stripe.params.test_helpers.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetails": ( + "stripe.params.test_helpers.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetailsAch": ( + "stripe.params.test_helpers.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire": ( + "stripe.params.test_helpers.treasury._outbound_transfer_update_params", + False, + ), + "ReceivedCreditCreateParams": ( + "stripe.params.test_helpers.treasury._received_credit_create_params", + False, + ), + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetails": ( + "stripe.params.test_helpers.treasury._received_credit_create_params", + False, + ), + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount": ( + "stripe.params.test_helpers.treasury._received_credit_create_params", + False, + ), + "ReceivedDebitCreateParams": ( + "stripe.params.test_helpers.treasury._received_debit_create_params", + False, + ), + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetails": ( + "stripe.params.test_helpers.treasury._received_debit_create_params", + False, + ), + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount": ( + "stripe.params.test_helpers.treasury._received_debit_create_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07c42c8fd009b3689d294b9ea6114003b0f66fc1 GIT binary patch literal 4888 zcmcIm&2JM&6rc5aH%{z)e>(|r>;&S3*gz;y=m+^MG$oBl(u!>*%kd7$HaoU8y9P`{ zg-{P1k$T|LO1)Gn;!kN0MO@MqJyh+bH$zHOaq62{dx_T}bwWFqpWk~k^P4wspMP(E zsIRX>FpR%~+K(ZGeq%;y_>0Qc7Xm`}k&0A7M?_Erf$1LILqtUs5Ekhg*rM(wk|GgV zk@>t=uOU9g$8|}sC3Q+2*Ja&L0!o1EHF`a1P#U=I(;G>X(nOk-W^UK&Eu>XxC2dL@ zX;<1whtk3Qb$Tc1Qo6YA*Skqj335H4_mEztm-H!p+^*LTk$$D0gp?2&PzFd?33Gpg z9wCFuAQ@7I$YJF$_ciKA$gna@qDqvEC?f*WklLg+e_a~V+w!9S!P26;ps1{vjYL>&cvlz)z@>@&tcv9D{t6O>Ub z8eTR2B~p&&kL8a=kN?3QMpUrsHImIxGeI(HPRGo#bY)>CF?C^PYVP9vdr^iD4aim_xIc->2-RqiI%%xHo ztImA)hdGl6wUEpcoHk#^1e@KH3mL;K?(|qAuAO!qE@$z2Z@S!jthJ}GTDq{;>Tzve z&Z^s(axh?;I0IVR`4=T zVeJ}Lrzlo66XeU9IP>bci)qc&k|q>IvEDCXb1hRUHf!dfJC}{gWO{ufm4g4b85OPW z63{eWaYc9fl~ex`-1GrAmc>RT##Wx26NX8(ERJP4|HMov-ozT#vzQt&6Ow7Xa)PU#4rjXr%abi*b)C*a!s+&xnyM%c}n zvHb3=Iai&=3aBg)sS_3J<^WY)1}mV78LaS^G8h1KT5lgQRaF`*pmLmWop>7AfvJ$QNMsp_Rr?yVe$8la2?$cub}HfRG5!SmOoK?JxgXOJJqULg;y%mq?T_E=VvI* zP^)1AY;7fHVs1yhmN%Uw*pkg8h1FI-GZIE_#eT!HWc$}(w++E~k&myzTR?m@eIq`N zjde4VjbF%^SRb3rWY~L1d=lPAa9WLD!|7{rU0aD~^U!_L;)Z78u`Db|u3{r@ z7j4|GwfIhUj+fXuo&ef}$Cij?^KiXH@j8hFjY2>V;A<>{xQz-Pe{JMRB=)`eD01>q zAar;3-Umjg{no>q7;isTb*x#@$M)_!ys25${i!RU%bN~m9jwYLJN&Rq$Dypk4~nyc7b$C8 zRc5Us9yceJ;p+FKF~vv1!{QO7e4`2ZUTEwq=;u_DPbwg+M$HlxAHM z+X1g6KSdz6>q=UoK@%E1o8Eq4$*^1ynN_GmQVi^4a>38-79<@9dt5HGayy8m2-rh% zp@-XHB!%q#5pIt-_9(YcIQz%BeHKaQ1=uht$c1y zgXbiyIVBesZI1$;cfm6OIG@trJD&(%wU{A`XV^tS)$l8Aim PTiyU9P6Cadg{S-vypnHQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_fail_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a638d97a2ae3414d03a167cbf54e634d87131d6 GIT binary patch literal 1252 zcmZ`&y>A>v6rcUPy~~~LeAtO2Az~{Cws2MiiOQykEC@+tMG%^6MsquJzL9rlHZ!xv zml|5ygpLx#pF)F`#+rtLitZvi6sdT#duN3xUTNOE_j~Wn``kYUgC2rU|9g{fg$Vua zgvA%lnbXI>JVz8!uRx_Y^gPG=gP5CPk}JuFJ}m zV*_oJUB;LQAq_EH3XSn^=oED5%}?1xmMq&BN7*jZ2S!%eeQ8*+bx+CzF7~r~BtKw+ zW`|51W(6N*)znO+`0UQ7cQXy0-KxNV>@%G~7+$fgY6{H^(*{piQ8A@6qZrY(nr4`{ zoxx__8tlr$t0f^lzWDa%?s0$fWw<%>{V18mXl>)qjR(i8 z4_}548%SMQ_`ZLnw?X~xNU3)|(un%a0E0ACZh6yzT_Sl7b2Kab%C0Q% zyoQ`aKD9j|7e+RcW&%cGE-BkfW7T&(A2_n)NV9eD!y~og$Yn>Gv0QbWYimOsq&I-T zaC@sK$@0wa4_03VOWoe9VC7PLidLd{wh41?y`AG;n%LM(D_F{QuP?U(W=Dnz?bcc~ zk((T17phsNCg}eYd6R6nf6W)_Be3(}=ud#m0?+ea$H=?!7uq>SJ7;m?CBJmf5L{<# O*SzFc{u;s6B=sNur(|9L literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fb7ed7e20544034d2338fa7635b83d165074980 GIT binary patch literal 664 zcmZWnJ#Q2-5FPJVF5yBzNI)nfnng;i0HO*MQ6xY@Clo@njkP%scdOgAH?}vr?cp~h zl$3~u|3QUl&^8oQbdiowq{2R58W?HD?~OgMawH{P^rFxv4Z14>Y4-7` zDHQT<`Jkc5Q<+?Cw1mhq4j; zK;=TeLA8&jQQ{xx%UtD^?h>5Vx!{9zsp~N&@(LO2Rv4=!Z%T*zj2$(3>339Q?@+F$ zF4RVKYmDVWNRyjF3eDI@nAttJ_&~?9LOK#tx`%pVWKEw*gXQL~l#@b?=x#oopy2cv z#W5|5Lt3|HEX9MZ?fX<01~+SaARnQo_L`zbTF=X+2DM>hENfJn8il!TR7+Xm8)jzF zF;nxF|M&YeTXn0JTqn*r)iCC^mhDMpQsy_+CK)`J>FSJ2suxH-2MR%ejNh|8<9W8ft*@_vGxP6mK?%TbPcE&u1oI~j zoPYp9N~lOqh{sVGRdF6yNuCgh;5mr+J%|L8uW`uBdu=aE|9Fy-E_qcLn?>D~p|WrA zs3|mxZuOw8QS22XI|?}=E(^f?zT+o=kP`uU^cFD21bcVftanTW*>PhVWpQ`!r94!P z6bG71^A7cXGa4a^*Ie_;bSchiF2yig>H3UGULj-M8e^3bP3iG~v7?5UVMQmds`g!U zv9Y?_V2n$tEVqS{hOsX&cWZF*kxo>FbS!6d56#r7n!ZpL%dK6driC2ST|Szk6!aM7 zF)fQjTDNwhTU)@gFO|7rF6VDm?^c@{;zzTUXpILy*6wQcSC4U(@1 z!f<9$8m~CqhyMCCa{vGU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_fail_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd7898addea6e561c805d7dfbf28e95047ac9dab GIT binary patch literal 628 zcmXw1J#Q2-5FPLCZSKN_fRKPtMl>stSbT^oqKG1(Ku5$!vyJ7Phr3mFZO8UTw>`A9 z2^}rsr%)jpv<(FnU8ExvsjzP^BhC0d+cTbL``g;uDtNR1?iBY3!0$jVt+xd8#~z%3 z06|KqNKQz=Q5jWn9#=`85QyLzi1W`O`}ol6=OH{IMq{Zn$Zc&J%G6RH)15%}&MWjJ zNZi(qSqW{25ZvDM;RE~}-a1WAUw;~WA8!6gHqWA{*Ej2z8%J5%rmoSx*-r2Ejxd}# zls3riE+c$|uKv}476q<(bkX1G?(m7Z;i>;WV8g?l#e|Ua6v*vg@aS)vkpAbvIrw3b F`XBXPr|tj% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_post_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e7c060aa21ed6acdea6d05c281b001d8f34a94d GIT binary patch literal 628 zcmXw1J#Q2-5FPLCZSKN_fRKPtMl>stSbT^oqKG0vfsPX&%{G>E9^I|7Ydf|#y6vH* zP3UM5KZOd>plv9q=pr4VNQHfS8EMAv*`Dz{+ut@e*1?MRGy{j>@Qt^SDa#gg^w(LB#JtB$#}SyS%*D^s@9%AQ@?smxXm%)Lt7Y_ZpAu z!k}meZySx`pqRKxm(#^n0a)Dk{1gy!A|Q|60mhhMZ_CdH$5fC#KQ>Vow_C4jcc^M9 z#=NOey0Nlu%nh$>o8nw^DMr~^+hlIZ=?mqs+}T&^sE|{-&nHJH1wBD|Ld)Wi z>c-8Ke7yVc5w(TG9ql*pDO&1}DKt{OY?nH;j?J*tXe@OGxvfn@nOf;%x)aE>SLjKQ zxT_np7TOLWxV`Pe2lzR>bC#UF`84=G-2RblpGQ%zZ#J(sjXKkZ{Ex|-##CYM+86p-{m3* z33=rf^DjDej4V4dxZhTO1rcr%}?;4DHL!!yx-Qq?-seq`z?EWx<5Jo z7T1pnkcr31#Q%jr0NDQ$qHaLUy_+}>5$FCX5;&v{)5w1LV`Fw?BltFJD-hV#G)kNS zx0zyjkz9_ zC}6r#ZARrOd$jK9qy7Ef$NO!r*R4w2O`I9v(3@y}Cx^@HPr@fZ|1o^Ayzx)CG4uT> znZ;y%<1o2%6!`1$G4Z2#79*@anb&_<4c9PyRt?-+s3GEh_x3>=DyRE&WY4iYM+F#~ zmr|qN7VBS?d?=Z1P=Sd2QP^d*ryx0ZgZvr`)7B$VMOza|_aLCI-p!azpa;X&L zW>G(tB?r|#xV>12eO4BH5fn|e1In(>@w~xek+*gvrOD6=Ulgn#f@@)8;;M85|e~H#oH2?qr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c19bb83d8e7f7ddefa50bb391a682ec8508695b7 GIT binary patch literal 1641 zcma)6y>A>v6rb6h-P`-HW1Ga6*xf<1A>=)Qi1iYn=H))aH(;$pZlJqHpODbg z+nC69f>5hnp_mX_S$5ou9Qm?56Kv{+K z!QXQg3lx+k4l?tq_|Xc#M6=s87aYIITn+M77Ko8SrJ6XmLb?0imsLu5tzV@sKG1W z0P!t))@nZ?PrmrBK5cboq;u#vUU2B6_J?>zx^^cvmS(5dvkS*3>&dXKBwOjcp(8ep>DpLQ29!&c4CzDYMNJg6qJH<) zUGB-=!oindFWTU?ANryNt5`8&)d<@FYepkRtQ%oTdd+Ai4J!;JcR>Kl_47|J^rrQj zGjelDadYG8#+%c|l^MCRgxZ~FLHAGBY5PaW@%%#{icxtsPEV)*BAlG0A4s($G;u;# zT!3R8m{#XBVg1m1Ihk{CLD*zo%EMS%^VdO$GkWO>+k(@TSXJmU> z0zih-#@38%oq<&KFy8uML;KKSFw52NV7=NV|%099%{;j zju!D#s1Oa>hJuPN(h-VO*teIFX8fM*8PBu*ZGC+WoSA=H`G5fY_T<{)C73^P;0y!^ zQb0*ELOc$NpbWFHjIxM80M9{$??FTueGR+3EN;<5nDA2@yn2pJKO1@8buj4 zr8!3ZjOWE`u6b$N1ZNeOVwkS9J;o$2k+F7-u~Lb;@VL*|NzIFHMMtit_C2(rvAW%0 zj7zC3x4Dvru`e)pYjE|EPE?6>ENAop&D5%jzEBp6!M;+{T#o5JA5BpTdW!Ot7Woma z8aq+)(aytNYI2K%%5C6dG}IlFS4gWxyVRnwY=T9F+EA;Jn_4%Nsii<>mkQajlgPTH zovP6*zHcAAo4YQ2fS>()=h6AwPpjYi+drc1iy(-5dgFTIFiqOTHkIqP6MVZP3}+Ul z@p`-4@L!>;f77Eyfm;q;_4c|;e5&s_>V6Oy|1=jNA>=Xva{m`R{+mRk_j&UY+^|Uf E50oCL&j0`b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c8a6d26a32cfb10ad41a6ba959cd13af2b130de6 GIT binary patch literal 630 zcmXw1J#Q2-5FPLCZ7$(LKuADRMl@SoEIvdPQAClTKt}|j*~W6t!`&*owqtvv+a7Al zgpL;RQ>YLP+J=IPF47T-RM@wdk!Jj!?HSLr{cU}H4ZPWZTg8w7{0`*WdP^{W>cJTZ z5Tt~PsHd3mqtW$B+lGSVh53+u9|y)jbmHJ;Rk zLD8-rHX6l#F?QoFr;E!1Fn{3r86f0DKpwpXj4{F9rk@RtsUW+4Y@#e~w_ermNYzpt z8ZPZSGzZGM18#U_+Z1P-OEJn;+CF2FSIAhq##p69T?Ra0?4;&pw_*}s(}W({*gDg0 zFvg`+j=Mrh%h(r~`!%@wNT;eoI*~KFkM`IpOg06!aA3DJ_d5 zsv9>|^6}2YN7NP$huUx86SUMHQ)r}m(Jpmp9h+jQ(OBvXa$B2*GPM-Q+)^RaULxy~ zc64J_Lf;_-w|9N`06z!!&Xe;upH{yQwtpns7g5yfn~m#@qbzMx*J$5uC-`hE@!_{`k#)c+u`;b|^nLdazbdIu@MC$5k`Q7gm@H)6~XLzF+!PFbJw}5LVG3@`z9F5*|D!JcQ^S-sQ$1ZqW$Q z_#3n{>ZHlvE+O@7c(2eV4Q%ILVL-9cF04!Q5S}!J0&csHMm6v|MQ(DJKO58g$^KPD zUJ@V!kCTD_2Y~>v{uxBwgqV9baP1<_{V5VSWE7^6y>P!V8?q7nkzztW2K5k3qr_qK z0aL8fHin&=32v_+j{o1ONenvx!-`VdCDoPyPWc2`PdhfDRImytwLMBJ$(z#oiT$v(!&*EiWvR*-Fqo$L=Bmdr~^au zQfgG)eE(RiT zXIia<&RcS3*_oEJ`zQB;g>G*z=r17SePsNnIpgl& zdYahSjB1q9M2*Xn4TT*8LOU_4wsQN1*p+I3yDj?tL%t?ACR)FxRx!`Rsn4Ss2cGAB jiHUdmPjd4Uxp@%xyyX401A@!J*<~;JkbWV!v@QJy18`N( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f98d6da9c3f60d2b128c0257e5621335150bc62 GIT binary patch literal 1646 zcmb7Ey>A>v6rb6h-P`-HW1GYm9IAt6N#f;0iWDhE;2eP>9Eik1xn{Jv8GNhkS7zoC zpOg;hp-Sjz5ehqPH$AS*tg8f6pQ6DqZcXkkWImG%ZpyuU1!&hLfLvEnEMjw;V z)31FxQn!my&Tfi0mtS(RQ?gj`&teg0Qu}X|KBaJ9NbCr-7Z&gl1jaz<^W|C z(hF-kpfry&PN{BCniXu68ofp7-BFxYC&F+dOhVd~O6XIR#(7?-SS3X+Dg6;0z!`e> zT{J8*9_{9PQJ2d*swkt63&qom+eKmGh_)dfp0ns4&+kQPayu%=YFOm&Zod6aB%!t! zOSlm4av8yAl9ETI%{Ee8Dmvt8$%TxR;ISNuaYT!Gg(&1@OGHPuMzk{9EXN`+ksDEi zSH1z_8}y{rencMK_`W`Ab*7}V?>Jtt@1u4XPsvrg6Ke~z<0;*SJTGl^JXAh`ts>Rdnl_{@is z`n4&!wkUFQ?eW_AN#nwlTv$Nu&XeHkU#`>k50K;e`##W7c{WauC*Ulc93=qCYUgO| zgswOP$2u_G&S}DWq4#_;r{IFH$vl^bv9#u|gCb1{AdltMuRb}{7v|3KVZGQFoY*e# z7DH}^e~v6VuO*_)uqOCTVf=K8mC(mXdM z=N1$IGMF?rrexy;q~gPP>xB*NLyN&USAT@nYD4*+;<+?GgsMSozxd|+b_Q*O*y`Gt zj+XsdaHab5yeB$ff#H?!gV=X5#!r2O&;E|KCTMHs2RQiQ@(jT;TVKY(&*2QgGV2h~ UZ_N-av*i{JeyKl2u-LHw0l?LO>i_@% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_credit_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19a3ade790c068b47f2914513bd2a798bf61d7ae GIT binary patch literal 1684 zcmbVMy>A>v6rcUPy|d58P8{ru_;3iwixe*qfl?$$97cdhOcW>0HKX;;#J9TL+0E>n z?QLj6YRZ_-E#e>Gf1t_f8fzMmsOXG*p-7cC`(e(JX|mG3dGnh$Z{Gagd-Hp{-9qqX z|8~MZ8wmZSCiQ1k%E?1eo+5&X7NJ<{X`0gYNRN%45t}_TwtAL^bo4bM#*c`Y)cVyZ z_x9`pwE(rJ&_;na0ClENCvUo~ztu)pljiL(6Rsf}w?jd>AIX``MBJl~h9Rd!Ht**t zB^zNNg7TnJR;QwqA7K6zQPk52>gf*Q*XMqmN!yQ;ArsOGhMZFt3x^J9v!Y+)QH zWEd%Z7UM@lKdM%Y5H2^5vCmi{Af$w4U}I#0b5&McWr~|1enBT7(TktFJ{;)nuzhcX zW&@F=-ZzP$(Y0=p4B$py*AE7i5pS2WT`vl^y)=i*vFqy}f8u3OBiB+e@ONnD!69Kv zy|iH36L1UMr%_6I<_X9_Hsra7d6gR+6vEO#phs~ zoQFhj`)qJpU8aD>l3%@UjXlV^;O&dDR5x9lUr@1MRANa9m2v*25=9lLpvvoAR+dS(d0-aAKXl3-Cr% zNX^@SNbx!pyuAaC;(AgkgI5*1|;B)=~7;ErnpMf|wG);SMBW?K)bZdleP3*Td g=Wu0$V3>5ZmgfAHPY?`~&Yb2PneFEWj76L;0TeE&B>(^b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95bf766666be1697ec0cdeb21298bc3cb885556e GIT binary patch literal 1658 zcmbVMy>A>v6ra8QxV`h2>?Fp%hzN&7@*yP)M0^wpQVvUiNUSKv%@rA~cPGBl?appy z=8UhQ2`Ok0T}FNbElcaQq?X!UJ9WBF>ULcV)zD`sw!cNO zL)@S3!nf-g)CJU=LhA;t1L{wq{;<(*{-qt;mU8Y41l8Def$dl|)`6(x%Bo9I!rb2mPnhls#el*~m zuxO}eVj?0=b4fF%JhGpMELMw;DGOOd!vu#>WIR6l-=JSGDrqPw+kFrYQ^MqZB6}Ge zE<>6KwMI|(ab6hU)L7uSG_k{|r|OKzuQT4?Y&VpTF$+_Iv1($RX7M1=`Ygsz24Pa} z*c9%ufN{uJCgJ#u39zw+v2;dN!lOQ*w29gMgdnCyT z7l8!2#efe3%*!gkHK7bRGIan7bRll$L+Z~Fj-9I&x^j8!w5rAWtt0>L-*#=?J3%$qJNAmW z^Ot_u{_fG(xoqsX?jMuK`7Qk}Y@coE*eYADYGyaKOT@JL&}qAT9^BNzK;WH_^-sIV zkuX1M<28F}TXZ1U-J&Bm+a6!isbA3Iq87T^d|3Luz;|=; z_ocT-&1+-lTE*J(+L6BrtSwKmR)oMY5Bj< U34+h0HE;Px&fE(dz9!Fq0X-L<%m4rY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_fail_params.py new file mode 100644 index 00000000..5e5877d4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_fail_params.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class InboundTransferFailParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + failure_details: NotRequired["InboundTransferFailParamsFailureDetails"] + """ + Details about a failed InboundTransfer. + """ + + +class InboundTransferFailParamsFailureDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "debit_not_authorized", + "incorrect_account_holder_address", + "incorrect_account_holder_name", + "incorrect_account_holder_tax_id", + "insufficient_funds", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + Reason for the failure. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_return_inbound_transfer_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_return_inbound_transfer_params.py new file mode 100644 index 00000000..1a61dde9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_return_inbound_transfer_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class InboundTransferReturnInboundTransferParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_succeed_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_succeed_params.py new file mode 100644 index 00000000..08a9bd06 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_inbound_transfer_succeed_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class InboundTransferSucceedParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_fail_params.py new file mode 100644 index 00000000..62e1640f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_fail_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class OutboundPaymentFailParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_post_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_post_params.py new file mode 100644 index 00000000..290792b2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_post_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class OutboundPaymentPostParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_return_outbound_payment_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_return_outbound_payment_params.py new file mode 100644 index 00000000..1c3a426e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_return_outbound_payment_params.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentReturnOutboundPaymentParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + returned_details: NotRequired[ + "OutboundPaymentReturnOutboundPaymentParamsReturnedDetails" + ] + """ + Optional hash to set the return code. + """ + + +class OutboundPaymentReturnOutboundPaymentParamsReturnedDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + The return code to be set on the OutboundPayment object. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_update_params.py new file mode 100644 index 00000000..53de8373 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_payment_update_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + tracking_details: "OutboundPaymentUpdateParamsTrackingDetails" + """ + Details about network-specific tracking information. + """ + + +class OutboundPaymentUpdateParamsTrackingDetails(TypedDict): + ach: NotRequired["OutboundPaymentUpdateParamsTrackingDetailsAch"] + """ + ACH network tracking details. + """ + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: NotRequired[ + "OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire" + ] + """ + US domestic wire network tracking details. + """ + + +class OutboundPaymentUpdateParamsTrackingDetailsAch(TypedDict): + trace_id: str + """ + ACH trace ID for funds sent over the `ach` network. + """ + + +class OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire(TypedDict): + chips: NotRequired[str] + """ + CHIPS System Sequence Number (SSN) for funds sent over the `us_domestic_wire` network. + """ + imad: NotRequired[str] + """ + IMAD for funds sent over the `us_domestic_wire` network. + """ + omad: NotRequired[str] + """ + OMAD for funds sent over the `us_domestic_wire` network. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_fail_params.py new file mode 100644 index 00000000..b8561188 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_fail_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class OutboundTransferFailParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_post_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_post_params.py new file mode 100644 index 00000000..f432ec9c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_post_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class OutboundTransferPostParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_return_outbound_transfer_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_return_outbound_transfer_params.py new file mode 100644 index 00000000..ba555bef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_return_outbound_transfer_params.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundTransferReturnOutboundTransferParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + returned_details: NotRequired[ + "OutboundTransferReturnOutboundTransferParamsReturnedDetails" + ] + """ + Details about a returned OutboundTransfer. + """ + + +class OutboundTransferReturnOutboundTransferParamsReturnedDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + Reason for the return. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_update_params.py new file mode 100644 index 00000000..69a268fe --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_outbound_transfer_update_params.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundTransferUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + tracking_details: "OutboundTransferUpdateParamsTrackingDetails" + """ + Details about network-specific tracking information. + """ + + +class OutboundTransferUpdateParamsTrackingDetails(TypedDict): + ach: NotRequired["OutboundTransferUpdateParamsTrackingDetailsAch"] + """ + ACH network tracking details. + """ + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: NotRequired[ + "OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire" + ] + """ + US domestic wire network tracking details. + """ + + +class OutboundTransferUpdateParamsTrackingDetailsAch(TypedDict): + trace_id: str + """ + ACH trace ID for funds sent over the `ach` network. + """ + + +class OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire(TypedDict): + chips: NotRequired[str] + """ + CHIPS System Sequence Number (SSN) for funds sent over the `us_domestic_wire` network. + """ + imad: NotRequired[str] + """ + IMAD for funds sent over the `us_domestic_wire` network. + """ + omad: NotRequired[str] + """ + OMAD for funds sent over the `us_domestic_wire` network. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_credit_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_credit_create_params.py new file mode 100644 index 00000000..674ef687 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_credit_create_params.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReceivedCreditCreateParams(TypedDict): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to send funds to. + """ + initiating_payment_method_details: NotRequired[ + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetails" + ] + """ + Initiating payment method details for the object. + """ + network: Literal["ach", "us_domestic_wire"] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + + +class ReceivedCreditCreateParamsInitiatingPaymentMethodDetails(TypedDict): + type: Literal["us_bank_account"] + """ + The source type. + """ + us_bank_account: NotRequired[ + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount( + TypedDict, +): + account_holder_name: NotRequired[str] + """ + The bank account holder's name. + """ + account_number: NotRequired[str] + """ + The bank account number. + """ + routing_number: NotRequired[str] + """ + The bank account's routing number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_debit_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_debit_create_params.py new file mode 100644 index 00000000..c7b13823 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/test_helpers/treasury/_received_debit_create_params.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReceivedDebitCreateParams(TypedDict): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to pull funds from. + """ + initiating_payment_method_details: NotRequired[ + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetails" + ] + """ + Initiating payment method details for the object. + """ + network: Literal["ach"] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + + +class ReceivedDebitCreateParamsInitiatingPaymentMethodDetails(TypedDict): + type: Literal["us_bank_account"] + """ + The source type. + """ + us_bank_account: NotRequired[ + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount( + TypedDict, +): + account_holder_name: NotRequired[str] + """ + The bank account holder's name. + """ + account_number: NotRequired[str] + """ + The bank account number. + """ + routing_number: NotRequired[str] + """ + The bank account's routing number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__init__.py new file mode 100644 index 00000000..dbb43094 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__init__.py @@ -0,0 +1,893 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.treasury._credit_reversal_create_params import ( + CreditReversalCreateParams as CreditReversalCreateParams, + ) + from stripe.params.treasury._credit_reversal_list_params import ( + CreditReversalListParams as CreditReversalListParams, + ) + from stripe.params.treasury._credit_reversal_retrieve_params import ( + CreditReversalRetrieveParams as CreditReversalRetrieveParams, + ) + from stripe.params.treasury._debit_reversal_create_params import ( + DebitReversalCreateParams as DebitReversalCreateParams, + ) + from stripe.params.treasury._debit_reversal_list_params import ( + DebitReversalListParams as DebitReversalListParams, + ) + from stripe.params.treasury._debit_reversal_retrieve_params import ( + DebitReversalRetrieveParams as DebitReversalRetrieveParams, + ) + from stripe.params.treasury._financial_account_close_params import ( + FinancialAccountCloseParams as FinancialAccountCloseParams, + FinancialAccountCloseParamsForwardingSettings as FinancialAccountCloseParamsForwardingSettings, + ) + from stripe.params.treasury._financial_account_create_params import ( + FinancialAccountCreateParams as FinancialAccountCreateParams, + FinancialAccountCreateParamsFeatures as FinancialAccountCreateParamsFeatures, + FinancialAccountCreateParamsFeaturesCardIssuing as FinancialAccountCreateParamsFeaturesCardIssuing, + FinancialAccountCreateParamsFeaturesDepositInsurance as FinancialAccountCreateParamsFeaturesDepositInsurance, + FinancialAccountCreateParamsFeaturesFinancialAddresses as FinancialAccountCreateParamsFeaturesFinancialAddresses, + FinancialAccountCreateParamsFeaturesFinancialAddressesAba as FinancialAccountCreateParamsFeaturesFinancialAddressesAba, + FinancialAccountCreateParamsFeaturesInboundTransfers as FinancialAccountCreateParamsFeaturesInboundTransfers, + FinancialAccountCreateParamsFeaturesInboundTransfersAch as FinancialAccountCreateParamsFeaturesInboundTransfersAch, + FinancialAccountCreateParamsFeaturesIntraStripeFlows as FinancialAccountCreateParamsFeaturesIntraStripeFlows, + FinancialAccountCreateParamsFeaturesOutboundPayments as FinancialAccountCreateParamsFeaturesOutboundPayments, + FinancialAccountCreateParamsFeaturesOutboundPaymentsAch as FinancialAccountCreateParamsFeaturesOutboundPaymentsAch, + FinancialAccountCreateParamsFeaturesOutboundPaymentsUsDomesticWire as FinancialAccountCreateParamsFeaturesOutboundPaymentsUsDomesticWire, + FinancialAccountCreateParamsFeaturesOutboundTransfers as FinancialAccountCreateParamsFeaturesOutboundTransfers, + FinancialAccountCreateParamsFeaturesOutboundTransfersAch as FinancialAccountCreateParamsFeaturesOutboundTransfersAch, + FinancialAccountCreateParamsFeaturesOutboundTransfersUsDomesticWire as FinancialAccountCreateParamsFeaturesOutboundTransfersUsDomesticWire, + FinancialAccountCreateParamsPlatformRestrictions as FinancialAccountCreateParamsPlatformRestrictions, + ) + from stripe.params.treasury._financial_account_features_retrieve_params import ( + FinancialAccountFeaturesRetrieveParams as FinancialAccountFeaturesRetrieveParams, + ) + from stripe.params.treasury._financial_account_features_update_params import ( + FinancialAccountFeaturesUpdateParams as FinancialAccountFeaturesUpdateParams, + FinancialAccountFeaturesUpdateParamsCardIssuing as FinancialAccountFeaturesUpdateParamsCardIssuing, + FinancialAccountFeaturesUpdateParamsDepositInsurance as FinancialAccountFeaturesUpdateParamsDepositInsurance, + FinancialAccountFeaturesUpdateParamsFinancialAddresses as FinancialAccountFeaturesUpdateParamsFinancialAddresses, + FinancialAccountFeaturesUpdateParamsFinancialAddressesAba as FinancialAccountFeaturesUpdateParamsFinancialAddressesAba, + FinancialAccountFeaturesUpdateParamsInboundTransfers as FinancialAccountFeaturesUpdateParamsInboundTransfers, + FinancialAccountFeaturesUpdateParamsInboundTransfersAch as FinancialAccountFeaturesUpdateParamsInboundTransfersAch, + FinancialAccountFeaturesUpdateParamsIntraStripeFlows as FinancialAccountFeaturesUpdateParamsIntraStripeFlows, + FinancialAccountFeaturesUpdateParamsOutboundPayments as FinancialAccountFeaturesUpdateParamsOutboundPayments, + FinancialAccountFeaturesUpdateParamsOutboundPaymentsAch as FinancialAccountFeaturesUpdateParamsOutboundPaymentsAch, + FinancialAccountFeaturesUpdateParamsOutboundPaymentsUsDomesticWire as FinancialAccountFeaturesUpdateParamsOutboundPaymentsUsDomesticWire, + FinancialAccountFeaturesUpdateParamsOutboundTransfers as FinancialAccountFeaturesUpdateParamsOutboundTransfers, + FinancialAccountFeaturesUpdateParamsOutboundTransfersAch as FinancialAccountFeaturesUpdateParamsOutboundTransfersAch, + FinancialAccountFeaturesUpdateParamsOutboundTransfersUsDomesticWire as FinancialAccountFeaturesUpdateParamsOutboundTransfersUsDomesticWire, + ) + from stripe.params.treasury._financial_account_list_params import ( + FinancialAccountListParams as FinancialAccountListParams, + FinancialAccountListParamsCreated as FinancialAccountListParamsCreated, + ) + from stripe.params.treasury._financial_account_modify_params import ( + FinancialAccountModifyParams as FinancialAccountModifyParams, + FinancialAccountModifyParamsFeatures as FinancialAccountModifyParamsFeatures, + FinancialAccountModifyParamsFeaturesCardIssuing as FinancialAccountModifyParamsFeaturesCardIssuing, + FinancialAccountModifyParamsFeaturesDepositInsurance as FinancialAccountModifyParamsFeaturesDepositInsurance, + FinancialAccountModifyParamsFeaturesFinancialAddresses as FinancialAccountModifyParamsFeaturesFinancialAddresses, + FinancialAccountModifyParamsFeaturesFinancialAddressesAba as FinancialAccountModifyParamsFeaturesFinancialAddressesAba, + FinancialAccountModifyParamsFeaturesInboundTransfers as FinancialAccountModifyParamsFeaturesInboundTransfers, + FinancialAccountModifyParamsFeaturesInboundTransfersAch as FinancialAccountModifyParamsFeaturesInboundTransfersAch, + FinancialAccountModifyParamsFeaturesIntraStripeFlows as FinancialAccountModifyParamsFeaturesIntraStripeFlows, + FinancialAccountModifyParamsFeaturesOutboundPayments as FinancialAccountModifyParamsFeaturesOutboundPayments, + FinancialAccountModifyParamsFeaturesOutboundPaymentsAch as FinancialAccountModifyParamsFeaturesOutboundPaymentsAch, + FinancialAccountModifyParamsFeaturesOutboundPaymentsUsDomesticWire as FinancialAccountModifyParamsFeaturesOutboundPaymentsUsDomesticWire, + FinancialAccountModifyParamsFeaturesOutboundTransfers as FinancialAccountModifyParamsFeaturesOutboundTransfers, + FinancialAccountModifyParamsFeaturesOutboundTransfersAch as FinancialAccountModifyParamsFeaturesOutboundTransfersAch, + FinancialAccountModifyParamsFeaturesOutboundTransfersUsDomesticWire as FinancialAccountModifyParamsFeaturesOutboundTransfersUsDomesticWire, + FinancialAccountModifyParamsForwardingSettings as FinancialAccountModifyParamsForwardingSettings, + FinancialAccountModifyParamsPlatformRestrictions as FinancialAccountModifyParamsPlatformRestrictions, + ) + from stripe.params.treasury._financial_account_retrieve_features_params import ( + FinancialAccountRetrieveFeaturesParams as FinancialAccountRetrieveFeaturesParams, + ) + from stripe.params.treasury._financial_account_retrieve_params import ( + FinancialAccountRetrieveParams as FinancialAccountRetrieveParams, + ) + from stripe.params.treasury._financial_account_update_features_params import ( + FinancialAccountUpdateFeaturesParams as FinancialAccountUpdateFeaturesParams, + FinancialAccountUpdateFeaturesParamsCardIssuing as FinancialAccountUpdateFeaturesParamsCardIssuing, + FinancialAccountUpdateFeaturesParamsDepositInsurance as FinancialAccountUpdateFeaturesParamsDepositInsurance, + FinancialAccountUpdateFeaturesParamsFinancialAddresses as FinancialAccountUpdateFeaturesParamsFinancialAddresses, + FinancialAccountUpdateFeaturesParamsFinancialAddressesAba as FinancialAccountUpdateFeaturesParamsFinancialAddressesAba, + FinancialAccountUpdateFeaturesParamsInboundTransfers as FinancialAccountUpdateFeaturesParamsInboundTransfers, + FinancialAccountUpdateFeaturesParamsInboundTransfersAch as FinancialAccountUpdateFeaturesParamsInboundTransfersAch, + FinancialAccountUpdateFeaturesParamsIntraStripeFlows as FinancialAccountUpdateFeaturesParamsIntraStripeFlows, + FinancialAccountUpdateFeaturesParamsOutboundPayments as FinancialAccountUpdateFeaturesParamsOutboundPayments, + FinancialAccountUpdateFeaturesParamsOutboundPaymentsAch as FinancialAccountUpdateFeaturesParamsOutboundPaymentsAch, + FinancialAccountUpdateFeaturesParamsOutboundPaymentsUsDomesticWire as FinancialAccountUpdateFeaturesParamsOutboundPaymentsUsDomesticWire, + FinancialAccountUpdateFeaturesParamsOutboundTransfers as FinancialAccountUpdateFeaturesParamsOutboundTransfers, + FinancialAccountUpdateFeaturesParamsOutboundTransfersAch as FinancialAccountUpdateFeaturesParamsOutboundTransfersAch, + FinancialAccountUpdateFeaturesParamsOutboundTransfersUsDomesticWire as FinancialAccountUpdateFeaturesParamsOutboundTransfersUsDomesticWire, + ) + from stripe.params.treasury._financial_account_update_params import ( + FinancialAccountUpdateParams as FinancialAccountUpdateParams, + FinancialAccountUpdateParamsFeatures as FinancialAccountUpdateParamsFeatures, + FinancialAccountUpdateParamsFeaturesCardIssuing as FinancialAccountUpdateParamsFeaturesCardIssuing, + FinancialAccountUpdateParamsFeaturesDepositInsurance as FinancialAccountUpdateParamsFeaturesDepositInsurance, + FinancialAccountUpdateParamsFeaturesFinancialAddresses as FinancialAccountUpdateParamsFeaturesFinancialAddresses, + FinancialAccountUpdateParamsFeaturesFinancialAddressesAba as FinancialAccountUpdateParamsFeaturesFinancialAddressesAba, + FinancialAccountUpdateParamsFeaturesInboundTransfers as FinancialAccountUpdateParamsFeaturesInboundTransfers, + FinancialAccountUpdateParamsFeaturesInboundTransfersAch as FinancialAccountUpdateParamsFeaturesInboundTransfersAch, + FinancialAccountUpdateParamsFeaturesIntraStripeFlows as FinancialAccountUpdateParamsFeaturesIntraStripeFlows, + FinancialAccountUpdateParamsFeaturesOutboundPayments as FinancialAccountUpdateParamsFeaturesOutboundPayments, + FinancialAccountUpdateParamsFeaturesOutboundPaymentsAch as FinancialAccountUpdateParamsFeaturesOutboundPaymentsAch, + FinancialAccountUpdateParamsFeaturesOutboundPaymentsUsDomesticWire as FinancialAccountUpdateParamsFeaturesOutboundPaymentsUsDomesticWire, + FinancialAccountUpdateParamsFeaturesOutboundTransfers as FinancialAccountUpdateParamsFeaturesOutboundTransfers, + FinancialAccountUpdateParamsFeaturesOutboundTransfersAch as FinancialAccountUpdateParamsFeaturesOutboundTransfersAch, + FinancialAccountUpdateParamsFeaturesOutboundTransfersUsDomesticWire as FinancialAccountUpdateParamsFeaturesOutboundTransfersUsDomesticWire, + FinancialAccountUpdateParamsForwardingSettings as FinancialAccountUpdateParamsForwardingSettings, + FinancialAccountUpdateParamsPlatformRestrictions as FinancialAccountUpdateParamsPlatformRestrictions, + ) + from stripe.params.treasury._inbound_transfer_cancel_params import ( + InboundTransferCancelParams as InboundTransferCancelParams, + ) + from stripe.params.treasury._inbound_transfer_create_params import ( + InboundTransferCreateParams as InboundTransferCreateParams, + ) + from stripe.params.treasury._inbound_transfer_fail_params import ( + InboundTransferFailParams as InboundTransferFailParams, + InboundTransferFailParamsFailureDetails as InboundTransferFailParamsFailureDetails, + ) + from stripe.params.treasury._inbound_transfer_list_params import ( + InboundTransferListParams as InboundTransferListParams, + ) + from stripe.params.treasury._inbound_transfer_retrieve_params import ( + InboundTransferRetrieveParams as InboundTransferRetrieveParams, + ) + from stripe.params.treasury._inbound_transfer_return_inbound_transfer_params import ( + InboundTransferReturnInboundTransferParams as InboundTransferReturnInboundTransferParams, + ) + from stripe.params.treasury._inbound_transfer_succeed_params import ( + InboundTransferSucceedParams as InboundTransferSucceedParams, + ) + from stripe.params.treasury._outbound_payment_cancel_params import ( + OutboundPaymentCancelParams as OutboundPaymentCancelParams, + ) + from stripe.params.treasury._outbound_payment_create_params import ( + OutboundPaymentCreateParams as OutboundPaymentCreateParams, + OutboundPaymentCreateParamsDestinationPaymentMethodData as OutboundPaymentCreateParamsDestinationPaymentMethodData, + OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetails as OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetails, + OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetailsAddress as OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetailsAddress, + OutboundPaymentCreateParamsDestinationPaymentMethodDataUsBankAccount as OutboundPaymentCreateParamsDestinationPaymentMethodDataUsBankAccount, + OutboundPaymentCreateParamsDestinationPaymentMethodOptions as OutboundPaymentCreateParamsDestinationPaymentMethodOptions, + OutboundPaymentCreateParamsDestinationPaymentMethodOptionsUsBankAccount as OutboundPaymentCreateParamsDestinationPaymentMethodOptionsUsBankAccount, + OutboundPaymentCreateParamsEndUserDetails as OutboundPaymentCreateParamsEndUserDetails, + ) + from stripe.params.treasury._outbound_payment_fail_params import ( + OutboundPaymentFailParams as OutboundPaymentFailParams, + ) + from stripe.params.treasury._outbound_payment_list_params import ( + OutboundPaymentListParams as OutboundPaymentListParams, + OutboundPaymentListParamsCreated as OutboundPaymentListParamsCreated, + ) + from stripe.params.treasury._outbound_payment_post_params import ( + OutboundPaymentPostParams as OutboundPaymentPostParams, + ) + from stripe.params.treasury._outbound_payment_retrieve_params import ( + OutboundPaymentRetrieveParams as OutboundPaymentRetrieveParams, + ) + from stripe.params.treasury._outbound_payment_return_outbound_payment_params import ( + OutboundPaymentReturnOutboundPaymentParams as OutboundPaymentReturnOutboundPaymentParams, + OutboundPaymentReturnOutboundPaymentParamsReturnedDetails as OutboundPaymentReturnOutboundPaymentParamsReturnedDetails, + ) + from stripe.params.treasury._outbound_payment_update_params import ( + OutboundPaymentUpdateParams as OutboundPaymentUpdateParams, + OutboundPaymentUpdateParamsTrackingDetails as OutboundPaymentUpdateParamsTrackingDetails, + OutboundPaymentUpdateParamsTrackingDetailsAch as OutboundPaymentUpdateParamsTrackingDetailsAch, + OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire as OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire, + ) + from stripe.params.treasury._outbound_transfer_cancel_params import ( + OutboundTransferCancelParams as OutboundTransferCancelParams, + ) + from stripe.params.treasury._outbound_transfer_create_params import ( + OutboundTransferCreateParams as OutboundTransferCreateParams, + OutboundTransferCreateParamsDestinationPaymentMethodData as OutboundTransferCreateParamsDestinationPaymentMethodData, + OutboundTransferCreateParamsDestinationPaymentMethodOptions as OutboundTransferCreateParamsDestinationPaymentMethodOptions, + OutboundTransferCreateParamsDestinationPaymentMethodOptionsUsBankAccount as OutboundTransferCreateParamsDestinationPaymentMethodOptionsUsBankAccount, + ) + from stripe.params.treasury._outbound_transfer_fail_params import ( + OutboundTransferFailParams as OutboundTransferFailParams, + ) + from stripe.params.treasury._outbound_transfer_list_params import ( + OutboundTransferListParams as OutboundTransferListParams, + ) + from stripe.params.treasury._outbound_transfer_post_params import ( + OutboundTransferPostParams as OutboundTransferPostParams, + ) + from stripe.params.treasury._outbound_transfer_retrieve_params import ( + OutboundTransferRetrieveParams as OutboundTransferRetrieveParams, + ) + from stripe.params.treasury._outbound_transfer_return_outbound_transfer_params import ( + OutboundTransferReturnOutboundTransferParams as OutboundTransferReturnOutboundTransferParams, + OutboundTransferReturnOutboundTransferParamsReturnedDetails as OutboundTransferReturnOutboundTransferParamsReturnedDetails, + ) + from stripe.params.treasury._outbound_transfer_update_params import ( + OutboundTransferUpdateParams as OutboundTransferUpdateParams, + OutboundTransferUpdateParamsTrackingDetails as OutboundTransferUpdateParamsTrackingDetails, + OutboundTransferUpdateParamsTrackingDetailsAch as OutboundTransferUpdateParamsTrackingDetailsAch, + OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire as OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire, + ) + from stripe.params.treasury._received_credit_create_params import ( + ReceivedCreditCreateParams as ReceivedCreditCreateParams, + ReceivedCreditCreateParamsInitiatingPaymentMethodDetails as ReceivedCreditCreateParamsInitiatingPaymentMethodDetails, + ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount as ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount, + ) + from stripe.params.treasury._received_credit_list_params import ( + ReceivedCreditListParams as ReceivedCreditListParams, + ReceivedCreditListParamsLinkedFlows as ReceivedCreditListParamsLinkedFlows, + ) + from stripe.params.treasury._received_credit_retrieve_params import ( + ReceivedCreditRetrieveParams as ReceivedCreditRetrieveParams, + ) + from stripe.params.treasury._received_debit_create_params import ( + ReceivedDebitCreateParams as ReceivedDebitCreateParams, + ReceivedDebitCreateParamsInitiatingPaymentMethodDetails as ReceivedDebitCreateParamsInitiatingPaymentMethodDetails, + ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount as ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount, + ) + from stripe.params.treasury._received_debit_list_params import ( + ReceivedDebitListParams as ReceivedDebitListParams, + ) + from stripe.params.treasury._received_debit_retrieve_params import ( + ReceivedDebitRetrieveParams as ReceivedDebitRetrieveParams, + ) + from stripe.params.treasury._transaction_entry_list_params import ( + TransactionEntryListParams as TransactionEntryListParams, + TransactionEntryListParamsCreated as TransactionEntryListParamsCreated, + TransactionEntryListParamsEffectiveAt as TransactionEntryListParamsEffectiveAt, + ) + from stripe.params.treasury._transaction_entry_retrieve_params import ( + TransactionEntryRetrieveParams as TransactionEntryRetrieveParams, + ) + from stripe.params.treasury._transaction_list_params import ( + TransactionListParams as TransactionListParams, + TransactionListParamsCreated as TransactionListParamsCreated, + TransactionListParamsStatusTransitions as TransactionListParamsStatusTransitions, + TransactionListParamsStatusTransitionsPostedAt as TransactionListParamsStatusTransitionsPostedAt, + ) + from stripe.params.treasury._transaction_retrieve_params import ( + TransactionRetrieveParams as TransactionRetrieveParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "CreditReversalCreateParams": ( + "stripe.params.treasury._credit_reversal_create_params", + False, + ), + "CreditReversalListParams": ( + "stripe.params.treasury._credit_reversal_list_params", + False, + ), + "CreditReversalRetrieveParams": ( + "stripe.params.treasury._credit_reversal_retrieve_params", + False, + ), + "DebitReversalCreateParams": ( + "stripe.params.treasury._debit_reversal_create_params", + False, + ), + "DebitReversalListParams": ( + "stripe.params.treasury._debit_reversal_list_params", + False, + ), + "DebitReversalRetrieveParams": ( + "stripe.params.treasury._debit_reversal_retrieve_params", + False, + ), + "FinancialAccountCloseParams": ( + "stripe.params.treasury._financial_account_close_params", + False, + ), + "FinancialAccountCloseParamsForwardingSettings": ( + "stripe.params.treasury._financial_account_close_params", + False, + ), + "FinancialAccountCreateParams": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeatures": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesCardIssuing": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesDepositInsurance": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesFinancialAddresses": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesFinancialAddressesAba": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesInboundTransfers": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesInboundTransfersAch": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesIntraStripeFlows": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundPayments": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundPaymentsAch": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundPaymentsUsDomesticWire": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundTransfers": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundTransfersAch": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsFeaturesOutboundTransfersUsDomesticWire": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountCreateParamsPlatformRestrictions": ( + "stripe.params.treasury._financial_account_create_params", + False, + ), + "FinancialAccountFeaturesRetrieveParams": ( + "stripe.params.treasury._financial_account_features_retrieve_params", + False, + ), + "FinancialAccountFeaturesUpdateParams": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsCardIssuing": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsDepositInsurance": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsFinancialAddresses": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsFinancialAddressesAba": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsInboundTransfers": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsInboundTransfersAch": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsIntraStripeFlows": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundPayments": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundPaymentsAch": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundPaymentsUsDomesticWire": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundTransfers": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundTransfersAch": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountFeaturesUpdateParamsOutboundTransfersUsDomesticWire": ( + "stripe.params.treasury._financial_account_features_update_params", + False, + ), + "FinancialAccountListParams": ( + "stripe.params.treasury._financial_account_list_params", + False, + ), + "FinancialAccountListParamsCreated": ( + "stripe.params.treasury._financial_account_list_params", + False, + ), + "FinancialAccountModifyParams": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeatures": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesCardIssuing": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesDepositInsurance": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesFinancialAddresses": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesFinancialAddressesAba": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesInboundTransfers": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesInboundTransfersAch": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesIntraStripeFlows": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundPayments": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundPaymentsAch": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundPaymentsUsDomesticWire": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundTransfers": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundTransfersAch": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsFeaturesOutboundTransfersUsDomesticWire": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsForwardingSettings": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountModifyParamsPlatformRestrictions": ( + "stripe.params.treasury._financial_account_modify_params", + False, + ), + "FinancialAccountRetrieveFeaturesParams": ( + "stripe.params.treasury._financial_account_retrieve_features_params", + False, + ), + "FinancialAccountRetrieveParams": ( + "stripe.params.treasury._financial_account_retrieve_params", + False, + ), + "FinancialAccountUpdateFeaturesParams": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsCardIssuing": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsDepositInsurance": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsFinancialAddresses": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsFinancialAddressesAba": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsInboundTransfers": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsInboundTransfersAch": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsIntraStripeFlows": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundPayments": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundPaymentsAch": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundPaymentsUsDomesticWire": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundTransfers": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundTransfersAch": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateFeaturesParamsOutboundTransfersUsDomesticWire": ( + "stripe.params.treasury._financial_account_update_features_params", + False, + ), + "FinancialAccountUpdateParams": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeatures": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesCardIssuing": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesDepositInsurance": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesFinancialAddresses": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesFinancialAddressesAba": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesInboundTransfers": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesInboundTransfersAch": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesIntraStripeFlows": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundPayments": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundPaymentsAch": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundPaymentsUsDomesticWire": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundTransfers": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundTransfersAch": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsFeaturesOutboundTransfersUsDomesticWire": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsForwardingSettings": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "FinancialAccountUpdateParamsPlatformRestrictions": ( + "stripe.params.treasury._financial_account_update_params", + False, + ), + "InboundTransferCancelParams": ( + "stripe.params.treasury._inbound_transfer_cancel_params", + False, + ), + "InboundTransferCreateParams": ( + "stripe.params.treasury._inbound_transfer_create_params", + False, + ), + "InboundTransferFailParams": ( + "stripe.params.treasury._inbound_transfer_fail_params", + False, + ), + "InboundTransferFailParamsFailureDetails": ( + "stripe.params.treasury._inbound_transfer_fail_params", + False, + ), + "InboundTransferListParams": ( + "stripe.params.treasury._inbound_transfer_list_params", + False, + ), + "InboundTransferRetrieveParams": ( + "stripe.params.treasury._inbound_transfer_retrieve_params", + False, + ), + "InboundTransferReturnInboundTransferParams": ( + "stripe.params.treasury._inbound_transfer_return_inbound_transfer_params", + False, + ), + "InboundTransferSucceedParams": ( + "stripe.params.treasury._inbound_transfer_succeed_params", + False, + ), + "OutboundPaymentCancelParams": ( + "stripe.params.treasury._outbound_payment_cancel_params", + False, + ), + "OutboundPaymentCreateParams": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodData": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetails": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetailsAddress": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodDataUsBankAccount": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodOptions": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsDestinationPaymentMethodOptionsUsBankAccount": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentCreateParamsEndUserDetails": ( + "stripe.params.treasury._outbound_payment_create_params", + False, + ), + "OutboundPaymentFailParams": ( + "stripe.params.treasury._outbound_payment_fail_params", + False, + ), + "OutboundPaymentListParams": ( + "stripe.params.treasury._outbound_payment_list_params", + False, + ), + "OutboundPaymentListParamsCreated": ( + "stripe.params.treasury._outbound_payment_list_params", + False, + ), + "OutboundPaymentPostParams": ( + "stripe.params.treasury._outbound_payment_post_params", + False, + ), + "OutboundPaymentRetrieveParams": ( + "stripe.params.treasury._outbound_payment_retrieve_params", + False, + ), + "OutboundPaymentReturnOutboundPaymentParams": ( + "stripe.params.treasury._outbound_payment_return_outbound_payment_params", + False, + ), + "OutboundPaymentReturnOutboundPaymentParamsReturnedDetails": ( + "stripe.params.treasury._outbound_payment_return_outbound_payment_params", + False, + ), + "OutboundPaymentUpdateParams": ( + "stripe.params.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetails": ( + "stripe.params.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetailsAch": ( + "stripe.params.treasury._outbound_payment_update_params", + False, + ), + "OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire": ( + "stripe.params.treasury._outbound_payment_update_params", + False, + ), + "OutboundTransferCancelParams": ( + "stripe.params.treasury._outbound_transfer_cancel_params", + False, + ), + "OutboundTransferCreateParams": ( + "stripe.params.treasury._outbound_transfer_create_params", + False, + ), + "OutboundTransferCreateParamsDestinationPaymentMethodData": ( + "stripe.params.treasury._outbound_transfer_create_params", + False, + ), + "OutboundTransferCreateParamsDestinationPaymentMethodOptions": ( + "stripe.params.treasury._outbound_transfer_create_params", + False, + ), + "OutboundTransferCreateParamsDestinationPaymentMethodOptionsUsBankAccount": ( + "stripe.params.treasury._outbound_transfer_create_params", + False, + ), + "OutboundTransferFailParams": ( + "stripe.params.treasury._outbound_transfer_fail_params", + False, + ), + "OutboundTransferListParams": ( + "stripe.params.treasury._outbound_transfer_list_params", + False, + ), + "OutboundTransferPostParams": ( + "stripe.params.treasury._outbound_transfer_post_params", + False, + ), + "OutboundTransferRetrieveParams": ( + "stripe.params.treasury._outbound_transfer_retrieve_params", + False, + ), + "OutboundTransferReturnOutboundTransferParams": ( + "stripe.params.treasury._outbound_transfer_return_outbound_transfer_params", + False, + ), + "OutboundTransferReturnOutboundTransferParamsReturnedDetails": ( + "stripe.params.treasury._outbound_transfer_return_outbound_transfer_params", + False, + ), + "OutboundTransferUpdateParams": ( + "stripe.params.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetails": ( + "stripe.params.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetailsAch": ( + "stripe.params.treasury._outbound_transfer_update_params", + False, + ), + "OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire": ( + "stripe.params.treasury._outbound_transfer_update_params", + False, + ), + "ReceivedCreditCreateParams": ( + "stripe.params.treasury._received_credit_create_params", + False, + ), + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetails": ( + "stripe.params.treasury._received_credit_create_params", + False, + ), + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount": ( + "stripe.params.treasury._received_credit_create_params", + False, + ), + "ReceivedCreditListParams": ( + "stripe.params.treasury._received_credit_list_params", + False, + ), + "ReceivedCreditListParamsLinkedFlows": ( + "stripe.params.treasury._received_credit_list_params", + False, + ), + "ReceivedCreditRetrieveParams": ( + "stripe.params.treasury._received_credit_retrieve_params", + False, + ), + "ReceivedDebitCreateParams": ( + "stripe.params.treasury._received_debit_create_params", + False, + ), + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetails": ( + "stripe.params.treasury._received_debit_create_params", + False, + ), + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount": ( + "stripe.params.treasury._received_debit_create_params", + False, + ), + "ReceivedDebitListParams": ( + "stripe.params.treasury._received_debit_list_params", + False, + ), + "ReceivedDebitRetrieveParams": ( + "stripe.params.treasury._received_debit_retrieve_params", + False, + ), + "TransactionEntryListParams": ( + "stripe.params.treasury._transaction_entry_list_params", + False, + ), + "TransactionEntryListParamsCreated": ( + "stripe.params.treasury._transaction_entry_list_params", + False, + ), + "TransactionEntryListParamsEffectiveAt": ( + "stripe.params.treasury._transaction_entry_list_params", + False, + ), + "TransactionEntryRetrieveParams": ( + "stripe.params.treasury._transaction_entry_retrieve_params", + False, + ), + "TransactionListParams": ( + "stripe.params.treasury._transaction_list_params", + False, + ), + "TransactionListParamsCreated": ( + "stripe.params.treasury._transaction_list_params", + False, + ), + "TransactionListParamsStatusTransitions": ( + "stripe.params.treasury._transaction_list_params", + False, + ), + "TransactionListParamsStatusTransitionsPostedAt": ( + "stripe.params.treasury._transaction_list_params", + False, + ), + "TransactionRetrieveParams": ( + "stripe.params.treasury._transaction_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bb4324a3d8e3b812a06a6ff85711c100661de74 GIT binary patch literal 20642 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b361c42710ee887d3b0936424dbca0087780839 GIT binary patch literal 786 zcmYjPJ8u&~5Z=9)FTsfwkT9`;BBHq>UWK%Q!ifY$6cC8!n$_YPoKxm!?h-6|2rfuO zBASqthLjp?C01&OcIt#qCEJOcdZ9;&MP87|`9vZY=vRzsC~Qo;pz+(lfR>wY;Cu*5 zzbbT`XDYBt=P2&$(m9TmM*W?WTpN>ELew`tD{_`#ag5-C010VCLhBs?8ys-A@zosg zB6@)Lnt5-43+@N&Kb^JIxoBq_JaGcI>>OgY81s%mDv_WhG`tp4q^k5_T!<_x{S>r_ zgcfB>LLcH0M7&?QodkaAbDoJ5I4{>ZPxEM)7~JIid?=DyBRxzf&0tGgX<4>77g?5T zQ4NA~X*&Eu7Rbr%M|PU0zy{fv9f3O2dBI-h8j{^!o}b0pfb~TG46=xgARDnHe$R@D zKFzcJ?%q?TVhy_m8i)ZXhPmPbSW&gZH1?*3a>ACybGdBV$k;Wn?YhN8`dCQC3{cOI zeJ0659tI-HI#yVsk+%n4SS``a_;K_$q$t9WK$ z?YgWk=CAgF=k-EJvo)osCk1v{jiesgR{g?ZtRYiob?SLmMQ)kMRrq^|ZvBJ$2cF9| iiWHA}h-_|CN^d+u_kWT{KS=P$Yf}H}@eRSN^8N?*xzi2+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_credit_reversal_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4008ea879e562cb234e1e176331d2fe8b6cb5b3 GIT binary patch literal 1015 zcmZWnJ5Ss|5MDpecie#xAzXmGcoZ(c3bZK2fs_=8M2XT|vs&y0EbO(}-8*qj6e&qh z$EBl<@>9~}bWOBUlp<9+BtiGF^}K*ytL$ZbW8mb*X)0R39~$#^zFmwim|cd}TD}&ctW}kcA4l`}ksJG`l)BS1V-p(SlkgVl)bXnc*dSm-ew|)2x z2^}rsr%)jpv{EW6x=2STQZZg%EP3XQJ@dvh#ydxcl}iQi$r2+A-C8F=s#vfvD|5ZO21#V1h{4SRpAF=Xx5F`mv*n>V$| zWu@sPc%5rQ`tFf5_A*zPOk7SCvrfvIw}kg!3HL zjq2IQS`pLM4@rE2U;V*FaPjW*oge+(pTX{x=Y_G_zIC*17`TihV(i8vq??bj&2J;q z)Kq}$!F^{4TpFyj9inScmw3yPcFgw(-NXm3rDOGgO!{D;cSv0MjIrwo*#0F9E@AjL N3RwJQd<~?!=>O?GwABCr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7aceb73d792f63057e62fb098840922791fd4868 GIT binary patch literal 783 zcmYjPy>AmS6u0jy*OI0x2!&R#R0!#Y#)7VeA&mq>RS<~f7R!wv>8bZs+li793I2wr zTUW%N!c=8JmJkCITcl8iPS|&e#FPB|dw$=~@7u=4Ix-~x?j%oKgnn6JMg9^jx&~Yz zjyO(HhGUE^c2XyEV>k0+uae!=&w@C>$U!d=_dX%+1O94aT8bN!AZq-!Fv7a^7S4wt z)$39vMJ^*pd%dKuw0D$9W%PHB3uR3b0laU0R^%dst1SrNF#m;*KE_mQ?n^$`v z;P}AYYxcbXKKLJ;|8&k$=NmiM;)xgedbo5bw zI8#iw1oR;p0jJ!09Y>)KDa~01l5sJ&G2u&Rovp_yK z>@)h_Y)`%EyUVrf=I+efojZ;n&I7c$GkrXjSBKN_W#_sT&Ae!(x&L71wJSl~UB$EW zYS&eDO#W&aXi;y2uq&ejH7QM#)kNxvZPhOn#tL$2_og0aRpge9T!p`9&~127f4~dT jHX=4hJ~V9ZVvKJBg!g}ll`6m~ATT<&^Tr~tK;f~vO54Q)ibRtyzz45c6t%Pm%#ytYvjJJ`OXH?hFZ zL=PrL5I=>5(=EsnVqjvcRA6A@Ik}vWuoU~f&!4~8-?KlpS`C6t{$7k|cQJCE(eNvqvz>ULd=R7i(J&I=M%!TM+y8r|B!ZP$L7 zq;2WhNAR=Q*^Q-YS9EPRRv>~z&+Kt!Sh0X8EHsLKB1q2PV}442bghVV zD^Cd6;9Nxvs*$ygW8ENbflctr1b2{QPdT;8tTRPQo$3_vBG<4c%-R$$ncfufqWV9~ zhQS9j?WUf;4f`=3sSiR1i8=1WKm@7OEnrd14(UD|Z~@wdlPqA7o;!$Hz`{64Xb^_H z$CR!naT+TucAzsD6M>pPqu;|BblAUsAx z{64V0pTzrqHc&^LZEf7#^d;Vn^$ZEYAxIzp8fV~Vxr@FM5Xhbw_=PD{OpK-pI!z1G zMm7*0?jr9@Am3v5l6<*zV<<#ijS*23-&Ro)37&^npZ|bAw%Gg;c(S>VcXR%D0 z^RMJ+29awea%K6QJ-WO$cGgN{ZfV$gcYn0BIl8ztcD73Re`_IdfvXyNXt*%>>X zoGGrCo84=BdcHXD1|BVcJd_u&N0=9(T{XzizryypBB5}ifJsx3ya;)@3I~>qaxQ-Z rqd(quQQ%u*1yc(@X&7g=Wm&&mVr_jT^WVtkPj}h!hU^!?Az%F$0(mH> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_debit_reversal_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73f791092597d61b9cf19ad720df6283fcc5eea9 GIT binary patch literal 662 zcmXw1J8u**5FYRAj&MmpLY#P15zQ4jE2NE5M3JCC0R_=4g|&%CmsNJX8{2oft%2W= z(9t4(3KgP3E2W~Mi*$q{731~Al4rj0yl4Dkn17G+_YB~-6K+qu1dCk)=O96{ z0!o%L=5SC1WtfH?4vVOa)0ja3FF-~gLB`0wh2B3+nq<`b1)(%>Cnh!Mt*=+#|JB-Yq zi~NY!jXkN<_IT?#H@U^lnhdfD8cu2Q8hPE7%dN)DOm)MBbWI7p?23SIOL)U^-RPdH z)sa43^N`3V_%#?_L>F&A-}y1v_!(_n1wq``>$iq(3PYc8OcA@~h{|tAyV19aZEC9D zkKn!+1kNog<5uYB(gDrAgZC&0EZVR#9nze&XU LU&hx!tn>a46k)U6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_close_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_close_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..369fa3f30d061a0945dc7f5828365699e37926e4 GIT binary patch literal 1140 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 L-<~5k%v1jZheWOU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_features_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_features_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55aff4100dde814c5710f43ecaeda7f0bbc0f0ea GIT binary patch literal 4057 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 E4{Q9&nE(I) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_features_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_features_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d59815ed6d8119d368c09ff35256cbcd4d25182e GIT binary patch literal 685 zcmXw1v2GMG5FPLC?H%EgfP^@Ks3L@PMa~Loqew(3P@sT7G+SVq+qugsyY|NRo^E@n zDHHwx#HUap8njX>D!NEVC{kgs?<{%djmIuX?_{&zo{5P;v#Sgp9Uc zG?^6IoUd977wj`1_%jBAqn0Bh8SVzo;`INT9SQbd9Vosl;J~6VS&!xe9`#{Q* zOibwkAD^H|=?uk;=Gl8%*5+7>-Oxzs4+x>7Y|lNCS4 zJwc|H4B2E!k@=ueS*xylw-Y_P^<67I!ms||JUV~#`Nog_*3W3`G6*_7wYj?JIx_IZ zM>cgkGba7el$%Hso4T}Id^>J?gW=qu&~CE6S8d@9m$c1%%cASvp6~9yx?@fI>p(xS c;xZ(JT*W|kFJN#1!@qGvdSBjMfmLnve-Y}ve*gdg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6eb0df43708e7fabd186771061e65f9fc69d9a1 GIT binary patch literal 668 zcmXw1J8u**5FYRAj&MncggAi^MMQH&&Vsa2Bq9V9C?F8c7O~9ja9Q21y|I0#+dl9Y z5;|JMPoY9IXr)wCbdiowq{3d`S(=$|JTK3Tzpt;afj#=)z5Iv({C3Lf#7nT)x8Mvi z$VdStNeOW{D1tIf!xo1{RK{scAb{tPMW>L(NWO(WK27Rm(D~z(0ckeg;K>xVc~zNQ z3T&f*{B?6_?jzT>L$T?#YJ{F=rmo%1TT@XW{t5@X4Asq9%Cm{UU-Xg zqfn7$O{k4(HW}kWNW$354vt|fiPvXAhq*FTTW-+sRFqqqGt+P(~exT`i-j&2ZrUvp?Pwku-N??|}? zG>NGz+k&6MmRA_g4GQfR=||KS-f&6V%(pDM?(X@a?yK8YwVw?1eakLGLdaDDWcLF4 S7clsnM5O!W=nAZ8qyGaD`?g^K literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_features_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_features_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45c33d302540ec03c7327ccb6bdb2af7f7617af9 GIT binary patch literal 4120 zcmbW4O>7%Q6o6;F_Gaza`Ek5c)t@wKiByt`wyN-fW#gSRtJ=Hn z%(|^_NYDcZ&MhY-P9QGaK;puk3so=HN{9m|Zb5N5^u&8_*Y-NyBqovacJ`Y$@6Eh< z^LG4Op^#(nC;y#w{0YYX!k5lpCTeVbsxbD1+00g|tfrI|1>31=s-~7zYOB?BEmO|a zw6dnK6uZXk^cT#|aODRzv{4=+ssSD1T9@iXb)eZ8%@WN49gfi)(LB&Xj1ChW0XiC^ zd7@)L$78fWvU@XR7nBa-eAp5Yp@h-W(7CJJMRxz;J{Wmh%?%!mi$c1TR8i!}bIZn<`Fb`XO- z9ovSbNG^kk_0DQds|yF3-Lks|(XnsA)Z{uBG8lJ4V)|V)pdlD=(-%&iU#)r%Wl(fn zAf_Z_t`i%`(rUw}Io+_DHSYQ_B`+doy@THC1!3py?HKAUuGqEIUENA)D9}yQwQAfn zgPdvBJiAfFcHT7aH>_&dBd~4-qo!%OuIF2Hh)h$Yk*cu9@7WeK*~_nt4X?(HyY3@n ziOYMwS2sTJd|o}V=y~@bgN#M1a*w;V@qoJzjH=boNFdCGt^;V0^#VBO`? z2qS0IDOC+$a0@c1X_&FS4%corD7Ve^D7hg_nBDXBrqE$dB(NcW0`Zu&iicbJ!ar(i zLfc}gjJBzzGWw>*rr&7k7XVN92&JKr`Mn%r$9gm zvy(0T3T$&OmK5RYP(68ddu;Pt=x66>Qa6elsMm`oqGW#qMRN>>2k-YHwR1(TwEDHK?B3daO2&Tf@)w~(q2~02iVI)*g2sFQ0 zhs#=cy&Df-O#aB{uEbwY;fGE`qjbTd8v=c*=|e}K8LY^H%4ZQKrlb}9N2kr; z(H;Tu^Fq|tp#5>1!J}OS{%bZt2lbQ2=0ZF0XwSxVz*s9?Xscv24@%2z29Nd;RBHAd LgVGCBqTv4rU`eMF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_financial_account_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07cf7c93647cf1bbe858d5690b89cd4fa508bb5a GIT binary patch literal 5296 zcmbVQO>7&-72YM6t0hHIKa?z4Q508EqA<0^G-+cyi5=_5N(?x(6UQjZqFAiBBWr7N zm!4h5Vo@N6I6;tW4pDLlT=deQmmsI~R`lA72wsG}R`50~_sW<_A% z%zpFc&D-}kGyM11SVn-K{lmO*`3XVz555Gyl;1h}QWS*G1YOX@s!$WlVl7cli1?nU zCTmhzs-?=Qnp~DeAtAgW=*fG6E;0G&>28aM9>LBX91mypp%521av-v zP7(S9pbHT+Pw10?E=JI4LZ1TkR0N$N^cR3GMbHz3J`Lz{1f6X@Q+W2jXzW75l{Srv z<4RWz+bJa7k*kKoxK?#XOP2EvyVEc@)7|vD%{tSOvEsX!8p(e-`WQN&2}~%9x=>Es z6j+i;EOio4e3-0@uR)szTu=B&GDIXFNd*WSVJVi{Ax?ix4#xBmA5lUi?IRgPnxloR zyRc=LnprWl>RP2@HB9GbUDq6TUE^BKc4f9#*G%1A9>lf9G^fFt?J7G#Z*?HQ#qVld zH_Tf%nBzcWyZN0EQ|$m$YRu6<8SPKwzNLS^vhs&N+YWaX)2Q4wwHk9@7_`#$s^);? z+B*y;fkzC>wB4DykE)<^2$u?qtEeilsx?b*RI#5`)jJKX>Wy$249C%#ZW0w4 zS5?h4Ek`5Ss>(4hzY>ms3P0T|?pifgyk+hcH<^9gvFgP)Er(UltXtM?`0nDmR=Leg zz4#t8-z!#)?P9&@>{{katG{}&XhU$FsRM&{i`hj~w9blka!b+SOtTxjSyXod@2Q&S zKD9yqQ$5brdXuL?6(S?hvF`!-P&mxa?o0bOK2Nu@OKoZCK_Zb-9>~J@{K5RCR&K2= ztp(8hGl$B#|0NUi@{y28$q(d!bANf?zQ3`*_xWloS7=LxU;@hcWh-~OEu9Xag_T3) z6_BwIk-;$%Nv)nV@ynWU^a%|2rim_6@Jf0j4CkbeNFhRr#3a2x2_(Hg2_&78fD&!g zmy-?UjQL285@ozF!AC(Mw>T);f;`xO;J#wp4e+p=t-ys z4GQP2s&&_PrwkJi)r)X-hp?d}U28a`({-&`W2OTtSv~^M??b=o8sXvc7C0;r)cv@r zP*V7HrLR&vk1;!qWCjVh%6xn3Ca?$X0~_XzHj%bt*vy+Q_XzYema+@AKRczizM7xv~OWEpK$%|s!|7hu>; zbJzr-rZW9uW4Y3{WmS2cwQw#8xB;D`ED*5Pc>aTHR6jh$kmp#6Eu!$#KuY`!cKbX< z!$`_FSVTf@L@0he9O*SgZ((XC3lcvCOz!z%Vz0{+7I z$3}C4vC`9r$_6+z6LG)y9mpR49glJ7i!gD3-DnueACa$XH-zHX8_I4=Fx@@dwaKG% zw!a>&Rd&H@mECx&pudFmd}s-U~1?D6(m*?Adagse;V0#trAQpw0#b8+^vk;_UTdJl;S1 zro9QLE88(DzlDRhJJGOJ-3QdWfW$`vYD+4A1RWbQEG815EYB_-Dpw(;W*kLf;TmR?BkH-MABiR_XC_wQ0+B=)d&0@>&c zg8#qt@2$8TNAfRtY^+S+_t~ZUFSTY@+R{pJotZgxKiQgIZcEDnGCFlIb+(l`*Otyj z&MYV?-awdC{RZ+*5olSK>Rxg1kcF6!(?0=CsgUB60Kz{Kncxl!|2$+HX5?)wIG=kb z>RfoDrS}pPZrld@PqSneG7tu-=V&_8;(D}b3pzIDKG-I|xPSLxWux`fW-EWWEnN=m z0TvoLcy6T+v(t1WFsjDm7Xg*jISH^Bvo?#teNdeTEww&yU@#;ZCfZDd>-@2=iW zmd@4-_=+bAItp<*jV$3S?XtA>QK6@riq@ud<`|e9=m^ksazMU? z0qV=p|6NCbrZWY=KhrTh$R9U1=hGauyvVTaOKCrLuHz;vY}K+{=7re=5H9;UBB Q3u010)8_XAH00=?0VV#knE(I) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c85e300d08b4e4db8bd2dea17f0d16204297c5dc GIT binary patch literal 662 zcmXw1Id2p(6n>s-m#|4dLaaEdh-Qnd71Bm20umshfH<0=u$-O8X0$W*#P&oxHSik} zI$Fd}p+Yohq*PRNk(N-T!X9rd`5k`u_xyczbp`Cv|L*4R2*7WrT%C9+EOxDM0vTka zfRdzyI5{YSGEBox4vVOa)0jX2PaumvLKY+W7W()!X_8Uzk5fjZU3-N`HEQ#sGPxAm zzC_P+Z7jdOFO4(i3bTn1^>mpB77wg`0thL|APwFEh8SUd$G*CYNk(=oZ-PNFzvB_zRky5azZdBHmYj!#kc$M!_8AP%VDvYM NNdL?D0xavI{{!0jv#bCB literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a3ced066c19ddfedc92429ef2daa01c4adbffec GIT binary patch literal 1016 zcmYjQ%}*3D6z_cQEMFUl23$ae7?UAkC(4z001`DS8qv#Mnle+ChMCULcFE2e^)E1C zxp6iADV{caF-?pnp1hGD9yr;~>=2st^}XMFee?QzZ@x`Vjsdm!zb5(R0PtHI)lzn` zE;iJ00wNF@F-VNIVQAfq&BSV3iQTpf+lrmUZMz0A!BY^~A3)?_=6 zZ^)^)_^^w)c%2E7Qtq45-Xfup_DjNr@{ez)LWdBBqp(a+N_%8nd{)W{z@TkJpl!Yf z*ur*XtSht*u%mQyq`TO;qfmud*GR3zM!0?BmUA8BsVvT(sbfZQ?v1$GbzGI*(@0+T z$K?ETx|?=s^o}9Q_b}UJ7zz9aF_duWqD1+G^ujJmNh{CYEkzj!$B#^wFGSVRwW++cE6;L_$(@5UpLVc$|s+1|)_UqDvkfH=bD90d7 z(x@A2eFDP6E{aDUi>RU+5F$!bl}2|(#aLW0=BkG=Jqk>-{{>tq39gQV{WQTrhxURk z%nwAG13HWZXv`eH zs`Qz~{?1@}X=pE1$mCq#?(dw|2NTOfd$~gA=7)B(G8)bPgFZjo?DtMvgDHP#`;}+m z-q5~V8S@X%!a;LoXs;9qo2v@j_B}aUKClH@IrT6t$DZkbL%Jf*6ki3o1vpRE;UXSIKw_Y~%30qXAp*CMo;@mO}AH&DDlt+dP;H#rcIjQmNvaC1)&{jy}~onMAA6k z+ycqpkmQzQO8=BxVsZ(B(nC+ZZLrfrPJNo$HMG-#-TCsXOhaU^R6rp6OlNQn zuUJ+!56z5XMAvGXVcrG zd*=I5GK3p4`nzDz?Y#?Dm*Nw&8pX41$aA~fZQM(HcC#(3 z9jw|0$Fl8ko-WhaI4|rPjFgZ#O?A*V;C^p)Lc@ ugQ33wF$+A;dmkh3>hEat4|M$)T|bQzFL^OIMKGOita-^x{vN^9c>NEOHgu5y literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4626b43544ddd7fe692958f5d1562941504238b5 GIT binary patch literal 980 zcmX|9%}*3D6z_cQEU z@W$2nr+9I*7t+Ld@Z@dHiU&@e(L6N+)boew(1- z=;>GVxJ{*cQ7Tq&35dVTq-wajvda_|B-4|7g)%HAXqwm_){YvY!8?f05JgQVMNRiD zq8{~^0HZ1j!Ls^?ma6P_@VVUi?Jt8|dDoGCpm6%opm zkQRv0@O6{`lV&v4VT&-cPn4oasFc9cRoPAwN>h`DQq`7waH0rfPI8K|p1?RS(spM2 zDU6TXB(oU-gGSnuO6VDk3Fie=n?YbK{9%f5CCv1{paEEP{XRY{avC4-)A$LMN2(~} zXN98K`c6?C!CB%Rk{rQ(;}gnH;*9ObWk($rd~4&uW-MW(>m?A#0hKZQm6bFuha$yF zP$Ju+6JutD#A>7@&Ol0RX&YrnL~xFwF^)U|^ATOn-#wSz`PH7k+IQU`>W8Sdck5dI5;tYQE`WMl~+s}7?^frD*8&^RPch&l>qvN6POAc+uc0f$}2`NW^ zlbE`)9e5J%dxPQJpwMoNo}sqznoHVdzGu-*cgJ(Os~%X>elgHbthfpZA=e3z?Mvui R!r*Tbk?xn#HCWX~{|CiawbB3p literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_return_inbound_transfer_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6195a3ca77d90df93cb686d1e3750623b083fea9 GIT binary patch literal 694 zcmZWnPiqu06n~k2yVh;1ATEk{C|*|R2JN-I~@-w;a1%@+&Lc10Ffpv*jT+lA^HH$9#n|{Pw>V_5V_XB;$lCzKya-IO$ VIECRUjD9B(>3_L<4wiM^e*waz!F2!t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_inbound_transfer_succeed_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5910744c695fd35de639bf75fa70c5db41ac84d GIT binary patch literal 664 zcmXw1J8u**5FYRAj&MmpLYzRUBAP357D*dj5g`E*3Wz|nLb5jJ;j+rEy|KN~Z6AI^ zLPv}EDO89Ct(1z2F47T-RM_i_CC_|g&%^VLzpt*YfL;3EgNkx$laZWm`=9zL@tM zSB>hq$2!rsTR*ho6Z{$sFQSWs&v$+dHh)H&S3wZ>)%vZYqhaVPj+ye~Vbae>Ir7`Y zG?i_@b8z1q4Ce-gc0=?8b%obl(k}Boi*EY6p3;eWU`_kMKyO%a6%s5`k!z!g6j$m(}gs8`~S*)`Z`X z(9t4(3KgP3E2W~Mi*$q{754gK$uslWp4T`2zPh>scIkhQ@(%>yw*$8;UK)#CYn(#{ z87ZJ7DIv}dil7YBu(QJ=D&sUJ5Wp+QqBF>1B;P{spC(N*>iuzGMB25tcv7P_2bIaC z(Do#HlWSx3-F<1?Wv(!rcvml%abWS(;&VVqNd{@~9x%iRzV2YiZ}+BA8EwCc*GMj_X=YABP-rdZ{>Vw0{d3teC1 zs!=^xs}p^@^#dzD!LPyaBD#3@`Oc5Q=Fe#JDhT4fTEBhhSQz?*W2XFYnDo<8j`}t+ zO=au%6l{3FaBfg&H$u-(mw3$u?IPc^)=huMGrFtpTWG%*=qFZOg@lmn1jzO!3@>5y PH;G99%lI0s>b(C09>%la literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..583d47827ee560a793521839acbb2e7440cd4b71 GIT binary patch literal 4360 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 R1*5-7MEYMQH{eto{T~UywgvzI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_return_outbound_payment_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45c889a78e68d8afa0aeb28fc93c430ef5ef2bf1 GIT binary patch literal 1262 zcmaJ=&2Ah;5bmD8omqSBIKf#F1tcsk3$jN^BqT(_Aw+^h~P45>KX4!7{o|jUHw(nbamBNzm7&jf?xgD zwfvKSkU!mF@rCEg>9?pnA%X~6kdjU*b-Gu0r9bsM-7kVNoQ7pIjmp7vK#4~_CnETf zh!E&=zyHrP?$8L)0SuOC(#DhIm2;U;yY?kKYM?d`Dw8W&BNE)tYcuif;C^mE^TMv| zD&xFz4Z$hNQ?s;K6kH~oIIR5O!_r}pF@xo{xA*`<~;{Tff@1yx50R&wVAQWEL zZhsQ!6?B~p?HbQAY`S4tp=zYq^8B4vKY+C3JuVN}!bu}pHPR0quXYCYy#!s)@``0M zF82|S1!P4oQF|wsnbI0Evy7jqLV)giY_I0>kQcdF8f8=Nfwq?xc-COB%vw8?YT;x< zWoGCUWJH-a`YZH3J0$+^)V7#tapwHt5U z<<(_4K=+;tT}uB<^G$rar~aqf^^@YNKSVM2DW$I?LT~*}#($7IFUg&=Xh`E1@17Cd Q&aQ3H_?P50!L57q-xtziXaE2J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_payment_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7bb48b640823136aafa0c188f13557cd1e81e34 GIT binary patch literal 1691 zcma)6&2Jnv6t`zQv$G%BCZS|$a*MbOZ8AV5#GyfAyA>dnZ3T@g?Zuj|t?a1tRoh## z=YqtMTg#0r;=+;tflF6=sVpH5oVW#L%b_QpJ-a0-3F=6Ge*W2h^WOWt=U-P=8VEl5 z_h!=e5&FX{mY=s!j=u%vF=B|}6lHjTvC*B>$=rc!bvGrMH}Eol;Agc#4I>AAf*AQ4 zF^}V)+{(@%u&57cjn`hHb&Cdo)=!`fi#7mlodQ~j|$||HE)^tE=9%r0V-Jmop*f=$Mi_!<GsQeN~jvr-kC_PPZtGA5j*Q^88_x zCikLpqDDo2b@#pZBMF(^Dd9kTz-0u#NlG4-HrPlB9?P+qM6_6>gqBrK=-4I&mL@B^ z@=@nHo{_Fyi8q$l&Ze*n+ovgH z*pf$>Q<29#<}MJjKwM@?=7jl{)LIybCK%E?uTR>?!;yC5;V5)O$6Q?4FHaj+X5`8e>TEv?x_`M&$3I4n=O6h%MrGL;Jv;rz z$J6PDq}r~TIH4;xU|R>Kx;af)KlEM=W)%(y8_X+ln49*xDHPcP0dcg~9({hID$JR) z-TH4;aAIq~Teh@m^#!u5lYfzytu8j<7up++l2U4tWHHmE0C^rQ=Z0hKSYww#kspA7 zaGD$6$!T+IMz)p|05Y65HfLn>9HipISnG!^-Kn~9mx}6Lq(${G3iHBgALlqSYO2BUsy}V{*xXx>Pm}T@xK_PG9|^+>h9R$mIC3$@&wYfi{)Rfg uqrEBGoBII{e%PHOnC2U89Q=G~j$oQ^6VN}KBbesx77l)yJV!9uxc&ja8jf!O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_cancel_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_cancel_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86ccb014e00d864d684467e50f9f4c78c4f4cb8b GIT binary patch literal 664 zcmXw1J8u**5FYRAj&MmpLYzRUBAP357D*dj5s;uj3F6VLkSynRxU8~kZ)|UL+lSwf z(9t4(3KgP3E2W~Mi*$q{754gK$ur;B^YDD*@2jgTV3+>)IR8KZemmoK#Y?c5Sa1#* zWTb$Sq=Yye6hRrLVTZ#aD&sUJ5Wow_qBF>1B;P_GpC(N*>iu!Xh_q{O@T5j<4l0vN zq3ucZD%Zy9yZh3(%UoeL^`Txa^T6VXwa)<|B^ji_d%zGQj33!kw=v1cuGLL23fql? z+8oMSWbYIg`Xj1mTuiZe%@r?oo8Y|SBHJJJ+CF1~m&jPV!dNM@x^Q^F*h$R`f1?}` zDzc&twNdRlV_XPnc-H}AUtwYI;O2}T$r9;I%;|H~$3|B4r8HPfGQ~WgYkoHMM2(3Tf3nml}m!*Q%jRF1uo8*%q62eKGGj zt{T;Ik9DGNw|;2FC-^lOUPKpfKi~N=*!&r7UIjtiSL?Tqj)tMHIA+R^heQHNxRJVEV}9MdP*nifi>+11HECzRY(ZAPJrxO!tfGC Pf0Kyxzf7*dsxJCJ)Y!Da literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..936b7990fa8c5cfa5476326856b1ea7ad71640af GIT binary patch literal 2211 zcmb_d&2Q936d$j>Uhh}7i6}`nq>u;_8HG4Bm0Fd6)Fh}#z=BHXVXHE7>`7u}Z7<_l z$X2}px87N9IkxIQ&|a$EdttSgXf7Oj>Md249ys;Q*xn{-%Au_#Kfn3Sn`gh@`|vO2 zasj~={ZaKkFCp}+Sfp1rQ4YQV#DESHMv$BSzoW~ey*PL zjk=+r4Ehwg+Ee6aiSoS~`>N+9ssoxM#sDoy)BrSp2rWvq0BG?LT56Zf@^8YOsqmrC z$io(i*qtWx!XPp;TwC=V#MSZc}Q z;3rU?BZBIRi|U#Ch^Rz!l_fy)h-5*}B)U$rmeG)M26Sft){G+!yUj6Ib-T2sTd1}>W zHb48%Ua>0-uKXL;COZe+l~`60pZ#5D^5iWh>{_L zOUX${Yi6Ds7zegbFy;k}{m^YSgkHkFENoggLPi>wmcww{3pTA~+u0_8Yds>tBdg)9Tg^7) zAy}Nh{Js@Id0%RRfxSs03tr+iiPe-Twix6)YSFfZ!=w^0OG*JdvKAn-q8R3zZ7QaK z6b2~Kk073*y;9}L&HYR!YwYW&GV=JKAg z{JWZ&(GO52tMBWv8}oxb<2u0RQMf$T(K`2DF#6#p@Rk3KHlB3pR$7<*Igw+WT&@PQ==8( z^%MxMF&G~;Ge<`SG$w?wj`Mp)XcI!{LQD!FKj^H`q!S@Nggd$b0%#tc-d*gD&i1s~ zG@|0j%aIG+!c0$_ITVsOcXCML1xG_l0!T)c3}6_HzFJEL;uo{CUw-``y6t|nYzNz) zB)wBBK8p&m40j|b1xnsMw`V+nGC6&yOkx^^<;f(Rhn=G& zh^Z|yb3B*)#{U&L{BTs;+2Zd20WP#L3{3|=hMx@21%y2g>2}T3PozRt$4PvMqM$RiFQ-24j$i4PmwMXLp}G*pHM7h|fQh zkDNk$I7TqpVI+veq>5`+&M7em;;A5OR%S_l+R^mAF_z*%c#Y1%2?g%xI*5H$QIyv@ zQWjsK$yexV7hUb^bBeKht&iZ*f1ntO@k6_h;L$&=E5^@eAHkzP0%A`qzgFQXGyW$J CfjQv- literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_fail_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76943aff3b134859a304d89b806f8a003dc751f5 GIT binary patch literal 660 zcmXw1J8u**5FYRAj&Mncgg6l)iiqZloCRs46cGXnlpr3>HkOl}TvoShZ)|UL+oJFr z5;|JMPoY9IXr)wCbdiowq{3cbEO{QD_c#8&yu1YV=zr^ZN&tR4<@Ur2VZLL9bI2eg z1(YNu#K}Pslwlfna#%!VoW=wKcnMi_23d^cTj=A{q)A4-KTa8ucI7Re)TqsVWpXLB zeTiP@+E{*fPa0>;6=sJ%)YC;Cm_M=lIUuAYgEaU67-EF+L;LD3CK=hbya`5OyS`tW z16hmgz2ZV2p?bmd;tf~4)NO*Zii>P-)NA{U30@*&?Gj_9%<96)1IA8jUU-XgFsR6q zHq=J7tBi3Wq~TrvjD3ZXM+d^t*BdkCSHq;=jdH-ZiD@d^ zzDHoqD-34_g?0<{@N|V&T+%M{JuBVxw>_Xc>b_O&=K}r6lB3?~A4VHD${{eLevj+eG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf2467f0ab946f780ab7d8d2c58d6fc58744fc48 GIT binary patch literal 989 zcmX|9J5L-j5cWQAc^m|h2sk2yfaVHV1zMB>MGBD+M0qsVSmxFTtJ}2~+l#m+MU?dE zARTR#pOPl0YmlWVMXGccT}VNd@$Md$c0BX>o7wR<{#LI~B3SZYBVO_m`elOg@+xPv z2hJsmP-G=2wOW>Cd^@pIr{xsBlenqZ@>0L$TgXPwQRIF=kw>ksPFbT>>-o*vZxb{v zJ@bm5t4`f}WL(F)M}o*VtcqDPcrR#9=*Cg5j(N_a zH-a$Pp~BqbB@rZ*x=vXXvlDzwJ6urh(~FF-NY8a*Mp!#02`23}v7%(DZcB1}05tr2P(wi#_8~K|GlW-lkFlTL*%wTrk6e3M!X}&{=>nBPqpLPhy<% zC{K((jqzDdlJZ2rz>#*O5_%S6!Wf5aGZ2i0TO7qq3G)iRpb=Pf_dY!3DGg89Mfi-$ zuHsp^&lOEJ_c-rDE8!k#cj4OMIc4Wz5+8?IPn~kMv-M;gRVj)SkQA4^t*j>kXrwU4k>_AOqMP}ZE7_l4AGqs7+xCK?kLrt8 z?$zth6aDG6fx9+F7ncWaV;oE`e3JbsK$geIqt$Dt|8QgAZj6!o;!QC7{lR`ec=5-v z>;4GYoAA7Xjj$YC?k3*~*buqdB4=H=TK=DliP^)isBRCTTlFuhQeNuzh6aWReZ yb`4XxDE}C|yI{AR-&3&)p#`5b_|UN|>()os&JVQk6K((X8&+_=a*JRqvi}46Qx8x8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_post_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dea858010f0ad9d7de063f0957a3d2b98ea23239 GIT binary patch literal 660 zcmXw1y-yTD6o0c{cj5t(7%viIL2RzzCP+&th=~>kh#$>1lZAO6o7kM%=?)4{d@C$d3g!!(f`)-lmPs8%H4?Zy?xeI*SRn|o4Db1|WN+3^$wr)Mb6 zXptY$sxc>0Y>&5|Q=J>!tgJ&eK}~I$yh2)a?NXyK)3s_SlZ%;{Sq#N0I~DVOXF=L1MT7(eN>G4ii&&d@xU6p1-q_yLZ4dl~ zgpL;RQ>YLPS}7G3U8Exvsj$}&{=-%hzX@e(X{EI0!W zoD@)!ln{r5A}GT&>~L5_Wt_$Y0(b#D`T#se@-6i7Y0@O4-XEuoNV|4`r!{J`UzuDA zZEvDixi(hb-jl`|bA|lahkCxu1B)kCKLdo6a7cr9fFVX0Kd`rsFyUm|$|e|v?c@F0 z9LZYnw<;6*J*opVD#sbV&QwZ-UvC}#$yhXWD zsK~N5)JC=IjAcSdlXX2X_7xV^2G^hHi7b&$#GF1yJvFkTFQvg^b63h~E+%w0JD#H8 zbcSL^i~NXIjX9BGYy9*X)w#jV$~t5d)YO*AE2LHTTxt|%x>gNka@iL%%f^^mcE-H# zxN20-J=d|mC4JwrkML_SJde)be7^N#u<Y*=k#Y-Y z6Vp_-1wVzmUST*lD70IoA5m9$%_Z$J-?8YrzwL**qwZPNelpOHEV~Q|Ay)~ItqT}l R!02xhk^Yy%E3l%A{tv@Yw&wr< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_return_outbound_transfer_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94ab11abb831e4ef504754f5b2a40c336ac3d353 GIT binary patch literal 1268 zcmaJ=J8v8}5avE_@1&Eg#PT6VQbcgGNTh{rAdMe|;UFmtIdGij5P+bTW8Ff#KZu}F{r!vwA1cDT)(w!hVg{usA?+%DyWC0F`-^?tBGvE9+91aM6`k%|i zm5`9X++p!WbLI4BR9+BHxL15Et z;JpdD|BRCsjS=lZZ;AG&N!tJ0xul+5djO9c(B^(^3Mn)q;k`neG_bvUg#pD%yRs{d z^C}c@+kZH%f!{51lXsVNa(*K@{RYo32#~SI$=LsiKmZ{`pCRfN#N4}ydmnM`&ym0( z(=d(f*Y_KZDkk(JP!GT~N}NZ3V2V}R#&A?K!R?Ln_Wz6OZ1@5&tSGg;pxP^d zQ{ExFY0oB<3RVH7c0g$*c~d%lmD0xzD?5vdF=>SjBsS1S*>y^p5Yn)=jFi46r)VP| zo@WzTLAEcBvb&%UjI6WorGaw$j+6(5*w5~;`~U>c4nZ7dWwDplQ!|m``p(sBnZ^!m z*XY3ZL1%bPQA1X@ug{DErW-ZQsGJv#nt9b|_oj~+y4an1s`@T{ClXwG8^tqnygGUr zzWni3|J~}=@8Qxy(P{3@t=L3Ge~ALCKiE7@)@OcyxOoz+ z^am%wa0M$q#EO5uthfu@#cGW@GVEZh+wrBcn_uMy(Z*(4BeyzwZgd9-f^K#>Az`yNN#rIzpY$9JzV-L6tlqdy!SEjuKz(sf0A48$gQ(@;3aQwpAp>7 QE^m0rujzY&Tl?mJ0Ym6z0{{R3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_outbound_transfer_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76b5b620602565bef4b7359cf8a967b4f6c50fa3 GIT binary patch literal 1696 zcmb7E&2Jnv6t`zQv$G%BCZWwj$|>S9N}HjrgoM;oB3TNDvPICSVlUQoZL*`zS8Z>} zo+%PXZY?*ihzoxLcP?G+rLu%LaN-t}Er*_X_Ux9VBuE{}&(A;GZ{B;q_x$V9QUk#! z|6Wfn_z3-B7K_iDD@Wgg@)$A1aEdbA$Jppj>SS);wYr;<%6K0=H< zLd@g%C%3ZG4=m~fTI02sXx*X#p!H*D!=ep9o5#@RxD_t_Y0QOKw?E?#MqH}frAmri z0zz&jQiZOr-AWV}ajKiWLYY&E;7r%=j7!eC$v_P%hblSu4jsJ<>&J+rK4z%z>>=)Q z!o9ZuHG}&MUx&F4k%R6UeM~}6zkPe8?iHh)-4SsvzvN=CWU=C(#v;z7_W3~>=S*+@ z-zm5`xS!?*7uIw@X&z^sQr)05E7&MCdW+Hrqd2X01TcsM0ij)~ zgg!@Uoacp#ZGtHM5goxEdhsY478#HB^Mk0%<$YC@(Z_}2>E)fGFn&Zk;1ADP^pNKd zqcph}m18w5@@rdHu0|4ad%1)I@jjOk{3a=RRN81GC3q}HVjR(8o)ik9*sRczO$)6~ zZk1zEH_jRnz>x2N_y#>|b)JwXpMPJUv^J(>9}I@tjR(Wf5gl`Pc_b-=JWG`f z=vPpJnkcA1{r+p%+>_n8g}Y!tya{%Dp)ZzT7HuQW8DVK(F`8*vv1)`((|MzrK&&v3 z+y()8uAhH;;loM&=9JuAB)PfzbaivmxHKh~7Eov7S+M(;>va4h!ws>3k1Z`UitcyV|8K9 zobJ|t>w*(o1>T~sO~22PMWy_UyzFWvoeJ3Z)i&JuOK>;9xNn?FV*3UpHK8&?q*wUSdBvhmpi6saSZCW+-vKMPIHi@Ws&HYXd4B%+`T6O z|J`QG9zuVpN%c9Ua>_w@jtC+~j1r@37)m!|GqJjs)~(o1oUW6&T{o$9YX&mW7l_zD zAmUKtXRGkj^)%`NTBEfoTGyxtX#EV@7&iQwKh;LxkaLgdlL5`egT7!{nge3rW4Z7x zS-ZysKcW$3dz5?zAu|Co6!c-p z!z7n(m}G-gNG}?2PSa>8X9&$B&NKnir3d{mC35~-mWFA>!Wf59q<7r@Z?9jaOt4U} zbmw6>OlT_ZQ?Z+o4Jtww=W>Nj*Kxlvz=^iNq%iSKX@$|Qd}EMfk|mH37U6whT-H)5 z_A}nw^y|{YI1Lkuv20+RWMmL4eHP;6PycG81jgXTSv^@A@nLE~GUEbGCIf=(FqXi9=Tn(hTL+Yb6exLmrv z_Q8ii4mEPC4+h~5%>y`u^=Z)8Oa}sJ&j)-MU|yyJM>-#BfP?@QDkE$CA+M{Tlz=`# z`96qe=ycP zb~RaDKlVC*S>~#HicH5naSOk5i!T<}M$KSs2ilTfts=R&yx)iA^W{y9viz#Tc8FCX zy6lIx@9-9ElP$>Yc9{021!W89CHeXPEvv_Q2fTe+ROhDe@=GfAMJ1M$P)X*?O6bJ5 zm8P%vmeN#6TKJ&k?|}fy8}ly~-WfG+j_sQjaZ4-5-UA?R=?rm&8|C3*mO8LWo()w0;bMLP9hwAn zX2Hp8bf}ZK5+A{z-v;pvLEW|AJ=z*w@yE7b@v(UQ$QoTb%g}2`L5^~@2~W}Gq9@j% z2lP9Ov*MxU>cx~UQ~(66n^Mjf6HE^TO>@<_MGAG`H83yQL?=$U=jX5R%DYoM37_y) zST*3!KL&AP8HVxFMaKGX=<@IA?g-tTxYrEt=-LFqFzFZ#!~118K`>0(bB1?pH(y#X H>WlmXJR-Po literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e5970c713c669bc56726aea0a870919974a71bf GIT binary patch literal 1350 zcmZ`(&u<(x6!z@QcxE=6v}xLANlH{TmCy(^BdDO4wud$X4pBgbURFrfWb93>%&*#> zki8%d<=$JvjU$LZg-cg^L6#5)PTUqH<M@h9egz@8QtZHN}5F)+pdVtUqJj4F*LF$8ugwcW;5p#fRWVM-r!6*H2Ne`c}gz*zbAHycNGF$v27I7x^GRrB? z56J-=7lLWbPRlr_dUee6I8S(-k~m367-*l6JkA&)x=%<}&?+_lfRJZZoHjiI z!`8GdmC%<6iSxXG(dGmR5l-F3b0v(Ren#hD(VOq0qatI`VSXCzGI^|uGWx7gEWPun zD2{_vO9BjJLuZYAMNSY+cW2OhrrCAmsqH*$U`3_lBg`97GrZCTc9 ljI6uAqxC<~gDHA&fp1v;*|!%6nu~{h%l|2Sji9Mn{|moAWeNZQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_credit_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5af1a1bc34177f945487f1a5bc91f698f2e2ca12 GIT binary patch literal 664 zcmXw1J8u**5FYRAmT*ZxLYzRUBAP357Nm`?2uM(%fP!dNNY-*5T~@cR*uK+kAAUnZ zM~nC=REP$xl!}Tj(h-VOjMo=So`*g2jprMG-`v~)TKeDP>;nV%ZJpZ{u8q~0jB}76 zSq=qD7_+vQdxf9)o$cpA5hfu64_<-{&OnC9zWFXciJEBG`(vFUYqyT^bdK7*sZCau znofe(nKq>F9#zI(W(wuRr8>FBfz=c8&jBG}5)$t{ppOBDkLc8Hj3hfC-FQR4-8sey zW($ZXRLlU3hSATF3T)g{y=SP3{XRv$ad10)!Zv!n216OfGh~0QZ<>sR-`E6vH zni_B%+;@(^rNL6$Av%J(!dn)!L%v7WO?==e9jgcA(gy>*L*mM3j9o{-_Ag;@3B$ip Nz~V3CYarES{|BCsw3`3` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85edab8f8230e550200868c5bbbde92bec723964 GIT binary patch literal 1708 zcmbVM&2Jk;6rb^acw&aYNTd?NPI{wQcWa4w5DpBiw}%8yF)Vaesy*n z;tLWgJ#gdJaLX0(5AZ*5!SW><331@WEhugeJ@ICC*CbVXVWoZZ<~MKNy!V^;=C`@I zI)X2I)?(N}=r1)XKdVqqIVew1fC3z%2=_2ndL^txM$gc?5t@AT_4dr)YGWJA#(ny5Kr``WDp(R{fS7k! zCfbIq-eH1rFO)OgL?|o9X&`G4hA9m;nJ@hO=v)?Ypwn+*{sd9f!vX45wh=X`8Q`0M z))2KouN1mXtrb84F{Vg0#|qp$v&$-N0=rnP7Kjr#1yWOp%1y4^r#@x-5GUPX;uB6i zLGO9oi!y0@Q8I{ybo>G5H1>ybCZL(mna*F@^dR-(K+b>7VlVcY7ZT6+^^Ol->h$xN z3FZkF@80u<5sk%ND)tgMTzD+ZIIPk(^#bA&}lMpYC69LD=^?{9%3C?X`f}2XHLi-t=f<({1bN7;n zy1Vg#yGgUYNK*H+M9}a?CrSDcz1#8pK8*u+pT_%c$adUx2#LfS>+injW>5_`QZVp# zY39NqETwL$Np%GF0YQwRyn!8aqQgw$EaMl zPf^9PPwd=pWAVrBAHEu!tJ;pY$~Z2r;&)*Ad=&?{sIsztt-vS{UEM>oZSf{-lg&X! zcD%ShEgVxo%gD|DSw7oY2b|r`i?G|a`6U(lWhEAsP#4UXl+c&1V#>2yRho)Oi#90P z+aQ4N`uy(;Z;a~K#^$w>wJU4KP8V3aa)!0sjq-3YNgY@@PZBjXCDydzq4^7>r0qXM zx4owAHE<*^6@5nbk}#lLm%nV3U_6L+D3=YM3{;c^_k0S^otyb{@G*Z2j4}M#M<7lNjPX+& t;f+7g(x2$o2;G|4uVUw@F+ng)I=GIVU)cn~FljZgb8OB%HDJ_<{0qSKt``6R literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b459724a9ca19f69dca8c94c5e57c6c53e3f64f GIT binary patch literal 949 zcmX|9zfTlF6rR~%w+D9`g62+8LxAQA*a%S?VnIl>AZRc)*Gz_;0VeFuE;Dn4YqZhc zjO?WKsj-?Fel;PEp$thAWyB)4Q3mETK4ys~nXbCq$QTAU;PNbumL- z=QZLk_wE74eTFw-uUjOjurcn8aSu4|4W~9f^=^)lMUzV=bQYa*c^V~RKg#>&D3j}}kJcg$qg%;=Ko7Z&;IAU*QC`Xs8O5pYseVM%STMq@ zVk7~{NJU!B`znMgN@E>;0_HvXG5c_!hqFr~Z|TBu{O}?`&Gx_>y!u!lHWo+T;skBa zkG#1_&}epxNJ7h3xpv~f6)R|vN9_J7z!0Ac_D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_received_debit_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dc3420cfb061c62da85fcb937ec3ad6a3557c74 GIT binary patch literal 662 zcmXw1J8u**5FYRAmT*ZxLY#P15zQ4jE2NE5M3JCC0R_=4g|#`4F4paOH@5F|TLZr# zp`%6o6e>i6R!T)h7wHH^D(v;el4s`gyl4D3>q)CRoKMo8@yK#(XGt}mFZA2xt zeTiNPZ7jcgR2iof3i;T(db)}O%V!p!142ePWWhVY5F?Bq*;jWl;bhP9CK!h8lVcpC zm?J;L6Jf&|C2)>!a+R05O>j}?k{=CwZOWL;OJuBFW2~(BtZ;Ilv9noTc#U#%P?05V zsEukj8Ox=tOx`uX*jHFu9o&4Nr&Wn`A{X=!_0&`~eOVbSwhyXmD&&M7Zp>*VcSk$VsTKyeYip2CP*a;m)JW^DTxt~NdZrr6)T$}QT~`+RwwN~@)s5=8 zS{+I4)ekNC1i$)&i|FF*=Q}_8TR)?%t00I|wRvmkrZDgcM>b-&99H@5C^z~xF->jj z_anIP0mFqssoe_we7eLNE@&6|o|SIWJwMTX^}s^=y+A*;h%iZ zPxxoc-sjfu&?p{xYMfDSJV6$+1P8f7PY}Q^IVD%@iJ2`rk}LOQSLrEkxmOlY34M+% z>04yUMEFU}46wA{}dkM)cF?+ylpk8w!0SoTki z6abqntrO3(y&>Ks1D}#qAxDAfS?T=1_DrvDn+`VneSgHqk{#Q%nO>rhW3h8N)%Zj*QMnQRz~wviyxu%n{w%I*<^G16d z#*MW^S}S_%&9OAz`Cf}_tBJH)(B?`awTeb<={St5oU9b&QfvI)$?C^(Ya^c9Or*_% zFJ65r#tYXH=~_W9Um5Sj^PNQMWQ4YgN&kCA?egwdD~d>2hRc>P%jbg3YHa2szUGrv zT_o#D+POGSr+J;0hAb6_jHD%p8xAAgX9{h=j2A!_K_FFV6Xb0Wm|VW76|k-p@;*1t zwz=>#Q5(m%W3`z`&0<$7i^n^$wwy@I1<@A%!zUjE;{WeE_l6tcT!qs%toPo4=x^-_T}^HYZ9) eP@lFZh<_&A!drs+qc%bOGkF*6doRGw*6|lXXuJFX literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_entry_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_entry_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a56b55ce712d94424d3f1e7bdd4f24105e20ba76 GIT binary patch literal 668 zcmYLHJ8u**5FYRAj&MmpLYzQ|BBHq>XN9y;iUd2SreZY1rbhh{`yP2?X#0vgjjZF_N#Lk57|28FYR-Wk8y>13aFhHm@s_ zOQG#e^eWfJ%G>+WIAg9b8~ISrmw90E#Oh~&kdh42;5}f75ylVfts_h_vSVc(48rE| zJH>_OBUj|PFseR4qjH?#8?Jb%n*`?-7uo)x({vdVyhO&D6~;=LO$j2%yT;VsII zLPeG}p*E^nXN(IW4R3p3>fGRFWgYk!HMM2(3Tf3oml}m!PgPBs`QH~q*BDdF&Y1Td zR<-K5=Q`H4r0-jH0zZ5G^XUBTr(5598$Y6r%OHrmYW>F14WjRB4sFJEMNIk~DYt+o zF?D5I@KdYi2YCj3%-E0xR0+f611%?EnA( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a3468a5ea710d6c3b62840392cfb633e5b627e7 GIT binary patch literal 2093 zcmcJQy>Ht_6u^(4B4x?Whh0l@+ZeX$R48Ji$r7hdfjR~nppF{U?hq{mEuJ016v-S< zh81LNfsWqdZW$YNXy^V5T})^R4k$Ww>gK{qhfIBUCn|O#py*HmdVKf0$9M1Ey?gw% zTrMK`rGM9gxe`Ku@In4FhRW%8pgcuB@|6&El$N4!T@BTa*3yKog?h(m86C4_b_%V6 zf>iW5^7U_!Z(!v|P5NnBf|@`JxGiqmuENs>f{h{3M#PkC$n_yN;4NchQy9*gBVzf24Y@Vqxqo{^EWgOD zhL#gK_e(=k=A<{-m|`U744>MX>636Vp2>6;*{AXY41|LSIL?Un^~?K zc^&M!tmwL(*zbm1FS+ict{2J~V)9U@T-S@D82s|00UIr)gy?)qgIo|^^v}^LNc8H7 z^DypUXE!=<)^WN=0a-BuKE6h$C?*o+Gy*kIW6>%v@=)ob-qdAqZiClKuqZTlAt_Ij(+^ zl~?=v>WQiv)`^LxuN<;A|fn3HnlNI%;A-p)!3eSIOPmASrN%Lk>|!!(-!GMAI7 z+R@eHg_~JzC7Zm}*Kg%~X8xI$P1pN+JtyG4a6ErAtE^oKM>MF4fZ-I(Y|-9$z1ugST$feQ|X^qr4N4DR{BjFvcch zTpsvBVzo6;(peCYhpE~NYxOTpyR4ypivy}mY$6(1+tREf>5IhE#0Q~&mCFf#e{{SIu`al2x literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/__pycache__/_transaction_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23b0083e6cf83e5f828df644bc7694af45febc4a GIT binary patch literal 657 zcmYLHy>AmS6o0<2gp#HpRYXNh6-$Q3qFt*F6%q`npaKK8SSI(Bo^oejZ70fY4DdI! zY^)W33KL>MCv{?Cs}#!63HzK1OMdV7{J!7wxApZkut)!Wn7<Hq)$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_create_params.py new file mode 100644 index 00000000..96ad037e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_create_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class CreditReversalCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + received_credit: str + """ + The ReceivedCredit to reverse. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_list_params.py new file mode 100644 index 00000000..33b3b735 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_list_params.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class CreditReversalListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + received_credit: NotRequired[str] + """ + Only return CreditReversals for the ReceivedCredit ID. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["canceled", "posted", "processing"]] + """ + Only return CreditReversals for a given status. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_retrieve_params.py new file mode 100644 index 00000000..5e0b9c2e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_credit_reversal_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class CreditReversalRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_create_params.py new file mode 100644 index 00000000..aa873103 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_create_params.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class DebitReversalCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + received_debit: str + """ + The ReceivedDebit to reverse. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_list_params.py new file mode 100644 index 00000000..66dad506 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_list_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class DebitReversalListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + received_debit: NotRequired[str] + """ + Only return DebitReversals for the ReceivedDebit ID. + """ + resolution: NotRequired[Literal["lost", "won"]] + """ + Only return DebitReversals for a given resolution. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["canceled", "completed", "processing"]] + """ + Only return DebitReversals for a given status. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_retrieve_params.py new file mode 100644 index 00000000..c818ddc3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_debit_reversal_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class DebitReversalRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_close_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_close_params.py new file mode 100644 index 00000000..cff6fa7b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_close_params.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FinancialAccountCloseParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + forwarding_settings: NotRequired[ + "FinancialAccountCloseParamsForwardingSettings" + ] + """ + A different bank account where funds can be deposited/debited in order to get the closing FA's balance to $0 + """ + + +class FinancialAccountCloseParamsForwardingSettings(TypedDict): + financial_account: NotRequired[str] + """ + The financial_account id + """ + payment_method: NotRequired[str] + """ + The payment_method or bank account id. This needs to be a verified bank account. + """ + type: Literal["financial_account", "payment_method"] + """ + The type of the bank account provided. This can be either "financial_account" or "payment_method" + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_create_params.py new file mode 100644 index 00000000..f89af286 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_create_params.py @@ -0,0 +1,201 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FinancialAccountCreateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: NotRequired["FinancialAccountCreateParamsFeatures"] + """ + Encodes whether a FinancialAccount has access to a particular feature. Stripe or the platform can control features via the requested field. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired["Literal['']|str"] + """ + The nickname for the FinancialAccount. + """ + platform_restrictions: NotRequired[ + "FinancialAccountCreateParamsPlatformRestrictions" + ] + """ + The set of functionalities that the platform can restrict on the FinancialAccount. + """ + supported_currencies: List[str] + """ + The currencies the FinancialAccount can hold a balance in. + """ + + +class FinancialAccountCreateParamsFeatures(TypedDict): + card_issuing: NotRequired[ + "FinancialAccountCreateParamsFeaturesCardIssuing" + ] + """ + Encodes the FinancialAccount's ability to be used with the Issuing product, including attaching cards to and drawing funds from the FinancialAccount. + """ + deposit_insurance: NotRequired[ + "FinancialAccountCreateParamsFeaturesDepositInsurance" + ] + """ + Represents whether this FinancialAccount is eligible for deposit insurance. Various factors determine the insurance amount. + """ + financial_addresses: NotRequired[ + "FinancialAccountCreateParamsFeaturesFinancialAddresses" + ] + """ + Contains Features that add FinancialAddresses to the FinancialAccount. + """ + inbound_transfers: NotRequired[ + "FinancialAccountCreateParamsFeaturesInboundTransfers" + ] + """ + Contains settings related to adding funds to a FinancialAccount from another Account with the same owner. + """ + intra_stripe_flows: NotRequired[ + "FinancialAccountCreateParamsFeaturesIntraStripeFlows" + ] + """ + Represents the ability for the FinancialAccount to send money to, or receive money from other FinancialAccounts (for example, via OutboundPayment). + """ + outbound_payments: NotRequired[ + "FinancialAccountCreateParamsFeaturesOutboundPayments" + ] + """ + Includes Features related to initiating money movement out of the FinancialAccount to someone else's bucket of money. + """ + outbound_transfers: NotRequired[ + "FinancialAccountCreateParamsFeaturesOutboundTransfers" + ] + """ + Contains a Feature and settings related to moving money out of the FinancialAccount into another Account with the same owner. + """ + + +class FinancialAccountCreateParamsFeaturesCardIssuing(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesDepositInsurance(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesFinancialAddresses(TypedDict): + aba: NotRequired[ + "FinancialAccountCreateParamsFeaturesFinancialAddressesAba" + ] + """ + Adds an ABA FinancialAddress to the FinancialAccount. + """ + + +class FinancialAccountCreateParamsFeaturesFinancialAddressesAba(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesInboundTransfers(TypedDict): + ach: NotRequired["FinancialAccountCreateParamsFeaturesInboundTransfersAch"] + """ + Enables ACH Debits via the InboundTransfers API. + """ + + +class FinancialAccountCreateParamsFeaturesInboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesIntraStripeFlows(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundPayments(TypedDict): + ach: NotRequired["FinancialAccountCreateParamsFeaturesOutboundPaymentsAch"] + """ + Enables ACH transfers via the OutboundPayments API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountCreateParamsFeaturesOutboundPaymentsUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundPayments API. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundPaymentsAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundPaymentsUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundTransfers(TypedDict): + ach: NotRequired[ + "FinancialAccountCreateParamsFeaturesOutboundTransfersAch" + ] + """ + Enables ACH transfers via the OutboundTransfers API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountCreateParamsFeaturesOutboundTransfersUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundTransfers API. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsFeaturesOutboundTransfersUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountCreateParamsPlatformRestrictions(TypedDict): + inbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all inbound money movement. + """ + outbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all outbound money movement. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_retrieve_params.py new file mode 100644 index 00000000..005ff499 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_retrieve_params.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class FinancialAccountFeaturesRetrieveParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_update_params.py new file mode 100644 index 00000000..71344abf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_features_update_params.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class FinancialAccountFeaturesUpdateParams(TypedDict): + card_issuing: NotRequired[ + "FinancialAccountFeaturesUpdateParamsCardIssuing" + ] + """ + Encodes the FinancialAccount's ability to be used with the Issuing product, including attaching cards to and drawing funds from the FinancialAccount. + """ + deposit_insurance: NotRequired[ + "FinancialAccountFeaturesUpdateParamsDepositInsurance" + ] + """ + Represents whether this FinancialAccount is eligible for deposit insurance. Various factors determine the insurance amount. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_addresses: NotRequired[ + "FinancialAccountFeaturesUpdateParamsFinancialAddresses" + ] + """ + Contains Features that add FinancialAddresses to the FinancialAccount. + """ + inbound_transfers: NotRequired[ + "FinancialAccountFeaturesUpdateParamsInboundTransfers" + ] + """ + Contains settings related to adding funds to a FinancialAccount from another Account with the same owner. + """ + intra_stripe_flows: NotRequired[ + "FinancialAccountFeaturesUpdateParamsIntraStripeFlows" + ] + """ + Represents the ability for the FinancialAccount to send money to, or receive money from other FinancialAccounts (for example, via OutboundPayment). + """ + outbound_payments: NotRequired[ + "FinancialAccountFeaturesUpdateParamsOutboundPayments" + ] + """ + Includes Features related to initiating money movement out of the FinancialAccount to someone else's bucket of money. + """ + outbound_transfers: NotRequired[ + "FinancialAccountFeaturesUpdateParamsOutboundTransfers" + ] + """ + Contains a Feature and settings related to moving money out of the FinancialAccount into another Account with the same owner. + """ + + +class FinancialAccountFeaturesUpdateParamsCardIssuing(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsDepositInsurance(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsFinancialAddresses(TypedDict): + aba: NotRequired[ + "FinancialAccountFeaturesUpdateParamsFinancialAddressesAba" + ] + """ + Adds an ABA FinancialAddress to the FinancialAccount. + """ + + +class FinancialAccountFeaturesUpdateParamsFinancialAddressesAba(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsInboundTransfers(TypedDict): + ach: NotRequired["FinancialAccountFeaturesUpdateParamsInboundTransfersAch"] + """ + Enables ACH Debits via the InboundTransfers API. + """ + + +class FinancialAccountFeaturesUpdateParamsInboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsIntraStripeFlows(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundPayments(TypedDict): + ach: NotRequired["FinancialAccountFeaturesUpdateParamsOutboundPaymentsAch"] + """ + Enables ACH transfers via the OutboundPayments API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountFeaturesUpdateParamsOutboundPaymentsUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundPayments API. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundPaymentsAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundPaymentsUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundTransfers(TypedDict): + ach: NotRequired[ + "FinancialAccountFeaturesUpdateParamsOutboundTransfersAch" + ] + """ + Enables ACH transfers via the OutboundTransfers API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountFeaturesUpdateParamsOutboundTransfersUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundTransfers API. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountFeaturesUpdateParamsOutboundTransfersUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_list_params.py new file mode 100644 index 00000000..fdcc9de1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_list_params.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FinancialAccountListParams(RequestOptions): + created: NotRequired["FinancialAccountListParamsCreated|int"] + """ + Only return FinancialAccounts that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + An object ID cursor for use in pagination. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + limit: NotRequired[int] + """ + A limit ranging from 1 to 100 (defaults to 10). + """ + starting_after: NotRequired[str] + """ + An object ID cursor for use in pagination. + """ + status: NotRequired[Literal["closed", "open"]] + """ + Only return FinancialAccounts that have the given status: `open` or `closed` + """ + + +class FinancialAccountListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_modify_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_modify_params.py new file mode 100644 index 00000000..29257685 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_modify_params.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FinancialAccountModifyParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: NotRequired["FinancialAccountModifyParamsFeatures"] + """ + Encodes whether a FinancialAccount has access to a particular feature, with a status enum and associated `status_details`. Stripe or the platform may control features via the requested field. + """ + forwarding_settings: NotRequired[ + "FinancialAccountModifyParamsForwardingSettings" + ] + """ + A different bank account where funds can be deposited/debited in order to get the closing FA's balance to $0 + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired["Literal['']|str"] + """ + The nickname for the FinancialAccount. + """ + platform_restrictions: NotRequired[ + "FinancialAccountModifyParamsPlatformRestrictions" + ] + """ + The set of functionalities that the platform can restrict on the FinancialAccount. + """ + + +class FinancialAccountModifyParamsFeatures(TypedDict): + card_issuing: NotRequired[ + "FinancialAccountModifyParamsFeaturesCardIssuing" + ] + """ + Encodes the FinancialAccount's ability to be used with the Issuing product, including attaching cards to and drawing funds from the FinancialAccount. + """ + deposit_insurance: NotRequired[ + "FinancialAccountModifyParamsFeaturesDepositInsurance" + ] + """ + Represents whether this FinancialAccount is eligible for deposit insurance. Various factors determine the insurance amount. + """ + financial_addresses: NotRequired[ + "FinancialAccountModifyParamsFeaturesFinancialAddresses" + ] + """ + Contains Features that add FinancialAddresses to the FinancialAccount. + """ + inbound_transfers: NotRequired[ + "FinancialAccountModifyParamsFeaturesInboundTransfers" + ] + """ + Contains settings related to adding funds to a FinancialAccount from another Account with the same owner. + """ + intra_stripe_flows: NotRequired[ + "FinancialAccountModifyParamsFeaturesIntraStripeFlows" + ] + """ + Represents the ability for the FinancialAccount to send money to, or receive money from other FinancialAccounts (for example, via OutboundPayment). + """ + outbound_payments: NotRequired[ + "FinancialAccountModifyParamsFeaturesOutboundPayments" + ] + """ + Includes Features related to initiating money movement out of the FinancialAccount to someone else's bucket of money. + """ + outbound_transfers: NotRequired[ + "FinancialAccountModifyParamsFeaturesOutboundTransfers" + ] + """ + Contains a Feature and settings related to moving money out of the FinancialAccount into another Account with the same owner. + """ + + +class FinancialAccountModifyParamsFeaturesCardIssuing(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesDepositInsurance(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesFinancialAddresses(TypedDict): + aba: NotRequired[ + "FinancialAccountModifyParamsFeaturesFinancialAddressesAba" + ] + """ + Adds an ABA FinancialAddress to the FinancialAccount. + """ + + +class FinancialAccountModifyParamsFeaturesFinancialAddressesAba(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesInboundTransfers(TypedDict): + ach: NotRequired["FinancialAccountModifyParamsFeaturesInboundTransfersAch"] + """ + Enables ACH Debits via the InboundTransfers API. + """ + + +class FinancialAccountModifyParamsFeaturesInboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesIntraStripeFlows(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundPayments(TypedDict): + ach: NotRequired["FinancialAccountModifyParamsFeaturesOutboundPaymentsAch"] + """ + Enables ACH transfers via the OutboundPayments API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountModifyParamsFeaturesOutboundPaymentsUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundPayments API. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundPaymentsAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundPaymentsUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundTransfers(TypedDict): + ach: NotRequired[ + "FinancialAccountModifyParamsFeaturesOutboundTransfersAch" + ] + """ + Enables ACH transfers via the OutboundTransfers API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountModifyParamsFeaturesOutboundTransfersUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundTransfers API. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsFeaturesOutboundTransfersUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountModifyParamsForwardingSettings(TypedDict): + financial_account: NotRequired[str] + """ + The financial_account id + """ + payment_method: NotRequired[str] + """ + The payment_method or bank account id. This needs to be a verified bank account. + """ + type: Literal["financial_account", "payment_method"] + """ + The type of the bank account provided. This can be either "financial_account" or "payment_method" + """ + + +class FinancialAccountModifyParamsPlatformRestrictions(TypedDict): + inbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all inbound money movement. + """ + outbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all outbound money movement. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_features_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_features_params.py new file mode 100644 index 00000000..0d65da2a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_features_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class FinancialAccountRetrieveFeaturesParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_params.py new file mode 100644 index 00000000..0f57a048 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class FinancialAccountRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_features_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_features_params.py new file mode 100644 index 00000000..59fcb725 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_features_params.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class FinancialAccountUpdateFeaturesParams(RequestOptions): + card_issuing: NotRequired[ + "FinancialAccountUpdateFeaturesParamsCardIssuing" + ] + """ + Encodes the FinancialAccount's ability to be used with the Issuing product, including attaching cards to and drawing funds from the FinancialAccount. + """ + deposit_insurance: NotRequired[ + "FinancialAccountUpdateFeaturesParamsDepositInsurance" + ] + """ + Represents whether this FinancialAccount is eligible for deposit insurance. Various factors determine the insurance amount. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_addresses: NotRequired[ + "FinancialAccountUpdateFeaturesParamsFinancialAddresses" + ] + """ + Contains Features that add FinancialAddresses to the FinancialAccount. + """ + inbound_transfers: NotRequired[ + "FinancialAccountUpdateFeaturesParamsInboundTransfers" + ] + """ + Contains settings related to adding funds to a FinancialAccount from another Account with the same owner. + """ + intra_stripe_flows: NotRequired[ + "FinancialAccountUpdateFeaturesParamsIntraStripeFlows" + ] + """ + Represents the ability for the FinancialAccount to send money to, or receive money from other FinancialAccounts (for example, via OutboundPayment). + """ + outbound_payments: NotRequired[ + "FinancialAccountUpdateFeaturesParamsOutboundPayments" + ] + """ + Includes Features related to initiating money movement out of the FinancialAccount to someone else's bucket of money. + """ + outbound_transfers: NotRequired[ + "FinancialAccountUpdateFeaturesParamsOutboundTransfers" + ] + """ + Contains a Feature and settings related to moving money out of the FinancialAccount into another Account with the same owner. + """ + + +class FinancialAccountUpdateFeaturesParamsCardIssuing(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsDepositInsurance(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsFinancialAddresses(TypedDict): + aba: NotRequired[ + "FinancialAccountUpdateFeaturesParamsFinancialAddressesAba" + ] + """ + Adds an ABA FinancialAddress to the FinancialAccount. + """ + + +class FinancialAccountUpdateFeaturesParamsFinancialAddressesAba(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsInboundTransfers(TypedDict): + ach: NotRequired["FinancialAccountUpdateFeaturesParamsInboundTransfersAch"] + """ + Enables ACH Debits via the InboundTransfers API. + """ + + +class FinancialAccountUpdateFeaturesParamsInboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsIntraStripeFlows(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundPayments(TypedDict): + ach: NotRequired["FinancialAccountUpdateFeaturesParamsOutboundPaymentsAch"] + """ + Enables ACH transfers via the OutboundPayments API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountUpdateFeaturesParamsOutboundPaymentsUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundPayments API. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundPaymentsAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundPaymentsUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundTransfers(TypedDict): + ach: NotRequired[ + "FinancialAccountUpdateFeaturesParamsOutboundTransfersAch" + ] + """ + Enables ACH transfers via the OutboundTransfers API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountUpdateFeaturesParamsOutboundTransfersUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundTransfers API. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateFeaturesParamsOutboundTransfersUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_params.py new file mode 100644 index 00000000..49fa4276 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_financial_account_update_params.py @@ -0,0 +1,217 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class FinancialAccountUpdateParams(TypedDict): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + features: NotRequired["FinancialAccountUpdateParamsFeatures"] + """ + Encodes whether a FinancialAccount has access to a particular feature, with a status enum and associated `status_details`. Stripe or the platform may control features via the requested field. + """ + forwarding_settings: NotRequired[ + "FinancialAccountUpdateParamsForwardingSettings" + ] + """ + A different bank account where funds can be deposited/debited in order to get the closing FA's balance to $0 + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + nickname: NotRequired["Literal['']|str"] + """ + The nickname for the FinancialAccount. + """ + platform_restrictions: NotRequired[ + "FinancialAccountUpdateParamsPlatformRestrictions" + ] + """ + The set of functionalities that the platform can restrict on the FinancialAccount. + """ + + +class FinancialAccountUpdateParamsFeatures(TypedDict): + card_issuing: NotRequired[ + "FinancialAccountUpdateParamsFeaturesCardIssuing" + ] + """ + Encodes the FinancialAccount's ability to be used with the Issuing product, including attaching cards to and drawing funds from the FinancialAccount. + """ + deposit_insurance: NotRequired[ + "FinancialAccountUpdateParamsFeaturesDepositInsurance" + ] + """ + Represents whether this FinancialAccount is eligible for deposit insurance. Various factors determine the insurance amount. + """ + financial_addresses: NotRequired[ + "FinancialAccountUpdateParamsFeaturesFinancialAddresses" + ] + """ + Contains Features that add FinancialAddresses to the FinancialAccount. + """ + inbound_transfers: NotRequired[ + "FinancialAccountUpdateParamsFeaturesInboundTransfers" + ] + """ + Contains settings related to adding funds to a FinancialAccount from another Account with the same owner. + """ + intra_stripe_flows: NotRequired[ + "FinancialAccountUpdateParamsFeaturesIntraStripeFlows" + ] + """ + Represents the ability for the FinancialAccount to send money to, or receive money from other FinancialAccounts (for example, via OutboundPayment). + """ + outbound_payments: NotRequired[ + "FinancialAccountUpdateParamsFeaturesOutboundPayments" + ] + """ + Includes Features related to initiating money movement out of the FinancialAccount to someone else's bucket of money. + """ + outbound_transfers: NotRequired[ + "FinancialAccountUpdateParamsFeaturesOutboundTransfers" + ] + """ + Contains a Feature and settings related to moving money out of the FinancialAccount into another Account with the same owner. + """ + + +class FinancialAccountUpdateParamsFeaturesCardIssuing(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesDepositInsurance(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesFinancialAddresses(TypedDict): + aba: NotRequired[ + "FinancialAccountUpdateParamsFeaturesFinancialAddressesAba" + ] + """ + Adds an ABA FinancialAddress to the FinancialAccount. + """ + + +class FinancialAccountUpdateParamsFeaturesFinancialAddressesAba(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesInboundTransfers(TypedDict): + ach: NotRequired["FinancialAccountUpdateParamsFeaturesInboundTransfersAch"] + """ + Enables ACH Debits via the InboundTransfers API. + """ + + +class FinancialAccountUpdateParamsFeaturesInboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesIntraStripeFlows(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundPayments(TypedDict): + ach: NotRequired["FinancialAccountUpdateParamsFeaturesOutboundPaymentsAch"] + """ + Enables ACH transfers via the OutboundPayments API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountUpdateParamsFeaturesOutboundPaymentsUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundPayments API. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundPaymentsAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundPaymentsUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundTransfers(TypedDict): + ach: NotRequired[ + "FinancialAccountUpdateParamsFeaturesOutboundTransfersAch" + ] + """ + Enables ACH transfers via the OutboundTransfers API. + """ + us_domestic_wire: NotRequired[ + "FinancialAccountUpdateParamsFeaturesOutboundTransfersUsDomesticWire" + ] + """ + Enables US domestic wire transfers via the OutboundTransfers API. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundTransfersAch(TypedDict): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsFeaturesOutboundTransfersUsDomesticWire( + TypedDict, +): + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + + +class FinancialAccountUpdateParamsForwardingSettings(TypedDict): + financial_account: NotRequired[str] + """ + The financial_account id + """ + payment_method: NotRequired[str] + """ + The payment_method or bank account id. This needs to be a verified bank account. + """ + type: Literal["financial_account", "payment_method"] + """ + The type of the bank account provided. This can be either "financial_account" or "payment_method" + """ + + +class FinancialAccountUpdateParamsPlatformRestrictions(TypedDict): + inbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all inbound money movement. + """ + outbound_flows: NotRequired[Literal["restricted", "unrestricted"]] + """ + Restricts all outbound money movement. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_cancel_params.py new file mode 100644 index 00000000..39ba9fca --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class InboundTransferCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_create_params.py new file mode 100644 index 00000000..efc92248 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_create_params.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import NotRequired + + +class InboundTransferCreateParams(RequestOptions): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to send funds to. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + origin_payment_method: str + """ + The origin payment method to be debited for the InboundTransfer. + """ + statement_descriptor: NotRequired[str] + """ + The complete description that appears on your customers' statements. Maximum 10 characters. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_fail_params.py new file mode 100644 index 00000000..8f220ed1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_fail_params.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class InboundTransferFailParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + failure_details: NotRequired["InboundTransferFailParamsFailureDetails"] + """ + Details about a failed InboundTransfer. + """ + + +class InboundTransferFailParamsFailureDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "debit_not_authorized", + "incorrect_account_holder_address", + "incorrect_account_holder_name", + "incorrect_account_holder_tax_id", + "insufficient_funds", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + Reason for the failure. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_list_params.py new file mode 100644 index 00000000..709a6582 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_list_params.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class InboundTransferListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[ + Literal["canceled", "failed", "processing", "succeeded"] + ] + """ + Only return InboundTransfers that have the given status: `processing`, `succeeded`, `failed` or `canceled`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_retrieve_params.py new file mode 100644 index 00000000..e588e70c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class InboundTransferRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_return_inbound_transfer_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_return_inbound_transfer_params.py new file mode 100644 index 00000000..ada9cdfa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_return_inbound_transfer_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class InboundTransferReturnInboundTransferParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_succeed_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_succeed_params.py new file mode 100644 index 00000000..e88a1730 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_inbound_transfer_succeed_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class InboundTransferSucceedParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_cancel_params.py new file mode 100644 index 00000000..e94e9d25 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundPaymentCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_create_params.py new file mode 100644 index 00000000..89cdf568 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_create_params.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentCreateParams(RequestOptions): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: NotRequired[str] + """ + ID of the customer to whom the OutboundPayment is sent. Must match the Customer attached to the `destination_payment_method` passed in. + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination_payment_method: NotRequired[str] + """ + The PaymentMethod to use as the payment instrument for the OutboundPayment. Exclusive with `destination_payment_method_data`. + """ + destination_payment_method_data: NotRequired[ + "OutboundPaymentCreateParamsDestinationPaymentMethodData" + ] + """ + Hash used to generate the PaymentMethod to be used for this OutboundPayment. Exclusive with `destination_payment_method`. + """ + destination_payment_method_options: NotRequired[ + "OutboundPaymentCreateParamsDestinationPaymentMethodOptions" + ] + """ + Payment method-specific configuration for this OutboundPayment. + """ + end_user_details: NotRequired["OutboundPaymentCreateParamsEndUserDetails"] + """ + End user details. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to pull funds from. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + statement_descriptor: NotRequired[str] + """ + The description that appears on the receiving end for this OutboundPayment (for example, bank statement for external bank transfer). Maximum 10 characters for `ach` payments, 140 characters for `us_domestic_wire` payments, or 500 characters for `stripe` network transfers. The default value is "payment". + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodData(TypedDict): + billing_details: NotRequired[ + "OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetails" + ] + """ + Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. + """ + financial_account: NotRequired[str] + """ + Required if type is set to `financial_account`. The FinancialAccount ID to send funds to. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + type: Literal["financial_account", "us_bank_account"] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: NotRequired[ + "OutboundPaymentCreateParamsDestinationPaymentMethodDataUsBankAccount" + ] + """ + Required hash if type is set to `us_bank_account`. + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetails( + TypedDict, +): + address: NotRequired[ + "Literal['']|OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetailsAddress" + ] + """ + Billing address. + """ + email: NotRequired["Literal['']|str"] + """ + Email address. + """ + name: NotRequired["Literal['']|str"] + """ + Full name. + """ + phone: NotRequired["Literal['']|str"] + """ + Billing phone number (including extension). + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodDataBillingDetailsAddress( + TypedDict, +): + city: NotRequired[str] + """ + City, district, suburb, town, or village. + """ + country: NotRequired[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: NotRequired[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: NotRequired[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: NotRequired[str] + """ + ZIP or postal code. + """ + state: NotRequired[str] + """ + State, county, province, or region. + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodDataUsBankAccount( + TypedDict, +): + account_holder_type: NotRequired[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_number: NotRequired[str] + """ + Account number of the bank account. + """ + account_type: NotRequired[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + financial_connections_account: NotRequired[str] + """ + The ID of a Financial Connections Account to use as a payment method. + """ + routing_number: NotRequired[str] + """ + Routing number of the bank account. + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodOptions(TypedDict): + us_bank_account: NotRequired[ + "Literal['']|OutboundPaymentCreateParamsDestinationPaymentMethodOptionsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class OutboundPaymentCreateParamsDestinationPaymentMethodOptionsUsBankAccount( + TypedDict, +): + network: NotRequired[Literal["ach", "us_domestic_wire"]] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + + +class OutboundPaymentCreateParamsEndUserDetails(TypedDict): + ip_address: NotRequired[str] + """ + IP address of the user initiating the OutboundPayment. Must be supplied if `present` is set to `true`. + """ + present: bool + """ + `True` if the OutboundPayment creation request is being made on behalf of an end user by a platform. Otherwise, `false`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_fail_params.py new file mode 100644 index 00000000..ec3d79c7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_fail_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundPaymentFailParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_list_params.py new file mode 100644 index 00000000..6c663d07 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_list_params.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentListParams(RequestOptions): + created: NotRequired["OutboundPaymentListParamsCreated|int"] + """ + Only return OutboundPayments that were created during the given date interval. + """ + customer: NotRequired[str] + """ + Only return OutboundPayments sent to this customer. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[ + Literal["canceled", "failed", "posted", "processing", "returned"] + ] + """ + Only return OutboundPayments that have the given status: `processing`, `failed`, `posted`, `returned`, or `canceled`. + """ + + +class OutboundPaymentListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_post_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_post_params.py new file mode 100644 index 00000000..308e0cf8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_post_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundPaymentPostParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_retrieve_params.py new file mode 100644 index 00000000..8fc79e2d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundPaymentRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_return_outbound_payment_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_return_outbound_payment_params.py new file mode 100644 index 00000000..b5bd8426 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_return_outbound_payment_params.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentReturnOutboundPaymentParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + returned_details: NotRequired[ + "OutboundPaymentReturnOutboundPaymentParamsReturnedDetails" + ] + """ + Optional hash to set the return code. + """ + + +class OutboundPaymentReturnOutboundPaymentParamsReturnedDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + The return code to be set on the OutboundPayment object. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_update_params.py new file mode 100644 index 00000000..301b4e96 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_payment_update_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundPaymentUpdateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + tracking_details: "OutboundPaymentUpdateParamsTrackingDetails" + """ + Details about network-specific tracking information. + """ + + +class OutboundPaymentUpdateParamsTrackingDetails(TypedDict): + ach: NotRequired["OutboundPaymentUpdateParamsTrackingDetailsAch"] + """ + ACH network tracking details. + """ + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: NotRequired[ + "OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire" + ] + """ + US domestic wire network tracking details. + """ + + +class OutboundPaymentUpdateParamsTrackingDetailsAch(TypedDict): + trace_id: str + """ + ACH trace ID for funds sent over the `ach` network. + """ + + +class OutboundPaymentUpdateParamsTrackingDetailsUsDomesticWire(TypedDict): + chips: NotRequired[str] + """ + CHIPS System Sequence Number (SSN) for funds sent over the `us_domestic_wire` network. + """ + imad: NotRequired[str] + """ + IMAD for funds sent over the `us_domestic_wire` network. + """ + omad: NotRequired[str] + """ + OMAD for funds sent over the `us_domestic_wire` network. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_cancel_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_cancel_params.py new file mode 100644 index 00000000..d9e88a78 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_cancel_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundTransferCancelParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_create_params.py new file mode 100644 index 00000000..9a4728fa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_create_params.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import Dict, List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundTransferCreateParams(RequestOptions): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination_payment_method: NotRequired[str] + """ + The PaymentMethod to use as the payment instrument for the OutboundTransfer. + """ + destination_payment_method_data: NotRequired[ + "OutboundTransferCreateParamsDestinationPaymentMethodData" + ] + """ + Hash used to generate the PaymentMethod to be used for this OutboundTransfer. Exclusive with `destination_payment_method`. + """ + destination_payment_method_options: NotRequired[ + "OutboundTransferCreateParamsDestinationPaymentMethodOptions" + ] + """ + Hash describing payment method configuration details. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to pull funds from. + """ + metadata: NotRequired[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. + """ + statement_descriptor: NotRequired[str] + """ + Statement descriptor to be shown on the receiving end of an OutboundTransfer. Maximum 10 characters for `ach` transfers or 140 characters for `us_domestic_wire` transfers. The default value is "transfer". + """ + + +class OutboundTransferCreateParamsDestinationPaymentMethodData(TypedDict): + financial_account: NotRequired[str] + """ + Required if type is set to `financial_account`. The FinancialAccount ID to send funds to. + """ + type: Literal["financial_account"] + """ + The type of the destination. + """ + + +class OutboundTransferCreateParamsDestinationPaymentMethodOptions(TypedDict): + us_bank_account: NotRequired[ + "Literal['']|OutboundTransferCreateParamsDestinationPaymentMethodOptionsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class OutboundTransferCreateParamsDestinationPaymentMethodOptionsUsBankAccount( + TypedDict, +): + network: NotRequired[Literal["ach", "us_domestic_wire"]] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_fail_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_fail_params.py new file mode 100644 index 00000000..2da8070b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_fail_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundTransferFailParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_list_params.py new file mode 100644 index 00000000..6f9e2478 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_list_params.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class OutboundTransferListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[ + Literal["canceled", "failed", "posted", "processing", "returned"] + ] + """ + Only return OutboundTransfers that have the given status: `processing`, `canceled`, `failed`, `posted`, or `returned`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_post_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_post_params.py new file mode 100644 index 00000000..f6372b08 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_post_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundTransferPostParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_retrieve_params.py new file mode 100644 index 00000000..cec27513 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class OutboundTransferRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_return_outbound_transfer_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_return_outbound_transfer_params.py new file mode 100644 index 00000000..dd73d7e8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_return_outbound_transfer_params.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundTransferReturnOutboundTransferParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + returned_details: NotRequired[ + "OutboundTransferReturnOutboundTransferParamsReturnedDetails" + ] + """ + Details about a returned OutboundTransfer. + """ + + +class OutboundTransferReturnOutboundTransferParamsReturnedDetails(TypedDict): + code: NotRequired[ + Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + ] + """ + Reason for the return. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_update_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_update_params.py new file mode 100644 index 00000000..dcee9342 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_outbound_transfer_update_params.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class OutboundTransferUpdateParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + tracking_details: "OutboundTransferUpdateParamsTrackingDetails" + """ + Details about network-specific tracking information. + """ + + +class OutboundTransferUpdateParamsTrackingDetails(TypedDict): + ach: NotRequired["OutboundTransferUpdateParamsTrackingDetailsAch"] + """ + ACH network tracking details. + """ + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: NotRequired[ + "OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire" + ] + """ + US domestic wire network tracking details. + """ + + +class OutboundTransferUpdateParamsTrackingDetailsAch(TypedDict): + trace_id: str + """ + ACH trace ID for funds sent over the `ach` network. + """ + + +class OutboundTransferUpdateParamsTrackingDetailsUsDomesticWire(TypedDict): + chips: NotRequired[str] + """ + CHIPS System Sequence Number (SSN) for funds sent over the `us_domestic_wire` network. + """ + imad: NotRequired[str] + """ + IMAD for funds sent over the `us_domestic_wire` network. + """ + omad: NotRequired[str] + """ + OMAD for funds sent over the `us_domestic_wire` network. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_create_params.py new file mode 100644 index 00000000..42911f15 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_create_params.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReceivedCreditCreateParams(RequestOptions): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to send funds to. + """ + initiating_payment_method_details: NotRequired[ + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetails" + ] + """ + Initiating payment method details for the object. + """ + network: Literal["ach", "us_domestic_wire"] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + + +class ReceivedCreditCreateParamsInitiatingPaymentMethodDetails(TypedDict): + type: Literal["us_bank_account"] + """ + The source type. + """ + us_bank_account: NotRequired[ + "ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class ReceivedCreditCreateParamsInitiatingPaymentMethodDetailsUsBankAccount( + TypedDict, +): + account_holder_name: NotRequired[str] + """ + The bank account holder's name. + """ + account_number: NotRequired[str] + """ + The bank account number. + """ + routing_number: NotRequired[str] + """ + The bank account's routing number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_list_params.py new file mode 100644 index 00000000..7f096546 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_list_params.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReceivedCreditListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount that received the funds. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + linked_flows: NotRequired["ReceivedCreditListParamsLinkedFlows"] + """ + Only return ReceivedCredits described by the flow. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["failed", "succeeded"]] + """ + Only return ReceivedCredits that have the given status: `succeeded` or `failed`. + """ + + +class ReceivedCreditListParamsLinkedFlows(TypedDict): + source_flow_type: Literal[ + "credit_reversal", + "other", + "outbound_payment", + "outbound_transfer", + "payout", + ] + """ + The source flow type. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_retrieve_params.py new file mode 100644 index 00000000..552cc933 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_credit_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReceivedCreditRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_create_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_create_params.py new file mode 100644 index 00000000..e5aad339 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_create_params.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class ReceivedDebitCreateParams(RequestOptions): + amount: int + """ + Amount (in cents) to be transferred. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: NotRequired[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount to pull funds from. + """ + initiating_payment_method_details: NotRequired[ + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetails" + ] + """ + Initiating payment method details for the object. + """ + network: Literal["ach"] + """ + Specifies the network rails to be used. If not set, will default to the PaymentMethod's preferred network. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + + +class ReceivedDebitCreateParamsInitiatingPaymentMethodDetails(TypedDict): + type: Literal["us_bank_account"] + """ + The source type. + """ + us_bank_account: NotRequired[ + "ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount" + ] + """ + Optional fields for `us_bank_account`. + """ + + +class ReceivedDebitCreateParamsInitiatingPaymentMethodDetailsUsBankAccount( + TypedDict, +): + account_holder_name: NotRequired[str] + """ + The bank account holder's name. + """ + account_number: NotRequired[str] + """ + The bank account number. + """ + routing_number: NotRequired[str] + """ + The bank account's routing number. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_list_params.py new file mode 100644 index 00000000..cd32d32f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_list_params.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired + + +class ReceivedDebitListParams(RequestOptions): + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + The FinancialAccount that funds were pulled from. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["failed", "succeeded"]] + """ + Only return ReceivedDebits that have the given status: `succeeded` or `failed`. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_retrieve_params.py new file mode 100644 index 00000000..88be7910 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_received_debit_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class ReceivedDebitRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_list_params.py new file mode 100644 index 00000000..c6b8d011 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_list_params.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransactionEntryListParams(RequestOptions): + created: NotRequired["TransactionEntryListParamsCreated|int"] + """ + Only return TransactionEntries that were created during the given date interval. + """ + effective_at: NotRequired["TransactionEntryListParamsEffectiveAt|int"] + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + order_by: NotRequired[Literal["created", "effective_at"]] + """ + The results are in reverse chronological order by `created` or `effective_at`. The default is `created`. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + transaction: NotRequired[str] + """ + Only return TransactionEntries associated with this Transaction. + """ + + +class TransactionEntryListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class TransactionEntryListParamsEffectiveAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_retrieve_params.py new file mode 100644 index 00000000..fb32213d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_entry_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransactionEntryRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_list_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_list_params.py new file mode 100644 index 00000000..6b5afe1e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_list_params.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import Literal, NotRequired, TypedDict + + +class TransactionListParams(RequestOptions): + created: NotRequired["TransactionListParamsCreated|int"] + """ + Only return Transactions that were created during the given date interval. + """ + ending_before: NotRequired[str] + """ + A cursor for use in pagination. `ending_before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `obj_bar`, your subsequent call can include `ending_before=obj_bar` in order to fetch the previous page of the list. + """ + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ + financial_account: str + """ + Returns objects associated with this FinancialAccount. + """ + limit: NotRequired[int] + """ + A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10. + """ + order_by: NotRequired[Literal["created", "posted_at"]] + """ + The results are in reverse chronological order by `created` or `posted_at`. The default is `created`. + """ + starting_after: NotRequired[str] + """ + A cursor for use in pagination. `starting_after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `starting_after=obj_foo` in order to fetch the next page of the list. + """ + status: NotRequired[Literal["open", "posted", "void"]] + """ + Only return Transactions that have the given status: `open`, `posted`, or `void`. + """ + status_transitions: NotRequired["TransactionListParamsStatusTransitions"] + """ + A filter for the `status_transitions.posted_at` timestamp. When using this filter, `status=posted` and `order_by=posted_at` must also be specified. + """ + + +class TransactionListParamsCreated(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ + + +class TransactionListParamsStatusTransitions(TypedDict): + posted_at: NotRequired[ + "TransactionListParamsStatusTransitionsPostedAt|int" + ] + """ + Returns Transactions with `posted_at` within the specified range. + """ + + +class TransactionListParamsStatusTransitionsPostedAt(TypedDict): + gt: NotRequired[int] + """ + Minimum value to filter by (exclusive) + """ + gte: NotRequired[int] + """ + Minimum value to filter by (inclusive) + """ + lt: NotRequired[int] + """ + Maximum value to filter by (exclusive) + """ + lte: NotRequired[int] + """ + Maximum value to filter by (inclusive) + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_retrieve_params.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_retrieve_params.py new file mode 100644 index 00000000..07744dd9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/treasury/_transaction_retrieve_params.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._request_options import RequestOptions +from typing import List +from typing_extensions import NotRequired + + +class TransactionRetrieveParams(RequestOptions): + expand: NotRequired[List[str]] + """ + Specifies which fields in the response should be expanded. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__init__.py new file mode 100644 index 00000000..73f3c99b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.v2 import billing as billing, core as core + +# name -> (import_target, is_submodule) +_import_map = { + "billing": ("stripe.params.v2.billing", True), + "core": ("stripe.params.v2.core", True), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20370e11282f9f2d2c392116e4d9b34759ac78d4 GIT binary patch literal 888 zcmZWn&rcIU6n?X_+iqbc5s3{2{ z9yoI2qKQWde~K3g7u;Zs(Tf*TtQy0~H*V`eUovmLZ)e`@`@Wes+3Y322!9SbUlo8) zlC*=iKywzs0hFOkD&UeLArdPU#id0`fKjd^rxn%Jikh1!CU9LXYi0UEDJB^W)pFuF z6!luNmNfJ)@=$|BS;q~0E-cqCZ&aB4u(bSW#+sg+nVx^JaNkg(WXY*i9B(yJSA5P4 z<=H?exD&8KU~}6I3)P82YsV5U_WrjhtCm(sON5+M98y$s2h#zhK;Rrl9j+jFf);F( zZAG-DL!BJ8PS~b(g)4Qs2txZ?MeA^cH8K_<4&z>gRpwRAic>O! znppF_8-?)+Gjs$S3vh$I%0e?X*^F<%tWKDg<#>*;tU^#jEmo^{%i>-5_Z*J!F{T}8 zDCt!GEMIsnj`KHAk);`>ylqY5%qT?B~mar@6koUpy521+}xYTi>-;RB~%lnbaM-h%=!d?jZkpMFC n9!5XX+y`~CfgMkrW=797+NtcM&vnpyn`%bOH#9`N537CyLUQL# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__init__.py new file mode 100644 index 00000000..e2d32e82 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__init__.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.v2.billing._meter_event_adjustment_create_params import ( + MeterEventAdjustmentCreateParams as MeterEventAdjustmentCreateParams, + MeterEventAdjustmentCreateParamsCancel as MeterEventAdjustmentCreateParamsCancel, + ) + from stripe.params.v2.billing._meter_event_create_params import ( + MeterEventCreateParams as MeterEventCreateParams, + ) + from stripe.params.v2.billing._meter_event_session_create_params import ( + MeterEventSessionCreateParams as MeterEventSessionCreateParams, + ) + from stripe.params.v2.billing._meter_event_stream_create_params import ( + MeterEventStreamCreateParams as MeterEventStreamCreateParams, + MeterEventStreamCreateParamsEvent as MeterEventStreamCreateParamsEvent, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "MeterEventAdjustmentCreateParams": ( + "stripe.params.v2.billing._meter_event_adjustment_create_params", + False, + ), + "MeterEventAdjustmentCreateParamsCancel": ( + "stripe.params.v2.billing._meter_event_adjustment_create_params", + False, + ), + "MeterEventCreateParams": ( + "stripe.params.v2.billing._meter_event_create_params", + False, + ), + "MeterEventSessionCreateParams": ( + "stripe.params.v2.billing._meter_event_session_create_params", + False, + ), + "MeterEventStreamCreateParams": ( + "stripe.params.v2.billing._meter_event_stream_create_params", + False, + ), + "MeterEventStreamCreateParamsEvent": ( + "stripe.params.v2.billing._meter_event_stream_create_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..700f6097e7bf3b12e9930668a913fc74431bd91b GIT binary patch literal 1635 zcmbtT&2QX96rb^|9dCBMS=yw~&_KwxmE5XpHK{o8QK=0HMJ-XKfYe$@BPTmb-S|s0 zlWi7lq^RQ1V{g5H#E~k03Kyzg!l)b&T)1u7mZF?^V{b@GC5Xtg{PTOB_ukBV^LyVr z&M*QIe~gFRM(7u9?8?wU>9;|7fLf@9BNSsFW33yJ5fh(a#0WnDHi=5H>6@|TTlsn^ z8j5Y-&UG^?$HV?`u3J$huKLy3@g1;-;IUif)-XJkuPwjEh$ywHUm<^_<8&Oi_M1M0 zi6UiqbN*Pnl#omQl^Wf!QWNV<-AN<1k6KT~3>HTd4echEYyiSA$* zFSw?v&|QuO8P~h2p%o?rDY>$*vd$dmDOa^iV24X2C1X5N)lvgq99G+hOTc$b6aRhG0oU`X4G!X+>3 z$XjVL(>y=ziBPh088`$hOnAjjc?D;@_Ov%3nMY}ugp$%`)`6Pnpax3$7@T4TUhz4= zCh8fLa^p#(`JH^!xbUbtd2jyywI^d!-@f~J?99FSA4lHYetqJ;^Xt*^?fS9p`e@%I zqqQC)PVLWUHmbkzJHiltWb*NmsUNCSJp$H_s6ytu<1YH9;-ZJ6ACd*PuF6GQp_rnp zugOjZrBb#oS)wOUaNQqu$g$ZYpZY)3lQUKwW`1(It3yoC-l%Zh$Nat?qCTjIj{@x2 z9~6AL$ln4}4}-V?0KLcfxrOk_pU~N#N&SUEOzXLA09XJoEHHaD;#xhMcpBc;a9YDD e4QH&UXOE8*kUiEfRn11v1dUHX^1lGNv+i90 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_adjustment_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f665ead3ba6590a9fdc549d41c4e0022a1483e2 GIT binary patch literal 876 zcmah`J8u&~5Z=9)9mghdcnFAu5Cy_Q$toeDiV!40P(Yx70ynFRcW@5hi`})AtAUD! zE-fX9pF)MwplhkJ2zxMs)wq7LiLKERrzilT25Jc5NVKMT+Tfy zau7RFM|aHC%%-Wx=q4(M1W20-(srI=d2ofZiRv5y54k(#zHly}ii&5H!fyrT<%fV( z?hYW;cf^an(h0I{3899^p$rpMUj3iPc9?b`E`!eGtbs|!(=dV3)7bhhmZ@?pa9-9p zPcqSu0ePMCm;Ep{uK2gWd6=e|4t12J3I$hbDa|uKk`W>~e#`c=1XwpcU^}3CI?LJp zOhde~m1Vss?Xs<~(}Pqn>|ns+XpiNE-p|q-t842_;W$@vbO^hk7^aSLV7YxG8?3Xv zD2`1Eo|u8~$s@u)BjFu86Fv!8%?lY|M-~iG*Ad>3ul0>1Z)4~ z-L)^Z4Fd}X zP8nDW61P2p+chZxSxq6#xJL literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d56defc60f8c167d4ca0bc33c7391eb9c8b45aff GIT binary patch literal 740 zcmZWnJ8u&~5T3o49YYd3k-{TLi9~~oWR(O_MHG1m8Vrh{;0jh3-^5w@Ub$OaafbvH zNEGhkzkv8DRFNBW4FwgQB@>EN%-%T_EA8C(eLFk%&D?#TpRWO}?C*W~#RB-H$<4B7 zVETl>1^D2z07B+6rm+ziq3N2Tv)Nkm?Vc}@C+<%z^JuO!|eh&^(w zWQdva!lc!#hL|U-Nne~WU$WzdCZf6I*p^9&8=;o zNrf8;C3qdoIK5CN$djTa-rwfOG6-}D5$di**<-utTa;Ow$snz0OFHPC9a8uNKkCaL zUQP_du1*|iJQ(d?*4M|@`oyqEslme1@Zm5UKKlG_Y^_cVhr|V_ua0&u7uUwt+QcyJ zYPxh&w?%_@)F2@%MeBK^Bm&PBMwy;WIT!uom3A5$6$O?FT~~L@AwNx5h%(xl{@4?f YF?QtuyZaL!|8efH>geqi(4)Be55srENdN!< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_session_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/billing/__pycache__/_meter_event_session_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1eeedb2c3592c34d1d340ae938f0cbad8d7cf773 GIT binary patch literal 487 zcmXv~zfS@&6mIW;0K(wnVB%_IfJR)617g%cW1XBA{{gFUGyW<5 z1LjsIHxtBx$@YpJ-uu43U*CK0&1M~$r+)YOi}9b9{J-)RtPTxWB8C`_P>cr{BM)67 z<}DEO0l)b!Z{TI6R{6`47S3xASqiMrLmj%Xvv^BZ4Fi@4&;T=JDsjup4{kt%yqH0v z??EXpl5+`xhPyxpvAS*fd6m*6h=J0)PH8OIG_trs>EkqrT;vt4?1;@18H*UmD4CN! zsEHOSxe^+pc29^2Pe!B{gcC>@G2><=;zN>VdMuKY&T*G0uA!ZpgkS`UC@pykBrRl+ zS(glX6xkLuwt^{G#Z)=TG%Pezm)%J-Y0p@giUG>91^Oser9FJ{Z#Uc3S!!BRm}^Mv w>Pp(Py5gEeMf#3Go9d}s{Y*9uwHH-;#(eu2<8=k$qn`@Kwdd`kfa41du zm{D5PD2>x#FH+|^rMr86RNim`KQ4wS^^+u(z6{euQ2G&_0*%h!y4z{Y+^yumU14HJ zrkVRFl`NWGO4FS%*>acs?hZ==7k;_#M&X8=<#Ibs=4S5Ax+0WpIs*rPiwRdq9%jtV zv<`QF*4+rBNQI!W5=?d06udw(?P|@mbe_p_?m#vgDsT|P0B_LOdh<(b{-nOpBMW`Q zupHjJ^!j)G*Wvnl{h{($RlbUt#muX{0LEq}GdGP3*8Izl=$=_^n^z%3Q7aXwvKF;4 zfF6XKA>&0Q^YbY6VLW6QGa>yr>$EF;K;>FjFsNRepqw|9spgognc+hUw5FCislRAY zZekSxYS0{h^;C=R+o&~mynND}?2*a7K`f_VLya4UcMiqj)Vr5GGTJw6ARDMTdOUYB zG|?jyeZ#!0nhM@&JB2Ot47yS#pl731GL#)imIyT;Ws0^+NB2c1c0Jj1XR(~O2Ydwl oFnr=JK;Og||F#hx|AywzY=WKl_s (import_target, is_submodule) +_import_map = { + "EventDestinationCreateParams": ( + "stripe.params.v2.core._event_destination_create_params", + False, + ), + "EventDestinationCreateParamsAmazonEventbridge": ( + "stripe.params.v2.core._event_destination_create_params", + False, + ), + "EventDestinationCreateParamsWebhookEndpoint": ( + "stripe.params.v2.core._event_destination_create_params", + False, + ), + "EventDestinationDeleteParams": ( + "stripe.params.v2.core._event_destination_delete_params", + False, + ), + "EventDestinationDisableParams": ( + "stripe.params.v2.core._event_destination_disable_params", + False, + ), + "EventDestinationEnableParams": ( + "stripe.params.v2.core._event_destination_enable_params", + False, + ), + "EventDestinationListParams": ( + "stripe.params.v2.core._event_destination_list_params", + False, + ), + "EventDestinationPingParams": ( + "stripe.params.v2.core._event_destination_ping_params", + False, + ), + "EventDestinationRetrieveParams": ( + "stripe.params.v2.core._event_destination_retrieve_params", + False, + ), + "EventDestinationUpdateParams": ( + "stripe.params.v2.core._event_destination_update_params", + False, + ), + "EventDestinationUpdateParamsWebhookEndpoint": ( + "stripe.params.v2.core._event_destination_update_params", + False, + ), + "EventListParams": ("stripe.params.v2.core._event_list_params", False), + "EventRetrieveParams": ( + "stripe.params.v2.core._event_retrieve_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd5add858f6a9aac418b53a9d205fefdb627f548 GIT binary patch literal 2709 zcmbVN%}*Og6rbI-7aMbGNRjO(%$w-aiD>wQ+zPN^xbN366xpbl_7Y7N>MHN*9OYsk*3 zS$kL==Hr+(Vvnk$T#s90c23QKp5RZ?NEvBkz!)?##t=MNW7rt^E}@QN$qN~y-y(IQ zI#wMk^EtrCsdMW$aPY(W&V= zO9bl_ujxd$J%9GH*&DWg-*vb}nV7~V_Gd0L{}PwCTz9+V7!}uaC?wMndl_4}5gX0msu6=>qrbmOVfp^F3n(1tw&%V*_`#Gk>#Ji2?VrTm6731RQ zI?kebw(~4fJX}kD8UCp~?EM7~@~Gfqg_o$fJ6GIr2`*}onnN|?qLSJMFQpb3-Ykec zxEj0?O|Bnw9n}bm)a2WJ#+cWy$#uT#uojf|N{$t%dXwXaT}LGK3(@4<{Z4oIU1@TC z=hC=syLLP1z9g#DP-U^=}*SX94n6H}d1;zw3+wM2+Z{NxQ7 zo8=vf`M41BLym4^U#2<%Yd>y!nzvI9$kLaCx5sun1#-5nY`Hd8Hk~~M_;Q=N73G#o zu{FC0v<8<*S=2YSv12IEh`WkqmX%7CZn@6;#rNhE&!l*^0tWgf_LQJ}O3<0g?wrC} zSkW}oF{!2%D^=K#R^Nc8kqJmagP*q!aENMRESi6jFaAWI<>#NprykyXbo)hi`iF(* z+3OE){*oF$9+`ZU_&t+5P7fcahfc%NP_l-kMDm}%A}BrjClbJYaO(Ns^waosO@h&x z$EyDzS3uv#3h2qu$I@zH(vJpb3OfmobbwZQv*1079S{C1Ji-pg@BY@eFjCv4>|vP} zcH)=WzbZfRF6be23q$el@vp>DyytpwZDJ|jss5FDiuZUAJ8ogB3vTecCM?b(eovIe zIfrE6a`C(W1f7D4$T+}R%WoS+7@yr8uh)+_bz&OwYMUr3+Enq1LWQ6Yi9AFj6&FDfk}so;cVaKuS7+C0 zoNM3@;8b(Vwc^76!6lY2)?7Gn;(`(-fYcM;?88b!)s^;}Z+_o%zWKiSZDOK`;0ynm zv!CV>`a^88FPAds-vjd!S;&$c|n|3SW_=z1xy2A5M?1(bc;iZNjeNCTt zZAL9#c-9N3B@|mpxP;<#bN&}FFA+se$wE!}TSOI#X91%*OL_on0a0~~$SIPylvD?& zhyq%9D<{zG2M_8S(tIXKZMCsfqnP4dIg^8BA(dg^i(|bkvr>xWt#ayXBGa)dDKa@m zuBAv-AiXJlnlEhaQ!m=2VPtz|Wc%I*qh>_EGMVXyykya^#q2-`c!hfAjzcX%g-Hli z*Fw(>!j2D>k2*V?VJ*;)Y#^a`HRxviUAK<5qe^ zHUkz7y}&g>MAC%tA|bACbsfQ%33=W%okYS^;av$M#wQ6eJosULP49-=#*|J22p8_aZ+q9{Uk>*4ClSP*`K#Z0$j{4Ye z!ZRR0qEU6B|IMJfG{j4%vYgXSRrKC$fBL8GAzsXY+Wg7<+F-gq#PtlCTI@eN{@`SF zeXzVSSlk>`w}yBt6INzNT6t8SKB;{e9OpACxlhxmR5&902JPaw=JM35nZnnajc z9%=Ugp1B0GrK|>Tyg2D=ht5|(eD%c{zcujsSn(^>t z@5ZYfn-|d*1X&d1h9EZuxg|)P%d+5vub4anCKNlkncB<{&tzw;){dUWd}1Y3-hP7j zLGtz!^kiLOb0FplOlyPP2KH(qLLBRC0~3~kKq7_m(c??8g-$~+auwzhS~u?Vxb1m0 zK?psFs3>OeR5$3lmM3v|xPNIMOYFjmz*_dyvfABX$P_68zykAg78XN&l)yy74=D lI6x0C)Q=_Y_|ppn%Y`RtlJ@KN1%l<`ItE_<8^IF0{SR{b&@uo3 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28579af3be6159409f961f78c11a6205b22ed050 GIT binary patch literal 481 zcmYLFJx{|h5Vg|}wWS?c7!WfeLu*kcB*ah^!Gsu?x>zATwN?{5#BSBh@E^Lui1;b| z0hE=A4XKo&6X&Fe8}8oo-TB_#Tc^_^Xy#{MK4biF~){VTZ>eoIU@oCf%Ck@d91}Oa=6X;{Va&e%nMn$37ZEt(J`>GS}^=@ zYIVY{w1ucU(0VG>m<@t(3Q8~>IcJf)V@YNwTAlQc`^-oS-2@AQF&JiSDidHyA%o5P zEYvA54o)l=|7sCCxx6gwC0XhYShzX@Oc9! zk{O}oKxj6K;f`f2(YH}p)G3uL0ZNM|rHSJ6*x?qX4|5j#%nMq(5!)4+sszYHE{Xkd zW>iY9m4Ud^S868Yg!I{X29gsyb3tM;B57`>N}hF3dqfKZozxbv3235CCQ=}2DT6F} zWUMkE6r5Vh|K(Ed^-^EiP4mp1uyi#Gv|}suUa4p9=;gcHYTx9kRYYNFKx(_U&fH0T rbHkyse9xk7{oJp8k+m&#*VG5reT5j~O%36b?;6I9r<)D3q3rtw=+b{A literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_enable_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_enable_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7d08700afdf075202d5f8e73d149622a4db40a2 GIT binary patch literal 481 zcmYLFu};G<5Ve!GYD+t?Fd$|`hSs7?NQj|o1ruUm>SDR^skNHeA$F@~hJWY^BjQu| z0hE=A4XKo&6LwO>4R`PP?tJg=t=(=SYx?I!7O32@%H%M#!N5t^_}mmcrPx@Ex%0UBYBY$p!9{AjoUX$GK; zkjw}rhmwsWxMeAe^-bXCbxI|RfzrH5X{`7>a=1n5{hUQ*<^`?YgzW>Fsu;*bE{Xkc zW>iA1m4T?!S868Yg!EZB1IdXUxge1klO!`!CC|F2J)(tyPGSq#1T@hm6$y}}kUsk1t*sBf3*|}xwI_oCRyqZSh$)6+ObFUUa6<<`JP4F`bD|*W!kpX-BKS|_vK@ZH#LM$zH1map3XPOhNABmp5%Tv literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91011300b274be1084ce94b3c720b32067bb7331 GIT binary patch literal 721 zcmYLHJ#P~+7`E>#*N+H_ifCHIh?JqRC>u&zsVah@iV%Y37V8>YiIqFw)pkOU4GDI( zc4S2?{0|nQF6b5pCbmeS44rs=*9c2~?|DD{ypQf%v$=}k=)c?ID@N#-b(Y7!0gER9 z&JjZlCn&`c#uht?le&?cdXbmg2HbHzpc~8rFSf}X}e|P zSQxJ2q+IJ~<|RL!2*p{s@~X%=I}!sksGDo+-8hRbfOEuAgc*vQ*ND3uUShZf@#WB z+9Mj2+|8jN9&$~zQ6lFguQnpnJu=7?CzRW*Df_=RO<-?Ymv!<&g_fx`4Y-hTk7{XAgR_*8Z${aOoY)9mfyn0b0NJQP0+PF1?*9qBfQj`t3#;m?8(_l>p^N z?NEMZxYVGzt~9A73YKl^wnf#HJAkgkZmsOTx(hD+nMmIUGj}n@R{_FXKT&UndVhit Mho4$k2tHN!KMHlg;s5{u literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_ping_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_ping_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2fe5b14d5bc5df00ed77e0916509a20a1c310ba GIT binary patch literal 477 zcmYLFu}%U(5Z%240tkhTiF|{ zz+7u(XM$KzxqF9kikbIz-ptO-Tf5yv*7Q$@KiT-<$e&gBU~^)@8ZpFhj1oM?7i&K5BSwDbz?891l3PR0-QJQG6ihNBNLVB(&IhZv@BR7Kx531t;B(scdiy7%n-EU zA~alz5f_tDn1+eI4g9=LsR$FGG;dOxNH&ihZc+L$592cPf;O)I?vYGo0%RhV#I~Cm zsmP5q5O)Vs&TLaM2%{MYM(l?R67zeaGBcIpym!_onj7dUD+ni`i8d)$KvXdXS@cOH zQy>)FsFeNBN|o(POIc54sXJcbY8Gh6R_MJ_Pu;nTcem1^$%-;q8W7rUtW$T)vbf<; oAwRHaSHCECzD(Pex;yG4>%M%9@wSHW>30p|#`EzO*-+H|0!#ONp8x;= literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdb72ea3e22a5fb53378531d1911c65d3244ef9f GIT binary patch literal 681 zcmYLHF>ljA7`?L{Clo?KbZ8NDL<&-KqHHK>rK$*ostQ#w;N|4zJ|(BvckbOK)XelZ zv?D9xr?3#QATJC|Y?VS8I`P>~#7X!0z4Q0^-h1-bc6){3vVZT(SCo)nC0VY<0?eNw zI46P#nvj%6l$O{_yws2UG>C$<5j80B$O|I;k3pFhX zJdh4doD???wL5~7i8LUJ8*lOq#J(K3K|Ng8U_s`O5u6hs5fvoz-V*QuZxVC^&zBoQ z;q{Q`ekUk4pHD%#eXvfd*h#I9z!?cscpaNKwI9~r!|_P#F$X0wEtTs|Oj0zZ8YB|| zhn;58;#|cka9*r%o@y~kN_>m+lS!P^Z%mnzDean4X|c+Atdw@ug_iTrWRAz=`izZq z3T&uO87dk(ow1kNL9(@n3Zxpcy?8K2Aq+K7St5^Fmb;NwPrFaHnZ>-eGHi&4V3|c1 z8L+H!!KT}6pbapN#+2jYzg=z?etF&6&2rN!g_fm>+djl{Mt-!{FV-%G-yZd5oBi3w z&aA!rJ=neUyhh8cF8j+kLYHSKwQ^hBtqF%y2g+i)whExmBV3M|+a;>LatG0Mt5?Uk lW9}ivKaSW3ST21^=~YPR`cKlIk^Y}Bpsi2ut_VJ=>3>ljx2*sG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_destination_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b9d2f633d51e23dc7ed1609533bf9f7234f45fe GIT binary patch literal 1247 zcmaJ=y-yTD6rcUxJ3bUWKrRG7V$_4k28e|QG%*?}5RGUw+f0_*@z}6m&dwoctG33@ zixqYn8~+a*H`kD9EUfI#9BN|ao84Q26mGJ=nfbjp@6CJjo6kc-WdvXHtLjat2z?Wa z;?w$*-Xoa2K`wG79|e*v1+py%imgb3lYKSNY%S1jJuqxTLNdCAT;&CFRbqTp@))+6 zu^O=Y0k+gKYUX$0Qd78k!>co{u6POK=AD>%QRw)<8!H|o)baViYQ*l5CrytMmzVCh zV&aM|^*lw6`)7U&>oI85^bEQQXOM=mJuFuN{c*9i$Tl}y~-M5-V zC8d1lWBGuGw(n77(hJ5l`Z-L&v`V!ypS-z6LUw~B%nKb+?1R{K7`f|ECrJ2!OOiVE zvM%sp5<2TXaWN5Fl4q5tWPKxwHZcj^IPyX^+oV1>ys+*!UBbhr>eb=|3NLYWp+zGeB| zx)rzBMieg0&dpm12;*W54o-t47NquKV#Qelt*v>h9#LZDJ;Tt>qR+UQH5%uRvvG@x zCy;@tA$bMx677ymw%5{;(;fA6SC%!itE16VJL=BbyHZ-2?x@oRJ3P^@v>RW}Ev8dT z>BQA^=vqg;Rv3>|+h^O!&hq=UcelTsoJ*_o>F`2FT`24WW3TIJx!O^y1v7qT*Sz#Y zk;nBOk~O`nLvDJaIN(28@4qe76XwHO&sE-%YYIIIX0CulR%;qPCPEz-P!TXHU`)Wc zfGm-aYPKnZv#?4A0iY+P!RO1_L32kDSjaGD1BwtIOBU;zvr?1$>e-2!6~P{+ z_AelQ3R9E?d0}8;ixkSxiPx80gw%moI{SGazaRI!_P6!*3IdaVwnSzl^wT(nIZH5q z0^kw_D8M0#a0g?9tjvbK>!N@|-QDA>W0pa8;)G^j^Mo!E9Wnc?y@={3EvUIhb zsMq{_ATl24^4n3$gA>tJT@zN=vH+Tofw@E+b#Q<>);q*)P8z^*C%}iWm;Ys~72_^r z>=jdFkz0&&i*Z*>Y0+(2tz`I-*DCAUvmuX_5%kK>{77o6r?lNuTsxtNgwj?Beh7X! zIepK&iitow3be|0%hMiXu^(~9bcL}f2?n9TYmA)_{BUuS5$L6DsWM$-%#Y(l`AQ_Q zgg{%w%G?$Dg66QIn*lvbB2Ihp1wG-iuacC$NE8oukCLP>;vPNnyL}!96#jZhLvc#e zkvdD_gS|)lR0_p+QwZ>TTvBK#Qclxc79H->Zjy1zxY5f(5X=@wd+8`ELGOGqKz@Mb z6Z-Dm8y`=+`jpgXmgRUe7gaXKZzko&lr#!vZF4Lq)#j8m3#NSk|5zCCqG$@wJO^{Revd+kJ?=vA9OC<*9!G9E8=< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/v2/core/__pycache__/_event_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7df4a308a86b4063a0208ec3f29e11488bb9f137 GIT binary patch literal 462 zcmXv~u};G<5Ve!GYD+sHBnCbJk)gFHD`KdMU_uBnb+JNxYNIB$vE8WI`w#6eRD23Q zfU+{NA(b+8!cNK!cklV`?C1C1?Y5B({d*R#ZT)oQKk5gtJ-1+m7-BdFYd9s?G*&-NpNyOhpQ0!WU!&dS-+q_rgHZ z8wxRt`GgF^Xa<}S`%*@d_=U*aOa;H{Uk-?l4fLcP2q&P4wlX9TS;`>UfJ8z8p;j3; zR2@Xps@<2la&DEWVS#pRi9Tvg<@_zr-B*rHF0Bj-3j (import_target, is_submodule) +_import_map = { + "EarlyFraudWarning": ("stripe.radar._early_fraud_warning", False), + "EarlyFraudWarningService": ( + "stripe.radar._early_fraud_warning_service", + False, + ), + "ValueList": ("stripe.radar._value_list", False), + "ValueListItem": ("stripe.radar._value_list_item", False), + "ValueListItemService": ("stripe.radar._value_list_item_service", False), + "ValueListService": ("stripe.radar._value_list_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0279e0b1a4a450c81cee58df5c6b84a0001643e GIT binary patch literal 1510 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 RapUA`&C=_S5bd%p{sRu37uWy* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_early_fraud_warning_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_early_fraud_warning_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d8a9fc590bc93d1e823602500fe6131faa6a323 GIT binary patch literal 3396 zcmbtW-ES0C6u-0cv9q%u-L_Clv2+0WSPDB92nZO7d>f=RpfN7NaoD+~3o|>*z0*RW zBnF6yiBX@d&-z4)e}Vo7zR>tUGm)tAMH3&EELF2lo_l9z+p-lZ&cm5=@Ar?i@h3-2<5OU!k&SG@L9S2|1jZ+vge#Ur&Wn!Z$|c!VN(vuK zPSRCNs(`Rc)`PC>q+G3}ahc+z-ApON`J|I|bEO>TRj0$vm-3uXIh}4-sY^f!bOPDh zU1X=RFe8ThDRoa~3fbS;pdbXD|R6fsAp<^#j9FQ zAeAlZGmE$18#!hkIeF~JsW*pDz=ZZzh5BbMUdCl6&Yi_q$1zNBI|?)Fj#es3h2^lt`fzvODYq z7Hx4YNNfo>nRAMr993-fu3VCytCa#RInvUw!u_S&{AET}I}4i06=~)`Q=JqF`JlJ$ zXb}{{fl}ikA}qs#q!-4Mu)_ul!Tva@Hv1Psf4r;ASRll_uyNxskZI%#@Z+B? zOrgt*HRJh&E!xtQFqOD3&qTRAlL&?9P(f+#*YxNEz+g92w{!=P)xA+2GsyK(hPi$% z1f3RJ`lJio1mY#^H`f~zLk6*Iix}L-&8(`ulQcgIO+M=*?HLWu0T>6hpqAz zT(yk}T%9nS%0;6#>5qBU-Nm6@2CevbXAKmrOPCsz*G#l+bD4dcG_0p$Z8DHpOm6hI z!4u(JWa8DZN4f{dhv-Qj|uF8|70|HipB{d2to^)$-%HIS0c zHRM!YtD{s(Yk(bU!}<7i zFN#}N&%>_Gvt66pBiFqJBG;Y!YiaoE5=65}GvMg9zEk*07}UN_?G%FUWpE{F&>~E= zECGo>Hp|ki;R9J|ZC#GthzxYXnbJym1PZdlBQRUMAS`v0ckPD^Y3!nQHruh9dBVS8m-4C|#>_FMzXdDAk1HNEiu(8GVY0fdUJ=mQNVY_ayQX)8y){=0ll? zb-*xvRp`n5+Pbmf*wYtYTc)brSuJ_{)^QUL?r+?hG`@xji1n3(_f#41m+N+`I#mjn9GnmtOGy^Aoy9@;Ti@ zC7WSeyrRPHv4st{GSY%&IL2iIn`TwdK_La;p28p(2RLdYTc3+WsCbUK`T$7SN@7Ts zw2~Er!rF|=+RPGU>Jki_lx5HD{ckA3x568e_FW3NLSlHhkb*nRtXeKM%|J6v*R#hR z#%E0P>bT{E62e*rS(oJaY|O8&uy+xaN!G-Y=wV_m zdB5$6q~Qy%$lpK3WgimU@#2Tzt1C8b)k0*>ZmD2HWd83Y^YB^9mA%9-)_iLK_~T!C%DuBdPdE+B=^}$jZFJ36hTrPn35ALHqL7 JJYs+D`yU0BW~KlD literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b27b7dd3373c6e4ab85b000d73501f9eb2457705 GIT binary patch literal 9318 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 Dk~uYb literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f268a14813c6d5715e2a2810a67970686ed1d0da GIT binary patch literal 5255 zcmd5=-EZ606~7cIN}@h2$&MX4aKkiBJH?K)*lDvg$%-Z^(xR&xG{Jys=mj6U(6c{jIds?=)VFLyjN&63U|G{2r?4bhDU@Q94zNt{M4SL!+my~QOvg5Yc z5Ir2;d(SzSJfFXN^|x$RA@FnmHEn)ANywKt>Hp&4p!*jX+#v=r1dG^0T@Y{_vtqVb z7x`GUBs*S@+j3pzbID5B$$C;CG|7&FY}`uON?qYR*-G1)dWMe^R@Tndb9|h%#_W7O z&&MgNU>EB}K31%8d!jzU$7ySyJz1X=NQ_)0M&>p#vQ)S$2H#nqTFsTmzQ##e@Uxda zX13^M%2vzS!Byxy<4Z458bpR5aa!(Hx4{gDx0kFAUM zW8#=3UVGV^fbe&s$A0NNi5Lf{|%op{Rxgq+QtGY`y z-7pw+T~-7R8wau>F&U+j8VgFzmlqvo>mEbTZb-i5Qfra#w58-C56$ec>XKvA>b2&3 z)eF?U;W@49tByylW9J;_1{ha8r#EiUrcqs?&6TQUUahuPy(Oo)P&qzdb>TaYwLn0> zM%}8*dq-%KHe{6M20f+HT4hu4^0jEmhRIV2oO1vK+!~Nyk_SbSpJ-2@Eq+feZr9o`#v93H%(0t{sZxcQh1% z$Z_1_=Rm$9|JfFk;^b$=Bb&t|-zF;K&q7qjbN`NprXxY5dfhR2#RsQemW5A*mnG$| zDHyRVtUYmEVqs9#eX!Z7PYl<;cn#2LL?GD=*f}azN$8dw&emo|#;MP~2>Lq}&A#tm zH0r(? zERF<8x1wHIq9I~}Fr%vLFpnCl*;EbcHUL==K^Fpdp}YmVburJr4Nwh-6JSSv4D2KrwtF`49h=ALHpB_N^eir;iBZoeXnt5e2P4_J z-9LfAhp2r4NPsJSM{VKCu&b~@WJHgMzd903dtI!J57cAApM+WEYq!vgppSH#kw zB7&<7Rz#ED99a#J&r4=wNi{*pFd%5Hc?& zy2D8;VEzGAqiMQz(wcnI)ATgj%^Uq091W!@J2~1dnZWWeLr0%|wu{_D7Y*m=f%aC8 z4*O}h9A&3qw{omjD+{%977p!NQ@5$6`HH65j>`6Px+xI|-a8Npbqq>7$#4*$&Ee6rz;6X&lXeU-i>3?eO*&HuEPR|Mu^xUS0Sm zQ2@j93aiWWTk zmnw!(;b;2HWzV$u(chQ7)fV7lkUspHSO``$`kqIdE+DPT@UHBS_mz3~4uF*U|aV0rWoE+LPh>x!VmZKMs7x^hPdFL*pu4e z_!p|;<-?x|RYw~abRb@5*d?}Vua`U%l=P3;C1Bv+5bk*(9Z?X3hcXe4-zU%fgB-d~ mX1@^g_od2x>4k@}SX_Q64-pbS^FVII1m*W<9};}>m;4uyX7b_y literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/radar/__pycache__/_value_list_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c85b6f9a78b32e4cf0104d57360c9c4b3ed5b535 GIT binary patch literal 6463 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning.py new file mode 100644 index 00000000..14d60429 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._payment_intent import PaymentIntent + from stripe.params.radar._early_fraud_warning_list_params import ( + EarlyFraudWarningListParams, + ) + from stripe.params.radar._early_fraud_warning_retrieve_params import ( + EarlyFraudWarningRetrieveParams, + ) + + +class EarlyFraudWarning(ListableAPIResource["EarlyFraudWarning"]): + """ + An early fraud warning indicates that the card issuer has notified us that a + charge may be fraudulent. + + Related guide: [Early fraud warnings](https://stripe.com/docs/disputes/measuring#early-fraud-warnings) + """ + + OBJECT_NAME: ClassVar[Literal["radar.early_fraud_warning"]] = ( + "radar.early_fraud_warning" + ) + actionable: bool + """ + An EFW is actionable if it has not received a dispute and has not been fully refunded. You may wish to proactively refund a charge that receives an EFW, in order to avoid receiving a dispute later. + """ + charge: ExpandableField["Charge"] + """ + ID of the charge this early fraud warning is for, optionally expanded. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + fraud_type: str + """ + The type of fraud labelled by the issuer. One of `card_never_received`, `fraudulent_card_application`, `made_with_counterfeit_card`, `made_with_lost_card`, `made_with_stolen_card`, `misc`, `unauthorized_use_of_card`. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["radar.early_fraud_warning"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + ID of the Payment Intent this early fraud warning is for, optionally expanded. + """ + + @classmethod + def list( + cls, **params: Unpack["EarlyFraudWarningListParams"] + ) -> ListObject["EarlyFraudWarning"]: + """ + Returns a list of early fraud warnings. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["EarlyFraudWarningListParams"] + ) -> ListObject["EarlyFraudWarning"]: + """ + Returns a list of early fraud warnings. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["EarlyFraudWarningRetrieveParams"] + ) -> "EarlyFraudWarning": + """ + Retrieves the details of an early fraud warning that has previously been created. + + Please refer to the [early fraud warning](https://docs.stripe.com/api#early_fraud_warning_object) object reference for more details. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["EarlyFraudWarningRetrieveParams"] + ) -> "EarlyFraudWarning": + """ + Retrieves the details of an early fraud warning that has previously been created. + + Please refer to the [early fraud warning](https://docs.stripe.com/api#early_fraud_warning_object) object reference for more details. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning_service.py new file mode 100644 index 00000000..b5f909c0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_early_fraud_warning_service.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.radar._early_fraud_warning_list_params import ( + EarlyFraudWarningListParams, + ) + from stripe.params.radar._early_fraud_warning_retrieve_params import ( + EarlyFraudWarningRetrieveParams, + ) + from stripe.radar._early_fraud_warning import EarlyFraudWarning + + +class EarlyFraudWarningService(StripeService): + def list( + self, + params: Optional["EarlyFraudWarningListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[EarlyFraudWarning]": + """ + Returns a list of early fraud warnings. + """ + return cast( + "ListObject[EarlyFraudWarning]", + self._request( + "get", + "/v1/radar/early_fraud_warnings", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["EarlyFraudWarningListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[EarlyFraudWarning]": + """ + Returns a list of early fraud warnings. + """ + return cast( + "ListObject[EarlyFraudWarning]", + await self._request_async( + "get", + "/v1/radar/early_fraud_warnings", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + early_fraud_warning: str, + params: Optional["EarlyFraudWarningRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EarlyFraudWarning": + """ + Retrieves the details of an early fraud warning that has previously been created. + + Please refer to the [early fraud warning](https://docs.stripe.com/api#early_fraud_warning_object) object reference for more details. + """ + return cast( + "EarlyFraudWarning", + self._request( + "get", + "/v1/radar/early_fraud_warnings/{early_fraud_warning}".format( + early_fraud_warning=sanitize_id(early_fraud_warning), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + early_fraud_warning: str, + params: Optional["EarlyFraudWarningRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EarlyFraudWarning": + """ + Retrieves the details of an early fraud warning that has previously been created. + + Please refer to the [early fraud warning](https://docs.stripe.com/api#early_fraud_warning_object) object reference for more details. + """ + return cast( + "EarlyFraudWarning", + await self._request_async( + "get", + "/v1/radar/early_fraud_warnings/{early_fraud_warning}".format( + early_fraud_warning=sanitize_id(early_fraud_warning), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list.py new file mode 100644 index 00000000..eb9623d1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list.py @@ -0,0 +1,318 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.radar._value_list_create_params import ( + ValueListCreateParams, + ) + from stripe.params.radar._value_list_delete_params import ( + ValueListDeleteParams, + ) + from stripe.params.radar._value_list_list_params import ValueListListParams + from stripe.params.radar._value_list_modify_params import ( + ValueListModifyParams, + ) + from stripe.params.radar._value_list_retrieve_params import ( + ValueListRetrieveParams, + ) + from stripe.radar._value_list_item import ValueListItem + + +class ValueList( + CreateableAPIResource["ValueList"], + DeletableAPIResource["ValueList"], + ListableAPIResource["ValueList"], + UpdateableAPIResource["ValueList"], +): + """ + Value lists allow you to group values together which can then be referenced in rules. + + Related guide: [Default Stripe lists](https://stripe.com/docs/radar/lists#managing-list-items) + """ + + OBJECT_NAME: ClassVar[Literal["radar.value_list"]] = "radar.value_list" + alias: str + """ + The name of the value list for use in rules. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + created_by: str + """ + The name or email address of the user who created this value list. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + item_type: Literal[ + "card_bin", + "card_fingerprint", + "case_sensitive_string", + "country", + "customer_id", + "email", + "ip_address", + "sepa_debit_fingerprint", + "string", + "us_bank_account_fingerprint", + ] + """ + The type of items in the value list. One of `card_fingerprint`, `card_bin`, `email`, `ip_address`, `country`, `string`, `case_sensitive_string`, `customer_id`, `sepa_debit_fingerprint`, or `us_bank_account_fingerprint`. + """ + list_items: ListObject["ValueListItem"] + """ + List of items contained within this value list. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: str + """ + The name of the value list. + """ + object: Literal["radar.value_list"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def create(cls, **params: Unpack["ValueListCreateParams"]) -> "ValueList": + """ + Creates a new ValueList object, which can then be referenced in rules. + """ + return cast( + "ValueList", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ValueListCreateParams"] + ) -> "ValueList": + """ + Creates a new ValueList object, which can then be referenced in rules. + """ + return cast( + "ValueList", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ValueList", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + ... + + @overload + def delete(self, **params: Unpack["ValueListDeleteParams"]) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ValueList", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ValueListDeleteParams"] + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ValueListListParams"] + ) -> ListObject["ValueList"]: + """ + Returns a list of ValueList objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ValueListListParams"] + ) -> ListObject["ValueList"]: + """ + Returns a list of ValueList objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ValueListModifyParams"] + ) -> "ValueList": + """ + Updates a ValueList object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Note that item_type is immutable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "ValueList", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ValueListModifyParams"] + ) -> "ValueList": + """ + Updates a ValueList object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Note that item_type is immutable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "ValueList", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ValueListRetrieveParams"] + ) -> "ValueList": + """ + Retrieves a ValueList object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ValueListRetrieveParams"] + ) -> "ValueList": + """ + Retrieves a ValueList object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item.py new file mode 100644 index 00000000..6ef11fe6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item.py @@ -0,0 +1,263 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.radar._value_list_item_create_params import ( + ValueListItemCreateParams, + ) + from stripe.params.radar._value_list_item_delete_params import ( + ValueListItemDeleteParams, + ) + from stripe.params.radar._value_list_item_list_params import ( + ValueListItemListParams, + ) + from stripe.params.radar._value_list_item_retrieve_params import ( + ValueListItemRetrieveParams, + ) + + +class ValueListItem( + CreateableAPIResource["ValueListItem"], + DeletableAPIResource["ValueListItem"], + ListableAPIResource["ValueListItem"], +): + """ + Value list items allow you to add specific values to a given Radar value list, which can then be used in rules. + + Related guide: [Managing list items](https://stripe.com/docs/radar/lists#managing-list-items) + """ + + OBJECT_NAME: ClassVar[Literal["radar.value_list_item"]] = ( + "radar.value_list_item" + ) + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + created_by: str + """ + The name or email address of the user who added this item to the value list. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["radar.value_list_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + value: str + """ + The value of the item. + """ + value_list: str + """ + The identifier of the value list this item belongs to. + """ + + @classmethod + def create( + cls, **params: Unpack["ValueListItemCreateParams"] + ) -> "ValueListItem": + """ + Creates a new ValueListItem object, which is added to the specified parent value list. + """ + return cast( + "ValueListItem", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ValueListItemCreateParams"] + ) -> "ValueListItem": + """ + Creates a new ValueListItem object, which is added to the specified parent value list. + """ + return cast( + "ValueListItem", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ValueListItem", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + ... + + @overload + def delete( + self, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ValueListItem", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ValueListItemDeleteParams"] + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ValueListItemListParams"] + ) -> ListObject["ValueListItem"]: + """ + Returns a list of ValueListItem objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ValueListItemListParams"] + ) -> ListObject["ValueListItem"]: + """ + Returns a list of ValueListItem objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ValueListItemRetrieveParams"] + ) -> "ValueListItem": + """ + Retrieves a ValueListItem object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ValueListItemRetrieveParams"] + ) -> "ValueListItem": + """ + Retrieves a ValueListItem object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item_service.py new file mode 100644 index 00000000..30637272 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_item_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.radar._value_list_item_create_params import ( + ValueListItemCreateParams, + ) + from stripe.params.radar._value_list_item_delete_params import ( + ValueListItemDeleteParams, + ) + from stripe.params.radar._value_list_item_list_params import ( + ValueListItemListParams, + ) + from stripe.params.radar._value_list_item_retrieve_params import ( + ValueListItemRetrieveParams, + ) + from stripe.radar._value_list_item import ValueListItem + + +class ValueListItemService(StripeService): + def delete( + self, + item: str, + params: Optional["ValueListItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + return cast( + "ValueListItem", + self._request( + "delete", + "/v1/radar/value_list_items/{item}".format( + item=sanitize_id(item), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + item: str, + params: Optional["ValueListItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Deletes a ValueListItem object, removing it from its parent value list. + """ + return cast( + "ValueListItem", + await self._request_async( + "delete", + "/v1/radar/value_list_items/{item}".format( + item=sanitize_id(item), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + item: str, + params: Optional["ValueListItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Retrieves a ValueListItem object. + """ + return cast( + "ValueListItem", + self._request( + "get", + "/v1/radar/value_list_items/{item}".format( + item=sanitize_id(item), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + item: str, + params: Optional["ValueListItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Retrieves a ValueListItem object. + """ + return cast( + "ValueListItem", + await self._request_async( + "get", + "/v1/radar/value_list_items/{item}".format( + item=sanitize_id(item), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: "ValueListItemListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ValueListItem]": + """ + Returns a list of ValueListItem objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[ValueListItem]", + self._request( + "get", + "/v1/radar/value_list_items", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "ValueListItemListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ValueListItem]": + """ + Returns a list of ValueListItem objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[ValueListItem]", + await self._request_async( + "get", + "/v1/radar/value_list_items", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ValueListItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Creates a new ValueListItem object, which is added to the specified parent value list. + """ + return cast( + "ValueListItem", + self._request( + "post", + "/v1/radar/value_list_items", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ValueListItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ValueListItem": + """ + Creates a new ValueListItem object, which is added to the specified parent value list. + """ + return cast( + "ValueListItem", + await self._request_async( + "post", + "/v1/radar/value_list_items", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_service.py new file mode 100644 index 00000000..637cb2ca --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/radar/_value_list_service.py @@ -0,0 +1,234 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.radar._value_list_create_params import ( + ValueListCreateParams, + ) + from stripe.params.radar._value_list_delete_params import ( + ValueListDeleteParams, + ) + from stripe.params.radar._value_list_list_params import ValueListListParams + from stripe.params.radar._value_list_retrieve_params import ( + ValueListRetrieveParams, + ) + from stripe.params.radar._value_list_update_params import ( + ValueListUpdateParams, + ) + from stripe.radar._value_list import ValueList + + +class ValueListService(StripeService): + def delete( + self, + value_list: str, + params: Optional["ValueListDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + return cast( + "ValueList", + self._request( + "delete", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + value_list: str, + params: Optional["ValueListDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Deletes a ValueList object, also deleting any items contained within the value list. To be deleted, a value list must not be referenced in any rules. + """ + return cast( + "ValueList", + await self._request_async( + "delete", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + value_list: str, + params: Optional["ValueListRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Retrieves a ValueList object. + """ + return cast( + "ValueList", + self._request( + "get", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + value_list: str, + params: Optional["ValueListRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Retrieves a ValueList object. + """ + return cast( + "ValueList", + await self._request_async( + "get", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + value_list: str, + params: Optional["ValueListUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Updates a ValueList object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Note that item_type is immutable. + """ + return cast( + "ValueList", + self._request( + "post", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + value_list: str, + params: Optional["ValueListUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Updates a ValueList object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Note that item_type is immutable. + """ + return cast( + "ValueList", + await self._request_async( + "post", + "/v1/radar/value_lists/{value_list}".format( + value_list=sanitize_id(value_list), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["ValueListListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ValueList]": + """ + Returns a list of ValueList objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[ValueList]", + self._request( + "get", + "/v1/radar/value_lists", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ValueListListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ValueList]": + """ + Returns a list of ValueList objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[ValueList]", + await self._request_async( + "get", + "/v1/radar/value_lists", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ValueListCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Creates a new ValueList object, which can then be referenced in rules. + """ + return cast( + "ValueList", + self._request( + "post", + "/v1/radar/value_lists", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ValueListCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ValueList": + """ + Creates a new ValueList object, which can then be referenced in rules. + """ + return cast( + "ValueList", + await self._request_async( + "post", + "/v1/radar/value_lists", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__init__.py new file mode 100644 index 00000000..44a709eb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__init__.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.reporting._report_run import ReportRun as ReportRun + from stripe.reporting._report_run_service import ( + ReportRunService as ReportRunService, + ) + from stripe.reporting._report_type import ReportType as ReportType + from stripe.reporting._report_type_service import ( + ReportTypeService as ReportTypeService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ReportRun": ("stripe.reporting._report_run", False), + "ReportRunService": ("stripe.reporting._report_run_service", False), + "ReportType": ("stripe.reporting._report_type", False), + "ReportTypeService": ("stripe.reporting._report_type_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7918c7dc60692c70dc93daec90cfb84a8d8afa80 GIT binary patch literal 1244 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 xW3sc;6Eh&>$v~` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_run_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_run_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86d09f5a9d97fb02974bf0984ad6a4d5ad51b2b0 GIT binary patch literal 4104 zcmcgv-EZ606~7cIilROu$zO5W)J*fSD2~P19+Isc+Qn(t7Hyp@DGF3YOEBWK&4i?s zOWKKD7Z{pgz<>ekQv>XAeW{W3FWCNry~OB41)@Pa?4^6tpky2Lv~w;=$&QldW5WpW z@Z5XO{W|A&&bjDht3K@Hogrb6XRE3liM>4Z|l^aC96&UghM%SbPmS)VFLuICJ45ZJ@Y# zj$U4+(80&~&@*<9wwf$Bx9Xi{)C}lZlbJ3GM*0Grq2E2x?>zPi0A#SQRTpMN6Cni6sG-=A3M0mSju0o~}!e)XIWZ8fF@?QkJ@F zjvUO92dVr}X#u2}c!eTW_+Iu5?IpLQSS8TRK9*(~G}U#XIvSSx=7{~b7|JbfU6zCM zhM8vM1cn9*Wk!Ql=Jmz~{(8SZ!3T{P9-v7G0vy}j1t2#_Ai#$|mas`K?$k{BQn%QbmliA*~wq!FusP!jfBd|s&F4LelsjtoIj6)3+W6oeOX(*a4drJ)S7fhcT zre!he`>X^b8N@HyN--H{Q4AJA7gQymI!gl;ACCaa^R?MI-M0fe(*gx^nfkiV18>KUVR?)b z+_K?E@mOoEhZ34;V-Q5Kt83W37q;d91jw(+-4ZE{w(|$u`O@#-{_WfC(pbAR-QNFv zdt!fk?^Gv83j4Z5E)=`zY)S2qY*y{UI5On+YtY&K5XhTEcxu;QBbNLT*zB{^4e>YW zG#NnQB>A24rFccCX4n`k!u`j_k()q*2Vxi>i-}i?iB}BMU-uepKL`_duqkMSDq13v zZamWm^iDHH!f71&3Xt!~zjxTHGX8bt@OI_!u*F7>fW=0N|JrS~js#Zhb@MRMC)$kg zM`2q1JUb&Wj2Tt{GGtN&&;KrxzUYHLN~ah}9=)P9c?Q-@&(bc?W!uvLM;?X@22%vB zns)RwWr2x8jx{YItcxP0i^nw{vf|vtM<3YjS)&Mh~xX5%br174SP~<@B*tbnkmSJ{Bf{GafIM!MxR_j#l3CyzWRk|Fa5Jtox1@x# z(wnJG@s|96x{~QF^x>9V7JLqPivr9YAIppBY4j?j2#kfuepqUD)DZ3z%t5^)53M2k zM*~ZIyd|(1P#DkOdlq^_d8x@0hk>R48U~=*oAQG<=z|Z{2c5Ut-nQ~hFuC({|WNo{o zchb-TQDxuleaE)T(;bv{6rvvJW|2GgG=q*4eLi01M-N?KELz~nbWgsBC&-S%2}UP6 zY52n4%agY!=eA4poeZ{>!C6qRqY`zjn?r7nJmv7aI6N{hT6VEI9*#%1zM2tzlY1V+ zG#cg;;c8$z9I~Md1sd{Jc6c{=TUsT#C{0^tSvs?B08cV2=`tC-2Hv1VR1u<9h_ZeE$CcVdCwj literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cb729b6ddf57edbfafbed21af49e31ac274e03d GIT binary patch literal 4139 zcmb_f-ES1v6~FVbv$MP2U9Z>11_B)%W4r-&3DA;K8r6VB+<-xZM9QYoXuNZ656s7M z@2p|njTAvzQ4zIBl?r{R%0nKCNdJQV1C{#X6_IR>QYBSi+P5Ve+R9HoXJ*!{_>e-= zk$m>tbI(2Z-gAEEoa?`2vuOe!|JOF_PX$8$j)UH(#7wsZ%xz*4Q?Q96R0RQf(H0%4 zDuujc%TA)2aFnXzB&*3#Cfll$s-~QDHSJ`o8G+CY8-R5Qd%($7v!RY+=bU^sFA$NO zB4+X~V0*|}3- zboe~2d(6MktW#Wl&R~YaK|c0aexCZwqRTXzt3?NmXfhsjUl-74lvD+iRK>T!cU8$0 zt1?Yc#T4;|_(zkbbPRu0;AG@d5ub?p6iw4ipSBXqGoYW0`2pb7K6xtU<9%Q@9ZPVR zOdmfG^I0=Xb7l_rG4nKUhG$!l&B2f4`yj)wI!K?VRp`?yfL4-bLVH7zJ(DabX0cCa z=s7yWeLBVFNNG!ue(ZCjCK8g?;JdIywMedEkTe!YUaNTw_`2tsT=PB6(CP;Bty;r2 znC7FVw*bl*+tU0cEOdFr|sbj5B6HGO|hR?@i z1H6pK;9xSuBG(K?LtBQ*T{-~wFBU-IDS{XU#M$@ggn9#gww`Acxi%MFXc(G1tryf}T(pN2yr ze|R|^8k_Tc3f2r?t5N0~mK(b#bT`*(aDUIWo8SSBHC%1p;9$~oHSi_VY-^eBcRZ77 zrr{gfl6qae>vQ1a}h6M{@yv+}`rP!HnP3P{rW?zKWn=l#scQzq zPsqUe%n$M=T`(H9uh%@g;kY~yEi+JYSG;*3yWr43iBJ?I8+9;3%^V1ZVf8S=7%*JC%c~lxlLN+V*hNcW(pvW>uD?se|ovy52Akv@b1;!qL4Kw6~!J%M3$+1NdEwGPbykPs~j(@|Sso}&Q@_Gya% zs@=Sl4Dvc=gH_WJ+JLekRl_c!H<%ryEpE9m?E;F?O+g9^%M79|ki+P!x{i_3^?Onv z)odPajsf8iTaIhsU>g@JOP)h3i|*CRNy;zzUcK@LWQe{0xaVEMggg!%2e49ErtWgZ zw&pAKCcxJ{RDShfg+pW7k1feqq&!aQzFdZLW916LSgtn%8SlH2k6eVuEu&xtPQu>@ z@*(Nu$k51IVWM4_SRW{?59EJ!<`-vfo?S0)?Ig+2?kmw)FEvg1itk<^LU;N65!V{wQ4$N(uH7T!-yIvJ=Q0`wmb5)5sHG z(hc5pYit)Pjw3-tu$PfcAlZ#%5=aj!tOSD~jUkKHu8cep$w>SzuDJx{ALKt_NXNFX zjUH%^9(X#WW3NI;$I}1)7IE#20wy+i9`?I7IXy1?L73L$d#?e&?luMY2R5A1s&@9T+jh3luE=2fB; zI$|NQWqowV>dwRM(eHL77=4*4-a6e*?fNPKgRaz5>P+^y7g1LeW9xKt;RfGq#X}MFq5z=V=Sqd37(a^ju);>qtEjc_=${E6Z}2pR z<{JI?$S{)w1$sWT>j*W7iVz<`ArkBKs!v^fp79V;5j61M=-@zXJbJao??j5QIkx5%&I-{O}91 qw@vnbL5{V_vA;=!j{tVcBL&FU>AE0{trjNk{-j+v_=w;rwEbWAJ3UYU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/__pycache__/_report_type_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9be9fb656d9587fd6cd4be0033bfc6bf67356f0a GIT binary patch literal 3201 zcmbtW-ES0C6u-0cv9q%u-QAYbRtm$XT}pQ;GzdscS|C7>^7-NtoD4g+?b6u~?wwXz zYGQzxm>4xaSYLe67n|0q_@XndfV*r@SEeOj|r%|3bVotf^|VyHL|XU^xncg{J# zbLZQ5Tto2CKYEHE#}N9N3Be=#O#K63=8=Ug!A2z^F9?he*`bn{7dbE5Qc2FsB_*$L zS+c_=HLnT?t7Iqm%66or}V;Lk8wV1$4iNPg7d1~R!ZiRoR8S4QaYa&Pzaqv zmi7o)Q7kNq-g)xvGqFtkS0-cxH-6nA#VWpz$#k)RK@p{9x#$#Uu~D=#Ay>Uzb&8d; zX}eOvqz;R?@y3<2#_98CPhY$+dJYuY>qY8ZzI_K5m^pC`-<`ss;Bgc*9oKNRLYx~j zRm?oEn8YkGeOFU|4Z|t$G+wu9Ojj2`~Ji}Y^On|34BV>|ps`*WRx<_55 z%CkXO7rEhzmovh?(p3m{rbxNb*-Y=v<_fn8emTJvAr{W$`UsGD7-Ms=FV3fY!8f7DwAyA5wkFf%T{h0m#1@f z@pi5{<4jb_N3(-RaDpC`qIgdoDe**IjwH1j zibS+J#Gy@n?Noi;f1UF5LwE7$l52NdGTFYM$Kx!g5FoZ65kRsVbTGc@DdXC z8Kjeu?TmB*84c=^2(bf#P&FM%;A2+Fta=gG77vCuO>enEe=BrM(e zB)xw*y?=Ac+7Cd=+7o|n%v()@G&U$qVDvyA5Iz_BwJ#zAFw9yiNTOgR%%va!2_B|p z%~W@QY!y0pg4rId0&gcA2y?=s55OfU;4FDAG$$@8&j4Gv@!2|lfB+AezZ$*3ZOq#v7v1_wSg_-EYbD+Y18O3+ZS!Pe$UHCOx2a zm9YvbnGRufSdhpL=E>dHM*w9eHh{c-QehVI3u3lsb2kOHS0RL61_F(g=E&=6Mc&CL z$>HVX@b`NEmlwa&kJm($8WHL!luFkWv~#Zy$~F#4m4PzKKpBl_WEZTtsb?O7vi=c} z{{qVY-!}l`@N;0SlKpV3X4S|6Ccex_3zq$Q>}G0)LS77#0q!5UPXzh(@$5Gu8~nlC z+vstXtziK1FddX)1E#lH3WMmHzSA_9T4l?l&kOjo6&byB!n3fSX9_epD z9wF$Nq2nvrBfp1Jvi4)L>v4B(IeEAyg9N5@&*Pqh%c=evv({9k?Wso?cko4m4x!_x z*iMlS*lAl=O@=q@k?MZjeRMfFR0}g%ZSKkZY8uiy>ruuXdC~BvEZj>2`}omJhui7h zky*og2bUrd!S2Qa_W(e9ysU3V)WAu(|2B2f_U2sPMl@ zqB6_&z~cW57#seQ4*OQ`KPv0ZAlNdy;qvB-w*G1jZ7FQMul-PVSGc`?=(D%-V8=UV z5WJgR)KE`(jrba2gNj`c^aPNaC "ReportRun": + """ + Creates a new object and begin running the report. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportRun", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ReportRunCreateParams"] + ) -> "ReportRun": + """ + Creates a new object and begin running the report. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportRun", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["ReportRunListParams"] + ) -> ListObject["ReportRun"]: + """ + Returns a list of Report Runs, with the most recent appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReportRunListParams"] + ) -> ListObject["ReportRun"]: + """ + Returns a list of Report Runs, with the most recent appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReportRunRetrieveParams"] + ) -> "ReportRun": + """ + Retrieves the details of an existing Report Run. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReportRunRetrieveParams"] + ) -> "ReportRun": + """ + Retrieves the details of an existing Report Run. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"parameters": Parameters} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_run_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_run_service.py new file mode 100644 index 00000000..40ab869b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_run_service.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.reporting._report_run_create_params import ( + ReportRunCreateParams, + ) + from stripe.params.reporting._report_run_list_params import ( + ReportRunListParams, + ) + from stripe.params.reporting._report_run_retrieve_params import ( + ReportRunRetrieveParams, + ) + from stripe.reporting._report_run import ReportRun + + +class ReportRunService(StripeService): + def list( + self, + params: Optional["ReportRunListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReportRun]": + """ + Returns a list of Report Runs, with the most recent appearing first. + """ + return cast( + "ListObject[ReportRun]", + self._request( + "get", + "/v1/reporting/report_runs", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ReportRunListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReportRun]": + """ + Returns a list of Report Runs, with the most recent appearing first. + """ + return cast( + "ListObject[ReportRun]", + await self._request_async( + "get", + "/v1/reporting/report_runs", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ReportRunCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReportRun": + """ + Creates a new object and begin running the report. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportRun", + self._request( + "post", + "/v1/reporting/report_runs", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ReportRunCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReportRun": + """ + Creates a new object and begin running the report. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportRun", + await self._request_async( + "post", + "/v1/reporting/report_runs", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + report_run: str, + params: Optional["ReportRunRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReportRun": + """ + Retrieves the details of an existing Report Run. + """ + return cast( + "ReportRun", + self._request( + "get", + "/v1/reporting/report_runs/{report_run}".format( + report_run=sanitize_id(report_run), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + report_run: str, + params: Optional["ReportRunRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReportRun": + """ + Retrieves the details of an existing Report Run. + """ + return cast( + "ReportRun", + await self._request_async( + "get", + "/v1/reporting/report_runs/{report_run}".format( + report_run=sanitize_id(report_run), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type.py b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type.py new file mode 100644 index 00000000..8d765a76 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from typing import ClassVar, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.reporting._report_type_list_params import ( + ReportTypeListParams, + ) + from stripe.params.reporting._report_type_retrieve_params import ( + ReportTypeRetrieveParams, + ) + + +class ReportType(ListableAPIResource["ReportType"]): + """ + The Report Type resource corresponds to a particular type of report, such as + the "Activity summary" or "Itemized payouts" reports. These objects are + identified by an ID belonging to a set of enumerated values. See + [API Access to Reports documentation](https://stripe.com/docs/reporting/statements/api) + for those Report Type IDs, along with required and optional parameters. + + Note that certain report types can only be run based on your live-mode data (not test-mode + data), and will error when queried without a [live-mode API key](https://stripe.com/docs/keys#test-live-modes). + """ + + OBJECT_NAME: ClassVar[Literal["reporting.report_type"]] = ( + "reporting.report_type" + ) + data_available_end: int + """ + Most recent time for which this Report Type is available. Measured in seconds since the Unix epoch. + """ + data_available_start: int + """ + Earliest time for which this Report Type is available. Measured in seconds since the Unix epoch. + """ + default_columns: Optional[List[str]] + """ + List of column names that are included by default when this Report Type gets run. (If the Report Type doesn't support the `columns` parameter, this will be null.) + """ + id: str + """ + The [ID of the Report Type](https://stripe.com/docs/reporting/statements/api#available-report-types), such as `balance.summary.1`. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + name: str + """ + Human-readable name of the Report Type + """ + object: Literal["reporting.report_type"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + updated: int + """ + When this Report Type was latest updated. Measured in seconds since the Unix epoch. + """ + version: int + """ + Version of the Report Type. Different versions report with the same ID will have the same purpose, but may take different run parameters or have different result schemas. + """ + + @classmethod + def list( + cls, **params: Unpack["ReportTypeListParams"] + ) -> ListObject["ReportType"]: + """ + Returns a full list of Report Types. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReportTypeListParams"] + ) -> ListObject["ReportType"]: + """ + Returns a full list of Report Types. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReportTypeRetrieveParams"] + ) -> "ReportType": + """ + Retrieves the details of a Report Type. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReportTypeRetrieveParams"] + ) -> "ReportType": + """ + Retrieves the details of a Report Type. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type_service.py new file mode 100644 index 00000000..d3d93e13 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/reporting/_report_type_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.reporting._report_type_list_params import ( + ReportTypeListParams, + ) + from stripe.params.reporting._report_type_retrieve_params import ( + ReportTypeRetrieveParams, + ) + from stripe.reporting._report_type import ReportType + + +class ReportTypeService(StripeService): + def list( + self, + params: Optional["ReportTypeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReportType]": + """ + Returns a full list of Report Types. + """ + return cast( + "ListObject[ReportType]", + self._request( + "get", + "/v1/reporting/report_types", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ReportTypeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReportType]": + """ + Returns a full list of Report Types. + """ + return cast( + "ListObject[ReportType]", + await self._request_async( + "get", + "/v1/reporting/report_types", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + report_type: str, + params: Optional["ReportTypeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReportType": + """ + Retrieves the details of a Report Type. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportType", + self._request( + "get", + "/v1/reporting/report_types/{report_type}".format( + report_type=sanitize_id(report_type), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + report_type: str, + params: Optional["ReportTypeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReportType": + """ + Retrieves the details of a Report Type. (Certain report types require a [live-mode API key](https://stripe.com/docs/keys#test-live-modes).) + """ + return cast( + "ReportType", + await self._request_async( + "get", + "/v1/reporting/report_types/{report_type}".format( + report_type=sanitize_id(report_type), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__init__.py new file mode 100644 index 00000000..b0321bce --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__init__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.sigma._scheduled_query_run import ( + ScheduledQueryRun as ScheduledQueryRun, + ) + from stripe.sigma._scheduled_query_run_service import ( + ScheduledQueryRunService as ScheduledQueryRunService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ScheduledQueryRun": ("stripe.sigma._scheduled_query_run", False), + "ScheduledQueryRunService": ( + "stripe.sigma._scheduled_query_run_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98fa79a81d19e1dcf329bc6e4df8caef04b32398 GIT binary patch literal 1035 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 F{|$e)OKt!F literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/_scheduled_query_run_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/__pycache__/_scheduled_query_run_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e72c3fd06a20621e728aa9e8d5c0233d66141067 GIT binary patch literal 3221 zcmbtW&2Jk;6rc5ec)k9}+DY3aC5_Y44>yfX+Nh;1qH5aGq7wHbTrh%V>zyQScWpDf z33ZxEsI8EY5O5-#;S?qC55RxGB@u^OD#M%Wv5Uo z>ZU8?b=#p4ufK8if_CoGg>#o*&0d5K<+XzCT)A-*=cze%9ltw`p@YTQ(6f6yKZT8H z6C2m2F{xaiF4BOjI?*j^?r$?+$FL?mgIg}~HkZ7&7f*(ojrtNO^9Z9HXP{glghI&Z zFanr2_#Utr0%#)BBqKN>8S(=$Cp^_F1YTm(OTiKwFWfd>WI{Hg;2GSOXAC^$3YSvd z?zXKpp~$*YnWc!(3Uh-cFQ0^N)|Ci$rb)5Ux1Rbp+Xi|o-$WcD5Tc{dc6}7YJaRbr zvCrV<(9MmWet*E=4PlO(3oMC?&01azc*b#*k{TzKWb*^SU^RA9Pnv*ivNVyjeaMqg z45X4I(?vVo@+S!x#^oom)7X=l8P3>+NlVYPVl)<`(HNK4%Y_Brjoi>}tm%e9ux*nL z2q!9tRDeiyC|M(3)q$&EV{>BN#im<>bv9-)QzZ*$CX2T-=dpduDU~yqN)9%MMoXnz zh2mspRL|eSMI$qVi!&Lsa3fQ$I8&wKvGnj!SfPW5%HW_+Vmo6q&NP>;ZLx06_V|=8 zS6qSSWVWvjo+i#|YTf~Bv`0X^j~=N=?W#rws}c2+u@A?p>W-@VLbY#ibyr`tyT2Aj z(cU_eqOrOdQk5DCg_JtPp*F1VLudVM5SJ16%y{2NhI9uK_*r0{|3DPcI{qinNAg$v zdt53=x?mE9D52XRJE_=3MK_474^hmANYm{~F;8}b(Z`1LLBmyOCOqrxz9**3b2>yv zI1l1i^!J9mC3Zec>|aUjZ_ixk0mxiu?61w~s|k?Jh7G4Tx|bZ{zTgIxFGE9|+qng< zBn)1Jy5<8*|)Zlc7t3uNmT8V2)pswqRqhG1_96 ze|*|WX9_0`?C1s4rli!1Tk&!OE$PM>h>eja(=u~si{#v0;K)8YLJRzq!01VOq1Tlr zO2pC~LKC+jkmsl;b8oTPrY3r%c=aH|A;<24*@4GagYR-0BJHanpb!#_K>ZsD^vXkZ zY(*XW;n1<=k&E9Sx>Vy)Jj>NlAfBj6XwSYTxjGoRWJ<0uC0974kbW4n4ea~SS^pHo ze<9cZ2OQ`adACgVn+%_nbw=(7JCS+;?G#fUpo_i%7lg~h$xaT_<`EDJh@sD_k;G^(74*2Xe+TgZ zLG7GAQ%xWJBN!KzpVaQPyx{_`@Xep5>lXE9&W5khbOZNvU5=K}ugeOtquW9RG;Mdx@ai&!)QEo!$kQ z*1W%e+Yx#Ox)I+v?G#K_Sgzz$%5cMa*=84Z-0RWsZ3h=^cwpLu9({1=va2<%vAdwe z9+gCW1+;(V-3(atP?7IWa@W)T- zk&)HUFhs1^R6~BrE6bM&J-_IAZ=V8D<2jC7lMpw&ik|-w4XmQUpLumvNUsXV*8%}i YT9cSS;(6|obdBSb&+o1w`e$SR1279Im;e9( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run.py b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run.py new file mode 100644 index 00000000..7aa8a2f2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe.params.sigma._scheduled_query_run_list_params import ( + ScheduledQueryRunListParams, + ) + from stripe.params.sigma._scheduled_query_run_retrieve_params import ( + ScheduledQueryRunRetrieveParams, + ) + + +class ScheduledQueryRun(ListableAPIResource["ScheduledQueryRun"]): + """ + If you have [scheduled a Sigma query](https://stripe.com/docs/sigma/scheduled-queries), you'll + receive a `sigma.scheduled_query_run.created` webhook each time the query + runs. The webhook contains a `ScheduledQueryRun` object, which you can use to + retrieve the query results. + """ + + OBJECT_NAME: ClassVar[Literal["scheduled_query_run"]] = ( + "scheduled_query_run" + ) + + class Error(StripeObject): + message: str + """ + Information about the run failure. + """ + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + data_load_time: int + """ + When the query was run, Sigma contained a snapshot of your Stripe data at this time. + """ + error: Optional[Error] + file: Optional["File"] + """ + The file object representing the results of the query. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["scheduled_query_run"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + result_available_until: int + """ + Time at which the result expires and is no longer available for download. + """ + sql: str + """ + SQL for the query. + """ + status: str + """ + The query's execution status, which will be `completed` for successful runs, and `canceled`, `failed`, or `timed_out` otherwise. + """ + title: str + """ + Title of the query. + """ + + @classmethod + def list( + cls, **params: Unpack["ScheduledQueryRunListParams"] + ) -> ListObject["ScheduledQueryRun"]: + """ + Returns a list of scheduled query runs. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ScheduledQueryRunListParams"] + ) -> ListObject["ScheduledQueryRun"]: + """ + Returns a list of scheduled query runs. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ScheduledQueryRunRetrieveParams"] + ) -> "ScheduledQueryRun": + """ + Retrieves the details of an scheduled query run. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ScheduledQueryRunRetrieveParams"] + ) -> "ScheduledQueryRun": + """ + Retrieves the details of an scheduled query run. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/sigma/scheduled_query_runs" + + _inner_class_types = {"error": Error} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run_service.py new file mode 100644 index 00000000..33d81725 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/sigma/_scheduled_query_run_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.sigma._scheduled_query_run_list_params import ( + ScheduledQueryRunListParams, + ) + from stripe.params.sigma._scheduled_query_run_retrieve_params import ( + ScheduledQueryRunRetrieveParams, + ) + from stripe.sigma._scheduled_query_run import ScheduledQueryRun + + +class ScheduledQueryRunService(StripeService): + def list( + self, + params: Optional["ScheduledQueryRunListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ScheduledQueryRun]": + """ + Returns a list of scheduled query runs. + """ + return cast( + "ListObject[ScheduledQueryRun]", + self._request( + "get", + "/v1/sigma/scheduled_query_runs", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ScheduledQueryRunListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ScheduledQueryRun]": + """ + Returns a list of scheduled query runs. + """ + return cast( + "ListObject[ScheduledQueryRun]", + await self._request_async( + "get", + "/v1/sigma/scheduled_query_runs", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + scheduled_query_run: str, + params: Optional["ScheduledQueryRunRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ScheduledQueryRun": + """ + Retrieves the details of an scheduled query run. + """ + return cast( + "ScheduledQueryRun", + self._request( + "get", + "/v1/sigma/scheduled_query_runs/{scheduled_query_run}".format( + scheduled_query_run=sanitize_id(scheduled_query_run), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + scheduled_query_run: str, + params: Optional["ScheduledQueryRunRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ScheduledQueryRun": + """ + Retrieves the details of an scheduled query run. + """ + return cast( + "ScheduledQueryRun", + await self._request_async( + "get", + "/v1/sigma/scheduled_query_runs/{scheduled_query_run}".format( + scheduled_query_run=sanitize_id(scheduled_query_run), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__init__.py new file mode 100644 index 00000000..c0ca8e21 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__init__.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.tax._calculation import Calculation as Calculation + from stripe.tax._calculation_line_item import ( + CalculationLineItem as CalculationLineItem, + ) + from stripe.tax._calculation_line_item_service import ( + CalculationLineItemService as CalculationLineItemService, + ) + from stripe.tax._calculation_service import ( + CalculationService as CalculationService, + ) + from stripe.tax._registration import Registration as Registration + from stripe.tax._registration_service import ( + RegistrationService as RegistrationService, + ) + from stripe.tax._settings import Settings as Settings + from stripe.tax._settings_service import SettingsService as SettingsService + from stripe.tax._transaction import Transaction as Transaction + from stripe.tax._transaction_line_item import ( + TransactionLineItem as TransactionLineItem, + ) + from stripe.tax._transaction_line_item_service import ( + TransactionLineItemService as TransactionLineItemService, + ) + from stripe.tax._transaction_service import ( + TransactionService as TransactionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Calculation": ("stripe.tax._calculation", False), + "CalculationLineItem": ("stripe.tax._calculation_line_item", False), + "CalculationLineItemService": ( + "stripe.tax._calculation_line_item_service", + False, + ), + "CalculationService": ("stripe.tax._calculation_service", False), + "Registration": ("stripe.tax._registration", False), + "RegistrationService": ("stripe.tax._registration_service", False), + "Settings": ("stripe.tax._settings", False), + "SettingsService": ("stripe.tax._settings_service", False), + "Transaction": ("stripe.tax._transaction", False), + "TransactionLineItem": ("stripe.tax._transaction_line_item", False), + "TransactionLineItemService": ( + "stripe.tax._transaction_line_item_service", + False, + ), + "TransactionService": ("stripe.tax._transaction_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21911b213b104bc1bf15ea3050356710861dd341 GIT binary patch literal 2198 zcma)6&2Jk;6rbJoI(EGNh(F@QPD_Z3gemokuObjsA|Yw2RsoT6=n84sct`0fyK8H9 zlEzgcMHPo$kb3I{B#u=1Q@Bv|Vph!o!G)Vk2tqmWW^C89!fAQdzWu#7|Sm#}lsRrHwSl2{+?qjV#AWH|I?mQyfpad9Pp;I8M1muVj=s z*4$~YY?L`pyEERbG0Snrt$0?u2M7wn>4vZw8`J!8+>6}$SKX3SwFh}m=B zAmdyIe)aQzuotaMVcPN9EkaGNWpBHfE!@2I`LemRy1aD#+S*lENG(}zbKAA3)AAuK z2;mLK$JZ$KV7W48c^#7-r^yb@3)#`C_66Q_0!p4AEykm=#5$(b@izlFC_BWXbm}It z{J?4s`x8R3zcI_BGx9=qxGLW*LvKzSH>kDSFqzqHB> z`XsUHSI(*yYG%Y5BJjr!m_I8iKBXuY1p{i??zwRZac6`NI%1t|j_@JmUckrLD)D&{ zKE&$hd}u_4F(z^5CYVbwmt>A!+Vp_Rt~hVYZHHh_WWRU4XtML|K>I z4hQ#p(jBy`+(LJxy0lhT!<0GHrqw3wso}&XrWU0nOkBsEWkOmc%zOf|v$0JvkL$58 z=35>Puo)NF~8J?0&5codVhL!5Q}b_j_**@Y_vP@ z7UrO9(pRwKGx>%uROT%w6yTU#?yvlkt#-@j z9;AOSRJyt8ZmxK&D#c6>De25Ve`uQ-~ClcE4^EgF2ZFo5o?^5gs@LdZCVU-W!t z!^oJ6=MKi44|RB^@cFohFO@zQL^xLbTqfZQ<=>E`rq`AWC& dUNrgawL(@tNIiQUB}&IJO|A7*K;$BH^e>`?pWOfe literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4a7216f80bacdb2ff4ed297e2ba3a86f7319f31 GIT binary patch literal 13584 zcmdU0du$xXdEdSF9q*3El;1M#+De*S6Ks#SLvqD?W%iEN zF>+uyNt-}vE5T@`7D1yw(!#2e+9--PK+zQbyJ*Y9H5IW)kQ9BSMO%~#={#7V=VM#uOv4i>ELSLp&;Dqx1g@Md~D2MZdg`v!lC`a#WAm&<2OQ!B8_VoBGQv)srQD^{18EgBVLg=vPK_FJJD zLi$*iTRs}h3cXma7^Px1Z~1ars+X1-&zG`#+G_>R85PFS6!>VdoXss+vGbpJ=}B$o znI~tSe|Gk1kT5ut&F8B5EDa%veksed1rtrsACfz;mN%cV&=C1otoo?YasUEv4 z)rVTxnK422L-(Qju)7DS?y-4&q`6-KeaeM1eixi+7tRC=vk2>AQT^es_%f;5(eyE^ z%cY(x--@L0oKBt3UQD^*scb%9deuzTO4U@Ql*-wrf~6{p_yL!IrFR5(j8Ur zvLP^idh{!vOcyzotx<<%SlQH!&E2!Ck~Q*X+u~qH#k0YYxfjR0Ho<;fbxq;1%dJ*n zVPXGT5Z?|QXUQ#`0O8bv>Co2RdyqPHTGu%v1_$Yr@? zR`6z=4A_~@WS#!SgdYM%NC0z zbOy^zO}nXV5M#FV=|xE9^g{9C^jT&uRZ8XQXG#^8KXRs2S~7|Y(`Vo$Sy7)}X2s>{ zyfHUjuE7@Au`+w1d<1ju#&08wZ5UW~tju4QG4zJpXD>9$U+WDNF>)IR*I5)2u^Ht;vTGhxQUqpz6@#ZeraC@RT zOjImiKm!WpdE}-&P)+3iTvo&U5o8NyMO#G76h^s>@?5T2EX*~F=8_cv!l!{4$YHex z#>_2(2wmiYh@8FZTmkJMGFOyy=1QnjKW^8TWq+M%W(AAVOB&B1XE}{mu_(46@tCRQ zXdYG(^$4qKC4`1zE|f*SFlXn?&WmDf|KgH1$F0C3*Gk45@~RjjXn^$ct7R)-DO*~U6fSYhLhu#2J$ZZE@`mILazSMwYv&Zv zVm2sonaCx^CQn;w`d2pam)8;v-L~am=kefth(Vo9p68(adml!$}%UU@L#Nvuv zPN^UVE;Gr}vQ03T@)6*sB!E{nqlkXUm&%yXv2VAQwDa z#!^TcmTjq8u?JeQb!5cX2CkCGTA2PoN3$s{GhW~5QF z{6eGo5tJXt&mM`Ye>GJYRNwvK`p`!jp^rH5{;}(?Tz#Pt+U)?616SD9 z(MD*O0~p`G7JcN7*E1g3P(0ztdO!|%=;${;S|6LKheqW7P{7*e8;BY7Y@9^m_6?n* zAx3eD2oZERe?!d#gr8`OPhP=JKZRKE=O8}WMyeB^@KG>>@1kUkl5t8VC`loi<>b+~ ziGmcUx6$y|)c6o3O>Zp3aW);iyCe#o{DYmtTHV`7e zM#}^2IvvBEz>vyLNQk4hh#vyF6B34H3=AA6{te>bA!214 z(}{vZz_H_BJtSnQs}@OjZ4J3&4q81~jTwZ5omcRc2U@{hqxfKxavu)MB8){GAGG6h zht}`|MC<|dcPe)B@??*0Bd7W$L*qH%#5gQSdDEz>4aISSnE3rLpYR#A?!)Q5K3_BhWF}gjl@2ICsp&$FjQx*Z#RYy z%JrH*9oRbYU_8d&zl@`eZ6*1if*31VX1FCRR&c)1be1y;+5FA870VW?CZkia25)C2 zaSAR}i$=~q+Yro4VVsu&S)U<_7jlSc^DGNbDcTX+T3(7@d$~9^V)(oPe~D0wG0V%* z5;n7W1f7K5Wiq~O##bvElLGTFH#3Za-E^*vx zSOb(pOSCe_ku+CvqLqFJ&KbZ=7xTH$ajY%sS?<8&+qw_5*R{n`-q5o(s}FE{WZcXk zR-}s+E7mp%e@m=o+YJ36o^GSHxvYtB-|k^WRv4mUIZTg0k+Br4l8IZCxYJ8=8j)2U zgY$1AnN4?f^k<}1Tx^fm!0CRQl6UfP(eo}d$p0Aq{~bT`SCNo|OUC-HU)ofVZ5|wr z_1)ODsUTZ_Oz9uG{5)huoTEo4aVlOL7+W3xKz-n3BYM(ln3%lr+4{H}l7fK6d&cj0 z6DdTq2?Voy^`!#@7Nu`cTce+0CD!_RyT32`=~hU3>yZQ|NJ9ACfaQF{6=cY$vr6a{m;o$`=0o*^=xqH%D1 zb^K&~;E_h?5eEbu-;Gb!Q^)Fq#~Y#J4!C#Va?B}DOucn!b?j6#Ecs86(Pn>}!Dt>W zZm)NjVALI!1YKc?4`t!=oGUq3I6{4Fw~qG*6vBpU;dG=u>~ITYX9|D!fhn{@iB|aJ zTpYIibSntK8;y>ah@g5~NJ5z6V$p_2~fj57mcpg?Pk)?B3Ui?sY0q!{F+{nR@DMeelUf^hpQ4<8E1iAY5mBgi%sKXLxc<9e@CT%q~xEF+>IxqXLC0# z-(0Dbmsb&;m?BKw9Sk=|O!;LLh$$z+PY_d(t>@J?L)GUpRHNxe=-?W~4e=Q6D-yeK z8cyIeyvIIX?`nib!4YA@CXT){wK{gXX^m)JE9w~b5^kXRj|c=2m2Wewgi~_j1}nlY zmJQr!Ylx6MhR%DbLxgU#adUJIgdrk~uzJW{;C>5tRCe@X#hM-@hhvV_ zSAnOn>1eqUH?-+hIEBR0d+3M+tUy`3y5$K12N3C1d68tR`GipF!fzvkNEVZHdV(|@sFcDc-g5ih=8g_91GRE6jM)JI( z{>*pab9hbl8SLV3d9HbX#qU>IJMxI~< z)`~fvAjBRdZLEt*Hc6b7wsX6?B>;AtXR+dcQGVj$WU~Ku@}YY2p`D!UJq%9v#(&(- z&UGKSyJbc(&>M#zRsT?ZB=UCnQPt|owZ32AJ!s9@Vu+#?b|LVeMa3=fl_r*a2hv&0 zb&u}75ELV|B^3&}#B)i#1-{Vpb)QqZ^CY3BkN?43k zX&x#73($Pm3VBRrNiUp(NvU`^Wz36yuBE3Ivu1I!l9Colcd3goO5O!l**Y@4d~_OP zPrLe=)1PtGUc)Od$9O@x25H|(Kp-~6Med`d8vrXXU*d&qg%fjbdO1F)Q6xGkqzM^> zhS@6ChbvT5%j0?gi8K02(=L$0b;1}Rx%mYQ1ffYn{k{_&SRFiEj~;O;VgFj9Lv z6}J+o2u_Hlk=!^d>)yVowu{hhjfZGG#IDzs^@I|R?z9hRYo~(mCbmuj4EyCXS$=+p z0pojtvU0C^Pq^ldJM;1hbZawCbdnI7B5%}MuHk28e&*&g@0`Ci+ekg$Ni;_`ln$avGUhzQv&;Bx{0@@sPUB~` zH}|n(a4doQIF`=4(%g{QHWSiM`_S5qaoUGAn=#VKBG{hhz)Z{HceET5??u`w4NQ}M zr`?3Kyifan-Nl5EOA3%nYTK-JAF5j>Ih{8?bh=A@S5Z%gBk!tVl-qQR_EYR3c`vz# zHI>|POTqb`ZL(f7GQcSIovXp-27g$rBr(+x6gZ+Lv~pROG`au|fJ+@Fd< zI~8Pke#(!~z8^x;#vU>~f<5%@=l`3C|DVhc6d-sX1qeNWS)yYu?Tm1wR@|{ma%)`* zA>?}2+LKoWDkaXNN-M18kgJv|h8HxWje z6SyrHqjLnUe&d5kuHie*OEB^Cs-ax+d`G$?*+)l_UD!jP?bwwoGsL?k9P>8 z?sjf?U$GLtc@1(lj}zVEO`nWugj*rUZ-tB^-Kpl7NxFpS#tv^nIJ$@rUsw9vhRK0` zk#=Jrdc3aOi7S1BS9ra5-}R3n`C@1-l(-!ls)vUDHZ-!WomMQ{-lTOO z2hl3Xa67)Q9^co9AGjSluo^lb7yus`p0uOQ_C8BZgK*I-vF?7B6YOLWKbHL%AE4^O=pgBm-@b!_^eUH|MAFC%G zZ}=W}5W9OnH|vyReXD)@>rsqIAF+wyac9+CAAGpsd)R^Cw(4BHH{I~19mwdoYvQ&_ z-_Z4Fy>~w-bZ}d12`Pad+;RCMIHIqPKT;pW@c^~&hX;P>N50{8+SkXO(gR}lV3hu$ zbw6@&uXlKL_|bauvGpL;LrMgTOxMGQei%mGo`qTtD1rEzA0!3*(KU4UQoird>O;@h z_ni~9?}vNsu70#p*CZuzgc|-RTscaj^U(O}1brlOmrfGv4)8}-M;>nYkFI;V!G%^Y z)Lc`cMzb6fSnGQPFF^0l%?eL8{CE-Z04w~UdxatY&>HTDy_Ba8tWKV(r)ES=$OoYI z&Y^^xSdygo(_=sxJG_R!;r;l#6ZVe;>b?Q_B8gOeHoeQ5us>_oQIsQ-A;f literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_line_item.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_line_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61d4d1b2a53ee5cdff371f70c176adc4fbbe77b6 GIT binary patch literal 3044 zcma)8OK%%T67G3&Nbw~~vMfq=N-*FMV0BGZcXiEI zUsuo1l}d@=FaE9R{We3$FZ?0@X_<0x8

    fOI*n(fz*~HuFJk0C~YNB+iIY-wLov{ z!mjv*z-Sv1k;zBIRsT&~4WyrxG*-LV(_4jK`9n)$}q z|3P=6wFP9!YDTbis;w4zet3xXL{6D)L}uapl{201Q5mhRW;1J}wN)_2cBzl8noM=K4u&VSYrRHmicPH`NL}CN$gO%I z{565#;ap~xn1g2TeYLbSG@Gn zU3=#S1^a;;{WCoFW*H^P!L1W-21puL$^hoNpbSz%a}|-D>Z+Mnhuk7)!^wSg>2+Bw z-R@E^c9G#&99D3mZkW&>E4yCY@$H@!+5xmQraE5IqjgM<>0(Zg88`)x3?2d{Qt1t67#Eh7rcV6k^Mw21cL- z6hD#!l;kKhx1s>d&2Y!O3Gss@>X^5p1pG@kqUeDaZkji2=K+MSxeejA>3bVyrYzOGPcQ7Pe0yzBUKDfa8H_;RK=JD0{~0~wwEn%t?`bXl z$b4<7k$r!|LfwSK_WYPm;%=mC48D0+&q?L#c4PsBjC zJttecZDXs&U96^(Le4{Ye#G`CkzEI)Pp z+1iSH&$WAO8tqwR+xL4})XMQqsubG*MHV<)Hr)hPJ+avgVqtG!GuW_WFSfG9tn?6Q zltr8rQ#>Dg4*KmFJ5x1Zl@_2S(?4N7=({M^S`#Pv!P}`gXH-;8@vy1Aqzi8?tYLX! zh~PW?nio8a=?NZ{?~b)=TESKPAAgPF5jm9W#rodWLxRKM#d*}fI3zd>-y@ULk0+2( z#WFUC*$V^X{IkZ~e)Dp_u{Jd zWP&HDav_easD>z$$ew@IiBrwgjVSU(_ow_@it1e4;o^98DF0Rzg2#&wQ9L65GcF7j zqSc?A-g|rh{I!1bdVli$10rksq4Bw-m7aWcNccERWKyZ`-a$|`1FJMSy}O?4#q#b) zxn7&vT^s4MPm;Zrr&D{kzWrCf`qn^wEB92U_ovN%`JI9KPHw86dg6TZ_kr5X4YkJZ z$GKh~i#pZZZ!Y&6R|e{p+>Lj}&8G|fg{A(KIZ(~qJRV{G4?kSppL@5jo=O?Ou~=)B z*i3r8Em`SkrKP4EXQpE>#kP{x;3c%;FifUCY##}PF~5e>DhZ5_<9=jZO)vB7^dA@& ozj8^;8|+Y#B$0cRm3S_> z8BeXN7!j2Yfv@alJ*}?AHpR_(`FcLqGj72v){C*Ox(B>cy@Zi~<T|7ug!Yn_^N! zy}X*M=6~UnDvk=*Lh3ZhHA0u227!efvwSCXZW7b6t3sq+ZiY_aTW%yZEEe*JH{ZH) z#+*8LX6nNEnX|B_hg`9! z<#C6;eHYmU{lxys5CsLa6CMZWf$^^-tDX%wDC<&LSzcadbJa6xl_nn3W z-s#AJ!g1<^Al6ZcQ-h7y&_Wl%bd7&)!4?-%cJ&y-OgdS^o82t;q*SxzHDOJ>r)+j3 zH-*Ie8meY?n5K8fRRZK7%Y^CSJkediPImx2rU$dSrH9sv-g6eZ#bB`!xGoR@pngGj zX5+YCpLvV<&xSf#X*!hHwcS6_3KS5Db0pjuHRx?0timV#cLxU|Nhr zt){afM)~U&Bc^5BlrTmQfQ6PoR3)l#FV&<8J0oQ_pq>>{e)tH7aNOIwt+#H?SBV2lax@@d*2Yz(yGKde* z!wM?(xANnyeCd-*A6;sd23n=pAC#uIO4HxzV_#hORzJ}eQTZ(HAfa4oE9mKGS_em3 zL!<2js4(0?YN6PXb0w{fa#^hdDbZipc?T9dpMto6@c+orJIK!50{(v{tcxGYGTLM8 z%jjeEOYuEiRcSwz6*GwraBYx_gIo-8!JEQN%7kLd1k+-xeuF;6JviWW1jH`%bQETh z#*aC1ym|C*&`8{#<4H^qKchc-V5tl~s2ts@9Q{|o^c@3W`ij3lj!s(wuyz=y`0bOY z6#NxFC23!0L8}TgGt~@m-SjPwm}aDzrWe>tF4yy>d1J|PyA~1XNO=#SIu}PkY#@4= z>wM$1kcu)WjK5uXQCmf?p2Dr#2c!T2jp-!^vN-lKM)BlRj%zqwWGe0VEh`L1OxB*>^O+Fh%tVoAUv^+j(m>}Z=E>BnYwsHhCI9RK~FO`N$&#pE&8C@uW$% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_calculation_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa0154453c8948c1a0675a36f0e0b02a0dd2b95f GIT binary patch literal 4134 zcmcgvU2Ggz6~6Pkv%em%oj7)II*A>Zt?gZsIJ6~cRVR(wVq&VemBlfvZMzPQ{KUC;W_H(3swP5W zWS>3vo^$`s`OdlL{yCY9A^7Nj28yvRg#O7I;im*l^H;#!LpHJn2bF}pATVBZ#FCVk zI4?PJNy#fEHLvov>_kdhUgNytL`$)JOh7nBj=(t8iI)=j1eZmeWGR(Tab9z}N_t-B zeAMYKrSoad$DE#0Z@w4!xSg<*^I}oR9}v-7$WGlxb{7^lB!8dzgUfoR``@gQ5xnG# zONv!IgUMpCfT1H!t#Z*Vu3)ohXGBl?detpf%9i8F1&g|DM6pz@5Z5eK>;;F7NWORZ z-3#XVw=bNZdT07A=ty0{A1q+%`a>!7^qsey!h&P5sm>E@x%gd+SS2Rv?+{(Wuo=AA z7REb-pgYjf{93V$-*Is%*tr*Tpu;Re4_(PneyFT#EoIF@dug+!V^aUXBnf6H_=fRm zG-x#c0L=HmpBUu@8|B6K!LL}d#k0_V2h9n#bX&{IwtO4ql_-iLyW3W z)_{w0E@sE)G&^xy$!pJ~nFP%!%$T-SJGE~f)$Rgm>@%f0NaJ_Vl8{f#piGaK?yy;4 zD}HE_f;|>QAmPXG!Ty`WKz=OTLvAQRcf}g|0pPqQYzTg*fR@p^FbxP%=t30}PczLT z0LL^lk|$H_%z07b!=OUEsA(1)i&E31Yz4zu-F0$TDkYqoFE8cZ#Pph5spj6UxY!v# zSE*bpmgjTltim;1wsVWPyqI%}v$^WBd!!wD{+SIRe$h(1JB-Be4Dr*=2L`uLd?2QBAI)t6JFC{td^5u`HnW z8f;`Z;|v-?F3(tO>@Xs6&}2~O-$w9zQ@D z^})4kTl!0Ny|1ZAgQ+_gcQlmjt?TUXuOPI4R{3dVOV92^uSd;Fn8^Opna59nIZ^XD8fP@K|8kX^%wPbX7!Kln$#RYfFD9#z~6>M}I+_+-V z@{6v4m#RgA?QCm0eq2uix9uLwEuP>J+cA#jKI~}SSQp3$oX3-_YH?li60;V?re)g% zQ%YV03Hc(Bj7(IfrG=>U)VT^NSuSB_U6(lw`9$q8l!@3GeWYpN41VuCHA95L2^d4C zfvlpPGy>ct`s)e(hZpZ&tm_Br`ou^2nN9u7wlVtasV(D`hJ?D$Hj&t!Zm8(UP`z)k ze&~fp7fKE^k(Nv~mAD>jpm;P!SjKn)0=J;E`6D1xNcca(;1;qY9|FjJBHoj}t0<@q zi+hKK?v@=@|jP^rSxB>zsxRzS^Zw z@u8cqPO8H1gh@H}`zUaPW!FMyJhBefZk_}3tdVQWHK8WnSDq4w>h9%M;DnaI)PP&g zV3A-Ol`;>!V!68D8dljhz&MaoK08+T2clf9PU%Lyc1rfHSS6{rPZyHLaNYKk0(?RgT^UWDBtDDUvMcQko_Pr?xHvh&1nf=n_&cbsk8R0gJF=h*f1;+8p~eV$^|gBT zOGZFY|~m|i1>Vtvgx<4*ps!*i!T zj&#G)dZwYkFD%_!iuJ?NuvC z!_%jyy3184l6}+j`!DL3SWqbYcr ZYC}?VaW%1{&j~_oZSWC11qI)m{{_0h1n~d> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1d9e77872a1615289d7d8c1743447c3db6ee6ec GIT binary patch literal 40212 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 VYDaD5r}BnvOD6EEnRHdC@V~_6B-#J~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_registration_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1779fb5cbcaf24daf0d4bb009e1acd57de3fca7 GIT binary patch literal 5151 zcmdrQOKcm*b(Wtcx%_BF{b)8$HiqqhQbbmgqdJC@!k^R$(lCbY7AT8$vEq(o+Pfq( zyOKp&Mcc$EP@q71ihFL+0)m}WdTS0jrxy!7gjm36i(Jwh3)*d=Q{S82C6}T;j#Csx z_we{;-e=yt-^}oj>9j=Pv;L8<{d9tm&vD>?Q4i_<4v@PX|6;vpkshAUx? zhmD9Ctwc?+BJy#>h?((9Tp%>grhzwVBuuFyahhl(%~U1D@tBb|GnEX-yUVrVvn{Sja!G!ef znq|Mebc0rroVh~ZS*0++O^Zrh<}HchfFRc!Ta)0V738MbJqllpqPBPv{{U*271DMUMa$<(R0)mPI{& zCt8Ud%9Q}FC}^70L%KAeBMCZEKo$3;rhyvsR>;sew`F9=mgI6=mw_|!M4Y3*DedCS z?x}MOIFnDrIS!numQa{-#)4k<(x>c*O&(d61UEXdhMNNn{qBg2+N-R-lk2C;_k%iq zQ1ud&2MNm!$KCS)?h+dU=6<@cNp1u={rQj{)+3w3X6SzOo>!9hLN4(tDTq6-NQ(DC zHi03QqA3PsoYGiUu4(H^&=#e^)7dKaWY{>Ua>6Ur-kB(^&6R9zy~F}}Z8>4BS=$Ob zsU^*#s;29VS{54xDV7DW6=EW4h^x%44`7X0)L8DbShy=NamOrOZ=tqMo zFmNRFgiGCcHkc_vPr39W3SR{91^HLNW!cHkvM08)Cx)Fib`qR6migzP=Qi>!8303G#q{~lmCNZ~>bor)%cV|l?N=&+Np9|ode0iB+U1caPqJuWXC{y$X)-vBrM>z(JO2k!Jt#h>^M#i zdnM)W+)KKF_B7}lm*W~}8A`i+yPtNu-E>geu@^v_6RPP9^RF5K;D6ZJd8XNbJZWRT z;op&bE%0l{{K2Mh&uj1ZBR-}_H$$7@`{Ew0JhpSHmz(`ozE2C^m6yB??Bw_C;HBF& z{YP5@!vgL%iLD54-0UdKI^uGJnVQYeAwYNzIXQc;&s#{sbH?o(aX9q&&1K`6y}E`^ zT>&BMTL7S8WOs_AP zsO7r=+@|fvpkFW+ZwcV9jy3V#sJMWl}tfUz{p{m+%wr@hj0Z`IKD>k3_m z(+@5l`#1ld)Hx-1%}}aZz22~uC93Gupf=SNZP}(wsoBbP&4PJaSKL0Q7nL`bl~!X_ zxmB~SD|SPH8xEW~1L}}$YAr=?C{{yRYAF`AxnXp@S%V9gs@b~>p10gR@`){g`}fKo zag{$O_CAeV+WR2tm+R!Na)mbg|6i_W(Rck5Z4dXB+39`!n{s`4(76`m_$~UnUzxtU z`;~dP!w;%Vb_VnpLgjKnC>PRjJy+|RNmbR6RMl+gs|MmJRefhwGh7P8vy45D;3R?> z1hW8~Fx+_9A`V|h@Ct%&0@xzFA@dV~$vBGuZ=lvEaPZwB9g!@aX&2}J9vh8Hf01(! zj?8V#^PMP+fRxQY$WL#N&UBF4i4*B~H-Xsn(+IstN(yk}m;9VD`_ zgVabT3cq0c=#d9UUfPxyJ24!``+GsYjzpwfH;Gu0d`0ooXZh;m-sX z!PRl>u8!C|c}np|Nf38~iy*j#0%^qF!qaX zCw|tg R64j6({c83x!C$_}zX8V2(V+kU literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8199da48c3c29242bca1b8be4f30a53c79a19af GIT binary patch literal 5303 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 lMaXSL<<=?^{0~G)O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_settings_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b624d311524f92f0bf3ae05034fe6705879710ba GIT binary patch literal 2685 zcmcgtOK%)S5bmDW?v8giW5=-_laPspBR0l6*hEQ$5E6MP0V|s*4hQzYXuQ+57tdqU zJ-gT;2Sg&INRi-#@4&?}{1PtlC9FoW0C9oaqICfIMD;xUOkxoU=1@~zRb5?O^;Opo zg@TIUV}B0U9|HF)U!w_DY&5KtrUz~ckas>p%o8)$rupqW% zAQ_k@K~VSR*i8cNNQ>OCsO54^f2w)EVOznrJe$gEaa1wQB#Z91z$_zzs@O(VA%}9v zF4zJQZSg2*Yza6y;uJeGtH2fIs&t@L4y@!IR_arI^?;Rfpj95MGE2Br3=gF@Npe^T zl}2=XnuSoqj34EbQGT~jp(JQhk8*U>l7aw>5Et-u_X3b*6kzy8pN;RLk9Jz7a={jD z=`Ox2d?&9akXjXD>2hN!%tF>9Sl$^*Z=V#aoN9U@Ds~3Qr)Wb%T7Nq~ z(9UaLTzhb>tsQA=BkkiO?ZM;ip%a}RR2c3erBLk3IZf@LTu$x6zWwFA2g2@$K&B9W z;ga4%w(<$2>?>he{9KmNc8SlShuQDNk8vqOdGJxyXdmYebJEYr5g?VcD8;lWrp1=L z8s+Fut3h9aMOaL;5nJ4O`B~YD^{;RTmw^0+{@#(czJVY6M%VgA_b2Y~DM;Mm;$OS7 z*O4HZo83G(`b;0kU*j?Lo7_02IS~BEJ@Q}+^zrkwr$eGXCIO*LZ!%)*bx((8&})`c zYdRKxCRtg3$8q!>h886{vFm{~;}CtO8R(wx5!mACGeoDv^;_V`_i983r0#7xso?{b zch`>&LLQz{ETtK}sCTyB-W1ZY{2c6h7N7?X0yI7TwA}xHfab`G0X@pO-3h7C6I{3- zzWMm(33!j~1@BJnd*I=@(A}G&=Ruc_fVYxRsg$zt@|m9H64MM-({z2i>2N-8nzx&l z6Kkl%!#~E!Nls32@+y!O6y-hYMatVDA{sF4F_8PHqoA{Iw#$=$WO`-wXKm=w(TO!} zvLnL^RDHvbhEK2cj&-=UlSOKOH^;ftFShB-`CTU&Yuf7vpY*RbZSe5oEA!h{N?JG& zKjmdJ{-=*Pf~5uwhB$xGoav1vCRq%K$9O+dgR$jXP*dytbkO$j@PB}4P^>r^-K2&;{V9!KfS`0=l}o! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..321904f4b8de607d4fa9a3bb081d7eed290e1428 GIT binary patch literal 13622 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_line_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_line_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26cd571c4393b38dc8c9e4e42151c8b516f0137d GIT binary patch literal 2236 zcmcgt%WoS+7@ygf*Xu`ZCr#6c5LdJa6UD2h2wI7U+S0UDTDNL*!3Zr|?q##G%%T2oM*z8My`I6W{E56IZn2abOPLely===bPW} zoB1Y}(+~{y+k`Es2>rw-$&d$1?=~nK$U+u&kc;aWb6s!*SFDSXE;^Dc*JW3!E74qX zQm$H8F(N7*2VdDqyINg~Y>Ja{v-NDGr<|OdujeCOb@sW1dI2K=okdpqF0wR&x5Ri4 z^y0$_Z+?>BcuCEbTh~gNmOfFErC+PIPpC!VmO!3ovEOt4o@s5GM@C`Ud_`EkvZ?>AH^3D&6BpV~W~x1W&rorVP7 z$;g1haq0yiHc)^QgN4`8$^gM+jejk{5?2y-4H<$|GFiu4gDm%?M6={|VO_kZYz-o} zgxLEks-*g+RvwHi1js>Jgq4G3Qg#5lvJK#|vcFh1%MIUk?I0jlnFXe2nT`+kp~ESg zEb?+3U?`#{Z-pr(odO(~4wilISoP?v&S0N2O>i)m z2-8{ATv2_-P)WvaMFxu-ui9*fk^@a~b82CaUP-qMxL4&4{OH&v5Fen2B~%#gWM?|r z!Y3C$y4We~?-bs6P?*~;%zam${$l>y^6{>Sif3^T3B^)ZLC-$dIWXB7pX%;IxrrW9 zbNQZ}DQI1kNozewiT=XHJFwXM6vRBj|05soAS-nX*#4QYA$};!Xpf(-ppVrr#rJSU zrK7N|h)Hxm*T%Rwz{NNh{0gWgOvoopFih6=8uS_N!2zd}AaBx5J$iD(+(&4=yW9jtIs&aZ=X1+;IHsWN&7kt zT1BYUDknkljrb5Wg2UrPd-BMiIV;a%C|(! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/tax/__pycache__/_transaction_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf0caa7fa59bef11ee22d4c7333c54ec5eb54ea7 GIT binary patch literal 5241 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation.py new file mode 100644 index 00000000..f3a19992 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation.py @@ -0,0 +1,675 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.tax._calculation_create_params import ( + CalculationCreateParams, + ) + from stripe.params.tax._calculation_list_line_items_params import ( + CalculationListLineItemsParams, + ) + from stripe.params.tax._calculation_retrieve_params import ( + CalculationRetrieveParams, + ) + from stripe.tax._calculation_line_item import CalculationLineItem + + +class Calculation(CreateableAPIResource["Calculation"]): + """ + A Tax Calculation allows you to calculate the tax to collect from your customer. + + Related guide: [Calculate tax in your custom payment flow](https://stripe.com/docs/tax/custom) + """ + + OBJECT_NAME: ClassVar[Literal["tax.calculation"]] = "tax.calculation" + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "unknown", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + The type of the tax ID, one of `ad_nrt`, `ar_cuit`, `eu_vat`, `bo_tin`, `br_cnpj`, `br_cpf`, `cn_tin`, `co_nit`, `cr_tin`, `do_rcn`, `ec_ruc`, `eu_oss_vat`, `hr_oib`, `pe_ruc`, `ro_tin`, `rs_pib`, `sv_nit`, `uy_ruc`, `ve_rif`, `vn_tin`, `gb_vat`, `nz_gst`, `au_abn`, `au_arn`, `in_gst`, `no_vat`, `no_voec`, `za_vat`, `ch_vat`, `mx_rfc`, `sg_uen`, `ru_inn`, `ru_kpp`, `ca_bn`, `hk_br`, `es_cif`, `tw_vat`, `th_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `li_uid`, `li_vat`, `my_itn`, `us_ein`, `kr_brn`, `ca_qst`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `my_sst`, `sg_gst`, `ae_trn`, `cl_tin`, `sa_vat`, `id_npwp`, `my_frp`, `il_vat`, `ge_vat`, `ua_vat`, `is_vat`, `bg_uic`, `hu_tin`, `si_tin`, `ke_pin`, `tr_tin`, `eg_tin`, `ph_tin`, `al_tin`, `bh_vat`, `kz_bin`, `ng_tin`, `om_vat`, `de_stn`, `ch_uid`, `tz_vat`, `uz_vat`, `uz_tin`, `md_vat`, `ma_vat`, `by_tin`, `ao_tin`, `bs_tin`, `bb_tin`, `cd_nif`, `mr_nif`, `me_pib`, `zw_tin`, `ba_tin`, `gn_nif`, `mk_vat`, `sr_fin`, `sn_ninea`, `am_tin`, `np_pan`, `tj_tin`, `ug_tin`, `zm_tin`, `kh_tin`, `aw_tin`, `az_tin`, `bd_bin`, `bj_ifu`, `et_tin`, `kg_tin`, `la_tin`, `cm_niu`, `cv_nif`, `bf_ifu`, or `unknown` + """ + value: str + """ + The value of the tax ID. + """ + + address: Optional[Address] + """ + The customer's postal address (for example, home or business location). + """ + address_source: Optional[Literal["billing", "shipping"]] + """ + The type of customer address provided. + """ + ip_address: Optional[str] + """ + The customer's IP address (IPv4 or IPv6). + """ + tax_ids: List[TaxId] + """ + The customer's tax IDs (for example, EU VAT numbers). + """ + taxability_override: Literal[ + "customer_exempt", "none", "reverse_charge" + ] + """ + The taxability override used for taxation. + """ + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class ShipFromDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ + + address: Address + _inner_class_types = {"address": Address} + + class ShippingCost(StripeObject): + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + display_name: str + """ + A human-readable name for the jurisdiction imposing the tax. + """ + level: Literal[ + "city", "country", "county", "district", "state" + ] + """ + Indicates the level of the jurisdiction imposing the tax. + """ + state: Optional[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + + class TaxRateDetails(StripeObject): + display_name: str + """ + A localized display name for tax type, intended to be human-readable. For example, "Local Sales and Use Tax", "Value-added tax (VAT)", or "Umsatzsteuer (USt.)". + """ + percentage_decimal: str + """ + The tax rate percentage as a string. For example, 8.5% is represented as "8.5". + """ + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + """ + The tax type, such as `vat` or `sales_tax`. + """ + + amount: int + """ + The amount of tax, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + """ + Indicates whether the jurisdiction was determined by the origin (merchant's address) or destination (customer's address). + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Details regarding the rate for this tax. This field will be `null` when the tax is not imposed, for example if the product is exempt from tax. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: int + """ + The amount on which tax is calculated, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + + amount: int + """ + The shipping amount in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. + """ + amount_tax: int + """ + The amount of tax calculated for shipping, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + shipping_rate: Optional[str] + """ + The ID of an existing [ShippingRate](https://stripe.com/docs/api/shipping_rates/object). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Specifies whether the `amount` includes taxes. If `tax_behavior=inclusive`, then the amount includes taxes. + """ + tax_breakdown: Optional[List[TaxBreakdown]] + """ + Detailed account of taxes relevant to shipping cost. + """ + tax_code: str + """ + The [tax code](https://stripe.com/docs/tax/tax-categories) ID used for shipping. + """ + _inner_class_types = {"tax_breakdown": TaxBreakdown} + + class TaxBreakdown(StripeObject): + class TaxRateDetails(StripeObject): + class FlatAmount(StripeObject): + amount: int + """ + Amount of the tax when the `rate_type` is `flat_amount`. This positive integer represents how much to charge in the smallest currency unit (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). + """ + currency: str + """ + Three-letter ISO currency code, in lowercase. + """ + + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + flat_amount: Optional[FlatAmount] + """ + The amount of the tax rate when the `rate_type` is `flat_amount`. Tax rates with `rate_type` `percentage` can vary based on the transaction, resulting in this field being `null`. This field exposes the amount and currency of the flat tax rate. + """ + percentage_decimal: str + """ + The tax rate percentage as a string. For example, 8.5% is represented as `"8.5"`. + """ + rate_type: Optional[Literal["flat_amount", "percentage"]] + """ + Indicates the type of tax rate applied to the taxable amount. This value can be `null` when no tax applies to the location. This field is only present for TaxRates created by Stripe Tax. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + tax_type: Optional[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + ] + """ + The tax type, such as `vat` or `sales_tax`. + """ + _inner_class_types = {"flat_amount": FlatAmount} + + amount: int + """ + The amount of tax, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + inclusive: bool + """ + Specifies whether the tax amount is included in the line item amount. + """ + tax_rate_details: TaxRateDetails + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. We might extend the possible values for this field to support new tax rules. + """ + taxable_amount: int + """ + The amount on which tax is calculated, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + _inner_class_types = {"tax_rate_details": TaxRateDetails} + + amount_total: int + """ + Total amount after taxes in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[str] + """ + The ID of an existing [Customer](https://stripe.com/docs/api/customers/object) used for the resource. + """ + customer_details: CustomerDetails + expires_at: Optional[int] + """ + Timestamp of date at which the tax calculation will expire. + """ + id: Optional[str] + """ + Unique identifier for the calculation. + """ + line_items: Optional[ListObject["CalculationLineItem"]] + """ + The list of items the customer is purchasing. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["tax.calculation"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + ship_from_details: Optional[ShipFromDetails] + """ + The details of the ship from location, such as the address. + """ + shipping_cost: Optional[ShippingCost] + """ + The shipping cost details for the calculation. + """ + tax_amount_exclusive: int + """ + The amount of tax to be collected on top of the line item prices. + """ + tax_amount_inclusive: int + """ + The amount of tax already included in the line item prices. + """ + tax_breakdown: List[TaxBreakdown] + """ + Breakdown of individual tax amounts that add up to the total. + """ + tax_date: int + """ + Timestamp of date at which the tax rules and rates in effect applies for the calculation. + """ + + @classmethod + def create( + cls, **params: Unpack["CalculationCreateParams"] + ) -> "Calculation": + """ + Calculates tax based on the input and returns a Tax Calculation object. + """ + return cast( + "Calculation", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CalculationCreateParams"] + ) -> "Calculation": + """ + Calculates tax based on the input and returns a Tax Calculation object. + """ + return cast( + "Calculation", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_list_line_items( + cls, + calculation: str, + **params: Unpack["CalculationListLineItemsParams"], + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + ListObject["CalculationLineItem"], + cls._static_request( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(calculation) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_line_items( + calculation: str, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + ... + + @overload + def list_line_items( + self, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + ... + + @class_method_variant("_cls_list_line_items") + def list_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + ListObject["CalculationLineItem"], + self._request( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_line_items_async( + cls, + calculation: str, + **params: Unpack["CalculationListLineItemsParams"], + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + ListObject["CalculationLineItem"], + await cls._static_request_async( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(calculation) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_line_items_async( + calculation: str, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + ... + + @overload + async def list_line_items_async( + self, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + ... + + @class_method_variant("_cls_list_line_items_async") + async def list_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CalculationListLineItemsParams"] + ) -> ListObject["CalculationLineItem"]: + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + ListObject["CalculationLineItem"], + await self._request_async( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CalculationRetrieveParams"] + ) -> "Calculation": + """ + Retrieves a Tax Calculation object, if the calculation hasn't expired. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CalculationRetrieveParams"] + ) -> "Calculation": + """ + Retrieves a Tax Calculation object, if the calculation hasn't expired. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "customer_details": CustomerDetails, + "ship_from_details": ShipFromDetails, + "shipping_cost": ShippingCost, + "tax_breakdown": TaxBreakdown, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item.py new file mode 100644 index 00000000..7a62d267 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, List, Optional +from typing_extensions import Literal + + +class CalculationLineItem(StripeObject): + OBJECT_NAME: ClassVar[Literal["tax.calculation_line_item"]] = ( + "tax.calculation_line_item" + ) + + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + display_name: str + """ + A human-readable name for the jurisdiction imposing the tax. + """ + level: Literal["city", "country", "county", "district", "state"] + """ + Indicates the level of the jurisdiction imposing the tax. + """ + state: Optional[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + + class TaxRateDetails(StripeObject): + display_name: str + """ + A localized display name for tax type, intended to be human-readable. For example, "Local Sales and Use Tax", "Value-added tax (VAT)", or "Umsatzsteuer (USt.)". + """ + percentage_decimal: str + """ + The tax rate percentage as a string. For example, 8.5% is represented as "8.5". + """ + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + """ + The tax type, such as `vat` or `sales_tax`. + """ + + amount: int + """ + The amount of tax, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + """ + Indicates whether the jurisdiction was determined by the origin (merchant's address) or destination (customer's address). + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Details regarding the rate for this tax. This field will be `null` when the tax is not imposed, for example if the product is exempt from tax. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: int + """ + The amount on which tax is calculated, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + + amount: int + """ + The line item amount in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. + """ + amount_tax: int + """ + The amount of tax calculated for this line item, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["tax.calculation_line_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + product: Optional[str] + """ + The ID of an existing [Product](https://stripe.com/docs/api/products/object). + """ + quantity: int + """ + The number of units of the item being purchased. For reversals, this is the quantity reversed. + """ + reference: str + """ + A custom identifier for this line item. + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Specifies whether the `amount` includes taxes. If `tax_behavior=inclusive`, then the amount includes taxes. + """ + tax_breakdown: Optional[List[TaxBreakdown]] + """ + Detailed account of taxes relevant to this line item. + """ + tax_code: str + """ + The [tax code](https://stripe.com/docs/tax/tax-categories) ID used for this resource. + """ + _inner_class_types = {"tax_breakdown": TaxBreakdown} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item_service.py new file mode 100644 index 00000000..48c946c4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.tax._calculation_line_item_list_params import ( + CalculationLineItemListParams, + ) + from stripe.tax._calculation_line_item import CalculationLineItem + + +class CalculationLineItemService(StripeService): + def list( + self, + calculation: str, + params: Optional["CalculationLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CalculationLineItem]": + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + "ListObject[CalculationLineItem]", + self._request( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(calculation), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + calculation: str, + params: Optional["CalculationLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CalculationLineItem]": + """ + Retrieves the line items of a tax calculation as a collection, if the calculation hasn't expired. + """ + return cast( + "ListObject[CalculationLineItem]", + await self._request_async( + "get", + "/v1/tax/calculations/{calculation}/line_items".format( + calculation=sanitize_id(calculation), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_service.py new file mode 100644 index 00000000..cddd0066 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_calculation_service.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.tax._calculation_create_params import ( + CalculationCreateParams, + ) + from stripe.params.tax._calculation_retrieve_params import ( + CalculationRetrieveParams, + ) + from stripe.tax._calculation import Calculation + from stripe.tax._calculation_line_item_service import ( + CalculationLineItemService, + ) + +_subservices = { + "line_items": [ + "stripe.tax._calculation_line_item_service", + "CalculationLineItemService", + ], +} + + +class CalculationService(StripeService): + line_items: "CalculationLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def retrieve( + self, + calculation: str, + params: Optional["CalculationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Calculation": + """ + Retrieves a Tax Calculation object, if the calculation hasn't expired. + """ + return cast( + "Calculation", + self._request( + "get", + "/v1/tax/calculations/{calculation}".format( + calculation=sanitize_id(calculation), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + calculation: str, + params: Optional["CalculationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Calculation": + """ + Retrieves a Tax Calculation object, if the calculation hasn't expired. + """ + return cast( + "Calculation", + await self._request_async( + "get", + "/v1/tax/calculations/{calculation}".format( + calculation=sanitize_id(calculation), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CalculationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Calculation": + """ + Calculates tax based on the input and returns a Tax Calculation object. + """ + return cast( + "Calculation", + self._request( + "post", + "/v1/tax/calculations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CalculationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Calculation": + """ + Calculates tax based on the input and returns a Tax Calculation object. + """ + return cast( + "Calculation", + await self._request_async( + "post", + "/v1/tax/calculations", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration.py new file mode 100644 index 00000000..09bbc9c9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration.py @@ -0,0 +1,1406 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.tax._registration_create_params import ( + RegistrationCreateParams, + ) + from stripe.params.tax._registration_list_params import ( + RegistrationListParams, + ) + from stripe.params.tax._registration_modify_params import ( + RegistrationModifyParams, + ) + from stripe.params.tax._registration_retrieve_params import ( + RegistrationRetrieveParams, + ) + + +class Registration( + CreateableAPIResource["Registration"], + ListableAPIResource["Registration"], + UpdateableAPIResource["Registration"], +): + """ + A Tax `Registration` lets us know that your business is registered to collect tax on payments within a region, enabling you to [automatically collect tax](https://stripe.com/docs/tax). + + Stripe doesn't register on your behalf with the relevant authorities when you create a Tax `Registration` object. For more information on how to register to collect tax, see [our guide](https://stripe.com/docs/tax/registering). + + Related guide: [Using the Registrations API](https://stripe.com/docs/tax/registrations-api) + """ + + OBJECT_NAME: ClassVar[Literal["tax.registration"]] = "tax.registration" + + class CountryOptions(StripeObject): + class Ae(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Al(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Am(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ao(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class At(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Au(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Aw(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Az(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ba(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Bb(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Bd(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Be(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Bf(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Bg(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Bh(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Bj(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Bs(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class By(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ca(StripeObject): + class ProvinceStandard(StripeObject): + province: str + """ + Two-letter CA province code ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)). + """ + + province_standard: Optional[ProvinceStandard] + type: Literal["province_standard", "simplified", "standard"] + """ + Type of registration in Canada. + """ + _inner_class_types = {"province_standard": ProvinceStandard} + + class Cd(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Ch(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Cl(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Cm(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Co(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Cr(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Cv(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Cy(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Cz(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class De(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Dk(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Ec(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ee(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Eg(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Es(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Et(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Fi(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Fr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Gb(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Ge(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Gn(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Gr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Hr(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Hu(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Id(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ie(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class In(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Is(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class It(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Jp(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Ke(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Kg(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Kh(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Kr(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Kz(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class La(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Lt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Lu(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Lv(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Ma(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Md(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Me(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Mk(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Mr(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Mt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Mx(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class My(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ng(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Nl(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class No(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Np(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Nz(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Om(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Pe(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ph(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Pl(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Pt(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Ro(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Rs(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Ru(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Sa(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Se(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Sg(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal["inbound_goods", "standard"] + """ + Place of supply scheme used in an Default standard registration. + """ + + standard: Optional[Standard] + type: Literal["standard"] + """ + Type of registration in `country`. + """ + _inner_class_types = {"standard": Standard} + + class Si(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Sk(StripeObject): + class Standard(StripeObject): + place_of_supply_scheme: Literal[ + "inbound_goods", "small_seller", "standard" + ] + """ + Place of supply scheme used in an EU standard registration. + """ + + standard: Optional[Standard] + type: Literal["ioss", "oss_non_union", "oss_union", "standard"] + """ + Type of registration in an EU country. + """ + _inner_class_types = {"standard": Standard} + + class Sn(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Sr(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Th(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Tj(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Tr(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Tw(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Tz(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ua(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Ug(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Us(StripeObject): + class LocalAmusementTax(StripeObject): + jurisdiction: str + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. + """ + + class LocalLeaseTax(StripeObject): + jurisdiction: str + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. + """ + + class StateSalesTax(StripeObject): + class Election(StripeObject): + jurisdiction: Optional[str] + """ + A [FIPS code](https://www.census.gov/library/reference/code-lists/ansi.html) representing the local jurisdiction. + """ + type: Literal[ + "local_use_tax", + "simplified_sellers_use_tax", + "single_local_use_tax", + ] + """ + The type of the election for the state sales tax registration. + """ + + elections: Optional[List[Election]] + """ + Elections for the state sales tax registration. + """ + _inner_class_types = {"elections": Election} + + local_amusement_tax: Optional[LocalAmusementTax] + local_lease_tax: Optional[LocalLeaseTax] + state: str + """ + Two-letter US state code ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)). + """ + state_sales_tax: Optional[StateSalesTax] + type: Literal[ + "local_amusement_tax", + "local_lease_tax", + "state_communications_tax", + "state_retail_delivery_fee", + "state_sales_tax", + ] + """ + Type of registration in the US. + """ + _inner_class_types = { + "local_amusement_tax": LocalAmusementTax, + "local_lease_tax": LocalLeaseTax, + "state_sales_tax": StateSalesTax, + } + + class Uy(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Uz(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Vn(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Za(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + class Zm(StripeObject): + type: Literal["simplified"] + """ + Type of registration in `country`. + """ + + class Zw(StripeObject): + type: Literal["standard"] + """ + Type of registration in `country`. + """ + + ae: Optional[Ae] + al: Optional[Al] + am: Optional[Am] + ao: Optional[Ao] + at: Optional[At] + au: Optional[Au] + aw: Optional[Aw] + az: Optional[Az] + ba: Optional[Ba] + bb: Optional[Bb] + bd: Optional[Bd] + be: Optional[Be] + bf: Optional[Bf] + bg: Optional[Bg] + bh: Optional[Bh] + bj: Optional[Bj] + bs: Optional[Bs] + by: Optional[By] + ca: Optional[Ca] + cd: Optional[Cd] + ch: Optional[Ch] + cl: Optional[Cl] + cm: Optional[Cm] + co: Optional[Co] + cr: Optional[Cr] + cv: Optional[Cv] + cy: Optional[Cy] + cz: Optional[Cz] + de: Optional[De] + dk: Optional[Dk] + ec: Optional[Ec] + ee: Optional[Ee] + eg: Optional[Eg] + es: Optional[Es] + et: Optional[Et] + fi: Optional[Fi] + fr: Optional[Fr] + gb: Optional[Gb] + ge: Optional[Ge] + gn: Optional[Gn] + gr: Optional[Gr] + hr: Optional[Hr] + hu: Optional[Hu] + id: Optional[Id] + ie: Optional[Ie] + in_: Optional[In] + is_: Optional[Is] + it: Optional[It] + jp: Optional[Jp] + ke: Optional[Ke] + kg: Optional[Kg] + kh: Optional[Kh] + kr: Optional[Kr] + kz: Optional[Kz] + la: Optional[La] + lt: Optional[Lt] + lu: Optional[Lu] + lv: Optional[Lv] + ma: Optional[Ma] + md: Optional[Md] + me: Optional[Me] + mk: Optional[Mk] + mr: Optional[Mr] + mt: Optional[Mt] + mx: Optional[Mx] + my: Optional[My] + ng: Optional[Ng] + nl: Optional[Nl] + no: Optional[No] + np: Optional[Np] + nz: Optional[Nz] + om: Optional[Om] + pe: Optional[Pe] + ph: Optional[Ph] + pl: Optional[Pl] + pt: Optional[Pt] + ro: Optional[Ro] + rs: Optional[Rs] + ru: Optional[Ru] + sa: Optional[Sa] + se: Optional[Se] + sg: Optional[Sg] + si: Optional[Si] + sk: Optional[Sk] + sn: Optional[Sn] + sr: Optional[Sr] + th: Optional[Th] + tj: Optional[Tj] + tr: Optional[Tr] + tw: Optional[Tw] + tz: Optional[Tz] + ua: Optional[Ua] + ug: Optional[Ug] + us: Optional[Us] + uy: Optional[Uy] + uz: Optional[Uz] + vn: Optional[Vn] + za: Optional[Za] + zm: Optional[Zm] + zw: Optional[Zw] + _inner_class_types = { + "ae": Ae, + "al": Al, + "am": Am, + "ao": Ao, + "at": At, + "au": Au, + "aw": Aw, + "az": Az, + "ba": Ba, + "bb": Bb, + "bd": Bd, + "be": Be, + "bf": Bf, + "bg": Bg, + "bh": Bh, + "bj": Bj, + "bs": Bs, + "by": By, + "ca": Ca, + "cd": Cd, + "ch": Ch, + "cl": Cl, + "cm": Cm, + "co": Co, + "cr": Cr, + "cv": Cv, + "cy": Cy, + "cz": Cz, + "de": De, + "dk": Dk, + "ec": Ec, + "ee": Ee, + "eg": Eg, + "es": Es, + "et": Et, + "fi": Fi, + "fr": Fr, + "gb": Gb, + "ge": Ge, + "gn": Gn, + "gr": Gr, + "hr": Hr, + "hu": Hu, + "id": Id, + "ie": Ie, + "in": In, + "is": Is, + "it": It, + "jp": Jp, + "ke": Ke, + "kg": Kg, + "kh": Kh, + "kr": Kr, + "kz": Kz, + "la": La, + "lt": Lt, + "lu": Lu, + "lv": Lv, + "ma": Ma, + "md": Md, + "me": Me, + "mk": Mk, + "mr": Mr, + "mt": Mt, + "mx": Mx, + "my": My, + "ng": Ng, + "nl": Nl, + "no": No, + "np": Np, + "nz": Nz, + "om": Om, + "pe": Pe, + "ph": Ph, + "pl": Pl, + "pt": Pt, + "ro": Ro, + "rs": Rs, + "ru": Ru, + "sa": Sa, + "se": Se, + "sg": Sg, + "si": Si, + "sk": Sk, + "sn": Sn, + "sr": Sr, + "th": Th, + "tj": Tj, + "tr": Tr, + "tw": Tw, + "tz": Tz, + "ua": Ua, + "ug": Ug, + "us": Us, + "uy": Uy, + "uz": Uz, + "vn": Vn, + "za": Za, + "zm": Zm, + "zw": Zw, + } + _field_remappings = {"in_": "in", "is_": "is"} + + active_from: int + """ + Time at which the registration becomes active. Measured in seconds since the Unix epoch. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + country_options: CountryOptions + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expires_at: Optional[int] + """ + If set, the registration stops being active at this time. If not set, the registration will be active indefinitely. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["tax.registration"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "expired", "scheduled"] + """ + The status of the registration. This field is present for convenience and can be deduced from `active_from` and `expires_at`. + """ + + @classmethod + def create( + cls, **params: Unpack["RegistrationCreateParams"] + ) -> "Registration": + """ + Creates a new Tax Registration object. + """ + return cast( + "Registration", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["RegistrationCreateParams"] + ) -> "Registration": + """ + Creates a new Tax Registration object. + """ + return cast( + "Registration", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["RegistrationListParams"] + ) -> ListObject["Registration"]: + """ + Returns a list of Tax Registration objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["RegistrationListParams"] + ) -> ListObject["Registration"]: + """ + Returns a list of Tax Registration objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["RegistrationModifyParams"] + ) -> "Registration": + """ + Updates an existing Tax Registration object. + + A registration cannot be deleted after it has been created. If you wish to end a registration you may do so by setting expires_at. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Registration", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["RegistrationModifyParams"] + ) -> "Registration": + """ + Updates an existing Tax Registration object. + + A registration cannot be deleted after it has been created. If you wish to end a registration you may do so by setting expires_at. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Registration", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["RegistrationRetrieveParams"] + ) -> "Registration": + """ + Returns a Tax Registration object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["RegistrationRetrieveParams"] + ) -> "Registration": + """ + Returns a Tax Registration object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"country_options": CountryOptions} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration_service.py new file mode 100644 index 00000000..a85fd575 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_registration_service.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.tax._registration_create_params import ( + RegistrationCreateParams, + ) + from stripe.params.tax._registration_list_params import ( + RegistrationListParams, + ) + from stripe.params.tax._registration_retrieve_params import ( + RegistrationRetrieveParams, + ) + from stripe.params.tax._registration_update_params import ( + RegistrationUpdateParams, + ) + from stripe.tax._registration import Registration + + +class RegistrationService(StripeService): + def list( + self, + params: Optional["RegistrationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Registration]": + """ + Returns a list of Tax Registration objects. + """ + return cast( + "ListObject[Registration]", + self._request( + "get", + "/v1/tax/registrations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["RegistrationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Registration]": + """ + Returns a list of Tax Registration objects. + """ + return cast( + "ListObject[Registration]", + await self._request_async( + "get", + "/v1/tax/registrations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "RegistrationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Creates a new Tax Registration object. + """ + return cast( + "Registration", + self._request( + "post", + "/v1/tax/registrations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "RegistrationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Creates a new Tax Registration object. + """ + return cast( + "Registration", + await self._request_async( + "post", + "/v1/tax/registrations", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["RegistrationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Returns a Tax Registration object. + """ + return cast( + "Registration", + self._request( + "get", + "/v1/tax/registrations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["RegistrationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Returns a Tax Registration object. + """ + return cast( + "Registration", + await self._request_async( + "get", + "/v1/tax/registrations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["RegistrationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Updates an existing Tax Registration object. + + A registration cannot be deleted after it has been created. If you wish to end a registration you may do so by setting expires_at. + """ + return cast( + "Registration", + self._request( + "post", + "/v1/tax/registrations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["RegistrationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Registration": + """ + Updates an existing Tax Registration object. + + A registration cannot be deleted after it has been created. If you wish to end a registration you may do so by setting expires_at. + """ + return cast( + "Registration", + await self._request_async( + "post", + "/v1/tax/registrations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings.py new file mode 100644 index 00000000..c67ed2f9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._singleton_api_resource import SingletonAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.tax._settings_modify_params import SettingsModifyParams + from stripe.params.tax._settings_retrieve_params import ( + SettingsRetrieveParams, + ) + + +class Settings( + SingletonAPIResource["Settings"], + UpdateableAPIResource["Settings"], +): + """ + You can use Tax `Settings` to manage configurations used by Stripe Tax calculations. + + Related guide: [Using the Settings API](https://stripe.com/docs/tax/settings-api) + """ + + OBJECT_NAME: ClassVar[Literal["tax.settings"]] = "tax.settings" + + class Defaults(StripeObject): + provider: Literal["anrok", "avalara", "sphere", "stripe"] + """ + The tax calculation provider this account uses. Defaults to `stripe` when not using a [third-party provider](https://docs.stripe.com/tax/third-party-apps). + """ + tax_behavior: Optional[ + Literal["exclusive", "inclusive", "inferred_by_currency"] + ] + """ + Default [tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#tax-behavior) used to specify whether the price is considered inclusive of taxes or exclusive of taxes. If the item's price has a tax behavior set, it will take precedence over the default tax behavior. + """ + tax_code: Optional[str] + """ + Default [tax code](https://stripe.com/docs/tax/tax-categories) used to classify your products and prices. + """ + + class HeadOffice(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + _inner_class_types = {"address": Address} + + class StatusDetails(StripeObject): + class Active(StripeObject): + pass + + class Pending(StripeObject): + missing_fields: Optional[List[str]] + """ + The list of missing fields that are required to perform calculations. It includes the entry `head_office` when the status is `pending`. It is recommended to set the optional values even if they aren't listed as required for calculating taxes. Calculations can fail if missing fields aren't explicitly provided on every call. + """ + + active: Optional[Active] + pending: Optional[Pending] + _inner_class_types = {"active": Active, "pending": Pending} + + defaults: Defaults + head_office: Optional[HeadOffice] + """ + The place where your business is located. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["tax.settings"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "pending"] + """ + The status of the Tax `Settings`. + """ + status_details: StatusDetails + + @classmethod + def modify(cls, **params: Unpack["SettingsModifyParams"]) -> "Settings": + """ + Updates Tax Settings parameters used in tax calculations. All parameters are editable but none can be removed once set. + """ + return cast( + "Settings", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, **params: Unpack["SettingsModifyParams"] + ) -> "Settings": + """ + Updates Tax Settings parameters used in tax calculations. All parameters are editable but none can be removed once set. + """ + return cast( + "Settings", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, **params: Unpack["SettingsRetrieveParams"] + ) -> "Settings": + """ + Retrieves Tax Settings for a merchant. + """ + instance = cls(None, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, **params: Unpack["SettingsRetrieveParams"] + ) -> "Settings": + """ + Retrieves Tax Settings for a merchant. + """ + instance = cls(None, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/tax/settings" + + _inner_class_types = { + "defaults": Defaults, + "head_office": HeadOffice, + "status_details": StatusDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings_service.py new file mode 100644 index 00000000..fa998167 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_settings_service.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.tax._settings_retrieve_params import ( + SettingsRetrieveParams, + ) + from stripe.params.tax._settings_update_params import SettingsUpdateParams + from stripe.tax._settings import Settings + + +class SettingsService(StripeService): + def retrieve( + self, + params: Optional["SettingsRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Settings": + """ + Retrieves Tax Settings for a merchant. + """ + return cast( + "Settings", + self._request( + "get", + "/v1/tax/settings", + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + params: Optional["SettingsRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Settings": + """ + Retrieves Tax Settings for a merchant. + """ + return cast( + "Settings", + await self._request_async( + "get", + "/v1/tax/settings", + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + params: Optional["SettingsUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Settings": + """ + Updates Tax Settings parameters used in tax calculations. All parameters are editable but none can be removed once set. + """ + return cast( + "Settings", + self._request( + "post", + "/v1/tax/settings", + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + params: Optional["SettingsUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Settings": + """ + Updates Tax Settings parameters used in tax calculations. All parameters are editable but none can be removed once set. + """ + return cast( + "Settings", + await self._request_async( + "post", + "/v1/tax/settings", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction.py new file mode 100644 index 00000000..d2851fee --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction.py @@ -0,0 +1,630 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_resource import APIResource +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.tax._transaction_create_from_calculation_params import ( + TransactionCreateFromCalculationParams, + ) + from stripe.params.tax._transaction_create_reversal_params import ( + TransactionCreateReversalParams, + ) + from stripe.params.tax._transaction_list_line_items_params import ( + TransactionListLineItemsParams, + ) + from stripe.params.tax._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + from stripe.tax._transaction_line_item import TransactionLineItem + + +class Transaction(APIResource["Transaction"]): + """ + A Tax Transaction records the tax collected from or refunded to your customer. + + Related guide: [Calculate tax in your custom payment flow](https://stripe.com/docs/tax/custom#tax-transaction) + """ + + OBJECT_NAME: ClassVar[Literal["tax.transaction"]] = "tax.transaction" + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "unknown", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + The type of the tax ID, one of `ad_nrt`, `ar_cuit`, `eu_vat`, `bo_tin`, `br_cnpj`, `br_cpf`, `cn_tin`, `co_nit`, `cr_tin`, `do_rcn`, `ec_ruc`, `eu_oss_vat`, `hr_oib`, `pe_ruc`, `ro_tin`, `rs_pib`, `sv_nit`, `uy_ruc`, `ve_rif`, `vn_tin`, `gb_vat`, `nz_gst`, `au_abn`, `au_arn`, `in_gst`, `no_vat`, `no_voec`, `za_vat`, `ch_vat`, `mx_rfc`, `sg_uen`, `ru_inn`, `ru_kpp`, `ca_bn`, `hk_br`, `es_cif`, `tw_vat`, `th_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `li_uid`, `li_vat`, `my_itn`, `us_ein`, `kr_brn`, `ca_qst`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `my_sst`, `sg_gst`, `ae_trn`, `cl_tin`, `sa_vat`, `id_npwp`, `my_frp`, `il_vat`, `ge_vat`, `ua_vat`, `is_vat`, `bg_uic`, `hu_tin`, `si_tin`, `ke_pin`, `tr_tin`, `eg_tin`, `ph_tin`, `al_tin`, `bh_vat`, `kz_bin`, `ng_tin`, `om_vat`, `de_stn`, `ch_uid`, `tz_vat`, `uz_vat`, `uz_tin`, `md_vat`, `ma_vat`, `by_tin`, `ao_tin`, `bs_tin`, `bb_tin`, `cd_nif`, `mr_nif`, `me_pib`, `zw_tin`, `ba_tin`, `gn_nif`, `mk_vat`, `sr_fin`, `sn_ninea`, `am_tin`, `np_pan`, `tj_tin`, `ug_tin`, `zm_tin`, `kh_tin`, `aw_tin`, `az_tin`, `bd_bin`, `bj_ifu`, `et_tin`, `kg_tin`, `la_tin`, `cm_niu`, `cv_nif`, `bf_ifu`, or `unknown` + """ + value: str + """ + The value of the tax ID. + """ + + address: Optional[Address] + """ + The customer's postal address (for example, home or business location). + """ + address_source: Optional[Literal["billing", "shipping"]] + """ + The type of customer address provided. + """ + ip_address: Optional[str] + """ + The customer's IP address (IPv4 or IPv6). + """ + tax_ids: List[TaxId] + """ + The customer's tax IDs (for example, EU VAT numbers). + """ + taxability_override: Literal[ + "customer_exempt", "none", "reverse_charge" + ] + """ + The taxability override used for taxation. + """ + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class Reversal(StripeObject): + original_transaction: Optional[str] + """ + The `id` of the reversed `Transaction` object. + """ + + class ShipFromDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State/province as an [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) subdivision code, without country prefix, such as "NY" or "TX". + """ + + address: Address + _inner_class_types = {"address": Address} + + class ShippingCost(StripeObject): + class TaxBreakdown(StripeObject): + class Jurisdiction(StripeObject): + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + display_name: str + """ + A human-readable name for the jurisdiction imposing the tax. + """ + level: Literal[ + "city", "country", "county", "district", "state" + ] + """ + Indicates the level of the jurisdiction imposing the tax. + """ + state: Optional[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + + class TaxRateDetails(StripeObject): + display_name: str + """ + A localized display name for tax type, intended to be human-readable. For example, "Local Sales and Use Tax", "Value-added tax (VAT)", or "Umsatzsteuer (USt.)". + """ + percentage_decimal: str + """ + The tax rate percentage as a string. For example, 8.5% is represented as "8.5". + """ + tax_type: Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + """ + The tax type, such as `vat` or `sales_tax`. + """ + + amount: int + """ + The amount of tax, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + jurisdiction: Jurisdiction + sourcing: Literal["destination", "origin"] + """ + Indicates whether the jurisdiction was determined by the origin (merchant's address) or destination (customer's address). + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Details regarding the rate for this tax. This field will be `null` when the tax is not imposed, for example if the product is exempt from tax. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: int + """ + The amount on which tax is calculated, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + _inner_class_types = { + "jurisdiction": Jurisdiction, + "tax_rate_details": TaxRateDetails, + } + + amount: int + """ + The shipping amount in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. + """ + amount_tax: int + """ + The amount of tax calculated for shipping, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + shipping_rate: Optional[str] + """ + The ID of an existing [ShippingRate](https://stripe.com/docs/api/shipping_rates/object). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Specifies whether the `amount` includes taxes. If `tax_behavior=inclusive`, then the amount includes taxes. + """ + tax_breakdown: Optional[List[TaxBreakdown]] + """ + Detailed account of taxes relevant to shipping cost. (It is not populated for the transaction resource object and will be removed in the next API version.) + """ + tax_code: str + """ + The [tax code](https://stripe.com/docs/tax/tax-categories) ID used for shipping. + """ + _inner_class_types = {"tax_breakdown": TaxBreakdown} + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[str] + """ + The ID of an existing [Customer](https://stripe.com/docs/api/customers/object) used for the resource. + """ + customer_details: CustomerDetails + id: str + """ + Unique identifier for the transaction. + """ + line_items: Optional[ListObject["TransactionLineItem"]] + """ + The tax collected or refunded, by line item. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["tax.transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + posted_at: int + """ + The Unix timestamp representing when the tax liability is assumed or reduced. + """ + reference: str + """ + A custom unique identifier, such as 'myOrder_123'. + """ + reversal: Optional[Reversal] + """ + If `type=reversal`, contains information about what was reversed. + """ + ship_from_details: Optional[ShipFromDetails] + """ + The details of the ship from location, such as the address. + """ + shipping_cost: Optional[ShippingCost] + """ + The shipping cost details for the transaction. + """ + tax_date: int + """ + Timestamp of date at which the tax rules and rates in effect applies for the calculation. + """ + type: Literal["reversal", "transaction"] + """ + If `reversal`, this transaction reverses an earlier transaction. + """ + + @classmethod + def create_from_calculation( + cls, **params: Unpack["TransactionCreateFromCalculationParams"] + ) -> "Transaction": + """ + Creates a Tax Transaction from a calculation, if that calculation hasn't expired. Calculations expire after 90 days. + """ + return cast( + "Transaction", + cls._static_request( + "post", + "/v1/tax/transactions/create_from_calculation", + params=params, + ), + ) + + @classmethod + async def create_from_calculation_async( + cls, **params: Unpack["TransactionCreateFromCalculationParams"] + ) -> "Transaction": + """ + Creates a Tax Transaction from a calculation, if that calculation hasn't expired. Calculations expire after 90 days. + """ + return cast( + "Transaction", + await cls._static_request_async( + "post", + "/v1/tax/transactions/create_from_calculation", + params=params, + ), + ) + + @classmethod + def create_reversal( + cls, **params: Unpack["TransactionCreateReversalParams"] + ) -> "Transaction": + """ + Partially or fully reverses a previously created Transaction. + """ + return cast( + "Transaction", + cls._static_request( + "post", + "/v1/tax/transactions/create_reversal", + params=params, + ), + ) + + @classmethod + async def create_reversal_async( + cls, **params: Unpack["TransactionCreateReversalParams"] + ) -> "Transaction": + """ + Partially or fully reverses a previously created Transaction. + """ + return cast( + "Transaction", + await cls._static_request_async( + "post", + "/v1/tax/transactions/create_reversal", + params=params, + ), + ) + + @classmethod + def _cls_list_line_items( + cls, + transaction: str, + **params: Unpack["TransactionListLineItemsParams"], + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + ListObject["TransactionLineItem"], + cls._static_request( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(transaction) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_line_items( + transaction: str, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + ... + + @overload + def list_line_items( + self, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + ... + + @class_method_variant("_cls_list_line_items") + def list_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + ListObject["TransactionLineItem"], + self._request( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_line_items_async( + cls, + transaction: str, + **params: Unpack["TransactionListLineItemsParams"], + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + ListObject["TransactionLineItem"], + await cls._static_request_async( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(transaction) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_line_items_async( + transaction: str, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + ... + + @overload + async def list_line_items_async( + self, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + ... + + @class_method_variant("_cls_list_line_items_async") + async def list_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TransactionListLineItemsParams"] + ) -> ListObject["TransactionLineItem"]: + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + ListObject["TransactionLineItem"], + await self._request_async( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves a Tax Transaction object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves a Tax Transaction object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "customer_details": CustomerDetails, + "reversal": Reversal, + "ship_from_details": ShipFromDetails, + "shipping_cost": ShippingCost, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item.py new file mode 100644 index 00000000..87c817b3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, Optional +from typing_extensions import Literal + + +class TransactionLineItem(StripeObject): + OBJECT_NAME: ClassVar[Literal["tax.transaction_line_item"]] = ( + "tax.transaction_line_item" + ) + + class Reversal(StripeObject): + original_line_item: str + """ + The `id` of the line item to reverse in the original transaction. + """ + + amount: int + """ + The line item amount in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). If `tax_behavior=inclusive`, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. + """ + amount_tax: int + """ + The amount of tax calculated for this line item, in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["tax.transaction_line_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + product: Optional[str] + """ + The ID of an existing [Product](https://stripe.com/docs/api/products/object). + """ + quantity: int + """ + The number of units of the item being purchased. For reversals, this is the quantity reversed. + """ + reference: str + """ + A custom identifier for this line item in the transaction. + """ + reversal: Optional[Reversal] + """ + If `type=reversal`, contains information about what was reversed. + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Specifies whether the `amount` includes taxes. If `tax_behavior=inclusive`, then the amount includes taxes. + """ + tax_code: str + """ + The [tax code](https://stripe.com/docs/tax/tax-categories) ID used for this resource. + """ + type: Literal["reversal", "transaction"] + """ + If `reversal`, this line item reverses an earlier transaction. + """ + _inner_class_types = {"reversal": Reversal} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item_service.py new file mode 100644 index 00000000..2393374b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.tax._transaction_line_item_list_params import ( + TransactionLineItemListParams, + ) + from stripe.tax._transaction_line_item import TransactionLineItem + + +class TransactionLineItemService(StripeService): + def list( + self, + transaction: str, + params: Optional["TransactionLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TransactionLineItem]": + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + "ListObject[TransactionLineItem]", + self._request( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + transaction: str, + params: Optional["TransactionLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TransactionLineItem]": + """ + Retrieves the line items of a committed standalone transaction as a collection. + """ + return cast( + "ListObject[TransactionLineItem]", + await self._request_async( + "get", + "/v1/tax/transactions/{transaction}/line_items".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_service.py new file mode 100644 index 00000000..83397d61 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/tax/_transaction_service.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.tax._transaction_create_from_calculation_params import ( + TransactionCreateFromCalculationParams, + ) + from stripe.params.tax._transaction_create_reversal_params import ( + TransactionCreateReversalParams, + ) + from stripe.params.tax._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + from stripe.tax._transaction import Transaction + from stripe.tax._transaction_line_item_service import ( + TransactionLineItemService, + ) + +_subservices = { + "line_items": [ + "stripe.tax._transaction_line_item_service", + "TransactionLineItemService", + ], +} + + +class TransactionService(StripeService): + line_items: "TransactionLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def retrieve( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves a Tax Transaction object. + """ + return cast( + "Transaction", + self._request( + "get", + "/v1/tax/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves a Tax Transaction object. + """ + return cast( + "Transaction", + await self._request_async( + "get", + "/v1/tax/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create_from_calculation( + self, + params: "TransactionCreateFromCalculationParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Creates a Tax Transaction from a calculation, if that calculation hasn't expired. Calculations expire after 90 days. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/tax/transactions/create_from_calculation", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_from_calculation_async( + self, + params: "TransactionCreateFromCalculationParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Creates a Tax Transaction from a calculation, if that calculation hasn't expired. Calculations expire after 90 days. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/tax/transactions/create_from_calculation", + base_address="api", + params=params, + options=options, + ), + ) + + def create_reversal( + self, + params: "TransactionCreateReversalParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Partially or fully reverses a previously created Transaction. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/tax/transactions/create_reversal", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_reversal_async( + self, + params: "TransactionCreateReversalParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Partially or fully reverses a previously created Transaction. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/tax/transactions/create_reversal", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__init__.py new file mode 100644 index 00000000..67fe3eb7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__init__.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.terminal._configuration import Configuration as Configuration + from stripe.terminal._configuration_service import ( + ConfigurationService as ConfigurationService, + ) + from stripe.terminal._connection_token import ( + ConnectionToken as ConnectionToken, + ) + from stripe.terminal._connection_token_service import ( + ConnectionTokenService as ConnectionTokenService, + ) + from stripe.terminal._location import Location as Location + from stripe.terminal._location_service import ( + LocationService as LocationService, + ) + from stripe.terminal._reader import Reader as Reader + from stripe.terminal._reader_service import ReaderService as ReaderService + +# name -> (import_target, is_submodule) +_import_map = { + "Configuration": ("stripe.terminal._configuration", False), + "ConfigurationService": ("stripe.terminal._configuration_service", False), + "ConnectionToken": ("stripe.terminal._connection_token", False), + "ConnectionTokenService": ( + "stripe.terminal._connection_token_service", + False, + ), + "Location": ("stripe.terminal._location", False), + "LocationService": ("stripe.terminal._location_service", False), + "Reader": ("stripe.terminal._reader", False), + "ReaderService": ("stripe.terminal._reader_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47ea61eca425a0b13a37614ec9c972d4c7f20734 GIT binary patch literal 1724 zcma)5NpBoQ6s}&U$FtkB5VOR1EJTAc9aaemu!yktllysDm-oy5j@qj~+krRvqIdfzXF!UO_| z{+V`{GYI|8j8w8?F!~9=J>(!q@Q^QTox2)5+OzG5moCVQ%%F*6)1 zp5|xGEXS%h;pfa8#~Cm07t8|3npgBoW{KmhSN1Drh2sft(w{P?0Oy>%Q*eq-$tgP( zXVRJaUNfs$ie#ty9WrY@`04dO*@1N-F1UU-B-HXlXVb&Xas9?ui`K&B#f9ZBSH575 zg)sQm?Q9a8x?up0>QjzYOt#!MTUi2sfZHtVdbojEYW*44QL=U=Y^NKRQhXFvuVLH4 zgq2TF8WL~47E$7Maf@Q&yMgVstoHE(F6rW}H~v4xijp(4)Ynf+9d}_-)&|Sc&&)c$ z=eg&yy>YWAS4^YF_h>w~2jMrub~t}Z>}b746nI{uG6kcGh{hBfQo?4K znuxLkahZcN2#BV%L3?BWZQ&-`mTsV%f-bD+N}RLO`Lw%)RgE(pOl?X@tS#f-A|WA( zi=Tn*u5D7xZC#G#!1i&hQky__oOdHD+FVOUJXVu$#JZgUImE_#=wqW3Y#X2BXoH4b z<8nx`ci~bPZn#0mxMa6s4jf|(2U~{ct{L4PT@QozTJOATL@vb_x{zRZaAYJ8W2B>L zSe6^O)UsOL9<*YOk8W9{0ma{hfAlq|T{IMP+2*5W>u36)`Tm3a%$=pXS02@7fBf)a z?X5dYzm;AdG+w=1_+x5%P_7Tk)sZ4qi$f$8ivRwtq4G!@7cK$O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21a0541010099a85d32b5257d27268869ab20585 GIT binary patch literal 18688 zcmd^H32`|vx#%;u0jocGX z0N(>Cnaa_yEr$H@@4x@s{r`V=|NZxP_;M%|Q1H>e)0RG(RFr?FMET=4k;N8=qFhom zMRR17tRvxY5bn%4v#x|o;I53Cbtl{cS2LchH{lhyJLAjx6MlhvGJ$MOqDJ7}OfVZt zgaq!(gtN7Y+H52d5ov#>E?b|d&qfo`Y(t_U+n8v~HYJ)wULez)ZAr9bTNAC>wnUpl zVQst@veabSvmJ>J!4u4MX1fwy0uN=nv#~@>;NeV9c0*!=z-u!bv%QI4fk!fZ+5SYo zLvbn(C|cbI6s?{)wE9*k&s^rW-~0~A@2ehZnZ%~)XuRQDl!!Zw#zUN?iYzsjVF!*s z^a#`QQ+%8uqv0^iu;NO3?U5%7shma`_orD#18d;nv|cR*A{C|7%IAV7iacFl z6}HAl3)(6bJB^0%OiI_2Synuq*OF&aJe|rFjT$|bOBd7USTe1}-G=WFF+G;zhDy~L zzGH=AI-g5r40Sw3>HHbSGx?MjcNyM?(?!OS<#{w$NR3Y#p_A`Aek6J5!6S#>@zCf4 z5LvxHogtlD59My7e}dx;0Z04oyioA4T_0xHM-%Wp3utoYVnCC-7>n{lG={P|-cy z%y-o#i%R$f)dQ;6LJbJ24^+Q}S|g|dP-`sIpr8gp4OyrmK@EdiYoUe(H3Dj#g<319 z^`J&A)Cj9%epCJik{{`SnQk=G9<9luWiwIz3ae*ct;NLaSk!!`)ucp`+g8by!^Eq# zn-tS-;OVIF)R-l75(QEO&2*QU4w>n0GaWY5F*99jrhCkE#7u7x=>}~hYt(v)ruAvc zgsSy_K)s3-eG*Mp_Wxhn0knXNqO1HzxYua|F zv>WTz#CSmq?6PphZppRV!qo$=7PB2jEbXwz!n5HPJa=1oHd=W0TFTjH;px2v&wdL} zAM>*St6@PFVqsRxBHBG4^CkMH?~UJQglvxH-1h@9d=A8HR6Uj#PCUk0fis=uihAsH z{%mXlGsF}KG5vIYDx<~5SZv&MluV0Fe?M~4Ipk-BKaHiv z@>4}oVlf|^(pfBB9E|CV#fqm{?A<5JWt7Vn59u*2KR%U(EF$^%!0BSKpzj?X23a4{ z#hfxUp3e@KMHrsQFjgG47qXS6gEMJ%HZCPQ*HmW5vlf?c)Eqnb_9KT*CPxn(J!12} zrtef1d(r=`{+GF!syV3D=%2YYCynrFS6sbmckV+6#|nAuGT+oS^Zu94 zl)879nnvb)BMVNaKgj!$#|Hp@d^XPOM}&=eH>w%sF{-hTfT(*DFstOmy#=)0#1XHs z4FX$TL{hW58<-uyAv%CF?z-7{$lAGvj!jHt(m7^$S&rf(Z8YxTJyh2Q0vicX+ZyUv zKA+*#(W)i(nnmy-WKuPH9RRFc*E-Yt!LB)9x5d8Ok+r(;tM_3l4>KwC=jA@!W>?`6 z2HA@5Oy{)xS;L1el!Qy*MgS2XFA97#?ygeGaHVs_Rn-Yvi{m>`|3UogEdbD|zVSjx zsI%Zv8e1;ZT2vbW$DOFQ>hNr_t0v>q6C>NUy;Z*nSXl3dBoE`?(rNZq3+DxaK8s&* z**lGhfgFf|oXk~;&Qw8lfvQ@lZb5Z}>akEgg6aj;XQ6rp)emaGLiGu14X8m2RmOrL zP{S6gj0I~!jaaBM7L<#PWqD;R7zJ;Gg;&Ocji5GJs4^C82DQaPm9bzesBIQ%M9A9? zYKMhdC#apEc3G(Pg4zvg%tDO{Y7eLzEYt=;-3V&0h1w{neW3PRs7->p3Df}#wOLT( zpl-HMTLg6rsDlB#WmJ+nvs5w9zZxD%UMzjS%GKVrE=zPI93telJ)~;D7NR0Qm0q zjh7F<6n*ibQv1+ca0s3|6oD6S+i?WZAadTW#oO0~ z7Kc)6Yztzf8Tl!@7Dv~I7N;lH))t4rcnl(6uxoLAeQ0rRa*bMm@ezppVY?RODSqq2$p2y2;`F-E;^>oWj6jI-35bltH)|XV8!yu+?Vab0L}JhR4eL5yc0@&UURXV--mkL1^= z1u;%To@(YPTJO4 zat8g8i-SuFzLq-v|KbZBO1SCb`16m?`P$|~jsM561!r?tU_MxPamRuS*y{pw1H%qp zs2)@=;XaA`2@goThVY=oLxhJVUQ2jH;&p`AOFT+=gTxyNZ<2U3;VlwxCA>}I?Sywo zyp!-QiFXqolXwr|8zjDw@Lr{%c|O`y`Fmq4s3l*U+@bp@I``^co5o7@X6-G`d8^LI z9%DQ`k!DQIKHldhgx1k3Vh6!2uug#p_}#gGq!i8C(^5%`(Twe zbPU-_GPouJsK;f?~QLwB6aSG({q>Vx|)@>LHu>sHjre-#h> z5!zPY1q3_fJ#p)`4O9CsoJX`e~k?LAduAz+aI3`4wS9gy&>*d|?jh>Ywc&DRu6d^X-}M=$-A`RqEJ1=i5!UPu^E*+A`c;naUeUR1askqLmwm;VK_$ zh8p}YCIBue#Y&#$IIle6s_<11%?WyWeyLCug+>^C&O2VN9Q$8IKuDhx3NAYB64$-x zMwz@btH)BY96M{jU1nY`lNYdvm$&12LxqWpR~-C{NT7?=60J6g`y|Emc#^aCPBC2P z^~+#&if67k5x-;96T40_pd8^CJh(#z_j0bmKHMa=8=U%Xa6hdqg_TIde6W2!SbHtl zT?%&3N1Em%(MzEZhF++hZ|+?1Dxuh-qK3kYZf_*8pm_ZOF?Lqi_5#XVq*eJl6vvO; zzR%+N$NSJmA97xD{hZsaEZciT`FY=OxXwD@Exv@xg%$Z<6ZU0*(XtI2t8AD|>C?G! z{x`(>*70+c)HM;)4@ zSn1s79al}>k2*f?ddgL-bZ^nwz01#+G0k<}b>8{1TE367Y;BEm`+bI~~E3Pb-MR+d4nd`QgrwcfY*lGvlvp-a8xK_nhn1+NgaLv|tphx&NbN z>03y;OIUwjaq_5fnwH& zh>c|?R(OTmRG6?-7%o@HUqz9&TB*NKGcDc^aI3y|D~DR{lW?5Qa({xubO}=l*+h4U zSfXyt{iB8OL+!B)wrs&3?9=BcH2hw&!x)g;b}Ruko})zo&aac8M<=c+@vX%~iY zQvh?UIgT-yBLQ=I?H_i$mlyiB8J?|`1`QlTa zMfIMdzf99yMXFnT&O6KV^b^#ft3KyYPC5S>$9bm+I`>xQV!Sqm*q7$w3|_p7gRxWjVysV(d&LYbW^E&o z*2{jGlY)l-B-TMkIL~wbIi$sM=!#2D=3gWRMCUqI13HBzs9pxFDph!{YJ-GmFH++_ z4p!m3;W_GhOLe{2kVDA&i$|Y7df}M#-1U8E_WHnco~3{iX`AW)hL!RP>YZ9ML;yDmCMZP-FX_Xlpsg=Rc^Qx_9P|A7q{?FVA&l|8^X?FX#W zNP2n6DBlBJ}!cNj2Q;0AXjM{E^B4>osQLYmbu>{&38a-(R)@ZA8xu9 z?k$CT=feHheEqY&eqn+Im*U@K#zCC}j!!uH)yv)iN8HDM4@L3cC-A2P{*1t%6Zisw zzaa3J0Hg6uRhyfJH<`q%hsh-GASMb{OV~{U z-zR_#Dr684H>*BEv_1m;1ZZPHuAFE`t_T166Dn=K-UzzfKAhh>)8RCjO&yR-OO3RdBCP%P*^ckm*1ZSl3#0K&!hnDjBXJ3vhIz4TxW zWr0mR@-~M%@Ej8Ky>Qs6GYY=2v5609 zJy3Q?YZ3W;qaW=UnbN>pB*jZHPMSZp5HpBHkS#ZhS`R}QV^uAWfIPLPnAMl zb86Row0-8`QZzoN#_4st&851&Ikiv7u#zEAe{tvYLvw1&>+Z;cGvp3nqL}TvyVSgQ z!G+Z8{+2h~_+E4=o;s0_vrH3PBWD<8);BJ==(}gr?7*Q?&tZ`gWrJ##4QwH%c*65; zROE37=kX?ni@rNH%x=85)N!9kiHAU?hw2H07gQv%6$4B>*3vcGy|>h|Zw0%|zX8s+ znXPkfoU{ZW(lR?zqI7&y!Eup~<6TmBJt{HV1}*T)%5Ak6wrWx5ZW4_)Qfl6_;6mzk zfAr$9lE3#2Hxgz$09)u6O5Y(n*{H5THgv3icGJO9?9go*+O+DOJ>he=h&t$->Ns4A z9a(T8C0Y*OrV_w#*g`EwoKy#Wzts~>O8dY({-SO3t$p*&Jth)qxKZbC^OV#k>4wPp zjK&9yZg~cR4VTJKlO$7xG#1(N$4NLXql~UHm)JO<_i61+aA1njQf6Y6A1%SzBYw3+ zzCRr;XN%Zf9?i%lU8gl?W#P0@X*8C39=V={He^l2gTW zh6_JlLv#-g)^P44XO|Eta;~5dU(Nz`k|D{SEV7)A-zw4NBqXMdsI6!^*_JPx?=WkV z=SD-7H{k8BbemSkSuFkTi9B6eFwG}h=*eAc ztFaP%n9ox5DCa=?ym-^MAC=%W{CjyP=1=@7`dNSlm&4(B)1x>JI<71CT~~HqS2kZ) z?zyfET~`jgrtE!9+4pzKzSorfC1wBDU6Jc*&zqQ@Ja2kdf~7#Z#^IS)TW5w#>gIX1 ZWv07?IYw=ssV%7kW%`?b;u0g}zX8%I8%_WK literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_configuration_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83f59fd0858b22638cc5b27f2ee0cd81f115b6d2 GIT binary patch literal 6245 zcmd@YU2hv%^^Rve9*;j_J82Rpv`yRXF5VD(lWbeMZFkuw)fRR)t+pV95e%+pl65;{ zd+$uLn{1HKwn9Q$37#mAXn7%O;Q@&!_yI_~G}?!?X14;w3%nV*1(YYwxp&6)q;}#^ z0hJiZ$LG#D=ia&J``+It5-Nem{`*Abmy?A283+Co_K?=E0J%eSq6;RmgrXoI9x_9g zSQHs9nvxYRhAp`$v$14GETyOj#8Bu9z#BHBmReL9O*UgzyclPA#7tPpVv^yCIb@}Z zDTYVQw3R7l7_OSb)<|)L;W6`&HCh~Hc-$Pb#*5qEKJ zUvZEV+{879R_ewzgRWJ|2E2&brE0~gY#3Ta&xKs&O5Lf{swLBv$|c)DiLZX+>LqRA z@}-5>zr6Gsyinh$*v^&fH;giplW!UCtQzow$=UEGyHKkxS5{VO31?cMM#(X*mT1X( zoVaM1Mi+4`Ac@Pg(xoi0>0!WRhDCH`S<$1n!OjD5s=z7l;*9m2GY*`QfjASusqErR_MCGF zIHLn`rhrrRIC0R4)_CqbYYX+ z@M6h-hyQv=7jO7^p^M-|{K2Mh*PG>@z=eQL?85tj@prcbnt`QVu~e^YiEjLQ z$u_i-u2aLd=`c{}2!Jh#%E+Z?l!v)1FW0D5awzI}!K_>_)YqN2Yt{Mu>|DXF zIL1sJ7)mRKU9ef+>g-MnY)7+sLd)0J={T&u5zH5!qvW}sjsSyw1;F>n!wgA{G~$zu zcmpThl94@EHB~|8i2o$e|8xqGx|y9p-wtuV)(x5r#1$xxJuFGl?RyzZft1Lq>BixnhVsc@0r`Gm zbLa`ehCb8F08ew+Ors{zmFO1`^icK^eHJM_LL=#`(+iFhd+MAseFx^+GdvEU{=LG3 z=J2DF0G_&dIMt2^-rQj{RE>8BDvwgV2Gyg7mHLK+yvjPrK2?Mh*U%_^s>ta7RXEI| z*RXJyL#&6Q`-elED|63E(arK9YJIOtaRAlt9}00;Z716~?|d^5tlug_eQiH@c*Jq* zB7i{~NL|_#HbeKqJ=#He=cTsKLk)nY6@A`>L(x=ixu@UTU47wc_z0Grb|&{|3OjXv zE5sT-dKBcgM0y;>+g+fI`+|Os7k3H2VIz3T^NTu?J_2SND>_v26l<@ZYqwXBsAd|6 zk9$2-jP+15_E1smp`uZh7lYk;y#=$iz760YJ=AX9LPsR;(-B4J7hw_FRvtZz!>(q? z)6#SJ`W%3uW>nn1=gLO|uF|a^&hTrLUIf5f9$!(NmS?xB&|78fYXbUeN-*4Mp`(5< zH6wf^OshYO&IlB}@jvXIos`Va_yr%XK<> zNC;22%VECgN}oZkEYX*Ht0m5NzGvd>X89CVwAGjeZGc%Y~Mfazk)5 z)T$-R&@@-oG^?hsnuy0W?VZ(<=}|Vuh2T7bR}d^9xCCH} zu#~`34^87+1c%{gUkwp*n=}=2_Cg~+_qXUsSpDPJL^BNka8gTW?`L1!PMvB-aIBEb z#Qllqx6{*2B7N(T~ph@Z!u4P9(0H{p)*TZg>H z|NUDAiuK8j`@~hJVzQ&KD?96TxYppV&Mr>U{EcS3=NMHR?n7;g_e1WmFU(2?zt*7& zQpS9WcjKZ3?yu%OD!<{%`){aUXz^d#}*;vVr?r4X_IjCq9SC@HXI}=;6a_(e yBokrw0eR*R$UX& literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..028a708c125d021eb0baa4717ac1430285d12dfa GIT binary patch literal 2311 zcmb_e+iw(A7(a8}OLyBXwB-&bhD0{K45C87f}y1XRtte*;utfT&N;M8=dzqLTiMEk z5i~LSfHAQ?@NNj+{s`ZE>4pcIc|qfgye%%M>671?v)fjRJ~_#L^WDyO&iQ?p*`JEV zJc5V+v9t1H4xwL#(0R-@(;~nuA%ckFqd>70MewSx2AZt}x~&I>ZKOKQH-n6w39@!J z$k{ms(Ht|uSNHQlm))fx6`e-JxQU2K6=LpyxOX+Vi(RN^%GrlPC@V?-IHPV%-5H;r zJb(5A4%{HGW8QMj%Vhza=bXh0)oBCal#A6re zW_#BLd$C?97n7c+F17eW9>a4Iuj_GoTU_C|#wo!wbsW!8d@*K~D#g>31r@*%UpzI5 z;|O~aBf+{D(m*I1$)_PNP#=;)@NBI@=rR1xYd)nh4&2b4r2!4&cMr_Pag`slES`oQ z@uI*Yk;g5_OS*@3SuC;q$a6&!csY%`xT9l-6`ce*vB*%;b#CnSiScP?>g1afNw%{v zF{7C)kjTX3)MFIh)ijArRC8j2rp7`~Nnw;E3$HHtwQL|uC|R!xK1}Z~MTmp$io7=W`K@hyBU| zz`l+RH~}{JGK+$C7Kd<^Mb|3e70JN`a(R?MGwZ`PR ztpyq`Sbk;3s@CJVD133`g+msHt{)ct4pqq8mA77S&N^zcqDHFq#FRH(92j3Kx3oh> zq<%k~iXR5@0eakxN_{JZJu8Kt`-Odt!oHQ#z)ETBQt|WR7d(Wc`26qKz6Ad^V>-wW^t%-Hv#h`&^qw2ut~trz4G^jY>>?LDPzus+y4 zO&RMK+yIcNPQv=1N|@vFdg!t3!ck18cBa@a;FE%cN%}1Aem02G`jS|C3dnEhuMKE! z>A$~au(4%uGn!k60L`u4fBqBFrVa?Na#3#|4jom#Q;y`n&mC2!%H2uUaY8qsj+5ja zCx}SR7kt5SuGUG4-0{ZF6OGyi|Hr1k$hmu>~`$}Wm zXj22}=iJWU4S2V-j=j0J!~KWnBN0j7L7aRFJ|g?t6Wfug6(3&5tyZ9a<)@d437MF2 zy$bCp5foU-Zts<9hhB?m$OV)syb?C}SAmkl?eKC+kF1URP2Jhv-`OzECBz5BZfmfw zW=CbJPq1Myh+)nT0cmQAqC7E?GNwF0gAFwJ0F5@#=r3C73BYVV&cCeWmj?!yhmJP} LPCP*%r7`~oX?bH8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_connection_token_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..010332af3121c6628522a0903a390232d6e9e61b GIT binary patch literal 1971 zcmbVM-ESL35Z}Eo+ZQ`^oGNJ(rCeJD$xZDe1*H!lkdjm_it1J*4`2yS7vCnn=Dxan zHgSm%q7f1j5^scOc&Y+_2`|kP)=5=CywEozCxG(A?A@892_J%en4Q^~*`4{#%zjrW zs0bGOb;ABIgV0Z07%Vwu`uBj@K^C&GgIrw4nDc@oxME#&rMeW$q9eOXUBQSbv;=y| z$++2iHrB~b&QWSP*m z-5_Nl%H9b=+xJW-k{Tupxyi~qcW)RAw{9#fy;-{n2g7fX`z^x4#FD|u5lRmxZ^`z2laHbHNfVX$x-&-^jaZ)pvzNxs1xn;WJfB*NU$-5;(Qc z*Gvttv^89mcR^{u2x_CP zQQu8(x~c`#-?YIhY*N3q-qbpNi)swIfzYaU$4lf@vjL9QRn4?4&GaC6sEB>)3+oiLrnBXbnCaWZa$0|?_(4LXsM z!1G}0uiLMhsEZIKdj-fxXupVxXS?~SZoc^W?N4uai(}p5OWmnU-SMgJxfgmvs4&q- zN@2J!=Zb0%<#K8t{7$#$Lpbce2V@E1|J|Ywk)?b95Pl)-h@Z$ZI%?VL=(Fs%;`_Lq zp*;AwsC0yLB~C^;ISZsVDAMqtNQTKeUW1Na|}o zBeMEK@!aF{b9=?>JsBiWl_nlfT-h6$>2Yl@i`2<}j&oQ3o6|mbN&?|A)XKxrSkk&x zBiRRiO8JmPO4tct5RzQtxf)4M46+##kHJ_ns&LEk!8PgF8P9#1bE!7@R;z>QuAUx~ zwBE=6-;1g9-+LvU7NdFzf;mF^F#B3ko!4m@6#PqO6(BtkV|<_>Jo^+~e1c|v6pK%! ZxdTCv6*!gW@xC&R)i2*YK(NKv{Q)?l5i|e* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_location.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_location.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c37efb510a8bc28f00cf3dc8d8ed25ca4869720b GIT binary patch literal 10338 zcmdTqYi}D@b~BveQzXTQMAEb#V_T9%TNdrujuTr>DnIhFEgOlQwhV#+&AF1t9+JwP zksN7dGEi3R5uw2@Vg=eT>E!YRDQ zmH7hCBks{WWuYK2T+qa_x8P;CsQJqNf}i1DEl>^?f(-X*p>ju|gW-NHT#ghX43BC%$~y}?dCtSV&MBSW<&+rVmDn~|BoXYd-~M)3 z-v>TR0)<_3@m%6xv5@1riNsunAT*`XIJs-eykSyggg zGjI}_-Yrs7Jf)TlGjM*|P^*=qW{Rbv4&~}Bp<1=5RODH#%1 zw&A>#tinx-%J%Py51@p4hT6~4H2h3jC`2ZXd{@QqVxp}vk-GGZ{+m^E%Y;iSbm)&G`LoL2Smd$SWma`jn z^V+h_S#l%W6{a1q1AAOtJzH|^b#e6qSJK{x5!XKKbMf?T!87XO>38wuUH$BL@km?n z9B}dM0BZ@64&{YE7YaM)4(1M-0mruIzaNs|H!e8@iIQnbbW$;NsVGg+>ddrSnUboL zP*GF})kj0D#oI&!H>gNcGpa(4O7Fd<5n@Q?Vx>4m%Fz1#;VXtQtsl+jb>=`vOVx5- zsh0FSIJL40E-yccP4b%U!}J{McRudak2*DG$N3X)oj!R{o)|xOdY${RT?e=NAt;~Q z{SbkOC@|txc-ypE6i*w4IVErmEgrFr$J<8nA!W{=3#`Q)>5Yyn3P?`}cdi<9roU93 zsTg$5^lEB_9I!qwm>ttq2sN5qsw%|v0&0+n`#v)u%avl8$g&xd<#JV-(GU;I@&_|T z&8ndh7}69#q-Liq7b}%2G=>16%kq7073#RP$^4aSndGM`ALdUH{hCpo&c9JLh_>%U zwR#PkfLze194{dRddu)X2&1j7v7%P3Gz!{6$40N;-MVN*NP?p?O#wjU<&|71hD zH(D%+@~Zmu9ie$x-{u<``6X{|WN{Dm2Jm#i)m8%fZwM^(&#rp^*@EyN5! zqFRJZwrKjQECn{b)8GY&>6>P0Bu(OseUun8v{JI;JCHaIbG{DvTP*;%#~IB!gc4+GKmJ zN~OseYFr^yQeb_mrjJN!rKHU$7{sn$QA<}OTiVj3N;Cz!qy$3S2Qw;#Xr@*qQUo5` zZ;wbiArf>ay?2g9Hp%gTdMmzRP#gWmLCy-8ttnFsQ>KU!;XY4KKp`j4DAGD*j0|c? z#@P`#90aWs#thZ&drYCE>5N@RiAfS=j=@)AXQ27crg~e1p97EnB7l#$Ct)tuRS&1? z;m(zCe=Xc!kEQCdE4E)i%6@S7>TZW{jpGk^9Msrhuf6k6Xi{Mk@pW$ypIp@E zDkb_RGQI_1o!r8fm@J<8mUD2E{~8;e0`M#DKS7K!Ta1bBmBij!VsE<`lOrI;Wb{AQ z%d#PYXxH>GbaZp%W&SVtBcZ!pq@d(1q7)7rT`kQi-4i!TYB9ggSyLBU-PYC>Z1Mw z@aw1#A90N+m+k#Y@29;#?ti%VuS%cqIl2@*c1!r8Gr3;vGobe0SmB{(%j@C9?s0Sc zeGh#b&FqK@*1xyHC)xZS*N>JI@}p6uJTGVpZXXLvfFCCPVShL*cSwX)n@yHQPG z-Maub*ihVMEw-b}ItD!2R`=i70S?H#-P28~Hv27j zoX~p}HF(2s9{O?WZ}JNsmg^pFhF7?5g_Ik^s|MG!c=O^|sU2qF3I-!1{!C#CE@v_C zSsOh4;WXT2LlSE>V@bUN!6Px-1ZzAys!gFGZy@gBRzf$!SWf za6fGTN(X>?U$6o+i_LH#&}TG5$1DTJx1zI%BhE*hX^vuXAMQCS3G>h3A>sqI_&_}z zhrILq=Wd_-UVd?T5 zoF5GXkDhpjoGof_jzfdS5<6zYX`bqU>N-(IrSZy~n+%tG(lo8k!r@<$uB)0RT_%!7 zCJkw(Qo2&COhKEbC!nq5;5FQJ)Dn6LfRkSzM*`X~{apYXaswaS3BcQrD^s-ymrxT< z0sqFV`trm4QuOF1Nj07&pPE!-YNVk<=wWRyB{E8BsR~o=N<3Z3iCwY}y@cfkj zQ~m~={+@QagbkPhr0ce8+190)g9v$c7O$X(W zuA}78wSB}rj&fb;JG7P@SbP`2tw22xTM1-pfz0QDY`rsmtJ8`QZlyypFr~vJ+KLd* zD+)-acy}^oi3Ys2k9lhk{R8NF0u~;z7j9=xe+c9a3ynIfvXv#>wp^>?CNBCQv}fwl zzV2vhB|1=x4lGB9Rsusyfg!f~hQI}P+o@CUF#i*NNc_w{%)`;_Fmy##l+5u8VWhfs=c-wazfT{as#++beCQe!%W7;YM!L4dd1^g9S{Aov);_W+m)S*=tE zg_8`v!(;lQZ@4$N&Q5sY)(d}nR>b@A$6?VMXoR_A6Z}VK?qn8sFYP>B%f48PA6XX9 zJrOhB@STw-9DJS}>H%DP!olas7~%^IZ;Wx#?q#v74(}YtYKh&;;_iBK`{LPJGPf+| z>b--Xl|FrcS=<9p88DEKgZGiCMdfa}78zI;2OMfLwJdf!g^cu>aQB9*cH556lAlJF z#X*N7829_bq!t3L#iRrf;eLa4qv< zLx2+N8@|Y%WA%;9x4r~iacfpka<3Sc2$aXL*z8gkRx$dFRpi~PhklS zLC<&Iss;PM@Egp1(!Fn_*+%7sq(D zCjCxBfD)4teC|vB1GR#zbzw?6)uY zW$Q*5|4&FRPOETAw*JkC;(^HQbGX>aznuvj4reAECYFU;H>cL|tJhuA-WrcKX1Bv* zePz2nI^@d|>y9zBW}^U`sP zK_(v>q@v@ivlS7TTTfsY&NGPhgf!ZG$!|U!+v1bmZ%of_WZ$FMjk<885ql9^kHn;F zH^G~NZ!kGKJ+m9(;ltej%yF9W+ir$wmlbGoh&3N=*8*eEKfLL`LjMdZAe?hL9?}{D z&+}jVIQ|6xh>s&fUvgtLZtP!#*w^6DeP8<+;Jg?3 pR{2TD@bbR8xNUJyO&qL?nZ;~P9H@)w#ZXP$<bO8+}xr-Ohz4q$- zE6}05Zn)kX3s-3!hjVYzcbXJBIG+nW#n+v>hLfCQRP*R%jcL}7{`1tNJ^h7<9_Q^) zk4C+3QrIzF=`+uF8+z~ja>P*&4j#Z%*l2$wpynv43OcFAQY1z6aXm&wU8He6J^^HU z0x*eVNnKu)_0&z!E*@1o50opT5%QwO5V1EmsD;<<;I_ol zpe#S>1Qy3o!@k6**JL&uf<`?KAo`FNJ)!LZxJ5j$g5cAIb#gWIk*E*UA!aR4moef0_rQIl-!*BNzPHUcB82w)@5 zB&3pSEbv!fT6CDDc?^ZM5%=RRH5d6zT_zXDaOc~0W!bT4WyyZGa-O=^Jf~5)=y=qe zKI=Hw411|^R;yp5wq9AG_DaPx7AlQZZ`rX=m1kxvuHn(?1`udV)UCKY0Cmq)i%wE= zgP>Gytg>-fc&!rxLQ^OQGJ)7k+<5>$BKHd8nSt^D{_{?w=Wxy}6C z9}ge@c>E8CXIml}ez8qr!-bYajy$n7c6e+2@zxN@PPU1h&9xKhywW1+l+uP7_nOWP z=xl!o;58!r7tQAe(Ub3iasE7ZOZ;&nLAvJjHS#n06Y;uGlGzw+i(3m97en`BlL)?o z0L3&PsXZ5|y{5UVcAcq6f!bw90d(}to`9C03FI7*u00l6>P{^LqqE5U0|0*||LRdk zVf53&Q=5gSK9531o(6@Cx+E3G&vX}gVX{r(GQB;hy0nYi-X6kse1eUF^0cl|iZ zTL*A#aKwHZk|Emhq_{S|TRYLnMPMD|C5OJam#`=MN&Qjwk`pLHv>!Hw zppTg6+0!`E#}jgqG(%rFGDzCNI6A^Zz2V@3f0#G05^gsK;E^-`4?1ZqD9-vAzq+uh zy43R^YpC8bRaZ0<>POXCSgtey$U!KkwLfZcxr<=D~3*W^}1o2 z>H<|wy6CA*yS}X1OTg3FMUYJ64F|GLAI%SRFsaFF%e^Tm=*L=OkaLaxKRMS7S|WEY z%mn>JJlMH1fh-55ncmT#qP!oLW)3d&{T(XQ+8M*V}Wf9x$vj7fS zSnBb0VLf&y(Wgw5wx8>mE#wX;X3=>}xD%moM0*I!MYqSqPs92=wr!90FBZG?z($N$ zf$VW$*$~+=Xy*Kp@572T=3<={S1t~(ZQcP|!;CZ%5Y%2ZO9nvgTPTkeTlJFS4tfq?sHU#jy5 zjlD@B=>HvXMQ*YCUIOvy(RK?AVgm&-&tC2?kxX#%K_R?%)JN%beIgQ2*C%$1=wUv= zz5%n9V)OH*A-K`jY^V)tHD9UKEJtseh-YfGcbb|Rj)-6+3~%PaP3bsd(+DaEP9b;> z!Al6fj^G@E3jj6*~b+5eYkKS^d! z@DL7}c5U#{En}F7im9Pyf727Gq zrb5jgkm)`$1;&OZHeZ_bN5kM&3;xjy3B&a1XQIKTXPEpl?@Qil1Hx@!>ioTDIOwU- zcRgym@F?pte8=)fB4(b^f;T88)2Cu}o9&4 zw}7%6KDOnTg81|@`yLG78>0IvfR-o-!UKs2Gxx}oejA+(U+Ui?TFcr1 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2c02d2028e45dbc26d716eb0709feda41a8e39f GIT binary patch literal 53678 zcmeHw3v^q@b>IW>AwU8oNP-{n3-KpW5=lwa|4&h0%c2!a&Ihp#Lwt`CEC6H%pe!s2kA~f`ns{xfmWDksf4nYK7q1W1)90#KLp%@)#2Z76@upByygAeyZwa-; z*M!#4_tml1cw49~-X3a?cZ53PouN*fq;!%O06%Z6D;^95DV#61Hr^fTrs0}cPrNtO zOT)FXzIcDApN9Rhb@BC~^)y@;8;EZRZJ^=$*v9y#&?Xvghz-VvLPInhhz-X#hk#~K zR%2{Sd~0Yc4L8L`;@d*oXt+7HJ-#EfgN9pTJL9`TyJ&b#YqDUd!&Ux>#$6PATy3=^H8&==bnxH9Xrp z(D!|O7_em<$A}V1DUtIrW%SI+N0sE%44F{iMc{}MQ&NTTwMVZ^M-no=I2Ki6GJsY+ z98IPkIsddWk%FfNd@4-mJ)0uYX+;BT5{f&gBvU7p*t9~Dh|*)zvI$BR*}z0Bl1zr< zO6ua29KIYO(MTedtxiS~(NuI!2}k7tSJpj-K<|!_tm8;@B9(O@I$8H4)2ZlGA`;6w zCL;Jeby*>?sfaw_$W}faO(_IlotvFjvaZJx(~*fwS>L($ojDpFJ8^XE)XDMVfR}6R zVuV~k+W5{yX5&gCbuy8Hs}OOTqK2@KDw8t_Bu@2NB{egxLAE@qL}Z1GMG_NAY;*#V zIujw0I97ZOe>WA20Vz)=re{(~?PbvLk|V&%D}+f*MoHX&qy|&Z^C8&m`LVRk^;kcH zMGEFao}QAUle1bZ$L)CXi6er<0Y)VFc1?5S&PizC07{Wq>7r zQ~_R7F6$L(XYr693ml0ir(+Qv{ciq#W@187WJ>ul)(T?#aHw<9xH2`v+Q$US{qWR8 z1lx5&l{dV*`NQ%pA1Y%-3fW{SRPh)n<&a&j2ssp|;*u*+#HpB9%JzK_rV79T3c#tj zU$wJ5LLQ|`@o*>?LU|;JamkfJYPS|&%^^KJ#wAzrm}(wVtyIe10(hVBwnlsF|B9CD`)7iz4KlqR|BRU6B`05&MX zD(2X&6=0ezvFp~MH0)YTu_n*bI+TW8E5}ZU zbI1caT&R^|x50p&2)j{)wZLwZ0MllP-JlMoVb^Yg-H;9!YNyx@TVl6agcY#cBG7KD z0MlW>PJ|lKp)~9|Id(dnL*Aytg*qvA+YQ)>uscLp3+#3ZFkP0|?b4w%?1CoP?bhK! zL5kfTOYHWFumX1b1lsKvVAdM26QK_1P#SjK96KG(As^J?LfsU*Lk8?b*ijMI0=vTk zOphgYV>*4*7)ezR%?SN#T7zynl%6%Trn& zF8N^rW*x1a8PsVVN~_&^UOPQEhdi#sh1S#BJz}Vx2zy3^wZQIO0?dFVc8}^%8g?5@ zusf^6g*H&^&RJsjmh`))=zWur`c=1GVA9sz2TCDeNbs6l}8@^*Ni&<-I1X2=5O z{Q}G|z^MJ-<3c`92r!!s+$usnsY7WL+rlZP!#U)z4j0-&DfX0sVj^rrgtfr#ya2P+ z61xcZ-INX&+DWmSw#4oOBCLQN5onhbV0Ia>6QNQ% zl!o1Ij-3wYkY{wb&~A#|Wdn91>@y;)1$I{im_3%*&FWAZc6&{*o73S!dntAww8ZYJ z2n*P$vj40=yAKI4`z&BSEWqp+YWbXy&qoB91BP0PP|xd7S}hOqTIz5P`J*~q=pe1- z3x-;Xupbj)EwKBz0CUI^yPwdZH0(xAu=|7#7aFD5ebN%Ue_@1$iIh*lIO@~NVW!8m z(bSl7ME=YRl2-0f*`;`*w$QQJ&klSJ2l6;xpZiKx5PqY4oEs#{G#lzBgOT9$#o1(Z zA`%PA%H`;U5}ceO!3c~bVag$KAvnzjy6`d;iN=ycRWzqZl^Be_<=};xsI2S>zJF{g zk$^!zCP+;|o`e?r#QKY=)O2#s@NkmOo(xS)#fRmoiR3WMSj3|+pE1m{PYzG890pm+ z0b0sjtqM29qO;YH9DeBN*tzid=;@>81JvhXs3Q(g=@8Tgq^nTu8qpjy)()`_A=XJ_ zoe=91VqG-05@Ov#Y$c8LKx~x|>!z{Q5bG6UJv7z_u{A<$6$~pKC#eQ0;8{K*x%YvEC4yB{DRYlMi;6Ll7w4STMK1 z2<2k43NT;5iu15hIYrSWI~YQ;U2y>aSIs&HTq|t`B!>8W2b-HRprp+<&p$ByL%FIJ zxXLeZRkh;f#PZ21$9Oqc`DB%2yqv3i+H{7ObBs@$&hRQVl(0T+Qp2k-9`b1%O*?)x!D1t1zze$tn+d6_`@Nym|hu9MUhh@tAfq-U0)(;|uOk-E8MT*UH)=4Ld~J z*U-FnmE+Fkahw9&LJM`uHeRS6Q&A8@XSIO;bQsEYl-D+uL}_SjCYhRwpHr^DysxYz zCtyk$r`li=_)>H_e10aCf(Ku6=6pPwQXieEXey?R--fy2a5xc(E8%dqDjbea$ultw zd&A)m%tT`B4e>+$vUX6n+1hY8l1NOY=wx0p9KJ0rBN0~Q;fqsoW%xqk%J2~-c_}qD zJ$zy+rNjmgPfc9{1wMQjrjM0`JbYP6Tpo@^&ks+}!i;rdWN6FQ;Uvs8590iCVM5jZ(DZD!O0O!}3B|q({*p)F@-b;??ZB;`S2{9*pCPb{K5o8Q9B1hq3-pHNsMpP?8bJ0egtr)PctSjAIN8`}tWu2EJ zu^DBYATyA|c%j8(WwK5RLXJZiQCY5o3)HZ!rx4wf90qReXXp3jvd|qUjqdnNTp`g3 zaso0oN4HW1c^E*V@JAlP3#|{XuV5Xt-|FxygPdo8i30acBR$T}jb z`CLiWia3ex)Ve$9V_Ek`70uRFpfWUeaSDvOYz3??Rb(rtNi-fIvsq740fS4%pfj18 zjVW123bfMrKqc9aq(6X{gLpxOLJr|&6fX^U$rA!tS;8_1>ekEfm)s5)kOC0evo}v? zS_VL9*R+G22iM=KT-bapz5aN*>qMsIgc{$~{j!IK87HDukgc4cnI_3&@I>ARm+^tB zeB^Lhf*?4l#S6tyLpWO>j)GN6!ff3w1*>DpeAGQ!n~_H$hZ*=wj>F|+(%lMgWBYvj zT?uZvcB!*_zW?UqnE=*>>Z~`dPJ} zfPBq4qbvnb4g*FnBqFI9QcTD^XEmTOAoP>)CkWb8?+nNO(wvE%UlASPpzl$taSd3& z3@K+$y{F(!zFf&R6lE&TPFe59nJul$m7Uu`T)J4tZb(a20aXC&%c$Gbg$pqSDZ+a-*b1D-!r7~neH*4%wK|mqm_`;^qbnoGG+gK(rMpH8G#oi)Y zJwXkaFzSk|Q=#2sWrB4(S?4tB_pF;JADD>}s5>Ybt`H%pa$U9(ZJlXFrZSzaOwl?d z2VCS5lt5y5iQ|QK0n->l;RpQ$@;l%rPh(6`P(lD?e4yS`S)kECuq!6m-;pzTLBS+X z;RP9t(0-9>5u|+9aeitl#`Ftqj>i!uuO*z+;v}f|FvsK>8&e_vx)xL+aJ$>^-7)n^G~Ncwq*QUpsDHt z(1b0)dFS;HXZ-zYL~Hl_y7Zb28UF?~rT_#~*S4EO89!QAG!x*1lj$~yK@-g)2J-E_ z*_rX9zM~+`T{lwK6B&Q68i5e=mtWbGUNfBW538}wow*8UWBVO@Wpn+qR9RP_^J99q z)H}4)(Y@5wkJq&u@PB)7sjKf!ou|J(?eAu6h#ETUic;r-tQ&kOBH(Nh86T)NZEb|k z?;2__?hszgTGD42B9ak+Lwh8NEQ6iG;}yR88_+Cx&s}v$jcaZ+UO$!bc0u)gexN^6 zVSemZ!~BVxA4)e3WxPm2`Ub@E=)&5qX>TX1$`#1cpwaGuQ6sAZWp2WN-N1AnEUz1k z8uzSwz_Y?#0{9qR9UgPH1m>Ob4l!h*iB8A!3snQK*^LZGOFZp>MY)?LPq-XKN;yFH0CKR%l?-LL>Ra zA((jR#6;)Tvo&fY=mqexvZ^lT%Bo9iiehJ~3j$mh7`Tnh0r=m+UlND3SnCGg9#qtD z%WaT4`sSZVw~u7JBdXYUY`XPGx_w{9i-e$x0ARxD_U#$(_FRPvVrrzGk=IWztUau$ zhEGA(21eFY19mT>u~YtdCto%2(G3%`0!2{hf@Q#Gb%IqO#D%$o5YtG;TG=WBZf7JB zo*^;wku2zG0iJvg$g&nX-6R(qKJ@UTxn37wVsjl}keO&Yk(tOR;f)ouV5%~irLb1y zGmsjbK&2#(rKpJb0<>561wcf~VU~Q>co8x(G{ve}L$*^5EDn70dJS;b(lu}%Ynb`J znd5`Hq%2lddjxfI4V=Xa`Un+9>(}_SU8T%j$Y9PMarVqs4!BqH7|smmAs)#X&QOEZ zF?U|CQMxR(*B~DT0*#aB;F@Po5~`4I!iy2$9r96x7{d#Ve*r_+@bWRdd>k%TLt`_= zeh3pij+euDq50CeET4fQv+Wle^dj0c8+OzR??8sN-E6TC|LyA)xsVk zy18NGMMB$j9#Xy=nntyShIWV+1>;-<%+_2`V4epTB*6+IGI<#yNgKZLCeeMF8wplY zLJOm8a|jbsE~5NoCMETS6(%_Nehhi&3Z%nzbgP85HI2!@Sa+NH={jL?hWhmKysGvAR@B^g z%lcA}?x*WiR8L&hPgh;ztCUr5T^)umkHYdPs(9b5f1oaZWzXPHZ6MU@xO>>h-G*#| z^U*7wn}e+5VC+p^f$HY#(*`r}+W>e8ScQBMQ;gx|m*A3hu@MAmrVkU;Ri8YAuQh!* zV9$Ewndum;)u)tf)g+0`;1Uq*A!x)Y7ubXV{C|E{8xdq(M2RG)5~P*pNhtE!CUy@; zrddufS_n@n3g&^83#%qHwUaJn{RAA*Nm2=?NFDjZecYI;(Bbv?s6{x3yaWx4? ztx}eRt7e>PNWrk1%A;oLX*NHujq}Y4YA2DuyTBZmi{;`XuGOn}@fCV>72tTOI>!V4 z|EeL!Io#7m;YV+M+G-g0c~2g&l02W!5p^T*+I+ zH7#)H;b=lRnNs2ey>94KZq^NJunAbHogIgn%)BKOT_6r2ys@jxy0zSX1Kz%jEZ+wK zTtDf0QJ=f*%LICXcj($fSNDsjX_zUH-vscidt!zVB{2a@uQ5O`3=6gKWY(UFT**39 zunHWrnj^#1g3k}=BE+c#~^?L>V=8PtFT^D*OF_O+B#qK z0g7~Duw(6f%gu3N0Dj}GX8EAqNVM{DmA=r!lZz1JPtOzz6R;0^!;2Kl}ZaLWW*3foi+jW@73j%^vavNH2 z^j{wqbWhK~t={=gO^|;Vve73k_*7++I*Fm`S2jhFg?Kg|RpZ%wM%FtCOV6;91GcZM zWNX!@IBY$FrT1*pG&ha&k_FWGq+s`CYmB-*TMuvfT74K+DsV3mbS^F|1g7n)qlqwN za{)ZWk}z@4HWfj<3--mOW|FW}@pYv2H}LXJynG8U-^R;#@bde3VNK=F7X>=qbOix$ zii5m}moMPu7x02AkRbVlhCGCimaXYx-bG{!K;gPw@;%Uy*oGG>JR>;Wj`zEdI{Q6i zwt1LA$NSwgwp#v(_q*NQ{0Z-OPuLppu^lFK@NvVS=ZpV2M=W22Z}^Nx0Jjd&$xS37?=v{x!I9%nn5l45Q4-+@?756ZFDu}6qmWHV0(Xq>lcQEz z)-^>pkb?6LloN@CVNvY7LU74_YH|`4GC(BoPSTWsV46WrS=Th(JxSVmBu;uwRKSD! ztA+snEl}&s`Rwl+o_Romn&rZ)2itp#HT9NhpV<%c`mOx)X>$6*PN<% zi3K`(b=^0d|DOVIq2h zCt{P*x;H4gfDWNxQob|@nkxnFs`33mb!gy0nLryQ zdZ_l|C_rl5tIALqpw6xFDWd59tXMbvks%;Z)&UHgTG=>!d5iAW#M&x3{6Q9Yc9>-u zX4SrJBj1OVaQh3qIY=GmQwyw$6aXHkra5R=z%!B}UIemd?Gv#iO-EBDu^|x$IuTP3 z9t$8f6mMS09N#xORQT!`G*|Kzq<>DjTO;`cOJ4Y2yXfsod%KqWO-ug$i~b{N|B>&t z_0M0C#Qr%G-*tM|o2Frz=xoXK5T$WtEnq{ZQUzL+Qo+>Kp6B@5U=J=z0=zzdW z(yZ-v1^HhP9H-_CJRl8NU66g$s`!kx2yk=G5c^(8u#DXKoRsrR9&Z_ilOJMfhv9O& zBI|%<=E;Jh$=}1u zijeFQfYAjHk;(j@JN?Pi`7D>$cH~s((g^=OMBZ?P7ewIRiHIVCIbN@TWd zgFy-K%C?#*2=?xCP|7m$2CXO66hB->ZS;J_+d!v)_p3qR=86=5(^x#}jUN&?LqsBO zxERQRii45^=S1!y1HU8X0qk8_g1z0Q>}^yk|BpbGwK>`uzk&K8?CGQn#TiS(gD%;mF@L)&GtHpM})wv zA8gl21m91GltDhA1j8#h8Jl{hT|qB9$q zN;IU>MA+ormr;aIL0*EIG+0Up7X3%l{-dI$bnKp3N{t{A%u*`QgLE)G*Qn|}LuI}J z2$O%n%8wy$LMDbEDnqIP(HC)ONPKKM-v> z0vwTNN{cp#zznBd|8W6)yDC&N)IR5N7V5N23g3+Pv0!B;2U@4$UFhdVKV>3f% z#B;HN&qPxfgE)PoPPYWlD_}M#!FVJAd)C01pp)O!XOT}IjjGCSBeN%%*nLGBS!Yudlk)UkvCHisNd{ zC>^5$ivZ3^mFCJRcm@mB%_(#kEYJfF=9G^a|CVP?l})@4A%jMWn^gjXme3ca&8n{Z z%&b~@OS7qt;h`sR*egAEg`cbx3fS<0ZySCBHpnB$n4il7SoK3sG%BT4xth8Z`S zn;6!R-$cUUW`Na9py*s|W(imqCUnTwK!1!Ft=1CIF)FYG#-MU#75wK|ux<&ALb?L! zdN3^kGd3&F5-6K^e}%-`iF`!oKY}QQ@TC3FJ&dZR5CqCwatALM6K|JSd6uwzuATa& zFX#?9R`m6WF@i^lV~3njo>3P-m^Y6OBxodDS|6~}rFF6l;jD+9F9BQCpquy`h$-+z z$hszIA#>`PSnTm1ff~sjkN{?ytIRw%8eZ~U_q|xV)ZCG)q)r+Rbke9qCyh!oCk-SY zjAAh)!}G+ZUZ_m}dggYg{E*CBB2N1i&7AxER)hy^JVaHG%Uy zI!FzPkzQEsrDq7`P0xud-3F53n8tyN+6KDi9Pqf3#I@?@H|@6lvTbM8uXuLb;MAn3 zOx8lIVM+B0Y3zTP1W22x4 zQ`QcgoCH#%LlXB$s-}Zbme(9Vf}gn}vAA|@nWK;dTzG1v){dX;xY_YDU9W9?ed4Qq;wvjBKb7A=y;Z2Z0`7Wtf<&R! zrY#QchXH+=9yWJ?A22NaUd(!7Vl##QWw^n%(8x5Y)jq5h3N>wEe_*k8eY$o%ZBqZD zwItrIK)SsrKehOlkj{5&AQ=r3~C3KjJ(eVrtlPWSK z2&E{x_)ztw3lUXmX8|BjX6gi);Yy8vJwucn_U0r~_bd>E`L+}lA>FY@7olQ`j(P9w z8}-tf@!bmKNtVQktC!q`*=T_Bf85KDg*@BR9RZMSTLj@!;*8|j7|4P7hesPCV* zU9A8$=vW!ix=Q$#3b<5bR~duPzyzlzja{bbr$YUf&{|pPgO3EkvJaeZ%Mwx7?%*VP zxxi?@JgMqbf;G!}&Vg(BQ9`B&-3viCLfp3N_95=hOTu|j zMmInQ7C2YUjUW1e&HV)ANEI&#e_e07u6M~>2Ts1|fBC6LnAWZDgNClJ`h*KjN!X$C z^BcZfJNUi&wk7}0?=>{vaJ{&1v0;6>Vf`Jut!~4z-QG}>lkBjy4WOGo;VX17!Ael6 z`8@~})6?%nYF5P(jY&yvWls2uY$H_%_hL+R~(_*E3uQMVdnuoJuQiHjQbGi?g`j` zLXr?nCKY)oIGUIhqu~J5AgtzIhGVK_SdNaxUzOM*uM2G(P{@@IuWV6U!J} z_KRD_51u*o0hA;Y;*OIi@eL^?rk7DK&%O{Ne-#P)C=gZ^FJah`M_b)w(rH`FWFk)? zR(+7SL2R%`!oMHYUYwl9sO7k3@U;Z)%D}~i?xFb+EG5L_ii{4dv02=lgC9^+mlE#H zA_C7;+r7?Dh0dJ~J%7ZGM5GlO+_e>*-PorNi=EBI)f%CztcErT-ON6HLij$=UF z0tG>BrccA0^5@^)>4rTRi93!us&q{Fr+JxF3L#1bZ;5ypMD348Jig; z&&oTqY~lrxcso%5=^{eEnH2sgyXkM5cGG8ZL;gv6SRvi7A$n2ruKH}`GVDu*qjM)x zv03Un3E$}q(z9T|6`20kjAzw_e;Zg)^U5|u`v|gb zxgGc?k;TnB@R9|MV?lcN{S#&ihRVoi0p;=*+Di6P??}0*lRz+iQ%R7^ zO`&=$<~6~+@>ta6tiZ%*EmBwY3pCasA4DNst&f6^O@VpwIgo?7(#3uZi`9*b&zQ;n zr$7XjA2{Q}jBAa0!OFNOlXRa&#*6@M@>ZC|4Ilzzme3KUJr&nMQ3WFis+XtX%{|h~ zCHB1wn%A|mWM;c0V6*2Se%&5C71>EbCdLapy$$!LqLD))6YA!Ta_tuG6r3C;$_3a| z8i^gmK|CBKf@g~iPT=|4WOo19Xb(eSFp?NV04PZ{amqAiO6)>q*{d@NrOg<&3)Ps) zxC_#0(s&86F}E~| z6!BFoLbowK51AAUVrXsdOB(~}D%cqR5+9Aa#KOiXLXoc{MLIC22Wo1-j1;Af0cO4% zxsICw2J_tvVi5@yL_&GsV&EE_+@`&g7XoY!g`Xv%b7?_89WX0Iv&79_ejhPdZQrb8 zP|!F34Ai4&fy-E+-YdVHU+)KZL#7$~7$wQ7S1w7ke?X%3A)hqhWj(Njp}U0FY({<; z1YVLVz&-1#ZPFH%u2%fK?X$LL!JVp@yOvG5YKH-bZDo_z?ZJ96iNcYm1q)I7D$#%~ zTL~<-6|IrP}6C)D|ihBmtF|a}Z$ivRX30{GmFCf5Y&xdz7QHCW{lz?Yg?g|)6}TCC|!*Ysv;`WM~(3+{ee z_nckwtmB>w9qVmBYwLH+SFX2_0m#U}71-&}j^{^YM9pg41d~2&TP&g8jM||ZaK1+J zBJ8AnKkQ6Rse5C~HI%do9`)!(oi+6iZDn)uDI1uo0hbhXu~bihEN$sD(_vj<%DGO? z(iZP~vAIt{qlklU@r1I&i~f^o|4DJO=AnBsS@TQCxXiN2?=$EzmD;gtg_YU?NSAFu z{W5ANa|7!4q25J`IfTXNM$~JNk)b=hzt>rizBz>f9AiCABk)W9 z5G9_(ovGy0ac%sMROkn7~$;?l~X-j6L%Vv0s+26c)ikNo#)ibj{Od@;_p6pAjd zr+RRj6+j$CZ?z_%j!A(D_+{XJ?X)(lLZ87xbu;iwX7WzE^9OEn#*9~uy1>c|EQ@f@ zAwxz$nHHIv5g4+BUMM*=GXW)OKlE9~-|`>Y(acn&kWH3C6_3GppxMVF)#JqBb8GNP zN%*Kde9UYOB#>RQZ4y4c_JZS8nt>#R*k{tspxio?1`Qu+&&$mrdvv%^bp?Jtz6upD z{t95LMOX{$yaJ4me#G4jJD(1vVOL{(@#+rd@|!->5FM{MLT z;c{OMJzl8_3coXeJA5Am$Fh8Om7k=;=5Mw0vtd@3ZnnbXn$bUU20ST)I7Z>;Zo>i3 z6AFB(o}S6WbJ`SS>&uWgJ>X}G@VQ|IML!q9&xJPNq??N?qil!*F0>aJ$%`DhJk6@2 zPRp+HkR0>WbMQeIT5qA%+1?Cu_|Ib(bPAdr#xeC$0JdM?4va;APukzJ6lh%vyk{}+ zWIFKV_qsOR+L7tn3Io>0Fpgsyo8YA7_HH<7xvm$^rL3!mla>SEf9>(rumL?+-;g!? zRl{xB0T(_A{2KsZF^<7c0nk>?Bh8%p!FaK9=AgHsUitydK7ScFk>3W4EJi%P1Fu$5 z`mYM5*GRl{@|%!}`9SF3P_m@pJ^NArbDTBI`88Cv%IiD@_zE$ zIkg!ZQkMYoReUrWN$};+Iw%Q0qs;UUu_KUnbTji^FEBn=N%XHGD?bV4&>=Zz-{r&muyzN)^-`>BtabJ4lzF#|+*?2h9HD<=$>rA;@Bq$Q{Q}A~`9`0<`IHgBh zs*9YN5b}}8w$}7W)d6w|bL;klMquYG8?*tk6lJ4=RRSH+0vY)h z2-4hY@%bwwKB%GixzE1`*%^@1rtt9_8K&-^q9gze{_Ynw1(U#~&xbaX5Tp9SFa4qZ zBHuu*RbP(kdRxu%1C)*!6r>IZnGS1eeJOrDzSy)i-Ly4dLdw%&%_G(Vv&>G8ZXI1` z`&zqgw6E%G9Ucgi4S>geWd>d{m|Tw~6>$HLCWA^so}Pk5bF}SXn*PECg@E}+zwnbx zPR_*mVbA;oE6sLK<%k|e4MmoohUU{- z?7Kt->F3mMzlsWnO^8{fs04#RJqJx*`x{tL+RSQ z_5*FsVFT*?Pcryu)Q9Bj7+260t(u-g$fTtVHi1zslwCgGKG+7E8Tm^aY&}J_0XJKA zm3s1x8z^mB!%p-(ph#;z`b-#D5#PeHBMs>lhY@ z$eWPW-0IPI64Cg56%FzRgbEZ7wH*K18fj)yVN^=vLa`$yQOr7aaWXY0QKq^0R(RfeerV+H&fM5tWT>HCPdx#{#5 z@M={Bzk~(rrqlm`^aUD>8g37?>4Xg^m`?v4AB|ed!gN|SJ?D|0{{{1>oF$IIk&Lu6 z_%sAeN9=ZZk@tJ&Usx<_!=@R5$~A7Rc)FBvQ#{?5kdS|Zgj|K!rY;$UHc0W}OgsPL zNxp#?uGR+8F)Zj1b5Pm0fyM%&q1zyT4Y?FZFlD=cwl;_v^BSew$_9CxB>!V1`JW?i zqFpdP(47C};Q&Z68HG!>nx5ClzTiL(VRR#2aK(Y(1W(q>KHbS7aAuvLq98coM{u@^ z4rd9D;i!E{&{QR;rwJ-2g6&PP9;`<|t;0U-SuM;-kY59UpTt?L{|E~`@U`#ewi_p| ze<1%w;39*={2`}|93+(a3hx8ysleKp*^c+pMA1eT7 z@9zL)=R)V+jAvi2qSjNhq{G7#%^vQUGkj+lLb+}gyZf{zqZ!ZP5;YmK6|c%@y6N!S zXq54E&m#p?wr-T;>Gl%^;D$!opYg!=rqxDa@Oh1L@WH6bSjKatL`{zVxKU6)Sj+r9 zXRopvoTv@-$4$iIZ{AlU#Zo|E3JZCI@BO4oMHJ2JI>3+_IO;`qSvydEN384kmTsl#D1 z4Cx3?P_pmNk75X2zzBBN?9=pzF!T|;r0{}H_@o9e%YY{9Pw;!fv_BztF%CaR%(@Xb zK33zU882VQ7hM>_k9v^-ynF-WwqR%*UiRYUn;18Wp)tHXgqMf$f=7$8Ge5%^!h-|Z z`DJkoP2mNJM`rMX2f2`MVOAf;&`0osyTi%1G43-M`W#+9kC*RY+{+lkof_m9@Nx?; z=%!2^sL7Ww^kux@*?qLZvToQC3m!D7S@O5|;&FUI$3|LD$PE7>cyS2+lE3B09`KIW z;dH~Hth*nwJ$LF_%Z+sl-6QGNZRxu08OO=Hj-<<3b*=rbg!kOjKFQa3?cHf_d&bcY zU$uvXF6b4nUAQ4%kEeaT8Aq=g+Y+3&Uw>AJs9%$-aC_F=u~*f*mZd7EE7!!*d%Pb# zuBNJ6bEDz9FXQM?BfPaAeMk*AwA~oFKA3TIsS&jeA05}i&DTCWKbLOanywkiI7YPS zhHE1??ALaEG9h5>3oHcs(%$}zqhEy!G-n)5>I2mAJqsP1(~Vow-mMwORu=Du#avL4 z&Z?!xmYf~$y&D!b9!>W`&kav+dg|VC!X0{I4hKE4t7gdwiCj)ExU4{50{5=Ih5ke7 zu2K3#6G1E{s>e$WSO-ooSO*ZI$yz!Wx^|~q_7s4#_h22kS{GV}GR|R!n+~6c(`Nb} zak_77u`T1=UZNH|iq+y+y7&01+hR1`b+~}I)@`vT-Lkg;+|U-o87HIl61D|{&ufb< z_kS(6XPk`I*0tDKtQM!!z2mEHixcUtlLf@JZi~@$OJUO)+G1zMxl89L2A|g!yYK&6 z?9VvS%mj^t9A#PyG&4a#n@jhP+rsHBPt%s>sMWSbwX^ERbmyL&1P{M<y5#TbA7I&igV{kx@B9=4o?&txMSV}^nI@7?ccNxg-iKB#dq>h;M+=0>TK4v*Tc93!qH2)6k&JVj&b164FcoEwjg>68_Wr2F z?u>I!iCXNX@9%cM$LXwDXxen^z3HYMcO`tvkt(o5?o`;E{n*Sv9tgpNLtD@Mv4u4o z(~c%K?S&H>;{)T_t|WL@PAjmNgy6TOBIjdDI5Hj8wh|GX3d?q?Q1oLKg+Q<@Ai?%l zo|STC8osqnp(dkBOr~>A*#`ABJ&B%u28exsphJ99m^sXkN!dmfhTX$FJk=8cZF7 z3M*GqN+Jnijf*6U{9}pyk#4{8sR0;bLf*pa2iz{KkzxE9<4Be-`I(T**+-PphF_@Bx%Q# z+e)Qm4zbKJBdI3sz@+=iOsdwNRZz{Mv%D-!zr4pQfZtcmZYqTZWqq~OU^z+nM_qU+ zYca`&5~WbK=Lx#YDTALN&y)0El2Y`v*xtaizzOX#vY=<412yOY?9i&nkScNdFpE7U zYHE7SAjhE}GbqJTd8Z)pr0X#0P>Hg&(_45VJclQ{t3)D`9q>Fk9@vsSP%62Fx3)?& z^tmsYiKVvy$7CaBvW8=#OK)syf}T1@Hoai75w2TZJS6 zfRy|Lxa90Mn+-N8*bdv?kPf~fZF@u7@P@Si4Qc2NY3Cc#=$}e^{!|)W#K7T$67W1t_PuV@_wmz!*i}hsXi^${}C*^;LQF10}}x#7XSbN literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/__pycache__/_reader_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9952e03bb42a60b99c39eeee70d79178ae140fd3 GIT binary patch literal 16211 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration.py new file mode 100644 index 00000000..d85a3381 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration.py @@ -0,0 +1,778 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe.params.terminal._configuration_create_params import ( + ConfigurationCreateParams, + ) + from stripe.params.terminal._configuration_delete_params import ( + ConfigurationDeleteParams, + ) + from stripe.params.terminal._configuration_list_params import ( + ConfigurationListParams, + ) + from stripe.params.terminal._configuration_modify_params import ( + ConfigurationModifyParams, + ) + from stripe.params.terminal._configuration_retrieve_params import ( + ConfigurationRetrieveParams, + ) + + +class Configuration( + CreateableAPIResource["Configuration"], + DeletableAPIResource["Configuration"], + ListableAPIResource["Configuration"], + UpdateableAPIResource["Configuration"], +): + """ + A Configurations object represents how features should be configured for terminal readers. + For information about how to use it, see the [Terminal configurations documentation](https://docs.stripe.com/terminal/fleet/configurations-overview). + """ + + OBJECT_NAME: ClassVar[Literal["terminal.configuration"]] = ( + "terminal.configuration" + ) + + class BbposWisepad3(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + """ + A File ID representing an image to display on the reader + """ + + class BbposWiseposE(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + """ + A File ID representing an image to display on the reader + """ + + class Offline(StripeObject): + enabled: Optional[bool] + """ + Determines whether to allow transactions to be collected while reader is offline. Defaults to false. + """ + + class RebootWindow(StripeObject): + end_hour: int + """ + Integer between 0 to 23 that represents the end hour of the reboot time window. The value must be different than the start_hour. + """ + start_hour: int + """ + Integer between 0 to 23 that represents the start hour of the reboot time window. + """ + + class StripeS700(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + """ + A File ID representing an image to display on the reader + """ + + class Tipping(StripeObject): + class Aed(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Aud(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Bgn(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Cad(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Chf(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Czk(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Dkk(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Eur(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Gbp(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Gip(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Hkd(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Huf(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Jpy(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Mxn(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Myr(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Nok(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Nzd(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Pln(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Ron(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Sek(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Sgd(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + class Usd(StripeObject): + fixed_amounts: Optional[List[int]] + """ + Fixed amounts displayed when collecting a tip + """ + percentages: Optional[List[int]] + """ + Percentages displayed when collecting a tip + """ + smart_tip_threshold: Optional[int] + """ + Below this amount, fixed amounts will be displayed; above it, percentages will be displayed + """ + + aed: Optional[Aed] + aud: Optional[Aud] + bgn: Optional[Bgn] + cad: Optional[Cad] + chf: Optional[Chf] + czk: Optional[Czk] + dkk: Optional[Dkk] + eur: Optional[Eur] + gbp: Optional[Gbp] + gip: Optional[Gip] + hkd: Optional[Hkd] + huf: Optional[Huf] + jpy: Optional[Jpy] + mxn: Optional[Mxn] + myr: Optional[Myr] + nok: Optional[Nok] + nzd: Optional[Nzd] + pln: Optional[Pln] + ron: Optional[Ron] + sek: Optional[Sek] + sgd: Optional[Sgd] + usd: Optional[Usd] + _inner_class_types = { + "aed": Aed, + "aud": Aud, + "bgn": Bgn, + "cad": Cad, + "chf": Chf, + "czk": Czk, + "dkk": Dkk, + "eur": Eur, + "gbp": Gbp, + "gip": Gip, + "hkd": Hkd, + "huf": Huf, + "jpy": Jpy, + "mxn": Mxn, + "myr": Myr, + "nok": Nok, + "nzd": Nzd, + "pln": Pln, + "ron": Ron, + "sek": Sek, + "sgd": Sgd, + "usd": Usd, + } + + class VerifoneP400(StripeObject): + splashscreen: Optional[ExpandableField["File"]] + """ + A File ID representing an image to display on the reader + """ + + class Wifi(StripeObject): + class EnterpriseEapPeap(StripeObject): + ca_certificate_file: Optional[str] + """ + A File ID representing a PEM file containing the server certificate + """ + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ + username: str + """ + Username for connecting to the WiFi network + """ + + class EnterpriseEapTls(StripeObject): + ca_certificate_file: Optional[str] + """ + A File ID representing a PEM file containing the server certificate + """ + client_certificate_file: str + """ + A File ID representing a PEM file containing the client certificate + """ + private_key_file: str + """ + A File ID representing a PEM file containing the client RSA private key + """ + private_key_file_password: Optional[str] + """ + Password for the private key file + """ + ssid: str + """ + Name of the WiFi network + """ + + class PersonalPsk(StripeObject): + password: str + """ + Password for connecting to the WiFi network + """ + ssid: str + """ + Name of the WiFi network + """ + + enterprise_eap_peap: Optional[EnterpriseEapPeap] + enterprise_eap_tls: Optional[EnterpriseEapTls] + personal_psk: Optional[PersonalPsk] + type: Literal[ + "enterprise_eap_peap", "enterprise_eap_tls", "personal_psk" + ] + """ + Security type of the WiFi network. The hash with the corresponding name contains the credentials for this security type. + """ + _inner_class_types = { + "enterprise_eap_peap": EnterpriseEapPeap, + "enterprise_eap_tls": EnterpriseEapTls, + "personal_psk": PersonalPsk, + } + + bbpos_wisepad3: Optional[BbposWisepad3] + bbpos_wisepos_e: Optional[BbposWiseposE] + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + is_account_default: Optional[bool] + """ + Whether this Configuration is the default for your account + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + name: Optional[str] + """ + String indicating the name of the Configuration object, set by the user + """ + object: Literal["terminal.configuration"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + offline: Optional[Offline] + reboot_window: Optional[RebootWindow] + stripe_s700: Optional[StripeS700] + tipping: Optional[Tipping] + verifone_p400: Optional[VerifoneP400] + wifi: Optional[Wifi] + + @classmethod + def create( + cls, **params: Unpack["ConfigurationCreateParams"] + ) -> "Configuration": + """ + Creates a new Configuration object. + """ + return cast( + "Configuration", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ConfigurationCreateParams"] + ) -> "Configuration": + """ + Creates a new Configuration object. + """ + return cast( + "Configuration", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Configuration", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + ... + + @overload + def delete( + self, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Configuration", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ConfigurationDeleteParams"] + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ConfigurationListParams"] + ) -> ListObject["Configuration"]: + """ + Returns a list of Configuration objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ConfigurationListParams"] + ) -> ListObject["Configuration"]: + """ + Returns a list of Configuration objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ConfigurationModifyParams"] + ) -> "Configuration": + """ + Updates a new Configuration object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Configuration", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ConfigurationModifyParams"] + ) -> "Configuration": + """ + Updates a new Configuration object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Configuration", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ConfigurationRetrieveParams"] + ) -> "Configuration": + """ + Retrieves a Configuration object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ConfigurationRetrieveParams"] + ) -> "Configuration": + """ + Retrieves a Configuration object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "bbpos_wisepad3": BbposWisepad3, + "bbpos_wisepos_e": BbposWiseposE, + "offline": Offline, + "reboot_window": RebootWindow, + "stripe_s700": StripeS700, + "tipping": Tipping, + "verifone_p400": VerifoneP400, + "wifi": Wifi, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration_service.py new file mode 100644 index 00000000..0d6f251e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_configuration_service.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.terminal._configuration_create_params import ( + ConfigurationCreateParams, + ) + from stripe.params.terminal._configuration_delete_params import ( + ConfigurationDeleteParams, + ) + from stripe.params.terminal._configuration_list_params import ( + ConfigurationListParams, + ) + from stripe.params.terminal._configuration_retrieve_params import ( + ConfigurationRetrieveParams, + ) + from stripe.params.terminal._configuration_update_params import ( + ConfigurationUpdateParams, + ) + from stripe.terminal._configuration import Configuration + + +class ConfigurationService(StripeService): + def delete( + self, + configuration: str, + params: Optional["ConfigurationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + return cast( + "Configuration", + self._request( + "delete", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + configuration: str, + params: Optional["ConfigurationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Deletes a Configuration object. + """ + return cast( + "Configuration", + await self._request_async( + "delete", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + configuration: str, + params: Optional["ConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Retrieves a Configuration object. + """ + return cast( + "Configuration", + self._request( + "get", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + configuration: str, + params: Optional["ConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Retrieves a Configuration object. + """ + return cast( + "Configuration", + await self._request_async( + "get", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + configuration: str, + params: Optional["ConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Updates a new Configuration object. + """ + return cast( + "Configuration", + self._request( + "post", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + configuration: str, + params: Optional["ConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Updates a new Configuration object. + """ + return cast( + "Configuration", + await self._request_async( + "post", + "/v1/terminal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["ConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Configuration]": + """ + Returns a list of Configuration objects. + """ + return cast( + "ListObject[Configuration]", + self._request( + "get", + "/v1/terminal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Configuration]": + """ + Returns a list of Configuration objects. + """ + return cast( + "ListObject[Configuration]", + await self._request_async( + "get", + "/v1/terminal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["ConfigurationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Creates a new Configuration object. + """ + return cast( + "Configuration", + self._request( + "post", + "/v1/terminal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["ConfigurationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Creates a new Configuration object. + """ + return cast( + "Configuration", + await self._request_async( + "post", + "/v1/terminal/configurations", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token.py new file mode 100644 index 00000000..0804333c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.terminal._connection_token_create_params import ( + ConnectionTokenCreateParams, + ) + + +class ConnectionToken(CreateableAPIResource["ConnectionToken"]): + """ + A Connection Token is used by the Stripe Terminal SDK to connect to a reader. + + Related guide: [Fleet management](https://stripe.com/docs/terminal/fleet/locations) + """ + + OBJECT_NAME: ClassVar[Literal["terminal.connection_token"]] = ( + "terminal.connection_token" + ) + location: Optional[str] + """ + The id of the location that this connection token is scoped to. Note that location scoping only applies to internet-connected readers. For more details, see [the docs on scoping connection tokens](https://docs.stripe.com/terminal/fleet/locations-and-zones?dashboard-or-api=api#connection-tokens). + """ + object: Literal["terminal.connection_token"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + secret: str + """ + Your application should pass this token to the Stripe Terminal SDK. + """ + + @classmethod + def create( + cls, **params: Unpack["ConnectionTokenCreateParams"] + ) -> "ConnectionToken": + """ + To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived connection token from Stripe, proxied through your server. On your backend, add an endpoint that creates and returns a connection token. + """ + return cast( + "ConnectionToken", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ConnectionTokenCreateParams"] + ) -> "ConnectionToken": + """ + To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived connection token from Stripe, proxied through your server. On your backend, add an endpoint that creates and returns a connection token. + """ + return cast( + "ConnectionToken", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token_service.py new file mode 100644 index 00000000..d70a238f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_connection_token_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.terminal._connection_token_create_params import ( + ConnectionTokenCreateParams, + ) + from stripe.terminal._connection_token import ConnectionToken + + +class ConnectionTokenService(StripeService): + def create( + self, + params: Optional["ConnectionTokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConnectionToken": + """ + To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived connection token from Stripe, proxied through your server. On your backend, add an endpoint that creates and returns a connection token. + """ + return cast( + "ConnectionToken", + self._request( + "post", + "/v1/terminal/connection_tokens", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["ConnectionTokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConnectionToken": + """ + To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived connection token from Stripe, proxied through your server. On your backend, add an endpoint that creates and returns a connection token. + """ + return cast( + "ConnectionToken", + await self._request_async( + "post", + "/v1/terminal/connection_tokens", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location.py new file mode 100644 index 00000000..d7d44b6b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location.py @@ -0,0 +1,401 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.terminal._location_create_params import ( + LocationCreateParams, + ) + from stripe.params.terminal._location_delete_params import ( + LocationDeleteParams, + ) + from stripe.params.terminal._location_list_params import LocationListParams + from stripe.params.terminal._location_modify_params import ( + LocationModifyParams, + ) + from stripe.params.terminal._location_retrieve_params import ( + LocationRetrieveParams, + ) + + +class Location( + CreateableAPIResource["Location"], + DeletableAPIResource["Location"], + ListableAPIResource["Location"], + UpdateableAPIResource["Location"], +): + """ + A Location represents a grouping of readers. + + Related guide: [Fleet management](https://stripe.com/docs/terminal/fleet/locations) + """ + + OBJECT_NAME: ClassVar[Literal["terminal.location"]] = "terminal.location" + + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class AddressKana(StripeObject): + city: Optional[str] + """ + City/Ward. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Block/Building number. + """ + line2: Optional[str] + """ + Building details. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + Prefecture. + """ + town: Optional[str] + """ + Town/cho-me. + """ + + class AddressKanji(StripeObject): + city: Optional[str] + """ + City/Ward. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Block/Building number. + """ + line2: Optional[str] + """ + Building details. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + Prefecture. + """ + town: Optional[str] + """ + Town/cho-me. + """ + + address: Address + address_kana: Optional[AddressKana] + address_kanji: Optional[AddressKanji] + configuration_overrides: Optional[str] + """ + The ID of a configuration that will be used to customize all readers in this location. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + display_name: str + """ + The display name of the location. + """ + display_name_kana: Optional[str] + """ + The Kana variation of the display name of the location. + """ + display_name_kanji: Optional[str] + """ + The Kanji variation of the display name of the location. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["terminal.location"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + phone: Optional[str] + """ + The phone number of the location. + """ + + @classmethod + def create(cls, **params: Unpack["LocationCreateParams"]) -> "Location": + """ + Creates a new Location object. + For further details, including which address fields are required in each country, see the [Manage locations](https://docs.stripe.com/docs/terminal/fleet/locations) guide. + """ + return cast( + "Location", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["LocationCreateParams"] + ) -> "Location": + """ + Creates a new Location object. + For further details, including which address fields are required in each country, see the [Manage locations](https://docs.stripe.com/docs/terminal/fleet/locations) guide. + """ + return cast( + "Location", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Location", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + ... + + @overload + def delete(self, **params: Unpack["LocationDeleteParams"]) -> "Location": + """ + Deletes a Location object. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Location", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["LocationDeleteParams"] + ) -> "Location": + """ + Deletes a Location object. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["LocationListParams"] + ) -> ListObject["Location"]: + """ + Returns a list of Location objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["LocationListParams"] + ) -> ListObject["Location"]: + """ + Returns a list of Location objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["LocationModifyParams"] + ) -> "Location": + """ + Updates a Location object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Location", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["LocationModifyParams"] + ) -> "Location": + """ + Updates a Location object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Location", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["LocationRetrieveParams"] + ) -> "Location": + """ + Retrieves a Location object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["LocationRetrieveParams"] + ) -> "Location": + """ + Retrieves a Location object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "address": Address, + "address_kana": AddressKana, + "address_kanji": AddressKanji, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location_service.py new file mode 100644 index 00000000..9c0aaf36 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_location_service.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.terminal._location_create_params import ( + LocationCreateParams, + ) + from stripe.params.terminal._location_delete_params import ( + LocationDeleteParams, + ) + from stripe.params.terminal._location_list_params import LocationListParams + from stripe.params.terminal._location_retrieve_params import ( + LocationRetrieveParams, + ) + from stripe.params.terminal._location_update_params import ( + LocationUpdateParams, + ) + from stripe.terminal._location import Location + + +class LocationService(StripeService): + def delete( + self, + location: str, + params: Optional["LocationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Deletes a Location object. + """ + return cast( + "Location", + self._request( + "delete", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + location: str, + params: Optional["LocationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Deletes a Location object. + """ + return cast( + "Location", + await self._request_async( + "delete", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + location: str, + params: Optional["LocationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Retrieves a Location object. + """ + return cast( + "Location", + self._request( + "get", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + location: str, + params: Optional["LocationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Retrieves a Location object. + """ + return cast( + "Location", + await self._request_async( + "get", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + location: str, + params: Optional["LocationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Updates a Location object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Location", + self._request( + "post", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + location: str, + params: Optional["LocationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Updates a Location object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Location", + await self._request_async( + "post", + "/v1/terminal/locations/{location}".format( + location=sanitize_id(location), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["LocationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Location]": + """ + Returns a list of Location objects. + """ + return cast( + "ListObject[Location]", + self._request( + "get", + "/v1/terminal/locations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["LocationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Location]": + """ + Returns a list of Location objects. + """ + return cast( + "ListObject[Location]", + await self._request_async( + "get", + "/v1/terminal/locations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["LocationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Creates a new Location object. + For further details, including which address fields are required in each country, see the [Manage locations](https://docs.stripe.com/docs/terminal/fleet/locations) guide. + """ + return cast( + "Location", + self._request( + "post", + "/v1/terminal/locations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["LocationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Location": + """ + Creates a new Location object. + For further details, including which address fields are required in each country, see the [Manage locations](https://docs.stripe.com/docs/terminal/fleet/locations) guide. + """ + return cast( + "Location", + await self._request_async( + "post", + "/v1/terminal/locations", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader.py new file mode 100644 index 00000000..c133a552 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader.py @@ -0,0 +1,2034 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._payment_intent import PaymentIntent + from stripe._payment_method import PaymentMethod + from stripe._refund import Refund + from stripe._setup_intent import SetupIntent + from stripe.params.terminal._reader_cancel_action_params import ( + ReaderCancelActionParams, + ) + from stripe.params.terminal._reader_collect_inputs_params import ( + ReaderCollectInputsParams, + ) + from stripe.params.terminal._reader_collect_payment_method_params import ( + ReaderCollectPaymentMethodParams, + ) + from stripe.params.terminal._reader_confirm_payment_intent_params import ( + ReaderConfirmPaymentIntentParams, + ) + from stripe.params.terminal._reader_create_params import ReaderCreateParams + from stripe.params.terminal._reader_delete_params import ReaderDeleteParams + from stripe.params.terminal._reader_list_params import ReaderListParams + from stripe.params.terminal._reader_modify_params import ReaderModifyParams + from stripe.params.terminal._reader_present_payment_method_params import ( + ReaderPresentPaymentMethodParams, + ) + from stripe.params.terminal._reader_process_payment_intent_params import ( + ReaderProcessPaymentIntentParams, + ) + from stripe.params.terminal._reader_process_setup_intent_params import ( + ReaderProcessSetupIntentParams, + ) + from stripe.params.terminal._reader_refund_payment_params import ( + ReaderRefundPaymentParams, + ) + from stripe.params.terminal._reader_retrieve_params import ( + ReaderRetrieveParams, + ) + from stripe.params.terminal._reader_set_reader_display_params import ( + ReaderSetReaderDisplayParams, + ) + from stripe.params.terminal._reader_succeed_input_collection_params import ( + ReaderSucceedInputCollectionParams, + ) + from stripe.params.terminal._reader_timeout_input_collection_params import ( + ReaderTimeoutInputCollectionParams, + ) + from stripe.terminal._location import Location + + +class Reader( + CreateableAPIResource["Reader"], + DeletableAPIResource["Reader"], + ListableAPIResource["Reader"], + UpdateableAPIResource["Reader"], +): + """ + A Reader represents a physical device for accepting payment details. + + Related guide: [Connecting to a reader](https://stripe.com/docs/terminal/payments/connect-reader) + """ + + OBJECT_NAME: ClassVar[Literal["terminal.reader"]] = "terminal.reader" + + class Action(StripeObject): + class CollectInputs(StripeObject): + class Input(StripeObject): + class CustomText(StripeObject): + description: Optional[str] + """ + Customize the default description for this input + """ + skip_button: Optional[str] + """ + Customize the default label for this input's skip button + """ + submit_button: Optional[str] + """ + Customize the default label for this input's submit button + """ + title: Optional[str] + """ + Customize the default title for this input + """ + + class Email(StripeObject): + value: Optional[str] + """ + The collected email address + """ + + class Numeric(StripeObject): + value: Optional[str] + """ + The collected number + """ + + class Phone(StripeObject): + value: Optional[str] + """ + The collected phone number + """ + + class Selection(StripeObject): + class Choice(StripeObject): + id: Optional[str] + """ + The identifier for the selected choice. Maximum 50 characters. + """ + style: Optional[Literal["primary", "secondary"]] + """ + The button style for the choice. Can be `primary` or `secondary`. + """ + text: str + """ + The text to be selected. Maximum 30 characters. + """ + + choices: List[Choice] + """ + List of possible choices to be selected + """ + id: Optional[str] + """ + The id of the selected choice + """ + text: Optional[str] + """ + The text of the selected choice + """ + _inner_class_types = {"choices": Choice} + + class Signature(StripeObject): + value: Optional[str] + """ + The File ID of a collected signature image + """ + + class Text(StripeObject): + value: Optional[str] + """ + The collected text value + """ + + class Toggle(StripeObject): + default_value: Optional[Literal["disabled", "enabled"]] + """ + The toggle's default value. Can be `enabled` or `disabled`. + """ + description: Optional[str] + """ + The toggle's description text. Maximum 50 characters. + """ + title: Optional[str] + """ + The toggle's title text. Maximum 50 characters. + """ + value: Optional[Literal["disabled", "enabled"]] + """ + The toggle's collected value. Can be `enabled` or `disabled`. + """ + + custom_text: Optional[CustomText] + """ + Default text of input being collected. + """ + email: Optional[Email] + """ + Information about a email being collected using a reader + """ + numeric: Optional[Numeric] + """ + Information about a number being collected using a reader + """ + phone: Optional[Phone] + """ + Information about a phone number being collected using a reader + """ + required: Optional[bool] + """ + Indicate that this input is required, disabling the skip button. + """ + selection: Optional[Selection] + """ + Information about a selection being collected using a reader + """ + signature: Optional[Signature] + """ + Information about a signature being collected using a reader + """ + skipped: Optional[bool] + """ + Indicate that this input was skipped by the user. + """ + text: Optional[Text] + """ + Information about text being collected using a reader + """ + toggles: Optional[List[Toggle]] + """ + List of toggles being collected. Values are present if collection is complete. + """ + type: Literal[ + "email", + "numeric", + "phone", + "selection", + "signature", + "text", + ] + """ + Type of input being collected. + """ + _inner_class_types = { + "custom_text": CustomText, + "email": Email, + "numeric": Numeric, + "phone": Phone, + "selection": Selection, + "signature": Signature, + "text": Text, + "toggles": Toggle, + } + + inputs: List[Input] + """ + List of inputs to be collected. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + _inner_class_types = {"inputs": Input} + + class CollectPaymentMethod(StripeObject): + class CollectConfig(StripeObject): + class Tipping(StripeObject): + amount_eligible: Optional[int] + """ + Amount used to calculate tip suggestions on tipping selection screen for this transaction. Must be a positive integer in the smallest currency unit (e.g., 100 cents to represent $1.00 or 100 to represent ¥100, a zero-decimal currency). + """ + + enable_customer_cancellation: Optional[bool] + """ + Enable customer-initiated cancellation when processing this payment. + """ + skip_tipping: Optional[bool] + """ + Override showing a tipping selection screen on this transaction. + """ + tipping: Optional[Tipping] + """ + Represents a per-transaction tipping configuration + """ + _inner_class_types = {"tipping": Tipping} + + collect_config: Optional[CollectConfig] + """ + Represents a per-transaction override of a reader configuration + """ + payment_intent: ExpandableField["PaymentIntent"] + """ + Most recent PaymentIntent processed by the reader. + """ + payment_method: Optional["PaymentMethod"] + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + _inner_class_types = {"collect_config": CollectConfig} + + class ConfirmPaymentIntent(StripeObject): + class ConfirmConfig(StripeObject): + return_url: Optional[str] + """ + If the customer doesn't abandon authenticating the payment, they're redirected to this URL after completion. + """ + + confirm_config: Optional[ConfirmConfig] + """ + Represents a per-transaction override of a reader configuration + """ + payment_intent: ExpandableField["PaymentIntent"] + """ + Most recent PaymentIntent processed by the reader. + """ + _inner_class_types = {"confirm_config": ConfirmConfig} + + class ProcessPaymentIntent(StripeObject): + class ProcessConfig(StripeObject): + class Tipping(StripeObject): + amount_eligible: Optional[int] + """ + Amount used to calculate tip suggestions on tipping selection screen for this transaction. Must be a positive integer in the smallest currency unit (e.g., 100 cents to represent $1.00 or 100 to represent ¥100, a zero-decimal currency). + """ + + enable_customer_cancellation: Optional[bool] + """ + Enable customer-initiated cancellation when processing this payment. + """ + return_url: Optional[str] + """ + If the customer doesn't abandon authenticating the payment, they're redirected to this URL after completion. + """ + skip_tipping: Optional[bool] + """ + Override showing a tipping selection screen on this transaction. + """ + tipping: Optional[Tipping] + """ + Represents a per-transaction tipping configuration + """ + _inner_class_types = {"tipping": Tipping} + + payment_intent: ExpandableField["PaymentIntent"] + """ + Most recent PaymentIntent processed by the reader. + """ + process_config: Optional[ProcessConfig] + """ + Represents a per-transaction override of a reader configuration + """ + _inner_class_types = {"process_config": ProcessConfig} + + class ProcessSetupIntent(StripeObject): + class ProcessConfig(StripeObject): + enable_customer_cancellation: Optional[bool] + """ + Enable customer-initiated cancellation when processing this SetupIntent. + """ + + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + process_config: Optional[ProcessConfig] + """ + Represents a per-setup override of a reader configuration + """ + setup_intent: ExpandableField["SetupIntent"] + """ + Most recent SetupIntent processed by the reader. + """ + _inner_class_types = {"process_config": ProcessConfig} + + class RefundPayment(StripeObject): + class RefundPaymentConfig(StripeObject): + enable_customer_cancellation: Optional[bool] + """ + Enable customer-initiated cancellation when refunding this payment. + """ + + amount: Optional[int] + """ + The amount being refunded. + """ + charge: Optional[ExpandableField["Charge"]] + """ + Charge that is being refunded. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + Payment intent that is being refunded. + """ + reason: Optional[ + Literal["duplicate", "fraudulent", "requested_by_customer"] + ] + """ + The reason for the refund. + """ + refund: Optional[ExpandableField["Refund"]] + """ + Unique identifier for the refund object. + """ + refund_application_fee: Optional[bool] + """ + Boolean indicating whether the application fee should be refunded when refunding this charge. If a full charge refund is given, the full application fee will be refunded. Otherwise, the application fee will be refunded in an amount proportional to the amount of the charge refunded. An application fee can be refunded only by the application that created the charge. + """ + refund_payment_config: Optional[RefundPaymentConfig] + """ + Represents a per-transaction override of a reader configuration + """ + reverse_transfer: Optional[bool] + """ + Boolean indicating whether the transfer should be reversed when refunding this charge. The transfer will be reversed proportionally to the amount being refunded (either the entire or partial amount). A transfer can be reversed only by the application that created the charge. + """ + _inner_class_types = {"refund_payment_config": RefundPaymentConfig} + + class SetReaderDisplay(StripeObject): + class Cart(StripeObject): + class LineItem(StripeObject): + amount: int + """ + The amount of the line item. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + description: str + """ + Description of the line item. + """ + quantity: int + """ + The quantity of the line item. + """ + + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + line_items: List[LineItem] + """ + List of line items in the cart. + """ + tax: Optional[int] + """ + Tax amount for the entire cart. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + total: int + """ + Total amount for the entire cart, including tax. A positive integer in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + _inner_class_types = {"line_items": LineItem} + + cart: Optional[Cart] + """ + Cart object to be displayed by the reader, including line items, amounts, and currency. + """ + type: Literal["cart"] + """ + Type of information to be displayed by the reader. Only `cart` is currently supported. + """ + _inner_class_types = {"cart": Cart} + + collect_inputs: Optional[CollectInputs] + """ + Represents a reader action to collect customer inputs + """ + collect_payment_method: Optional[CollectPaymentMethod] + """ + Represents a reader action to collect a payment method + """ + confirm_payment_intent: Optional[ConfirmPaymentIntent] + """ + Represents a reader action to confirm a payment + """ + failure_code: Optional[str] + """ + Failure code, only set if status is `failed`. + """ + failure_message: Optional[str] + """ + Detailed failure message, only set if status is `failed`. + """ + process_payment_intent: Optional[ProcessPaymentIntent] + """ + Represents a reader action to process a payment intent + """ + process_setup_intent: Optional[ProcessSetupIntent] + """ + Represents a reader action to process a setup intent + """ + refund_payment: Optional[RefundPayment] + """ + Represents a reader action to refund a payment + """ + set_reader_display: Optional[SetReaderDisplay] + """ + Represents a reader action to set the reader display + """ + status: Literal["failed", "in_progress", "succeeded"] + """ + Status of the action performed by the reader. + """ + type: Literal[ + "collect_inputs", + "collect_payment_method", + "confirm_payment_intent", + "process_payment_intent", + "process_setup_intent", + "refund_payment", + "set_reader_display", + ] + """ + Type of action performed by the reader. + """ + _inner_class_types = { + "collect_inputs": CollectInputs, + "collect_payment_method": CollectPaymentMethod, + "confirm_payment_intent": ConfirmPaymentIntent, + "process_payment_intent": ProcessPaymentIntent, + "process_setup_intent": ProcessSetupIntent, + "refund_payment": RefundPayment, + "set_reader_display": SetReaderDisplay, + } + + action: Optional[Action] + """ + The most recent action performed by the reader. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + device_sw_version: Optional[str] + """ + The current software version of the reader. + """ + device_type: Literal[ + "bbpos_chipper2x", + "bbpos_wisepad3", + "bbpos_wisepos_e", + "mobile_phone_reader", + "simulated_stripe_s700", + "simulated_wisepos_e", + "stripe_m2", + "stripe_s700", + "verifone_P400", + ] + """ + Device type of the reader. + """ + id: str + """ + Unique identifier for the object. + """ + ip_address: Optional[str] + """ + The local IP address of the reader. + """ + label: str + """ + Custom label given to the reader for easier identification. + """ + last_seen_at: Optional[int] + """ + The last time this reader reported to Stripe backend. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + location: Optional[ExpandableField["Location"]] + """ + The location identifier of the reader. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["terminal.reader"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + serial_number: str + """ + Serial number of the reader. + """ + status: Optional[Literal["offline", "online"]] + """ + The networking status of the reader. We do not recommend using this field in flows that may block taking payments. + """ + + @classmethod + def _cls_cancel_action( + cls, reader: str, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel_action( + reader: str, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + ... + + @overload + def cancel_action( + self, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + ... + + @class_method_variant("_cls_cancel_action") + def cancel_action( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_action_async( + cls, reader: str, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_action_async( + reader: str, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + ... + + @overload + async def cancel_action_async( + self, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + ... + + @class_method_variant("_cls_cancel_action_async") + async def cancel_action_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCancelActionParams"] + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_collect_inputs( + cls, reader: str, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def collect_inputs( + reader: str, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + ... + + @overload + def collect_inputs( + self, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + ... + + @class_method_variant("_cls_collect_inputs") + def collect_inputs( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_collect_inputs_async( + cls, reader: str, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def collect_inputs_async( + reader: str, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + ... + + @overload + async def collect_inputs_async( + self, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + ... + + @class_method_variant("_cls_collect_inputs_async") + async def collect_inputs_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCollectInputsParams"] + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_collect_payment_method( + cls, reader: str, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def collect_payment_method( + reader: str, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + ... + + @overload + def collect_payment_method( + self, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + ... + + @class_method_variant("_cls_collect_payment_method") + def collect_payment_method( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_collect_payment_method_async( + cls, reader: str, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def collect_payment_method_async( + reader: str, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + ... + + @overload + async def collect_payment_method_async( + self, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + ... + + @class_method_variant("_cls_collect_payment_method_async") + async def collect_payment_method_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderCollectPaymentMethodParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_confirm_payment_intent( + cls, reader: str, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def confirm_payment_intent( + reader: str, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + ... + + @overload + def confirm_payment_intent( + self, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + ... + + @class_method_variant("_cls_confirm_payment_intent") + def confirm_payment_intent( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_confirm_payment_intent_async( + cls, reader: str, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def confirm_payment_intent_async( + reader: str, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + ... + + @overload + async def confirm_payment_intent_async( + self, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + ... + + @class_method_variant("_cls_confirm_payment_intent_async") + async def confirm_payment_intent_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderConfirmPaymentIntentParams"] + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["ReaderCreateParams"]) -> "Reader": + """ + Creates a new Reader object. + """ + return cast( + "Reader", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ReaderCreateParams"] + ) -> "Reader": + """ + Creates a new Reader object. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Reader", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["ReaderDeleteParams"]) -> "Reader": + """ + Deletes a Reader object. + """ + ... + + @overload + def delete(self, **params: Unpack["ReaderDeleteParams"]) -> "Reader": + """ + Deletes a Reader object. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Reader", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderDeleteParams"] + ) -> "Reader": + """ + Deletes a Reader object. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ReaderListParams"] + ) -> ListObject["Reader"]: + """ + Returns a list of Reader objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReaderListParams"] + ) -> ListObject["Reader"]: + """ + Returns a list of Reader objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ReaderModifyParams"] + ) -> "Reader": + """ + Updates a Reader object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Reader", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ReaderModifyParams"] + ) -> "Reader": + """ + Updates a Reader object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Reader", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_process_payment_intent( + cls, reader: str, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def process_payment_intent( + reader: str, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + ... + + @overload + def process_payment_intent( + self, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + ... + + @class_method_variant("_cls_process_payment_intent") + def process_payment_intent( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_process_payment_intent_async( + cls, reader: str, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def process_payment_intent_async( + reader: str, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + ... + + @overload + async def process_payment_intent_async( + self, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + ... + + @class_method_variant("_cls_process_payment_intent_async") + async def process_payment_intent_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderProcessPaymentIntentParams"] + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_process_setup_intent( + cls, reader: str, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def process_setup_intent( + reader: str, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + ... + + @overload + def process_setup_intent( + self, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + ... + + @class_method_variant("_cls_process_setup_intent") + def process_setup_intent( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_process_setup_intent_async( + cls, reader: str, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def process_setup_intent_async( + reader: str, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + ... + + @overload + async def process_setup_intent_async( + self, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + ... + + @class_method_variant("_cls_process_setup_intent_async") + async def process_setup_intent_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderProcessSetupIntentParams"] + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_refund_payment( + cls, reader: str, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def refund_payment( + reader: str, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + ... + + @overload + def refund_payment( + self, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + ... + + @class_method_variant("_cls_refund_payment") + def refund_payment( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_refund_payment_async( + cls, reader: str, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def refund_payment_async( + reader: str, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + ... + + @overload + async def refund_payment_async( + self, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + ... + + @class_method_variant("_cls_refund_payment_async") + async def refund_payment_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderRefundPaymentParams"] + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReaderRetrieveParams"] + ) -> "Reader": + """ + Retrieves a Reader object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReaderRetrieveParams"] + ) -> "Reader": + """ + Retrieves a Reader object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_set_reader_display( + cls, reader: str, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def set_reader_display( + reader: str, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + ... + + @overload + def set_reader_display( + self, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + ... + + @class_method_variant("_cls_set_reader_display") + def set_reader_display( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_set_reader_display_async( + cls, reader: str, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def set_reader_display_async( + reader: str, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + ... + + @overload + async def set_reader_display_async( + self, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + ... + + @class_method_variant("_cls_set_reader_display_async") + async def set_reader_display_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderSetReaderDisplayParams"] + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + class TestHelpers(APIResourceTestHelpers["Reader"]): + _resource_cls: Type["Reader"] + + @classmethod + def _cls_present_payment_method( + cls, + reader: str, + **params: Unpack["ReaderPresentPaymentMethodParams"], + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def present_payment_method( + reader: str, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + ... + + @overload + def present_payment_method( + self, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + ... + + @class_method_variant("_cls_present_payment_method") + def present_payment_method( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + self.resource._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_present_payment_method_async( + cls, + reader: str, + **params: Unpack["ReaderPresentPaymentMethodParams"], + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def present_payment_method_async( + reader: str, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + ... + + @overload + async def present_payment_method_async( + self, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + ... + + @class_method_variant("_cls_present_payment_method_async") + async def present_payment_method_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderPresentPaymentMethodParams"] + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + await self.resource._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_succeed_input_collection( + cls, + reader: str, + **params: Unpack["ReaderSucceedInputCollectionParams"], + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def succeed_input_collection( + reader: str, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + ... + + @overload + def succeed_input_collection( + self, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + ... + + @class_method_variant("_cls_succeed_input_collection") + def succeed_input_collection( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + self.resource._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_succeed_input_collection_async( + cls, + reader: str, + **params: Unpack["ReaderSucceedInputCollectionParams"], + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def succeed_input_collection_async( + reader: str, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + ... + + @overload + async def succeed_input_collection_async( + self, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + ... + + @class_method_variant("_cls_succeed_input_collection_async") + async def succeed_input_collection_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderSucceedInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + await self.resource._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_timeout_input_collection( + cls, + reader: str, + **params: Unpack["ReaderTimeoutInputCollectionParams"], + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + cls._static_request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + def timeout_input_collection( + reader: str, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + ... + + @overload + def timeout_input_collection( + self, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + ... + + @class_method_variant("_cls_timeout_input_collection") + def timeout_input_collection( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + self.resource._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_timeout_input_collection_async( + cls, + reader: str, + **params: Unpack["ReaderTimeoutInputCollectionParams"], + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + await cls._static_request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(reader) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def timeout_input_collection_async( + reader: str, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + ... + + @overload + async def timeout_input_collection_async( + self, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + ... + + @class_method_variant("_cls_timeout_input_collection_async") + async def timeout_input_collection_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReaderTimeoutInputCollectionParams"] + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + await self.resource._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = {"action": Action} + + +Reader.TestHelpers._resource_cls = Reader diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader_service.py new file mode 100644 index 00000000..8cb36a77 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/terminal/_reader_service.py @@ -0,0 +1,604 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.terminal._reader_cancel_action_params import ( + ReaderCancelActionParams, + ) + from stripe.params.terminal._reader_collect_inputs_params import ( + ReaderCollectInputsParams, + ) + from stripe.params.terminal._reader_collect_payment_method_params import ( + ReaderCollectPaymentMethodParams, + ) + from stripe.params.terminal._reader_confirm_payment_intent_params import ( + ReaderConfirmPaymentIntentParams, + ) + from stripe.params.terminal._reader_create_params import ReaderCreateParams + from stripe.params.terminal._reader_delete_params import ReaderDeleteParams + from stripe.params.terminal._reader_list_params import ReaderListParams + from stripe.params.terminal._reader_process_payment_intent_params import ( + ReaderProcessPaymentIntentParams, + ) + from stripe.params.terminal._reader_process_setup_intent_params import ( + ReaderProcessSetupIntentParams, + ) + from stripe.params.terminal._reader_refund_payment_params import ( + ReaderRefundPaymentParams, + ) + from stripe.params.terminal._reader_retrieve_params import ( + ReaderRetrieveParams, + ) + from stripe.params.terminal._reader_set_reader_display_params import ( + ReaderSetReaderDisplayParams, + ) + from stripe.params.terminal._reader_update_params import ReaderUpdateParams + from stripe.terminal._reader import Reader + + +class ReaderService(StripeService): + def delete( + self, + reader: str, + params: Optional["ReaderDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Deletes a Reader object. + """ + return cast( + "Reader", + self._request( + "delete", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + reader: str, + params: Optional["ReaderDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Deletes a Reader object. + """ + return cast( + "Reader", + await self._request_async( + "delete", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + reader: str, + params: Optional["ReaderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Retrieves a Reader object. + """ + return cast( + "Reader", + self._request( + "get", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + reader: str, + params: Optional["ReaderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Retrieves a Reader object. + """ + return cast( + "Reader", + await self._request_async( + "get", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + reader: str, + params: Optional["ReaderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Updates a Reader object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + reader: str, + params: Optional["ReaderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Updates a Reader object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["ReaderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Reader]": + """ + Returns a list of Reader objects. + """ + return cast( + "ListObject[Reader]", + self._request( + "get", + "/v1/terminal/readers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ReaderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Reader]": + """ + Returns a list of Reader objects. + """ + return cast( + "ListObject[Reader]", + await self._request_async( + "get", + "/v1/terminal/readers", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ReaderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Creates a new Reader object. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ReaderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Creates a new Reader object. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers", + base_address="api", + params=params, + options=options, + ), + ) + + def cancel_action( + self, + reader: str, + params: Optional["ReaderCancelActionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_action_async( + self, + reader: str, + params: Optional["ReaderCancelActionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Cancels the current reader action. See [Programmatic Cancellation](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven#programmatic-cancellation) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def collect_inputs( + self, + reader: str, + params: "ReaderCollectInputsParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def collect_inputs_async( + self, + reader: str, + params: "ReaderCollectInputsParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates an [input collection flow](https://docs.stripe.com/docs/terminal/features/collect-inputs) on a Reader to display input forms and collect information from your customers. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/collect_inputs".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def collect_payment_method( + self, + reader: str, + params: "ReaderCollectPaymentMethodParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def collect_payment_method_async( + self, + reader: str, + params: "ReaderCollectPaymentMethodParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation. See [Collecting a Payment method](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#collect-a-paymentmethod) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/collect_payment_method".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def confirm_payment_intent( + self, + reader: str, + params: "ReaderConfirmPaymentIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def confirm_payment_intent_async( + self, + reader: str, + params: "ReaderConfirmPaymentIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Finalizes a payment on a Reader. See [Confirming a Payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=inspect#confirm-the-paymentintent) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/confirm_payment_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def process_payment_intent( + self, + reader: str, + params: "ReaderProcessPaymentIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def process_payment_intent_async( + self, + reader: str, + params: "ReaderProcessPaymentIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a payment flow on a Reader. See [process the payment](https://docs.stripe.com/docs/terminal/payments/collect-card-payment?terminal-sdk-platform=server-driven&process=immediately#process-payment) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def process_setup_intent( + self, + reader: str, + params: "ReaderProcessSetupIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def process_setup_intent_async( + self, + reader: str, + params: "ReaderProcessSetupIntentParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates a SetupIntent flow on a Reader. See [Save directly without charging](https://docs.stripe.com/docs/terminal/features/saving-payment-details/save-directly) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def refund_payment( + self, + reader: str, + params: Optional["ReaderRefundPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def refund_payment_async( + self, + reader: str, + params: Optional["ReaderRefundPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Initiates an in-person refund on a Reader. See [Refund an Interac Payment](https://docs.stripe.com/docs/terminal/payments/regional?integration-country=CA#refund-an-interac-payment) for more details. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/refund_payment".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def set_reader_display( + self, + reader: str, + params: "ReaderSetReaderDisplayParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + self._request( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def set_reader_display_async( + self, + reader: str, + params: "ReaderSetReaderDisplayParams", + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Sets the reader display to show [cart details](https://docs.stripe.com/docs/terminal/features/display). + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__init__.py new file mode 100644 index 00000000..ec9625f6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__init__.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers import ( + issuing as issuing, + terminal as terminal, + treasury as treasury, + ) + from stripe.test_helpers._confirmation_token_service import ( + ConfirmationTokenService as ConfirmationTokenService, + ) + from stripe.test_helpers._customer_service import ( + CustomerService as CustomerService, + ) + from stripe.test_helpers._issuing_service import ( + IssuingService as IssuingService, + ) + from stripe.test_helpers._refund_service import ( + RefundService as RefundService, + ) + from stripe.test_helpers._terminal_service import ( + TerminalService as TerminalService, + ) + from stripe.test_helpers._test_clock import TestClock as TestClock + from stripe.test_helpers._test_clock_service import ( + TestClockService as TestClockService, + ) + from stripe.test_helpers._treasury_service import ( + TreasuryService as TreasuryService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "issuing": ("stripe.test_helpers.issuing", True), + "terminal": ("stripe.test_helpers.terminal", True), + "treasury": ("stripe.test_helpers.treasury", True), + "ConfirmationTokenService": ( + "stripe.test_helpers._confirmation_token_service", + False, + ), + "CustomerService": ("stripe.test_helpers._customer_service", False), + "IssuingService": ("stripe.test_helpers._issuing_service", False), + "RefundService": ("stripe.test_helpers._refund_service", False), + "TerminalService": ("stripe.test_helpers._terminal_service", False), + "TestClock": ("stripe.test_helpers._test_clock", False), + "TestClockService": ("stripe.test_helpers._test_clock_service", False), + "TreasuryService": ("stripe.test_helpers._treasury_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f49a3e942cc1eed919c3996530cbd400c4d66a41 GIT binary patch literal 2058 zcmb7E&2Jk;6rbJoXV#yw9lI_OAr2}A)hoVo;7g(=AEhWl#2mUpS~=cnvdVr~GvhR_ z94S;BdhD$ikT_E1U*JFBLe+~|l>>qcH-`{FIq_z^##ZF0;n{xso7vyYy!Yn){6jK1 zgTUxtWotf;(64+jvP1w*z6bCKnaGrEF(|xHC#UBGp0V>zK`#ib z+H+1(F9J@ONi$`p&5W5fXU&|MHw)&RS^QenOIV>Hv-B0xuXN#4E&t9_sY-s*a@rnY zhU1wX8}o_A?N3*X`ua-!*3FHzs^Uj2N;{Uj?Z+4mN7-NrM?&+wg&YmO(%6O9b;?x~QAzSo+`a7v!tm zXttmiO>Gamdzx)+Y3(lC@!U6SufL&Di{a~SAT+lz4cc0p6pm&XmTNJ?sI|M0juC`! z7^DmVEW?j}4(<>QWHnxSR;hi*o>bm?l2~}K`tXxyg~e}|pB7$yu=-Q_YQH%DF!@`q z+|SJQGx?LSl1~kgl1%;cXAEUZe;^5#&n`TjUHmbzI8b18M){53FIUkwY85@szprdm z%YJ-VQOILh&@Ah=Axi`AGwf3ME24y##?MV@({o+s|6d)8w)Cerb?cmxMfdub(z57r z|1xS8LbxD+^LiF~@t>z?At?W{nik5t==^i476K(%xC_xLkI@N0M7R*oV($&R_yh6^ z47mj9m*C*qCFwMRq@|zHYriO&zvWOka*V*8&dA^*(;Nz~NvHDY%^-m?Z}&6H@Eyp? wOOZhgmDZ*H+)BSt?-$ql*?0S;j{zLdr_=JGdc1&Qg_BSsTp5G`k!ujezwIV>MF0Q* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_confirmation_token_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_confirmation_token_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..706a738fb467b04b7ee294b01681b1e695303068 GIT binary patch literal 1854 zcmbVN&2QX96rb_euASYm*;GloD8v+k={$XuomAz-f6kpdU2=De zuq0p3U}k#AZG{piAvYcB1gx1ylVhQ$bl(GE4-sTx7g>UeROD)|KtxwO4;EJfNzNq2 zEvzYSaaXpar+TU2CAY9Kl1>eU)Vp{iRpKlxs=_&GA<9T#w8%Aul4Og9lti3va;})}=n1f@ z2a!wk!RYmjc%4Dw2-TSf=Cz3Gt!RttUYL+|nx!XO&FcSbn_VK6;)o?DFPhtnCg0uO zAbw0JGn)g6wG*CMmWod7JrdK>ZHE!taa~Fnqa}!$mH`Zb@_VF3o96ikSBVjS?bL;F zBH&ghJLX0d5OY1eXI>_3Gl^pJT9gofVL6I6y>Q)JcA9XcYi^Tp+w{HLX530PqVVPV z;zg5r30a82!C5EFWLedo4c;D(-sbc`UDxAQsx-6eyFW9?Vn$-G2I{#(1)^oI0DOv$ zDyVXmXIty0C7zMjpUq z_XB|I2>EO&c>?{XR7SM=8ach!j>tFs5y* zETuIL&jCC_^jR+Rd(n|TJOcs?0d`SGL2tZ;+x3gT7sh1mr^?jh^RFFLUhl}DfvsA5 zT$?)>o9}RIr--!auF9pk|G4UiugXK=Q8bLvbRsX~x}AUf)k=B8q)O6?p(*m)WIZ;P z&)DQ%0*wi8FQf23L20eO&2R(c?LOIe==G?5=6PG{S@Q?5KKLNi|E;Hbr7`ec=Codb zSWc-vDK6#dd6ODo;7=o)1L%kt<6{Nk#V6?bLp1-hSUHrI4y8-Sf*>nL+AP+-{^S_J HC)?|9Mt|te literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_customer_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_customer_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03a5afe22814bcbff6a41dd57188ed747a2bbf0e GIT binary patch literal 2130 zcmcgt&2Jk;6rb5Iuh$>3oir&yNnM~6H`Gg7qzLgLwWhRH)ijV^@MX2}PLgeQ*Y3p?;!tZv1&9mWjGO?E7rwO79Giz>$0oVm2fXP zDOatl7!j40z*ctBu2$DVo#JHNY&{#wDJSRV>v@a>bQM|Z2C~uwZ;R3I)`vP;CG$Jq zRB(`+_o>|?^MtP24FU%lW_q@7uMxwxDng*%YWa54Go3(cn9S!Mx8I+;V$`l(sol6f zdle2QYi;H?T|#RnTfS^Mrq>|1sp&DZ!Ck>3{~o#9Cd`lSVsJ8%_`K8htO36{lbSAT zM3F|AjyL@|5H=A(b!?%!kVaO<5{PJtmSo99vXo~)Z>21CQMJ+=khXud(7;0J;7T?a zNsmQpHA+mM zlufT}dyS@RdrM^>D&aOQQeH5)hU0CQge`rYEUk z`u#-wP+x>18bFU_V<9U47N$7}ClJk+y(I?O1(OlOv@A*(qj}KKA%KcR6>g;(G~!2~ zEH{{BiqKUk29cOWr;GZNgUkW=p@;^oeu+a0PW&U(lKDlk+VwFqa6^S=aJ=AGCJhr4Ejv{TKoW4U}!;DA-^ck2_4~Zg2O0>F@V{G6#0Y{hRHf! zgN}0xUVHj1zyS;B1nh#bV>yq!*3SNCaU#PCztaHt4gEb(rPAo*(wUvonWw7L@QYBV z;rw4mi`A2$cKeL;{^Qp!DfkDB$faG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_issuing_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_issuing_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acf6f9056cb3b123805e9ed762c16dbd921d9a7f GIT binary patch literal 2253 zcmbtVO>7fK6rR~1du{JJCKwzjR2HU@oC9N;ddg%pZRdQEBYSmM3X%i6Q)Hmzh#IzMs=_q;o-kUdX z-hA)JKN?0J!QxN$yVWd0zX>5-YQk*Z1?C=dkb^zc!WPDYmprK@TXM|Hp3+h+6(g#$ zG1ybQOe&w6^xungceCpRZKd8YtWcMPCKX9Q^JE5#~G z=rnS6-A2wR#cT2)B5P!EcfI_(5b8KGW<%z-=`3Z}-6jYEls}AUR*mA zIdS69w>@aW!y7O35bnHf`&dpOu0+M>p1~tkM8~7bzhBBDeaIJYf{*Q$BouAVfa)_S zGKwthAWQlPijB&SbR6`K44e{kDsY*Y%L1nfZUtS&PVTm5DNg=2veXr{fUV3dsu!Z- z*#YiJMq`|rsCOn1WCcM45=<9FJdPPani7z7i3r92=3yXT;Cm=cchDWFi#~@Y>Ebm! zP-3)*?&F!d6sf!eXha$zuJ49~)a6Lw)Vmzz7`@hk+6Y*bBc$osoD;&u4b|%Mvuoy+ zphe9&f5C)en-7Dwc_s*{cjROc%tHm4C++4u^&Rs%^{<1Rcsq#EhjWp~D*yJT3PnXfUX57g>)W%l#{iM}4 zLH9gR0@4_$AAq@sazj9M@jlRf46xpmZpxvsidUFU7}S+g2)puH0{=}V6h7nC1&}4w zRl4Y^NZ8+2dN!R881394PNp7bQ4NLhyb}%%Lj{1P$auWglJ6~i11-oG(GARYfvTR3 zbizBAl4j*mc8-R27&4~7Zj|K%Daw4WEpKpMy|GAGrv_H z*4}=oS69xhR@M*H)=LLh=X<4zeyOsl$_I-pA8u*LDECX^?`PO_z7D<&dZorzRxyfO zc~pL7^{sEpz1`yv^zoL874F21(x)F1Dc?30(-O&qc&cq$zsY;UE3S;UE3);UB%+@Mrr|%ccQPo zx}nOI%!Y}7zIFhFJ()lD6id>wzICXAYj;0+jNlW; F@)!5}e8vC( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_refund_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_refund_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fc9a6a0c4b38bd3212e951aba8b7f1f8bff7ef4 GIT binary patch literal 2025 zcmcgs&2Jk;6rcU{di@dG2?=r3HhiRDqIgM=ia-b{2~mrxxK+XhUzV+Rl5DeUZ)VnR zoCc|)5fTy-J&`NdDCI8zi9di#qaJFlhyZbcn~@VhIq_!4+a!VmaA381`+M`=n|*J7 zZ{D|=jE>-;zZIQtRD^zFO8h8&&}#wMMK-bp7kNTe5EvF+(UYoDge6z@l&a#XRW;IO zH{oejO+Z*91@Kkeq^DQ)$fmj}FI`PXIN@fzY&9z&5nV;Lwu9^>7WO6n-|9eHFQtBA zN=XPa%K>qGyo^c9sbN@1QLF9*&K5QuyCjC%4L@)ib;}LqnneQ^@!tD47tHx<3-j0C ztz3l#bqTLD>o%b565eQH8t@njD+O*_*z_HOZ(79iXpN`AWwNjIJ^-+bFsceRs)|XJ zM0Uy+v1ChFw&hW<+6o{wLJ3=2(d^_7oXtP-)WK723#D|J;raB-t%NFxat~EM%8fAA z!bBsgnG%*Aa|xQHPBc(zGKly|0bpm^3qb6mK!^>tu#Il_Pdi>?Ut6@L+cEoR3_&7R zwuSxvE)V4x*~+%KEj?8C`;q%1_g+S&#L2uq-hcQJk6YusqVYRUum&0pte{E98!NEB z(F78xY1J5`<)@KRWufdhXmIkf(V8{_pwL{yu8#>d_;%E|%fW{Rj=0$cIt^_Jl}w+z1>tTpPdm8WM6 z>I8Vo2M22vQ-elre!etFiZ!lDdGnY3cBt~|wuY7>Q@>Bjd^Hbw(HkJ{p`!xI4RzA+ z=002eWU-SQ?&RKllAArq&3-p_`HR-$v2s^J`8lD7#C)NvqKhwdMlN)oz0@5*nPLxV znQTu<<@7E}CG{R``PbIE4~xAAAg&|fe{8S&$WGja=KWmUl|EJ!blPsOqffOjr8`0i zh7Y6_wGA0$Xo!htm>6ba1VkmKJ{wbSTC`oSks|Y843jYsPq`)+Knv6Sptow#;huQCCtkD*GWJn zu~I1|pr_5cSA z*g;(l&0Oh}XMRl%Df$n&!L9;d=%D=QqtU5@T)CTIx`qnHN5xkT@{?WW*VU0;=%pB% z`LE$eESx9D@~V__;V{28Ws`s7n?j&JfUMZq3>-J2G*pAO5BHLn9NqjpUor7!fa?_I z4kc{bh1ocm-$6cuMot%_XiiGJy^y2sExkEJhqm(<8Cl2K+$D*jHNBX3oKUh3Q@QJqj6S&v( Ai2wiq literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_terminal_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_terminal_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32075876855d37e807dc44910097a09b47848059 GIT binary patch literal 1595 zcmb7E&2Jk;6o0cH_B!!8ZfZzMQ)JaqB?I+Rz9ggyk(Q{1hzOB#=n84%cqhq{^{zX! zPUFatqAG~=fW!qQoZwpJ!oR?U3ztR_QdlJi#G&dfB54)n#GCz~1x`HKGjHC9+#Mw(#WTvXufP8VMs@Tfp(%WDcjsgMz>)wNS@Ed*_5&HKyN z2TUx6LC3logv`5qEeIA}f8M&*Y%Mb1v6h&>WO?qa)#-%`f&XUX${Ut&Lw31?2F-aU ztOQ-_d2}tB!JEO_==8XWu~$a_g+?Pw`~}pCGA<`;uy2_6^E<}q*12De+7ZhB36;by zhU#ZzHlgqwRDE&|WuGIktIDbxN~@T{tbw7gWFYp{?X&=^S}5;~sgE!#(AWC#g^|gg z?U`@Zv;>~Tke=C%Gf;yt9w+HL4tx+TB>*vPr~5r}7narAaF_5w6xH)lk&5nY+KM8| z&$F-@hMa4tjq)NnMFZHgS#6Ce)|=!Ut6Z8uOLw*#viMxrc}aR{ezVP@!E}1&c+i#? z#ZwiTDU-B^kQh}Z@iWqMkkT|hr7P$ETerWJqi8LBT-M-FF$=Z*n)Rc$Q+s=-SlyV~ z8rdJK?UyfXE$)_I*(;A6>FR~j#>dA7n3cV<{QZVX=lkHhV7J^j&TD4rcmOKrx8C}p zvU~Q@!{Vir{h^URf#AKv)!pHX4~rKMRXm-FB8I#-QJ5&gPsPeaRYm-84&-|&MUc`@ z1@c8o?{u49su`lR>H7g9>jpj!MckPDW%*iS(f&-S+_)OUA;P_Ft z95P?X{J5-2^#8wMypkpH0Fs1cQBRGl$p`d3UdN++nRpi$M3j&xIUrXKpmqSS{;rk} mw2uyRpqKWHclL~tLtQQB4pqIZtQC*T6;k`A{RD7}ul@@M0G?w2 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7b13255ba35e62215fa9150128a70c5dc1f2878 GIT binary patch literal 11545 zcmd5?TWlQHd7jysy>fTCH*!}LFC&toxVmsH>uQOzOjAI zF1Kgf%aLrP9L+{qyRQ^0$FuQrBAY08WIIHGbkJUy&tK{+C$mXL6DXz1+p^nOy{*($ z-k#mg>cLWXxhLDh>Y-9^xi8x%3NGQSpoZTQ)OI4O?c0DCBAItDzu$9nPP58vBpv-N zKBPsX;}j)%o#Zc;$k-b%ze%*}G%XN#kvL6CL~m^myjs-s*Dqcs1s$m3_|!@iJg?K@ z6fwzMMxs#4Yg(>M^vSB4o5|B+zM>m#TE0@$i*qDbRMWEIJB38w$Wz1j`jlR*R`Ml7 zF61@c@Kt9BEmiYsS~9$^7Ii}5mFKO>RK9S<2wnKr8)tH-UOIE?+{@!{2eKG|q~lK`h=#_UnxBIaeovUba8 zSwzT+s*rWP1s0Z-R999eZsJj0s4J!~uPTi~ooP}AO}dHip2UaB`bmIzRS&-R3#1MD zc^&b83#AHIdQ z%SpS*>b5&*IyPNhw@uYpUFQa?>#^ywoosczo35_UNein(xhV~~$?6Wr`{V}i`yKC7 z@P5FQ{a|AZkGj)AvyE}L5!H}Q)!?qnq7sOO zRZ9$-^h zUGqB7PSENcfia3@!p52;$`r(8rAn2FX?>cKy-L2KDtR7i6}<|5v?)?3PQZ#d1@8=R zsuwjvXNdAPxj0#^UeQ=j$R9dU3X}QDC8CWeV-vuVqQf+tRdZl%FI$?mS^|s!*-XAv zRIxjwpQe;lbcGLCoj}&8q7^_`v{+S!ahXhptQ}I#beW|YExp&A{^^D(S1ByATAnJA zYmI4eFc8fZLZ(ca6f2jMi7I_NPgN#B5abBsWiE-U$xV{d6rtJ(dtf{pZLgnv<;>M_7 z9#k-`orZK@ENM*>O6KgVsdW<)7)lj!8MCgmw6^1dm2;a18{sJ!WMIVfJiSEp95<*O z8q|2&ZTNDzO1?~TIU|tEft5~|upZ3iu1@Dm<{PO9XrVoq%U3E@SSmmREtk71tm5L< zN}0)OnPe_iu4PUW?TTKV%Dhz7Non6nFfo`oa}rPjsi>J5Qklt=iWf6evj9UX2S)Zk zo6!JF>_Zrl2jk0V47FsOYRTkmy^KuF8vX`Dv>Rq0fu9zF;(cL78CVJq)LpJngbqRr z9fHE}bNhvLjHi9H7u)-=P_Xb~fn>A|i+(7KSgu&95SrtNNuQk}8Xds5Y|NcV5^B;H z?SeKywStBty)Qg;$^OVf@Sy;=dQeDoFT7lf4=wqIR(jJPJ-66%sOIb9gQamWFL!+P zg5gyW@e$Ps@rstqqc0k54viVEqH6d`#TkMD#gI`!hKC1?v_yB|h!M~hp@80U6JSpe zAq+Rf7IoI}pl42NMws7o5WUdgjDRg-!!yOe8ja#e9!em>R0=M5ur8Do{#K`;xFhH$ z769}i&I^|0KNPE`aW4?5r=vc1<1n& zPEC`ra6_J|YWmv#%*_5~leNXEW!|wLu4njC$z72ihW>Cn0=KkGgE(4y4yP>^a+F-1 z25&Yz5VgvAo%)ehGNeLDWBph!4JC~$VHOz#a|LtZ{LI+^e8k!Q9q6H*gW_G`VOWSH zR)WcuVEb~guNLfEiFB?+PAx}XsYPD-v~TxE$CmmI*Cio(PFxjS(OBIhq)FW*-2$!9HfiyDoYRs^iRy-~n0ZETCE~4!qXlqZb;H z%xtOx*(w^#yFxu8_=8)Rlb*pz&~5L!3|S+kiIy4ZS$I3wI@>HXYvycWYc_fcTASF! zn8Voo0aU&wHxMqPs@Gj=!zC=&0LL%|J}=()Y~UnbCU9n>^f(MhF-=emmGlG_&qI-R zbF1@N=0;z{SGWK}f;2&2ftu#f&}Q<$b?09rU_`dJ& zrMJcO#v*S>d)#vJj&)9+%WJchf-QSG2AnnfcFgI+oPMs`c9Pb&e}zMQ3yR+e|Lssp ztYbO0rxx3@UM-urdVDXaBOd;*W`D2C;Qnh`JB)tg$e1ktLL74i{>cxuChtI{F-2iy zbBWy*F7CRnC zp*)>%e*s;zJQVBfwsSeQvliRA-fo`|PU1t4vELZXa%0Rh78ifz6UU-~U-|t|r`X)2 zL_9)5Q(MhKv9%}}PF~BuSg}m+9D#GRnHiWoU zyhxP1uICGrh-<2htT3(VfWj%?(p{Yf0IscrD?Amj*e@~d(HCGrhMxo7XbzO`@yI@VKVol5XsMPW%V)NZ{xG=R`x&iYkpmYZGQ~nDHFE zxg&tM)+07(w@maWqAKc;?f7M5^Ph+xO4lX5Vce<<#%W-9iyrX4G%o>qmp1?=?zLSF zGv^1rXy#z5=DCV(v1?+6V{8xK3vtXMbIBt}u`T$n%*_@f2eVy60%O)NBLF@&0dgBl zlYFc>`xu(zW8VB*=%68P1eh5Xx_W-v^VdBe_TAs}ap9BQ#}>oKZ%LoF$D1*8Y9$ii zvTei2Ex@<{Z4F@DV8EFbDFG6v=kdj^K`VU;i$N%wVir6%&qFUG-2fIX0eR!mWiSs5 z0|y!ycoIfvnh8yz4SuVb$~QBs&9;S>xj{s9S*8LTJc*)A7}s3q@bSV~uKq(s6ut zS;$V?p`(YfOOI@Mix;aiw;Jhs98al zqSe875jYM#Lur*7GMQ}g6Lo^ zI=B*y!kHAF9(?dRkHfK@pzc`UmIo1L*TT@xc7M{o@6*`!mB^7#SZ-rXZBPxlx&%Z+D|H^%y$}r@wZW!RCN0^hk=`~=7Hq<>% z@f-`ZY2#JIeoT$@9jwh`(Tl}(D4G=(Kn0l*G106x-ufL>-WBL)d2DL?a`Ks4@|jls zrS^mVQs}N7I)NNprqwwYqe9WJRJ=cU-6y{w& z6MrCH2XOj0@GA=Q68M|AmUj9Z`-j11P!;~y;59*s1w|2Ia471t9B5ry^})$H8+9&b z%hzhViqb_~_pb0DEF_Y*X)Qju@C_(#`Br?9WnZf1OMT+&T4_(-YUdX2#3qddfeDLS z_|u93(t+qq2V5**Z60QAE_xG&9tX}tCg*1Ce;=CHaT>O`GVLkV$}fL2k6a&s0hmp- zG9K<+4iDDCgG=F|W#7;ud{064;ULk!%MAWK!{SfHA^C5-!{T^)VBNu z@lzTNU=hZm9}C>a&@>i1u)s(Sdnp~_+{J3OWVEqOGXMJwMHs>kgeji!7(sq)Z@$D+ zWs2yKod{8cLiCTZ_!BG;LUR~~X`NzHlL z&t%ZYBZNC|Us_OqSgwTzm*hdKHIZDBJFSOU$C8||9{j4w%-N$^A&UA!Jl!y*g^m+l}O z7DA16OZ6`H9jT>`wvhAp4}h|3VPwgj=1a55VJXff?QSfIFYf;x6N_EIMdk@yJmch| z%^g^nSll^U>pf8y;Nh2hzQmiU0I1cwm?}b`s$|b%@1a@}z7@d}lMCEUN~qO)8D$tK zV;yw~?>lxa4!=;_@gjR-J)qU>0kyi~RBkB3mD}CFIB=}ieY{0mt;&_%!G)Q{p%b;f z=K&bHgTFlfCEmCZxS;kRh^pPUO+j_ zrzH2eQ!CL#UBbIEw7BcVnli?o*!rQ>oB(PNhR~azuE+L0AHBA??O09j(**t{b0jyd7fU=t;NHOS0FZ`{*E}I%-r*-(EVV@WyBxWulZu9a zyWlB{WuOT5K4gx{zuNQvuvmX+ar|?_`ZSz#e%(K~#lGh8rP&qF$c?RbHTSh<*En{4 zc8jwz1(+RiCubbqV#fyFFgqhem#+Cn`QKfhryl|dpbtTtfTAvmqWH)oh$qF* zgcm*&c7GUrd8EglAnZt?hvylr7mO&(g2 YQw!T`^3D}GxzJXV2OoLyEwkYN0hOF$fdBvi literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/__pycache__/_test_clock_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f95e517e91fba2335434afb952b463c8fdfe719 GIT binary patch literal 6256 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 SVs`V`h*0|4-a_yRqWl}T_v4TN literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_confirmation_token_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_confirmation_token_service.py new file mode 100644 index 00000000..ca34933c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_confirmation_token_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._confirmation_token import ConfirmationToken + from stripe._request_options import RequestOptions + from stripe.params.test_helpers._confirmation_token_create_params import ( + ConfirmationTokenCreateParams, + ) + + +class ConfirmationTokenService(StripeService): + def create( + self, + params: Optional["ConfirmationTokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConfirmationToken": + """ + Creates a test mode Confirmation Token server side for your integration tests. + """ + return cast( + "ConfirmationToken", + self._request( + "post", + "/v1/test_helpers/confirmation_tokens", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["ConfirmationTokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConfirmationToken": + """ + Creates a test mode Confirmation Token server side for your integration tests. + """ + return cast( + "ConfirmationToken", + await self._request_async( + "post", + "/v1/test_helpers/confirmation_tokens", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_customer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_customer_service.py new file mode 100644 index 00000000..a9da41cc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_customer_service.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer_cash_balance_transaction import ( + CustomerCashBalanceTransaction, + ) + from stripe._request_options import RequestOptions + from stripe.params.test_helpers._customer_fund_cash_balance_params import ( + CustomerFundCashBalanceParams, + ) + + +class CustomerService(StripeService): + def fund_cash_balance( + self, + customer: str, + params: "CustomerFundCashBalanceParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + self._request( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def fund_cash_balance_async( + self, + customer: str, + params: "CustomerFundCashBalanceParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + await self._request_async( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_issuing_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_issuing_service.py new file mode 100644 index 00000000..c9f26723 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_issuing_service.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.issuing._authorization_service import ( + AuthorizationService, + ) + from stripe.test_helpers.issuing._card_service import CardService + from stripe.test_helpers.issuing._personalization_design_service import ( + PersonalizationDesignService, + ) + from stripe.test_helpers.issuing._transaction_service import ( + TransactionService, + ) + +_subservices = { + "authorizations": [ + "stripe.test_helpers.issuing._authorization_service", + "AuthorizationService", + ], + "cards": ["stripe.test_helpers.issuing._card_service", "CardService"], + "personalization_designs": [ + "stripe.test_helpers.issuing._personalization_design_service", + "PersonalizationDesignService", + ], + "transactions": [ + "stripe.test_helpers.issuing._transaction_service", + "TransactionService", + ], +} + + +class IssuingService(StripeService): + authorizations: "AuthorizationService" + cards: "CardService" + personalization_designs: "PersonalizationDesignService" + transactions: "TransactionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_refund_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_refund_service.py new file mode 100644 index 00000000..92969f29 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_refund_service.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._refund import Refund + from stripe._request_options import RequestOptions + from stripe.params.test_helpers._refund_expire_params import ( + RefundExpireParams, + ) + + +class RefundService(StripeService): + def expire( + self, + refund: str, + params: Optional["RefundExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + self._request( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(refund), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def expire_async( + self, + refund: str, + params: Optional["RefundExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + await self._request_async( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(refund), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_terminal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_terminal_service.py new file mode 100644 index 00000000..49c51e86 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_terminal_service.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.terminal._reader_service import ReaderService + +_subservices = { + "readers": [ + "stripe.test_helpers.terminal._reader_service", + "ReaderService", + ], +} + + +class TerminalService(StripeService): + readers: "ReaderService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock.py new file mode 100644 index 00000000..ebc506b4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock.py @@ -0,0 +1,391 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.test_helpers._test_clock_advance_params import ( + TestClockAdvanceParams, + ) + from stripe.params.test_helpers._test_clock_create_params import ( + TestClockCreateParams, + ) + from stripe.params.test_helpers._test_clock_delete_params import ( + TestClockDeleteParams, + ) + from stripe.params.test_helpers._test_clock_list_params import ( + TestClockListParams, + ) + from stripe.params.test_helpers._test_clock_retrieve_params import ( + TestClockRetrieveParams, + ) + + +class TestClock( + CreateableAPIResource["TestClock"], + DeletableAPIResource["TestClock"], + ListableAPIResource["TestClock"], +): + """ + A test clock enables deterministic control over objects in testmode. With a test clock, you can create + objects at a frozen time in the past or future, and advance to a specific future time to observe webhooks and state changes. After the clock advances, + you can either validate the current state of your scenario (and test your assumptions), change the current state of your scenario (and test more complex scenarios), or keep advancing forward in time. + """ + + OBJECT_NAME: ClassVar[Literal["test_helpers.test_clock"]] = ( + "test_helpers.test_clock" + ) + + class StatusDetails(StripeObject): + class Advancing(StripeObject): + target_frozen_time: int + """ + The `frozen_time` that the Test Clock is advancing towards. + """ + + advancing: Optional[Advancing] + _inner_class_types = {"advancing": Advancing} + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + deletes_after: int + """ + Time at which this clock is scheduled to auto delete. + """ + frozen_time: int + """ + Time at which all objects belonging to this clock are frozen. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + name: Optional[str] + """ + The custom name supplied at creation. + """ + object: Literal["test_helpers.test_clock"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["advancing", "internal_failure", "ready"] + """ + The status of the Test Clock. + """ + status_details: StatusDetails + + @classmethod + def _cls_advance( + cls, test_clock: str, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + cls._static_request( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(test_clock) + ), + params=params, + ), + ) + + @overload + @staticmethod + def advance( + test_clock: str, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + ... + + @overload + def advance( + self, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + ... + + @class_method_variant("_cls_advance") + def advance( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + self._request( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_advance_async( + cls, test_clock: str, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + await cls._static_request_async( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(test_clock) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def advance_async( + test_clock: str, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + ... + + @overload + async def advance_async( + self, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + ... + + @class_method_variant("_cls_advance_async") + async def advance_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TestClockAdvanceParams"] + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + await self._request_async( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["TestClockCreateParams"]) -> "TestClock": + """ + Creates a new test clock that can be attached to new customers and quotes. + """ + return cast( + "TestClock", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TestClockCreateParams"] + ) -> "TestClock": + """ + Creates a new test clock that can be attached to new customers and quotes. + """ + return cast( + "TestClock", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "TestClock", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + ... + + @overload + def delete(self, **params: Unpack["TestClockDeleteParams"]) -> "TestClock": + """ + Deletes a test clock. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "TestClock", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TestClockDeleteParams"] + ) -> "TestClock": + """ + Deletes a test clock. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["TestClockListParams"] + ) -> ListObject["TestClock"]: + """ + Returns a list of your test clocks. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TestClockListParams"] + ) -> ListObject["TestClock"]: + """ + Returns a list of your test clocks. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TestClockRetrieveParams"] + ) -> "TestClock": + """ + Retrieves a test clock. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TestClockRetrieveParams"] + ) -> "TestClock": + """ + Retrieves a test clock. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"status_details": StatusDetails} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock_service.py new file mode 100644 index 00000000..07f5af6f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_test_clock_service.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.test_helpers._test_clock_advance_params import ( + TestClockAdvanceParams, + ) + from stripe.params.test_helpers._test_clock_create_params import ( + TestClockCreateParams, + ) + from stripe.params.test_helpers._test_clock_delete_params import ( + TestClockDeleteParams, + ) + from stripe.params.test_helpers._test_clock_list_params import ( + TestClockListParams, + ) + from stripe.params.test_helpers._test_clock_retrieve_params import ( + TestClockRetrieveParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class TestClockService(StripeService): + def delete( + self, + test_clock: str, + params: Optional["TestClockDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Deletes a test clock. + """ + return cast( + "TestClock", + self._request( + "delete", + "/v1/test_helpers/test_clocks/{test_clock}".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + test_clock: str, + params: Optional["TestClockDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Deletes a test clock. + """ + return cast( + "TestClock", + await self._request_async( + "delete", + "/v1/test_helpers/test_clocks/{test_clock}".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + test_clock: str, + params: Optional["TestClockRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Retrieves a test clock. + """ + return cast( + "TestClock", + self._request( + "get", + "/v1/test_helpers/test_clocks/{test_clock}".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + test_clock: str, + params: Optional["TestClockRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Retrieves a test clock. + """ + return cast( + "TestClock", + await self._request_async( + "get", + "/v1/test_helpers/test_clocks/{test_clock}".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["TestClockListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TestClock]": + """ + Returns a list of your test clocks. + """ + return cast( + "ListObject[TestClock]", + self._request( + "get", + "/v1/test_helpers/test_clocks", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TestClockListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TestClock]": + """ + Returns a list of your test clocks. + """ + return cast( + "ListObject[TestClock]", + await self._request_async( + "get", + "/v1/test_helpers/test_clocks", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "TestClockCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Creates a new test clock that can be attached to new customers and quotes. + """ + return cast( + "TestClock", + self._request( + "post", + "/v1/test_helpers/test_clocks", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "TestClockCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Creates a new test clock that can be attached to new customers and quotes. + """ + return cast( + "TestClock", + await self._request_async( + "post", + "/v1/test_helpers/test_clocks", + base_address="api", + params=params, + options=options, + ), + ) + + def advance( + self, + test_clock: str, + params: "TestClockAdvanceParams", + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + self._request( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def advance_async( + self, + test_clock: str, + params: "TestClockAdvanceParams", + options: Optional["RequestOptions"] = None, + ) -> "TestClock": + """ + Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready. + """ + return cast( + "TestClock", + await self._request_async( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=sanitize_id(test_clock), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_treasury_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_treasury_service.py new file mode 100644 index 00000000..04e485f7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/_treasury_service.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.treasury._inbound_transfer_service import ( + InboundTransferService, + ) + from stripe.test_helpers.treasury._outbound_payment_service import ( + OutboundPaymentService, + ) + from stripe.test_helpers.treasury._outbound_transfer_service import ( + OutboundTransferService, + ) + from stripe.test_helpers.treasury._received_credit_service import ( + ReceivedCreditService, + ) + from stripe.test_helpers.treasury._received_debit_service import ( + ReceivedDebitService, + ) + +_subservices = { + "inbound_transfers": [ + "stripe.test_helpers.treasury._inbound_transfer_service", + "InboundTransferService", + ], + "outbound_payments": [ + "stripe.test_helpers.treasury._outbound_payment_service", + "OutboundPaymentService", + ], + "outbound_transfers": [ + "stripe.test_helpers.treasury._outbound_transfer_service", + "OutboundTransferService", + ], + "received_credits": [ + "stripe.test_helpers.treasury._received_credit_service", + "ReceivedCreditService", + ], + "received_debits": [ + "stripe.test_helpers.treasury._received_debit_service", + "ReceivedDebitService", + ], +} + + +class TreasuryService(StripeService): + inbound_transfers: "InboundTransferService" + outbound_payments: "OutboundPaymentService" + outbound_transfers: "OutboundTransferService" + received_credits: "ReceivedCreditService" + received_debits: "ReceivedDebitService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__init__.py new file mode 100644 index 00000000..4a152983 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__init__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.issuing._authorization_service import ( + AuthorizationService as AuthorizationService, + ) + from stripe.test_helpers.issuing._card_service import ( + CardService as CardService, + ) + from stripe.test_helpers.issuing._personalization_design_service import ( + PersonalizationDesignService as PersonalizationDesignService, + ) + from stripe.test_helpers.issuing._transaction_service import ( + TransactionService as TransactionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "AuthorizationService": ( + "stripe.test_helpers.issuing._authorization_service", + False, + ), + "CardService": ("stripe.test_helpers.issuing._card_service", False), + "PersonalizationDesignService": ( + "stripe.test_helpers.issuing._personalization_design_service", + False, + ), + "TransactionService": ( + "stripe.test_helpers.issuing._transaction_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2870ad6d9e3b704ed1074793aee4fe08b805ddf6 GIT binary patch literal 1424 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_card_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/__pycache__/_card_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d568f0059cdb5c9ed2ea68f19a2ef88f482883fa GIT binary patch literal 6601 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_authorization_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_authorization_service.py new file mode 100644 index 00000000..df546d3f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_authorization_service.py @@ -0,0 +1,335 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.issuing._authorization import Authorization + from stripe.params.test_helpers.issuing._authorization_capture_params import ( + AuthorizationCaptureParams, + ) + from stripe.params.test_helpers.issuing._authorization_create_params import ( + AuthorizationCreateParams, + ) + from stripe.params.test_helpers.issuing._authorization_expire_params import ( + AuthorizationExpireParams, + ) + from stripe.params.test_helpers.issuing._authorization_finalize_amount_params import ( + AuthorizationFinalizeAmountParams, + ) + from stripe.params.test_helpers.issuing._authorization_increment_params import ( + AuthorizationIncrementParams, + ) + from stripe.params.test_helpers.issuing._authorization_respond_params import ( + AuthorizationRespondParams, + ) + from stripe.params.test_helpers.issuing._authorization_reverse_params import ( + AuthorizationReverseParams, + ) + + +class AuthorizationService(StripeService): + def create( + self, + params: "AuthorizationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Create a test-mode authorization. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "AuthorizationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Create a test-mode authorization. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations", + base_address="api", + params=params, + options=options, + ), + ) + + def capture( + self, + authorization: str, + params: Optional["AuthorizationCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def capture_async( + self, + authorization: str, + params: Optional["AuthorizationCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def expire( + self, + authorization: str, + params: Optional["AuthorizationExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def expire_async( + self, + authorization: str, + params: Optional["AuthorizationExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def finalize_amount( + self, + authorization: str, + params: "AuthorizationFinalizeAmountParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def finalize_amount_async( + self, + authorization: str, + params: "AuthorizationFinalizeAmountParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def respond( + self, + authorization: str, + params: "AuthorizationRespondParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def respond_async( + self, + authorization: str, + params: "AuthorizationRespondParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def increment( + self, + authorization: str, + params: "AuthorizationIncrementParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def increment_async( + self, + authorization: str, + params: "AuthorizationIncrementParams", + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def reverse( + self, + authorization: str, + params: Optional["AuthorizationReverseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def reverse_async( + self, + authorization: str, + params: Optional["AuthorizationReverseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_card_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_card_service.py new file mode 100644 index 00000000..8aaf8937 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_card_service.py @@ -0,0 +1,247 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.issuing._card import Card + from stripe.params.test_helpers.issuing._card_deliver_card_params import ( + CardDeliverCardParams, + ) + from stripe.params.test_helpers.issuing._card_fail_card_params import ( + CardFailCardParams, + ) + from stripe.params.test_helpers.issuing._card_return_card_params import ( + CardReturnCardParams, + ) + from stripe.params.test_helpers.issuing._card_ship_card_params import ( + CardShipCardParams, + ) + from stripe.params.test_helpers.issuing._card_submit_card_params import ( + CardSubmitCardParams, + ) + + +class CardService(StripeService): + def deliver_card( + self, + card: str, + params: Optional["CardDeliverCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + self._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def deliver_card_async( + self, + card: str, + params: Optional["CardDeliverCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def fail_card( + self, + card: str, + params: Optional["CardFailCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + self._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def fail_card_async( + self, + card: str, + params: Optional["CardFailCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def return_card( + self, + card: str, + params: Optional["CardReturnCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + self._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def return_card_async( + self, + card: str, + params: Optional["CardReturnCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def ship_card( + self, + card: str, + params: Optional["CardShipCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + self._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def ship_card_async( + self, + card: str, + params: Optional["CardShipCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def submit_card( + self, + card: str, + params: Optional["CardSubmitCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + self._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def submit_card_async( + self, + card: str, + params: Optional["CardSubmitCardParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(card), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_personalization_design_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_personalization_design_service.py new file mode 100644 index 00000000..4079e835 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_personalization_design_service.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.issuing._personalization_design import PersonalizationDesign + from stripe.params.test_helpers.issuing._personalization_design_activate_params import ( + PersonalizationDesignActivateParams, + ) + from stripe.params.test_helpers.issuing._personalization_design_deactivate_params import ( + PersonalizationDesignDeactivateParams, + ) + from stripe.params.test_helpers.issuing._personalization_design_reject_params import ( + PersonalizationDesignRejectParams, + ) + + +class PersonalizationDesignService(StripeService): + def activate( + self, + personalization_design: str, + params: Optional["PersonalizationDesignActivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + self._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def activate_async( + self, + personalization_design: str, + params: Optional["PersonalizationDesignActivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def deactivate( + self, + personalization_design: str, + params: Optional["PersonalizationDesignDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + self._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def deactivate_async( + self, + personalization_design: str, + params: Optional["PersonalizationDesignDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def reject( + self, + personalization_design: str, + params: "PersonalizationDesignRejectParams", + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + self._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def reject_async( + self, + personalization_design: str, + params: "PersonalizationDesignRejectParams", + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_transaction_service.py new file mode 100644 index 00000000..fcd28302 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/issuing/_transaction_service.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.issuing._transaction import Transaction + from stripe.params.test_helpers.issuing._transaction_create_force_capture_params import ( + TransactionCreateForceCaptureParams, + ) + from stripe.params.test_helpers.issuing._transaction_create_unlinked_refund_params import ( + TransactionCreateUnlinkedRefundParams, + ) + from stripe.params.test_helpers.issuing._transaction_refund_params import ( + TransactionRefundParams, + ) + + +class TransactionService(StripeService): + def refund( + self, + transaction: str, + params: Optional["TransactionRefundParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def refund_async( + self, + transaction: str, + params: Optional["TransactionRefundParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create_force_capture( + self, + params: "TransactionCreateForceCaptureParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Allows the user to capture an arbitrary amount, also known as a forced capture. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/test_helpers/issuing/transactions/create_force_capture", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_force_capture_async( + self, + params: "TransactionCreateForceCaptureParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Allows the user to capture an arbitrary amount, also known as a forced capture. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/test_helpers/issuing/transactions/create_force_capture", + base_address="api", + params=params, + options=options, + ), + ) + + def create_unlinked_refund( + self, + params: "TransactionCreateUnlinkedRefundParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Allows the user to refund an arbitrary amount, also known as a unlinked refund. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/test_helpers/issuing/transactions/create_unlinked_refund", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_unlinked_refund_async( + self, + params: "TransactionCreateUnlinkedRefundParams", + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Allows the user to refund an arbitrary amount, also known as a unlinked refund. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/test_helpers/issuing/transactions/create_unlinked_refund", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__init__.py new file mode 100644 index 00000000..f5e563e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.terminal._reader_service import ( + ReaderService as ReaderService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ReaderService": ("stripe.test_helpers.terminal._reader_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/terminal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac681a8ad37c433bb9bf8fe4e78b876299babf6f GIT binary patch literal 918 zcmb7C&rcIU6n?YQ-L|%cf-Ne>gitQ4(v4y~sZkKbK!_1N(3or%Iw>3WS7wGEH6t1)+a_Lpn|{Ja+d%@{28>96yRG# zx}kJH>oI~os6v%E;F1a<5mp?qmQLZ7UPQq0yDy}7}s!b{yqasn&-a#c<$4^iF zh>p`qn6ur$=hAfj>Z-${iB}6RCe4ZI$%&cgbI+oQm&~d%KF|1?y~Ma0)hTap3(4(( zl_e9>TxL$dxIn^P+q0aq$=fxih>NC{NOWB%5;&qdXl-HIgEUAS<7mJ&1aDC5CfQVE zw5uHra?m+plQtBtH0V6Y=q2$gZNNdtpLr;O)VeDpz%vA7y2}qbV4JMN23>%4qLVpY z4Krrf1}osvtzojpq$MQ}Q!}hS$+^$No+rrd#Z}4LTu+1v&vIF)NsHs|Fl!4_tS-h* zhFUy|NbL~DIX9Mlml-v0!+6TXiu40x+Lz239ryhe+p8Jl*3t^|s>T}g)(pp9G=jQZ z_Pw$4ox6sxB^wQJgH>a~h`l%d^&Uy=yK3NY?uE{ne z^Mvhtf=3>O|J70LHsndHYs=b)7DC{?n9frVV(TCA0i;pih%rp~L_*FqAR}Mk)>oQ8 jQxsKeWmf_^ebyLf3Z+$d=APTWFSMZkS&x1f$0$|Vv8j)&_ye1$4W6< zDoH^*YQ^nDDIp-7Alm^OvyyhIlnTZqD{W^=nLv+QS-Y#$73c}8+m=gmpeL=IoiF7D z6hSADk-CM9G#2JX{yn9hTBeZwoiz%ApB?vzS;6C&Oq*p49cijNrf1Gz%`^%TKXInw znXaQ-ezdGpkG*m3!q{;1ohS|w6+E|@*uB*o| zz2dnQ^`z@zYyVN#y#h;BkLu+s*fG>;>`becc}cC*fYr`{;^2@ysD9^%TrRMjwU-rzdvjH^Rpo;BLn_vO-42TcV!#t9E7c=mezZm&+WKr&0 zl*jMOr3Jb4+trArAu>8zNJDw2Il7HC z%};5X?HW~!=^0JCTGg#^M1%^Au!@=NU}AuYy-XCDIKafKAm(^*f>WM!v0f%v-9SHq zO8ge8C(zr%F=4Sd^hdHcmik%lsmI_6l~ZoZy)6e9O92MT_^aXD%$cLZ)1<$d8hs=oqgM!eE7JB_YUR@V8{%qFKM1-*UndV^C zGp(SY^ChoVf%2WFLvTUJ@g5Cd_pn3Z%1sHogZZ19FNgOB?U9?{sc@9v6^pAcG|=D| znqsrK?@%$WzGt4^h`o-7SZI+Icm9Sfc4S^?ksUrQkE~rE-yH(Rya_lSAO*DL#34?} z!{it=*>#p41W^|SL0FQIF!%uN`U&lLfcE|($`7KiEkz "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def present_payment_method_async( + self, + reader: str, + params: Optional["ReaderPresentPaymentMethodParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Presents a payment method on a simulated reader. Can be used to simulate accepting a payment, saving a card or refunding a transaction. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def succeed_input_collection( + self, + reader: str, + params: Optional["ReaderSucceedInputCollectionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def succeed_input_collection_async( + self, + reader: str, + params: Optional["ReaderSucceedInputCollectionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Use this endpoint to trigger a successful input collection on a simulated reader. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/succeed_input_collection".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def timeout_input_collection( + self, + reader: str, + params: Optional["ReaderTimeoutInputCollectionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + self._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def timeout_input_collection_async( + self, + reader: str, + params: Optional["ReaderTimeoutInputCollectionParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reader": + """ + Use this endpoint to complete an input collection with a timeout error on a simulated reader. + """ + return cast( + "Reader", + await self._request_async( + "post", + "/v1/test_helpers/terminal/readers/{reader}/timeout_input_collection".format( + reader=sanitize_id(reader), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__init__.py new file mode 100644 index 00000000..e9c00518 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__init__.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers.treasury._inbound_transfer_service import ( + InboundTransferService as InboundTransferService, + ) + from stripe.test_helpers.treasury._outbound_payment_service import ( + OutboundPaymentService as OutboundPaymentService, + ) + from stripe.test_helpers.treasury._outbound_transfer_service import ( + OutboundTransferService as OutboundTransferService, + ) + from stripe.test_helpers.treasury._received_credit_service import ( + ReceivedCreditService as ReceivedCreditService, + ) + from stripe.test_helpers.treasury._received_debit_service import ( + ReceivedDebitService as ReceivedDebitService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "InboundTransferService": ( + "stripe.test_helpers.treasury._inbound_transfer_service", + False, + ), + "OutboundPaymentService": ( + "stripe.test_helpers.treasury._outbound_payment_service", + False, + ), + "OutboundTransferService": ( + "stripe.test_helpers.treasury._outbound_transfer_service", + False, + ), + "ReceivedCreditService": ( + "stripe.test_helpers.treasury._received_credit_service", + False, + ), + "ReceivedDebitService": ( + "stripe.test_helpers.treasury._received_debit_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0972a02d145629ead1d7f7d9e973d83c34794c9c GIT binary patch literal 1640 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_credit_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_credit_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b021c582095667f99f956520438a501d7cbe3cce GIT binary patch literal 1919 zcmbVM&u<$=6rS1juI-H-9H%73w6FvP^n8##qXVuLP>C201&Iu2o+PbX&)W>Z}U- zoSzR0b|KYielaj?Bb9Z3Bq-S>j1+Vgk^BxK1&a67>@K_9F4m2wa#6=gc~vkkrmK`~ zc}-eZlERHxcv0y3Nv`Q~Ax++S@8%U}ap}t9^=m6vVPo_bz1yN(WR@IuYPV>UdRvq% zGDU0=P`_QTkTSWE6?csA#c}6=BirlLaC|GJSI0 zTL9Qa0>hLJg16C~Hdf~dY;5IjbPHT&XTbA#wS#euzMB&B8{A(8X z1f7e)z+I=@;%V`p@&pKF=nW3fnxql86Fp<_{<-0-^vkS~X)6#ge;wc>v|mA$Go8}8 zPO0+Q@+Zrk%0#DfsdIj+GkLyq_Qmc9D%W~QFOT-LV#Vm9V$tZqxszr15H@@716)V= zf0yDzXr>Q=&Ciux^N0GXN`te2otB<+!{Z zHrXU72Z>^`ZIe>QMW(+$^>2J-HZMyTmjQl7e;y;QI`Knw`f+voBz5Dj0CnS|e+={2 z%>kWN=E}6S@I)oWyV(=&qJ8<&xvvZMlA?VL3R-Y7$-m zc!b#VQkHLGBLjE_1a1TDpl$(K7k|r-X~s{L*{%k2S4Y*__q7X;$7Z^6A1sVouPCM2 z|75!_ZL@3TjVtxhWFo8BhLg>Ml4Pd)};X+@VeU**l4c-_uc;iHO^z(fDe>MA#PCb+rSW4#<#C1gRVc}AimbX|P6!ORA ta{yfxV|<_^JpUtl=?R+oS*<+Dy>Xx@nhv|#+jw7}#>N-R2MDIr-CtT$0+Rp$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_debit_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/__pycache__/_received_debit_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0693fdaf808b03ac14648a8cd42cea7552f68ef0 GIT binary patch literal 1907 zcmbVM&2Jk;6rb7kuI-H-oDU@=QR%iQpe2b{p$HB@C6ZK4RW(!%9M}V^jc1x{vtOMV zhq~kdG(ti`;zl^bsS4crAGpvH)=E`DT;OKp22f7C*|kYb6@-|>n>X*hdGp@yy*J-g zs|JF_f1mb?MTCBqhyK!fO!pQr`-mWd0~BHhW63Ll5~_|G7MwzMRs${69UUX8vr*6& zf?`;5N|{az%Aw&H8LtOJVa2Inq@c@)6!#D*QGB50Z#mUg*)o2W2Medwb;10Eu2Z(- zH>jngr8g7d$B`GLg@(t4GzCZ+)l17)udH1L!SD@wyGgmoEjdW0ZqNqxcPLq* z8@^a()D!f&$GlJ~s{_hL9z{+8j%;;TVcSO(IhY_vDI;PKg{Y)JRiaISj_9O#QzxZ8 z%_*F!ErV8TVQVNIA9%8t+*+z9Sxl@19@Ao+CCZr$BGnlcO%|~-92z~OfJI2wPM*6< zK=zTquw{$jU3BZDWnZ2JzKeI2ueF0-eGimexsELT=v%|=t+zQf#g@-a8j&RSBVmfz zk+~z=d1#NuqqHsVG^XYmFhWscV`AF((AB#uB<`0{3ReCpvN^-8*f);+LhX8 z*FL${u1&OSueQ&eZ%>|SKYg|{gsRhBq*sT#TDfL)P`PY$;og%Scn^f#cY$0*_r#odRPJS3;Oc}Zle=FjLtq7oqZCyvF8A}vEe@k;p-Ft z%_A<`>mzdke~IUeugVM9!fTceJ?2JUNL@EITo>l58A!h3y0@ENkZV{0Zn9}fo&j;2)b|8q2YRX+K#p6&TL?M~iZ8JOoGs$+nUO0VTbxyUR~$e)(a s1L>$3<3k "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def fail_async( + self, + id: str, + params: Optional["InboundTransferFailParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def return_inbound_transfer( + self, + id: str, + params: Optional["InboundTransferReturnInboundTransferParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def return_inbound_transfer_async( + self, + id: str, + params: Optional["InboundTransferReturnInboundTransferParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def succeed( + self, + id: str, + params: Optional["InboundTransferSucceedParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def succeed_async( + self, + id: str, + params: Optional["InboundTransferSucceedParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_payment_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_payment_service.py new file mode 100644 index 00000000..42aff849 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_payment_service.py @@ -0,0 +1,200 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.test_helpers.treasury._outbound_payment_fail_params import ( + OutboundPaymentFailParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_post_params import ( + OutboundPaymentPostParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_return_outbound_payment_params import ( + OutboundPaymentReturnOutboundPaymentParams, + ) + from stripe.params.test_helpers.treasury._outbound_payment_update_params import ( + OutboundPaymentUpdateParams, + ) + from stripe.treasury._outbound_payment import OutboundPayment + + +class OutboundPaymentService(StripeService): + def update( + self, + id: str, + params: "OutboundPaymentUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: "OutboundPaymentUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def fail( + self, + id: str, + params: Optional["OutboundPaymentFailParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def fail_async( + self, + id: str, + params: Optional["OutboundPaymentFailParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def post( + self, + id: str, + params: Optional["OutboundPaymentPostParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def post_async( + self, + id: str, + params: Optional["OutboundPaymentPostParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def return_outbound_payment( + self, + id: str, + params: Optional["OutboundPaymentReturnOutboundPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def return_outbound_payment_async( + self, + id: str, + params: Optional["OutboundPaymentReturnOutboundPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_transfer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_transfer_service.py new file mode 100644 index 00000000..68ffe4fb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_outbound_transfer_service.py @@ -0,0 +1,204 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.test_helpers.treasury._outbound_transfer_fail_params import ( + OutboundTransferFailParams, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_post_params import ( + OutboundTransferPostParams, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_return_outbound_transfer_params import ( + OutboundTransferReturnOutboundTransferParams, + ) + from stripe.params.test_helpers.treasury._outbound_transfer_update_params import ( + OutboundTransferUpdateParams, + ) + from stripe.treasury._outbound_transfer import OutboundTransfer + + +class OutboundTransferService(StripeService): + def update( + self, + outbound_transfer: str, + params: "OutboundTransferUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + outbound_transfer: str, + params: "OutboundTransferUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def fail( + self, + outbound_transfer: str, + params: Optional["OutboundTransferFailParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def fail_async( + self, + outbound_transfer: str, + params: Optional["OutboundTransferFailParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def post( + self, + outbound_transfer: str, + params: Optional["OutboundTransferPostParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def post_async( + self, + outbound_transfer: str, + params: Optional["OutboundTransferPostParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def return_outbound_transfer( + self, + outbound_transfer: str, + params: Optional[ + "OutboundTransferReturnOutboundTransferParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def return_outbound_transfer_async( + self, + outbound_transfer: str, + params: Optional[ + "OutboundTransferReturnOutboundTransferParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_credit_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_credit_service.py new file mode 100644 index 00000000..b0ffb9ff --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_credit_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.test_helpers.treasury._received_credit_create_params import ( + ReceivedCreditCreateParams, + ) + from stripe.treasury._received_credit import ReceivedCredit + + +class ReceivedCreditService(StripeService): + def create( + self, + params: "ReceivedCreditCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReceivedCredit": + """ + Use this endpoint to simulate a test mode ReceivedCredit initiated by a third party. In live mode, you can't directly create ReceivedCredits initiated by third parties. + """ + return cast( + "ReceivedCredit", + self._request( + "post", + "/v1/test_helpers/treasury/received_credits", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ReceivedCreditCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReceivedCredit": + """ + Use this endpoint to simulate a test mode ReceivedCredit initiated by a third party. In live mode, you can't directly create ReceivedCredits initiated by third parties. + """ + return cast( + "ReceivedCredit", + await self._request_async( + "post", + "/v1/test_helpers/treasury/received_credits", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_debit_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_debit_service.py new file mode 100644 index 00000000..4b86843a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/test_helpers/treasury/_received_debit_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.test_helpers.treasury._received_debit_create_params import ( + ReceivedDebitCreateParams, + ) + from stripe.treasury._received_debit import ReceivedDebit + + +class ReceivedDebitService(StripeService): + def create( + self, + params: "ReceivedDebitCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReceivedDebit": + """ + Use this endpoint to simulate a test mode ReceivedDebit initiated by a third party. In live mode, you can't directly create ReceivedDebits initiated by third parties. + """ + return cast( + "ReceivedDebit", + self._request( + "post", + "/v1/test_helpers/treasury/received_debits", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ReceivedDebitCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ReceivedDebit": + """ + Use this endpoint to simulate a test mode ReceivedDebit initiated by a third party. In live mode, you can't directly create ReceivedDebits initiated by third parties. + """ + return cast( + "ReceivedDebit", + await self._request_async( + "post", + "/v1/test_helpers/treasury/received_debits", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__init__.py new file mode 100644 index 00000000..eefbce57 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__init__.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.treasury._credit_reversal import ( + CreditReversal as CreditReversal, + ) + from stripe.treasury._credit_reversal_service import ( + CreditReversalService as CreditReversalService, + ) + from stripe.treasury._debit_reversal import DebitReversal as DebitReversal + from stripe.treasury._debit_reversal_service import ( + DebitReversalService as DebitReversalService, + ) + from stripe.treasury._financial_account import ( + FinancialAccount as FinancialAccount, + ) + from stripe.treasury._financial_account_features import ( + FinancialAccountFeatures as FinancialAccountFeatures, + ) + from stripe.treasury._financial_account_features_service import ( + FinancialAccountFeaturesService as FinancialAccountFeaturesService, + ) + from stripe.treasury._financial_account_service import ( + FinancialAccountService as FinancialAccountService, + ) + from stripe.treasury._inbound_transfer import ( + InboundTransfer as InboundTransfer, + ) + from stripe.treasury._inbound_transfer_service import ( + InboundTransferService as InboundTransferService, + ) + from stripe.treasury._outbound_payment import ( + OutboundPayment as OutboundPayment, + ) + from stripe.treasury._outbound_payment_service import ( + OutboundPaymentService as OutboundPaymentService, + ) + from stripe.treasury._outbound_transfer import ( + OutboundTransfer as OutboundTransfer, + ) + from stripe.treasury._outbound_transfer_service import ( + OutboundTransferService as OutboundTransferService, + ) + from stripe.treasury._received_credit import ( + ReceivedCredit as ReceivedCredit, + ) + from stripe.treasury._received_credit_service import ( + ReceivedCreditService as ReceivedCreditService, + ) + from stripe.treasury._received_debit import ReceivedDebit as ReceivedDebit + from stripe.treasury._received_debit_service import ( + ReceivedDebitService as ReceivedDebitService, + ) + from stripe.treasury._transaction import Transaction as Transaction + from stripe.treasury._transaction_entry import ( + TransactionEntry as TransactionEntry, + ) + from stripe.treasury._transaction_entry_service import ( + TransactionEntryService as TransactionEntryService, + ) + from stripe.treasury._transaction_service import ( + TransactionService as TransactionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "CreditReversal": ("stripe.treasury._credit_reversal", False), + "CreditReversalService": ( + "stripe.treasury._credit_reversal_service", + False, + ), + "DebitReversal": ("stripe.treasury._debit_reversal", False), + "DebitReversalService": ("stripe.treasury._debit_reversal_service", False), + "FinancialAccount": ("stripe.treasury._financial_account", False), + "FinancialAccountFeatures": ( + "stripe.treasury._financial_account_features", + False, + ), + "FinancialAccountFeaturesService": ( + "stripe.treasury._financial_account_features_service", + False, + ), + "FinancialAccountService": ( + "stripe.treasury._financial_account_service", + False, + ), + "InboundTransfer": ("stripe.treasury._inbound_transfer", False), + "InboundTransferService": ( + "stripe.treasury._inbound_transfer_service", + False, + ), + "OutboundPayment": ("stripe.treasury._outbound_payment", False), + "OutboundPaymentService": ( + "stripe.treasury._outbound_payment_service", + False, + ), + "OutboundTransfer": ("stripe.treasury._outbound_transfer", False), + "OutboundTransferService": ( + "stripe.treasury._outbound_transfer_service", + False, + ), + "ReceivedCredit": ("stripe.treasury._received_credit", False), + "ReceivedCreditService": ( + "stripe.treasury._received_credit_service", + False, + ), + "ReceivedDebit": ("stripe.treasury._received_debit", False), + "ReceivedDebitService": ("stripe.treasury._received_debit_service", False), + "Transaction": ("stripe.treasury._transaction", False), + "TransactionEntry": ("stripe.treasury._transaction_entry", False), + "TransactionEntryService": ( + "stripe.treasury._transaction_entry_service", + False, + ), + "TransactionService": ("stripe.treasury._transaction_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2492400a8a634d81b0b61ffe312cdf75739bc600 GIT binary patch literal 4032 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 YQbvTxCxnN}JA$D7?))QyZ~lRQ17G(IDF6Tf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d70f13f77a8d62e006a4b06224cffb0952947e7 GIT binary patch literal 5842 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 N8p56jVJc<$^I!Bnt$F|e literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_debit_reversal_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd5997dab228e66cec03a861ee38c1abd11190ad GIT binary patch literal 4007 zcmcgv-ES0C6u-0cv9q%u>~2e;6zF0px|HrhArON?_{Ja$f-kPo$#mxy7G^)VGcB}K zV}OvDnCO!jAN9os{0sCy@CD)nn~6k?FZ#A*K~0}L=gv&GL-{CZoMg|Od(Sy{&i$Q_ zd-sQAQX}x#f3B%sPZRPR4uVJana-EM+#n_~1&h>#vLGNIu_86GEOK77q?%loYf4$+ zW66rv)UqlNsT)hU!%_ zA92+aO{dzZ8ClCb*pq zGyMnYc-1*Yrzo=x>j0yMLr)sasG)FGNQf&fhz3HUQxqJ9H5SClkhtP)&Z9AZ&}jj4 zgHTcyOj3@-h?zAbrf5o3H06GfnTi>mP)zljT$Y|Fje%75rCP`~4z>x9Do>OqK^lz_ zkoTA=s+tk_@(TXt#XiI*R5J~lv1MsyKvSC*^1W_v2m(KbC0A*3bXgpB=tdh}AQ*z; zDvUaltUll0joG`QMc%9UX#(1WV4~x=vmeL};t25Kk15QObBi^Dc@FQaFdMlg-}H;& zX2cVoCV6FkyO#4G2q<`B=Zu^MQO`9dav?|T!h$C2fdyRg40Yz$7N@oq9Y`U2l1&#) zOe~%GnPt18(X7siZerZ9scx7iqqfbULHPNP{o+Hj~fy1&slU#*`h?l&suY27SN(fU-;s*V?%)6UsOeS2Zs zSkbOJbhHTy#u;iCZC+qqr}ePcy6u%-p*ihJh{Q~|Ui_#QP_!Dnvv&abh&)J>bZ;y1 zax0Pk^!UfeTj`apbfLBGrPiu-t<{6=I7zPQ5G9%F$g#B6Cb5{-0XwoJx>sSc^FEMc zM0nu{Uxh-t4A6ZZxglPcWzvoKF7k=`t$0z$N7+jF2#+M|Lv9rk+z`WZC>p&Ppg$=^M)es3!Ix`qbnZ;0f3L|KJ5XkT3??sqp`|f6k?_`IUqSmtsQ0qzk z6^5=Y0h05b1T1tVH!6H3jA&oSMg@lD!ID6hz>0bF-xW=1p%lC>O0jBA(F(0jQIkWE zGwNop!dolKLa^i-yf-hZCv@4Bnhi+Ja2VJC?r16IinsJkxFrX8d%`_n8cxoEh2-pe zR&ufpV7&yzt1$WhBjS43wcX?*rW8)i$O|Y_00D(S}<-NI^{?MEE-c29AlRo^@ zP~n>oe;nG=7D?ua&>@jbwylu$Lw?&{!P~ZqZ99%_J08=#%0Qoj2P4WW<1=8Mr)~fH zs6wNUKBLjAtO#y-wZt3!Rvd0a((U#^NH*g17!uqd+YaOr_)`JCevu75H3+^EE~5kS zx_%IiZkattJg@>)JP<-bX-hDiw^zV7uDrTW5xx`lN!s@@;POH#A1Rgcakysab)!ag z-PLrx)-We6r#1)}6Gd$_pP9SrHX8})0h9Bhwo0Pp3 zD)Aa=tE9O7el#O%zoheR8Qzdp*)_MVdWlZ*V!&f4hI@o%F7D6vt|J3#ixDh}PeUBR57~(EI_Kdtf4trF@^; z=UvbWy7vz5V+@<7n+SxHPSxT`>MG836K;TB?D&N;&9D|0b%3F6ldbsdtSp1lQfdqc=zY^zm=|co}iWmTAg8TKqR*=Q0f!%F#E* z^Tr+Yji2PH*9~~$?gssCGS928d6lt;9R>lODmLCD+M*x`4;3P8yGJ(uOg7vjBfpC2 hds5+^wDVykA}bG-E+O)s2g*f3(7t&6A;C9a{~sch(VYMQ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8770921fd6a6597482f1c3d7c3289591b8e6dca9 GIT binary patch literal 18725 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 ROI!@{;_}zub9iMc{s+vxF^K>G literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_features_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_features_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9342e7533f4bffc1f9d52e6e052c767e756f3f36 GIT binary patch literal 3423 zcmd5;&2JM&6rb^~*X#91Yy%;r1&n|Q^WjxeiK-Q9N%$-X7eS$|FWbdCNfvh3W@a65 zNF@XasZyo()LeUw0=M4U|DYG59sa&v%W4{J$9~|!zhMMAR~DP84AI( zLa>KwzLhGa|Kx)b_A=*PYBtDuLMO}`fr%8;9n&=@iDnw5m?wYOaLu}-Tb@|cnajWU z=+m>uv?C{v9Xb6$F7?))UDxKt=@Fp<3x9xl(2II{zfLq zS)J-ONA6k+d7)wG?h>wVEnF=)R3MY#p!*#t(}E zSa1{3U<%KMR_=+BX2hprQ^GxIHvDon7NF0gQexqhQVgFU-mK`3lVZe{qRvQbV!CT*!J+{M%zE9O2|M?;RzU<%obJV9@m zGlG}Cq%)%Fh5__tvinD3a(KHsMdAZT@q^6%?lWXQ`$hUHU>xG@OvmkDw#|4zz z*iH|$)48wCd~v3o>uu*M4|5mhau)Yr{ z`Mz)smt?vDw&k;pZsgh~F1UN>W-j_bR3dg{BX(#yYdJOgCP#1*(5)aA=|H!`$V&&F z4xp3!ms35;il^fep!aiYpMm%T{rg0K3cU{tyXOkKUo1o$1|UQmvj03Cr;Z3=Tj=rx zxb@DkgulnbqVhu$G|J2FYgbw>E>?!9>9D23Vmd*xLT6i1Wc&&gRoJk9EiW^|7&Nj~ z0#EzF6|2QohAQlLzR5k$i)(}&0aI&b+@@E_IJ#rCc)iXUw}*R`_bXcBVim_%=uW<} zN>*hfe};KgUa$WH{3l@cnVIz>p?Fqi(E<2VDORbJlF(E%N4JTld5Wglb)#u-k-}I?j-nFMuq+d{d?!~`#K!gQIN8$o8sEgs~b3uPp!3s;kn$% z^LOyl1|IVx1TNx^sgw#{Z_r1}TJVlqC53JPr8!z`x~An9a8Ghu4QSLs2>h!+KA6$S zb(c5{N(-a>X5?*-J`QgR+Ee$lk#IG*!Ih(1OZi!Ce38=OwT~BI@9;|)3Omk|x5s^< zne}WW$Vs1HgRq4q&MnA?0@}Vu--QK!DP#vhbOem?yoB)JBed%mwBr%l_nVM=Bp#fP X#p2Su6p6>m#~3T$+VhCNeY^hwh-+Dn literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_financial_account_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fed83579a7b1534613671f0b220b54f57c7b87fa GIT binary patch literal 7719 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

    `QC+C8baC(TaZ+0$=< zP9@Ezg)3XyCTLaot&XgwvAxv9g`cCqd3eoGaD~rRzaMql{vxCSB;{v|a$cd|SU!FqK-Z(Un6(@!k$A6?K4GxuUk40hG$t_ZT6iLNlv)R7m z5^P6o?+ACiBkX=hIQ)(<^^S1hTf*Jn67Kn?aL>1dBW2;pw;jQE#EI{~-nhQwx^W^n z4{f-P`)sZ?v3I3!Pf6UnCU&p%#7pAt4JVaX9`6w*?|nY7D)g6x{%;C#F4q4IZFEfI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_inbound_transfer_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d05d85c2360cc0f493363e69c8e6c64d63d7b816 GIT binary patch literal 5245 zcmds5-ESMm5#KwK$K&xsCrXxVsj_K1NgY`KXmFr3xv|%ho_i zEvTH2S%al?A3J0WkKh0(QCcHk>)WCb^Q z(P3tlUZiZ*EK=x*+j`k_%yp`nMpks?cdL$BDeIOSF6y>}7MFf_{!MM+?3)X3zqNP< zI+S-z+j;lOHCjY*>H__6g+d3nv!Q4Ft@4%1O4+!?^s>D~*@9j!QtQ0V^wML+jOq?; ziT8C`<76%2M3?Xah27BAw)H@lLecYqM`M1Y@uGl%qog1hq#(wKF=B{D$OzMr5!nYy zhGaySBtyOxDTMnz^h7>k+ zYpz&?#CCG6LD?|O<%X82)7+n5oyj|p%k~Oe%bOkqG{?t)?S}NKxfya3S9F_dx?wPC z+iVcbSsKWu$Rr#})|dw;Pz~GET57Af`YzG?Yzy4L3`O+_qsLP zD-^lvnj1#Pt#_l_PlOx_$6KKR;Jf_tey*wTVNu(TUpL z1NAsbjx~ssOf@1gRjHF$Olg1}=}CuAptJElkhh8O%qj5+Ao?S4->=2np`S$}q@5zK zkYC8Z5B*rkMj4cO!sE$Ck=u&|;lsv&ECvBe1p(4@d#zk#`#~5)hGn4PD(DGMx_+=L z$2y(mspQc94Iuv@|LX8sdgOk3aw|RA>$joj!EZyUe{OePJq*5VHV}j#XQqYU2~)~v zv1x(Dp@XG>^f(r?=|6|F=@ujwcsU20mAe7f0UKPA8?II$|F-*?eFqoZ>r|=8hh6VJ z00M`4;yEzho_`aq{2SRR|JWh0?s3z9FaNT*b94+lf@Hg27TI&y+3T2uw{t(=4)@8o zPNhpQP*289)Y=)>?Wrea9D4yqb4Al&Nnna$Ai;;J$CJzfX1B%sT5!1vMuA@^8Z8UlJDY%BS6ZsDlI}2c76=ZYCRcBr1~!WD-0~`l4Cg4n=Byv+ z6W>5#8SLzHK%kVQc>!(%01EKS_tjHd>ZvbA5B+xb)1TBsWbkx@h=b|6MD`!{EAs%a z%raKyI9BF(O!1J>9b1l!U%^~YQ<=Yge4&;{cc|quI||G4u*7Tm3^r$xbQE+yB$L>U zXBLkKdl|Sc_oo8y`XHO!Aqbw@O&sVl5U;QY(P+bL*YQC7$yo8X1*IN_X0tH>Gkkn< zP7?ko%!QRd#ej2Fv+MT3@M85p2hNT&gTD}Vac1z+*gUZ#1iSWsGhgI004`qzPqedu z9fM|oK`!ctLCG7T{{h4&_!Ne-&jWc3{-CV>;J*6amipcolSl8(%>89@9uas!`2U39 zX>@e^IC~A7uOn$gke$Hx_keUEF5x+Qr$ddq+*8`bK|TP|4{cB5{U-sAeHSLl3X55B zaWR{O`?^-vOH|WbMbkQPtOUp-0at}VOVowpdNu=So7e%d;3mosVD1EY|HIEpk7@e z%6KD=+${OF_OHI)ntp7ebNb_3>MJ`>|BU7jarIs>F@%fwkoMkOInDbG9#{;oN^T+$ zt~jQ}4$D{TDwTD(+Jl^BcV88{_TJeQDP-^DTA$({N(frmfT4H^+;r zd(b!Uzge$#arB)9i#8&g@+lAKuQ9wz5FSZHn0Y{+`;r`dK&Ji{QXhnK g55mVEiDE>0By|xInHL^PMNv?GbNLa$Up~vf0gjXQRR910 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_payment.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_outbound_payment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acf3564c845e8ee3239b0958535d4091f4e138c9 GIT binary patch literal 27332 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%0AWbKYIizVClQ?`- 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_credit_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_credit_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c646ac3300aad2a732badaeb39ef9569fbed8008 GIT binary patch literal 3185 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 N#tr@xH^tQGe*n}s^ZWn+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_debit_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_received_debit_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef0aa8c1580c4883e546d9ba25a085110c4447b0 GIT binary patch literal 3148 zcmbtW-EY%Y6u)+2$8nR?O$()k(f}(gKogZtAYfwx$^bD6f@#t+ZI&C~7E?P3_qrV^ zoiqX3G-=xQwC-U~+f!Bc7r-AdX)jcJAhJ|#)1+y83kqygo_6lF-83-D$NX@7?)mb) z=bYcU{xO+U5j^y-e(U!Rgnna-@R0(h@i{OH$V8@KBS$C*0^>znbRvZa=OcF1kqVL{ z7i7MU+A&8dC<4L?*$TFj9e31%%5}2c;Uo$P&d2PelPaV*uh^ZAR?s*fx4WElAuS*g zokXU36PX=YSc>@jDRfs8+2o&Wkrlk;MVD9=d=ZmbtB66+L5-5-T60*p%&h1s=PIsM zE*Z8LEgIBi9&f#K{)B$~)QRI~PLH1if%>LJ-E$L{agnK07x0xC330l(f9_K1%y#SFi}B_BeT;K&4?Mr z5mV{|ohh5KN!e6xN`>eXwQkW#a+mD+dPg1lD@stMKzu?TG4I0j?^xdOcS zV+!-=@>n3Xe>P3u-wHWad69&b)VVVR}N;<)rXh5J z7MEu8wl$HjRNYJE(r9jEU!Gbn9GeT3vHRWHgiG1u3Y zhoGuCrrH3zqptw@2tCk{)>BLDswK29&VG8frfsNcx!S~|Fqz692 zD@oWf$VNtb8QBD6JSh%nM5a{BA`<&XnfG`N%E#KcE(CezFRnaQ@MZdkJSu z>>8F$8RCpm2497ALPxiwFEdfiR18X)g89spEEv9z*qk2AOp>z04cZF95xx3#o*iEF z=C<|Vo4;n6A1(@H2b{Ro8QCaDE$IiTCr_4%W4MH+dNE42FiUQ}3UbO+Y{K}>qQJc4 zqknFoZHFPMLiJ(rqHh3!E=hA_ZC;D4(R4FQIu$Ym+iDex>}1PbjI4oZP>F3!%#g*)K(fF+lJ!)W)&QnE z*3G?dbdH628;B3pun28XeM%YD1uyH6>j#g@!foMbRJ{`iE-S#;86VHa;Y!d;hJ$t8 zQ+3@bn=>}!6S{t7#;|=2Vc;ZN8QBiRi@;nbyV-ItkVV8x&YO;;n3NGV@@NgnO;lG< ze)N8uh(+>?#I&*I?-8|;0>X> z`tJ7aU)B!PV{EOoKE>?nDpLCz9gNGN7j%EX-2FqdqmE~Lyp8@!$JIs;oY~y>1_S3Oea^=j?~)O)Z*@*ndDU;eBZLhk zHty*`AoYkK2oGf>jI5xSen#6?(4Jo-+DbIH65an$6eang%n6c?Jdn={g8KDq4-tFw G(EkEIkrDL( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..061e2f6fda29e2416e72eee03be65e308e17e9c0 GIT binary patch literal 5973 zcmb_g-ES1v6~D7HJ3IURWv}fuHtP?J7lJng2qYnG!H|Rkh7yvtTScQ`=NcAfb~ks% zBqoj&g|s3{)eu!GJXC5P@(@JYKcUZ+`r_?I!Wso7Ri&!!(-NDu@>9>bGqVgfsY=_? z?wNCc_uS9(anGIKCzCM(kM;Lr{ljTO{)7epkv(R$3(O6o6J0QfDO3dk`H&GZ#j418 z(U8n=HOzU*kj+RnVk%XIm%~QXj8$W1yc#zX)r3H3f*pqTvXL}X)fAVB7-=(8&2U~Z zvSzND<9yV}n|;+j&c}>?vrsK?K5h({gVjOKCyXJpSS@lsX$+fNs#`dpGDghN>L};a z##XabEpa|$jG5!rae;)$i$u@9NAw&O_1qAw@wVu$xH_?zFZcZw3uVEHov2&(sdE=; z&4yAQOWHYu9y)#O47HjItVRJ&ylk_2i+W-qN0~J=%X(E~j&iDH*P9K^D2q1V1`_j?bzAqS4uYNg2pL$82= zRYg5im1vmCdI(j5e;U!ngYf1GlR#l%s`OM9<){p3B!I>^ssI`dpmCajzGB!{l+Y;f zagRql;qgh}lL0>E@hO_t(}6i<0y5d2OwyZiu7|`tB<~@z-sd6xfgTDTpMlW_dXjt( z02%BdLtfjWhs2?F7 z+n-M6Wqmv#)Bg=J69Jh5>~W07^~qm~)q%xrbYN4ckeps@7;UZ5~D}RlP-4(E!%#l?zRi zR?auxtQ?`%CA-)(_!h(W9U?f3BivuNtOd}dss&FHmgP+z*pwULSq|ZB5AJo9M?B5EK(D&9 zVtt6FdMKaOttcx4%yuBziR1~C3ODTwFr{4x%pj>CLGN)Sd$C35$}$^8Xe*Ku507kkGHl5cXyQCJ~BM9 zJh8W3+}Ba|bwd&uUW}BcKTWr{9_T0sx*-{m6nRLuxlRfT?LPQ%9*SFh(1-MJKLPs|MK>u7vet z;|QD(knmVec2l5tq;#OnzU}Cn zEy$gz?zQEcU7BZ2vjjQx6Q%P_yR^+JN8rrDEw0xf&b_`sE!&CKFo{+dnBm0gR=ok$ zaDX%1Dkpjt6nT`fCS!Y`%wx$d(GhD9NpV<5hD2h)uq~8^DKQ>IB%J=0V0Jo#$ZtW$ zdJV`s1VTWr|4w$Yot<1sWLFaD4^O^-@`F<=`Jrxv2`klo+xB@tcqej)g@vw1%W10xR&IezsWp4fMHjE2jn;r z{x2qSmFVJIuq60Y}D9U6nq5<>WaOJq^DE%eJDPx#2Bi~ZF{8<40{joKVYLvK>kAh$#pt7d}rXv z_P~>ybvn2kbUGOO$N!+%?f@9Yx`jveyHkh8g-?Y;CF#}y;8+r{n&+Fq5`x}~Ub%Vz z$PKvDERiK)UZ|6$&?myrgtx^d@li42Hb~jO81i&})yd2o~qwPSf|XbGsINrdJb=`-r7Ag)NtkxuN6`qcdeea6(6-?x9%RcMyur(w|VKQ!kyG) zJ2lx!P2EwZmX#^K0bP+qx360mlHVPf7Jem6Ngqe1g|f(=1Be|)avaE9d2mCvG*)IO0lpa3$N<74cn~THb!RU7F>kucC#o!+?4N00&!+Lp@H50vVoO8Jt)d zt=x-9MY$~%xQBC-m@7{@dGD^S@<{Eb4eoJ160E_`YbsphArWvturYK?r{9-x->TOh zZQYT<9wE-Tet;JVC+i|Aebc553zJ~iKe&D4M^DEe)4MRuY`8IDly>~D3vQwZ-wM2s z2Eog&yP9AsxW}96zirivEnZ7JDx8wn^1(nGFNFM>xOJ1*h8rTkHjZtQ+H_^i;Gmo3 zdKbc$cTeQk$MH@5_2g{)h=O-eexcmFir$^kyGiD8+|8@#iSgyQ_sz|t^1<9sqAK15 z7Wu8fjXo35v1@dg@U1Hc-LE9yVoOlO6xhOZt}6?n=+!l@9UW>|N>Gyg0iiQ&EtYbK5>P+qu2>36}WC{{r2% B0BryO literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..327137082885903d40847a211613d6b240d286c7 GIT binary patch literal 6279 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_entry_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..beb4c7d9931d705509cc6f9c320c031533c79b79 GIT binary patch literal 3143 zcmbtW-ES0C6u}`ov~pqsA9~Te4KmK6&n)oo%~CC^!#i&OKjq?>Xmp z?);QUs0beSuRg00L+E$92p_4%G(H7p4w=a0Y~*kSj-xzp^Nvsu7%$kOBNZe^F34;x z+7U-7C>+8H830?!jyh^VWjfi8Iq^cA@ew=WBnwH#D|VNo6*R_2?Ua))q&dW+lgL!> zAv1=#1tHi^p}QK-CjO+0EaxXKdc>;Wid;!0=_YYLBRZ6kn~+5M#(jbG|q{V zN2=8RoIwnSY6m*C7clGyPvf?Q)@e};4ieC4Yti@`m^p+|fiqEok0P_ntdrWQ? zU0ZD#%2}djxmo_cw9snX1wK$-L|M6cM9s9GusUwW$k(z)=@DVS&71kFWe4XcOSkgJv3uPsSMsOI9=3;%mdn?z(q#UqQM`^z zW_}u%rt`LSC10s}SIedSxslPlYk7FM0tUt;cJnTS$;!s{&Yf3vH^5M?QuRfenwkF2 z#I(wtquNcdNB31AAEL(^(t2v~J+-*@*_n^e)U-`CZM3#+u-3b+wq<)gh7x@ZBqx#$ zDXOV;6pgA4@I&ireiwv|_kf&6+zZ$JE&$~=B=AdqPWVWY&`KX1M4u?%3pcrJg!I5i zSWO8%2H8wWFC|-mjE5ykh9%Msw^}Namp~cThHQg{uhL8e+L^(pWh=1RO#>VU@(227 zRoc>~=1>RmHT+DI{EnMCgL(Y_D`B~w<`~(a}ng`lwT8+WZq_wcO z3VQS~tW3?JXF)H2+cMvu=g3a#(ynJ#WQZeuAob;mGI0!#(Co~Mq@P+c^EN#xaa}d1NIpkfLORuGZ}t|R}+FuN_7?dt59&ME|U=V_$NKmw?RR`3W6H1t z4WSq#1C$H`@dcREWDi~L12T_T@mV91B$ZM^hnMRExrgcs%I|*^NlEIj+P=C3Z)m1; z--EtAi>bYJDhCU7cOy!3EGmFTM`c}^SmT4%ZwoDIQLjS&vEKk&N8BJ7W-f7KN0Q# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/__pycache__/_transaction_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99f037fcb34b3bcb5161545d99c14063286b5581 GIT binary patch literal 3051 zcmbtW-ES0C6uXmp z?);QW=?EVBSHClwKorPyWL)j~+hp_V_Un=S+nwQq5=4m5FS}MzR%NZklg9kPO5Lq)F^I z`wG(|1)pGxPLUa4+Qp}VWL2F7DM+5TC^jwICYVyv1)jtJk`sx_qG%=wdk9QrirtA7 z6UvSSdu(1VT&Q@sFj>A*ID+XVzfvt6ulU#|p1Lssb$F587^T%Int&iO)h z#=lT0@5_(uEl|hD!&NY_CNV8gj)0XNn;ly=X$XvbbtaHmB4&F#($Feto+;MD#^`<^ zpP>5&GS=0SgSDjb<;l-Z){ONvW2iQ;z1BNW+qku!K&k!)Qd8-M5;ycZipTW^_@Rf2 zdmV(04}qLO!gCk+I^f_cWbJElUiwr~&`QBa(dXI^(nmrrM%KYccm)YN2HC(!FC!a) zj7N1zM|CkRI#Vu@O`wblLIz+F=qwYVc6Q(~i3-&(GT$RW{y_h9WGu7cZf0;PGx%`M zdUit2deVQdPF!7vJT_?(0$s}v3*QMt`uFi+ArKv#z&u8TX-YDX=wVXUL=7Lv)1u~L zG|QtX@b+WTVoq3WVeh6Kakeri&Pg}bN8l{hJluxO3eNlsIBR3ya$L&5W|gz}3M3O+ zxf6IDfMX})ycZ|`WjT37E zglvUS57qHH2peAkc@}{D|5^g1Vo!jSMh0P9y!%2(?PSYcjI_%z9@SwR6Ei^YB9I(# z|H*keN^1*S+t$c@XmW}Lc^62Cuc!p8@b!cutcf_*9oNPVs=_Vdpse4H1D6wEQjCx1 z;xNF?vgKjZ40O}sIt%ja_vG-gOma`tS7bUg{pIGdWo3I~sAu?Rh5KvDa()z4zi7 z2%YSzEAWQU-Fqvv$L&)ma9v!jmZ)&(2Fiz#o0 z@8~KbYWAge_-;_9iLxyWAd1tzc~9^G1v5JH+ajFjp<->%kz;R3c z8m6he7WUj5giRqfn&}vjx+Dm~0~HA)%jkt)(6(hX^qXWX%lT#bl?S4zs1H<5kTP~( QJt+wKHv "CreditReversal": + """ + Reverses a ReceivedCredit and creates a CreditReversal object. + """ + return cast( + "CreditReversal", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CreditReversalCreateParams"] + ) -> "CreditReversal": + """ + Reverses a ReceivedCredit and creates a CreditReversal object. + """ + return cast( + "CreditReversal", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["CreditReversalListParams"] + ) -> ListObject["CreditReversal"]: + """ + Returns a list of CreditReversals. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CreditReversalListParams"] + ) -> ListObject["CreditReversal"]: + """ + Returns a list of CreditReversals. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CreditReversalRetrieveParams"] + ) -> "CreditReversal": + """ + Retrieves the details of an existing CreditReversal by passing the unique CreditReversal ID from either the CreditReversal creation request or CreditReversal list + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CreditReversalRetrieveParams"] + ) -> "CreditReversal": + """ + Retrieves the details of an existing CreditReversal by passing the unique CreditReversal ID from either the CreditReversal creation request or CreditReversal list + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"status_transitions": StatusTransitions} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_credit_reversal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_credit_reversal_service.py new file mode 100644 index 00000000..1d4407f9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_credit_reversal_service.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._credit_reversal_create_params import ( + CreditReversalCreateParams, + ) + from stripe.params.treasury._credit_reversal_list_params import ( + CreditReversalListParams, + ) + from stripe.params.treasury._credit_reversal_retrieve_params import ( + CreditReversalRetrieveParams, + ) + from stripe.treasury._credit_reversal import CreditReversal + + +class CreditReversalService(StripeService): + def list( + self, + params: "CreditReversalListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditReversal]": + """ + Returns a list of CreditReversals. + """ + return cast( + "ListObject[CreditReversal]", + self._request( + "get", + "/v1/treasury/credit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "CreditReversalListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditReversal]": + """ + Returns a list of CreditReversals. + """ + return cast( + "ListObject[CreditReversal]", + await self._request_async( + "get", + "/v1/treasury/credit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CreditReversalCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditReversal": + """ + Reverses a ReceivedCredit and creates a CreditReversal object. + """ + return cast( + "CreditReversal", + self._request( + "post", + "/v1/treasury/credit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CreditReversalCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditReversal": + """ + Reverses a ReceivedCredit and creates a CreditReversal object. + """ + return cast( + "CreditReversal", + await self._request_async( + "post", + "/v1/treasury/credit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + credit_reversal: str, + params: Optional["CreditReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditReversal": + """ + Retrieves the details of an existing CreditReversal by passing the unique CreditReversal ID from either the CreditReversal creation request or CreditReversal list + """ + return cast( + "CreditReversal", + self._request( + "get", + "/v1/treasury/credit_reversals/{credit_reversal}".format( + credit_reversal=sanitize_id(credit_reversal), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + credit_reversal: str, + params: Optional["CreditReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditReversal": + """ + Retrieves the details of an existing CreditReversal by passing the unique CreditReversal ID from either the CreditReversal creation request or CreditReversal list + """ + return cast( + "CreditReversal", + await self._request_async( + "get", + "/v1/treasury/credit_reversals/{credit_reversal}".format( + credit_reversal=sanitize_id(credit_reversal), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal.py new file mode 100644 index 00000000..ff98a4e2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.treasury._debit_reversal_create_params import ( + DebitReversalCreateParams, + ) + from stripe.params.treasury._debit_reversal_list_params import ( + DebitReversalListParams, + ) + from stripe.params.treasury._debit_reversal_retrieve_params import ( + DebitReversalRetrieveParams, + ) + from stripe.treasury._transaction import Transaction + + +class DebitReversal( + CreateableAPIResource["DebitReversal"], + ListableAPIResource["DebitReversal"], +): + """ + You can reverse some [ReceivedDebits](https://stripe.com/docs/api#received_debits) depending on their network and source flow. Reversing a ReceivedDebit leads to the creation of a new object known as a DebitReversal. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.debit_reversal"]] = ( + "treasury.debit_reversal" + ) + + class LinkedFlows(StripeObject): + issuing_dispute: Optional[str] + """ + Set if there is an Issuing dispute associated with the DebitReversal. + """ + + class StatusTransitions(StripeObject): + completed_at: Optional[int] + """ + Timestamp describing when the DebitReversal changed status to `completed`. + """ + + amount: int + """ + Amount (in cents) transferred. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + financial_account: Optional[str] + """ + The FinancialAccount to reverse funds from. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + linked_flows: Optional[LinkedFlows] + """ + Other flows linked to a DebitReversal. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + network: Literal["ach", "card"] + """ + The rails used to reverse the funds. + """ + object: Literal["treasury.debit_reversal"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + received_debit: str + """ + The ReceivedDebit being reversed. + """ + status: Literal["failed", "processing", "succeeded"] + """ + Status of the DebitReversal + """ + status_transitions: StatusTransitions + transaction: Optional[ExpandableField["Transaction"]] + """ + The Transaction associated with this object. + """ + + @classmethod + def create( + cls, **params: Unpack["DebitReversalCreateParams"] + ) -> "DebitReversal": + """ + Reverses a ReceivedDebit and creates a DebitReversal object. + """ + return cast( + "DebitReversal", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["DebitReversalCreateParams"] + ) -> "DebitReversal": + """ + Reverses a ReceivedDebit and creates a DebitReversal object. + """ + return cast( + "DebitReversal", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["DebitReversalListParams"] + ) -> ListObject["DebitReversal"]: + """ + Returns a list of DebitReversals. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["DebitReversalListParams"] + ) -> ListObject["DebitReversal"]: + """ + Returns a list of DebitReversals. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["DebitReversalRetrieveParams"] + ) -> "DebitReversal": + """ + Retrieves a DebitReversal object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["DebitReversalRetrieveParams"] + ) -> "DebitReversal": + """ + Retrieves a DebitReversal object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "linked_flows": LinkedFlows, + "status_transitions": StatusTransitions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal_service.py new file mode 100644 index 00000000..f39dd543 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_debit_reversal_service.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._debit_reversal_create_params import ( + DebitReversalCreateParams, + ) + from stripe.params.treasury._debit_reversal_list_params import ( + DebitReversalListParams, + ) + from stripe.params.treasury._debit_reversal_retrieve_params import ( + DebitReversalRetrieveParams, + ) + from stripe.treasury._debit_reversal import DebitReversal + + +class DebitReversalService(StripeService): + def list( + self, + params: "DebitReversalListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[DebitReversal]": + """ + Returns a list of DebitReversals. + """ + return cast( + "ListObject[DebitReversal]", + self._request( + "get", + "/v1/treasury/debit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "DebitReversalListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[DebitReversal]": + """ + Returns a list of DebitReversals. + """ + return cast( + "ListObject[DebitReversal]", + await self._request_async( + "get", + "/v1/treasury/debit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "DebitReversalCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "DebitReversal": + """ + Reverses a ReceivedDebit and creates a DebitReversal object. + """ + return cast( + "DebitReversal", + self._request( + "post", + "/v1/treasury/debit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "DebitReversalCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "DebitReversal": + """ + Reverses a ReceivedDebit and creates a DebitReversal object. + """ + return cast( + "DebitReversal", + await self._request_async( + "post", + "/v1/treasury/debit_reversals", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + debit_reversal: str, + params: Optional["DebitReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "DebitReversal": + """ + Retrieves a DebitReversal object. + """ + return cast( + "DebitReversal", + self._request( + "get", + "/v1/treasury/debit_reversals/{debit_reversal}".format( + debit_reversal=sanitize_id(debit_reversal), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + debit_reversal: str, + params: Optional["DebitReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "DebitReversal": + """ + Retrieves a DebitReversal object. + """ + return cast( + "DebitReversal", + await self._request_async( + "get", + "/v1/treasury/debit_reversals/{debit_reversal}".format( + debit_reversal=sanitize_id(debit_reversal), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account.py new file mode 100644 index 00000000..5858d26f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account.py @@ -0,0 +1,724 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.treasury._financial_account_close_params import ( + FinancialAccountCloseParams, + ) + from stripe.params.treasury._financial_account_create_params import ( + FinancialAccountCreateParams, + ) + from stripe.params.treasury._financial_account_list_params import ( + FinancialAccountListParams, + ) + from stripe.params.treasury._financial_account_modify_params import ( + FinancialAccountModifyParams, + ) + from stripe.params.treasury._financial_account_retrieve_features_params import ( + FinancialAccountRetrieveFeaturesParams, + ) + from stripe.params.treasury._financial_account_retrieve_params import ( + FinancialAccountRetrieveParams, + ) + from stripe.params.treasury._financial_account_update_features_params import ( + FinancialAccountUpdateFeaturesParams, + ) + from stripe.treasury._financial_account_features import ( + FinancialAccountFeatures, + ) + + +class FinancialAccount( + CreateableAPIResource["FinancialAccount"], + ListableAPIResource["FinancialAccount"], + UpdateableAPIResource["FinancialAccount"], +): + """ + Stripe Treasury provides users with a container for money called a FinancialAccount that is separate from their Payments balance. + FinancialAccounts serve as the source and destination of Treasury's money movement APIs. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.financial_account"]] = ( + "treasury.financial_account" + ) + + class Balance(StripeObject): + cash: Dict[str, int] + """ + Funds the user can spend right now. + """ + inbound_pending: Dict[str, int] + """ + Funds not spendable yet, but will become available at a later time. + """ + outbound_pending: Dict[str, int] + """ + Funds in the account, but not spendable because they are being held for pending outbound flows. + """ + + class FinancialAddress(StripeObject): + class Aba(StripeObject): + account_holder_name: str + """ + The name of the person or business that owns the bank account. + """ + account_number: Optional[str] + """ + The account number. + """ + account_number_last4: str + """ + The last four characters of the account number. + """ + bank_name: str + """ + Name of the bank. + """ + routing_number: str + """ + Routing number for the account. + """ + + aba: Optional[Aba] + """ + ABA Records contain U.S. bank account details per the ABA format. + """ + supported_networks: Optional[List[Literal["ach", "us_domestic_wire"]]] + """ + The list of networks that the address supports + """ + type: Literal["aba"] + """ + The type of financial address + """ + _inner_class_types = {"aba": Aba} + + class PlatformRestrictions(StripeObject): + inbound_flows: Optional[Literal["restricted", "unrestricted"]] + """ + Restricts all inbound money movement. + """ + outbound_flows: Optional[Literal["restricted", "unrestricted"]] + """ + Restricts all outbound money movement. + """ + + class StatusDetails(StripeObject): + class Closed(StripeObject): + reasons: List[ + Literal["account_rejected", "closed_by_platform", "other"] + ] + """ + The array that contains reasons for a FinancialAccount closure. + """ + + closed: Optional[Closed] + """ + Details related to the closure of this FinancialAccount + """ + _inner_class_types = {"closed": Closed} + + active_features: Optional[ + List[ + Literal[ + "card_issuing", + "deposit_insurance", + "financial_addresses.aba", + "financial_addresses.aba.forwarding", + "inbound_transfers.ach", + "intra_stripe_flows", + "outbound_payments.ach", + "outbound_payments.us_domestic_wire", + "outbound_transfers.ach", + "outbound_transfers.us_domestic_wire", + "remote_deposit_capture", + ] + ] + ] + """ + The array of paths to active Features in the Features hash. + """ + balance: Balance + """ + Balance information for the FinancialAccount + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + features: Optional["FinancialAccountFeatures"] + """ + Encodes whether a FinancialAccount has access to a particular Feature, with a `status` enum and associated `status_details`. + Stripe or the platform can control Features via the requested field. + """ + financial_addresses: List[FinancialAddress] + """ + The set of credentials that resolve to a FinancialAccount. + """ + id: str + """ + Unique identifier for the object. + """ + is_default: Optional[bool] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + nickname: Optional[str] + """ + The nickname for the FinancialAccount. + """ + object: Literal["treasury.financial_account"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + pending_features: Optional[ + List[ + Literal[ + "card_issuing", + "deposit_insurance", + "financial_addresses.aba", + "financial_addresses.aba.forwarding", + "inbound_transfers.ach", + "intra_stripe_flows", + "outbound_payments.ach", + "outbound_payments.us_domestic_wire", + "outbound_transfers.ach", + "outbound_transfers.us_domestic_wire", + "remote_deposit_capture", + ] + ] + ] + """ + The array of paths to pending Features in the Features hash. + """ + platform_restrictions: Optional[PlatformRestrictions] + """ + The set of functionalities that the platform can restrict on the FinancialAccount. + """ + restricted_features: Optional[ + List[ + Literal[ + "card_issuing", + "deposit_insurance", + "financial_addresses.aba", + "financial_addresses.aba.forwarding", + "inbound_transfers.ach", + "intra_stripe_flows", + "outbound_payments.ach", + "outbound_payments.us_domestic_wire", + "outbound_transfers.ach", + "outbound_transfers.us_domestic_wire", + "remote_deposit_capture", + ] + ] + ] + """ + The array of paths to restricted Features in the Features hash. + """ + status: Literal["closed", "open"] + """ + Status of this FinancialAccount. + """ + status_details: StatusDetails + supported_currencies: List[str] + """ + The currencies the FinancialAccount can hold a balance in. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. + """ + + @classmethod + def _cls_close( + cls, + financial_account: str, + **params: Unpack["FinancialAccountCloseParams"], + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + cls._static_request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def close( + financial_account: str, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + ... + + @overload + def close( + self, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + ... + + @class_method_variant("_cls_close") + def close( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_close_async( + cls, + financial_account: str, + **params: Unpack["FinancialAccountCloseParams"], + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + await cls._static_request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def close_async( + financial_account: str, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + ... + + @overload + async def close_async( + self, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + ... + + @class_method_variant("_cls_close_async") + async def close_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountCloseParams"] + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + await self._request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["FinancialAccountCreateParams"] + ) -> "FinancialAccount": + """ + Creates a new FinancialAccount. Each connected account can have up to three FinancialAccounts by default. + """ + return cast( + "FinancialAccount", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["FinancialAccountCreateParams"] + ) -> "FinancialAccount": + """ + Creates a new FinancialAccount. Each connected account can have up to three FinancialAccounts by default. + """ + return cast( + "FinancialAccount", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["FinancialAccountListParams"] + ) -> ListObject["FinancialAccount"]: + """ + Returns a list of FinancialAccounts. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["FinancialAccountListParams"] + ) -> ListObject["FinancialAccount"]: + """ + Returns a list of FinancialAccounts. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["FinancialAccountModifyParams"] + ) -> "FinancialAccount": + """ + Updates the details of a FinancialAccount. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "FinancialAccount", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["FinancialAccountModifyParams"] + ) -> "FinancialAccount": + """ + Updates the details of a FinancialAccount. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "FinancialAccount", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["FinancialAccountRetrieveParams"] + ) -> "FinancialAccount": + """ + Retrieves the details of a FinancialAccount. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["FinancialAccountRetrieveParams"] + ) -> "FinancialAccount": + """ + Retrieves the details of a FinancialAccount. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_retrieve_features( + cls, + financial_account: str, + **params: Unpack["FinancialAccountRetrieveFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + cls._static_request( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def retrieve_features( + financial_account: str, + **params: Unpack["FinancialAccountRetrieveFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + ... + + @overload + def retrieve_features( + self, **params: Unpack["FinancialAccountRetrieveFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + ... + + @class_method_variant("_cls_retrieve_features") + def retrieve_features( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountRetrieveFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + self._request( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_retrieve_features_async( + cls, + financial_account: str, + **params: Unpack["FinancialAccountRetrieveFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await cls._static_request_async( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def retrieve_features_async( + financial_account: str, + **params: Unpack["FinancialAccountRetrieveFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + ... + + @overload + async def retrieve_features_async( + self, **params: Unpack["FinancialAccountRetrieveFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + ... + + @class_method_variant("_cls_retrieve_features_async") + async def retrieve_features_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountRetrieveFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await self._request_async( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_update_features( + cls, + financial_account: str, + **params: Unpack["FinancialAccountUpdateFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + cls._static_request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def update_features( + financial_account: str, + **params: Unpack["FinancialAccountUpdateFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + ... + + @overload + def update_features( + self, **params: Unpack["FinancialAccountUpdateFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + ... + + @class_method_variant("_cls_update_features") + def update_features( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountUpdateFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_update_features_async( + cls, + financial_account: str, + **params: Unpack["FinancialAccountUpdateFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await cls._static_request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def update_features_async( + financial_account: str, + **params: Unpack["FinancialAccountUpdateFeaturesParams"], + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + ... + + @overload + async def update_features_async( + self, **params: Unpack["FinancialAccountUpdateFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + ... + + @class_method_variant("_cls_update_features_async") + async def update_features_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["FinancialAccountUpdateFeaturesParams"] + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await self._request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = { + "balance": Balance, + "financial_addresses": FinancialAddress, + "platform_restrictions": PlatformRestrictions, + "status_details": StatusDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features.py new file mode 100644 index 00000000..b787ad43 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features.py @@ -0,0 +1,511 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal + + +class FinancialAccountFeatures(StripeObject): + """ + Encodes whether a FinancialAccount has access to a particular Feature, with a `status` enum and associated `status_details`. + Stripe or the platform can control Features via the requested field. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.financial_account_features"]] = ( + "treasury.financial_account_features" + ) + + class CardIssuing(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + class DepositInsurance(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + class FinancialAddresses(StripeObject): + class Aba(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + aba: Optional[Aba] + """ + Toggle settings for enabling/disabling the ABA address feature + """ + _inner_class_types = {"aba": Aba} + + class InboundTransfers(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + """ + Toggle settings for enabling/disabling an inbound ACH specific feature + """ + _inner_class_types = {"ach": Ach} + + class IntraStripeFlows(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[Literal["inbound_flows", "outbound_flows"]] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + class OutboundPayments(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + class UsDomesticWire(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + """ + Toggle settings for enabling/disabling an outbound ACH specific feature + """ + us_domestic_wire: Optional[UsDomesticWire] + """ + Toggle settings for enabling/disabling a feature + """ + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + class OutboundTransfers(StripeObject): + class Ach(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + class UsDomesticWire(StripeObject): + class StatusDetail(StripeObject): + code: Literal[ + "activating", + "capability_not_requested", + "financial_account_closed", + "rejected_other", + "rejected_unsupported_business", + "requirements_past_due", + "requirements_pending_verification", + "restricted_by_platform", + "restricted_other", + ] + """ + Represents the reason why the status is `pending` or `restricted`. + """ + resolution: Optional[ + Literal[ + "contact_stripe", + "provide_information", + "remove_restriction", + ] + ] + """ + Represents what the user should do, if anything, to activate the Feature. + """ + restriction: Optional[ + Literal["inbound_flows", "outbound_flows"] + ] + """ + The `platform_restrictions` that are restricting this Feature. + """ + + requested: bool + """ + Whether the FinancialAccount should have the Feature. + """ + status: Literal["active", "pending", "restricted"] + """ + Whether the Feature is operational. + """ + status_details: List[StatusDetail] + """ + Additional details; includes at least one entry when the status is not `active`. + """ + _inner_class_types = {"status_details": StatusDetail} + + ach: Optional[Ach] + """ + Toggle settings for enabling/disabling an outbound ACH specific feature + """ + us_domestic_wire: Optional[UsDomesticWire] + """ + Toggle settings for enabling/disabling a feature + """ + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + card_issuing: Optional[CardIssuing] + """ + Toggle settings for enabling/disabling a feature + """ + deposit_insurance: Optional[DepositInsurance] + """ + Toggle settings for enabling/disabling a feature + """ + financial_addresses: Optional[FinancialAddresses] + """ + Settings related to Financial Addresses features on a Financial Account + """ + inbound_transfers: Optional[InboundTransfers] + """ + InboundTransfers contains inbound transfers features for a FinancialAccount. + """ + intra_stripe_flows: Optional[IntraStripeFlows] + """ + Toggle settings for enabling/disabling a feature + """ + object: Literal["treasury.financial_account_features"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + outbound_payments: Optional[OutboundPayments] + """ + Settings related to Outbound Payments features on a Financial Account + """ + outbound_transfers: Optional[OutboundTransfers] + """ + OutboundTransfers contains outbound transfers features for a FinancialAccount. + """ + _inner_class_types = { + "card_issuing": CardIssuing, + "deposit_insurance": DepositInsurance, + "financial_addresses": FinancialAddresses, + "inbound_transfers": InboundTransfers, + "intra_stripe_flows": IntraStripeFlows, + "outbound_payments": OutboundPayments, + "outbound_transfers": OutboundTransfers, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features_service.py new file mode 100644 index 00000000..b89cec2d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_features_service.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.treasury._financial_account_features_retrieve_params import ( + FinancialAccountFeaturesRetrieveParams, + ) + from stripe.params.treasury._financial_account_features_update_params import ( + FinancialAccountFeaturesUpdateParams, + ) + from stripe.treasury._financial_account_features import ( + FinancialAccountFeatures, + ) + + +class FinancialAccountFeaturesService(StripeService): + def update( + self, + financial_account: str, + params: Optional["FinancialAccountFeaturesUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + financial_account: str, + params: Optional["FinancialAccountFeaturesUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccountFeatures": + """ + Updates the Features associated with a FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await self._request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + financial_account: str, + params: Optional["FinancialAccountFeaturesRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + self._request( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + financial_account: str, + params: Optional["FinancialAccountFeaturesRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccountFeatures": + """ + Retrieves Features information associated with the FinancialAccount. + """ + return cast( + "FinancialAccountFeatures", + await self._request_async( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_service.py new file mode 100644 index 00000000..269b67ec --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_financial_account_service.py @@ -0,0 +1,268 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._financial_account_close_params import ( + FinancialAccountCloseParams, + ) + from stripe.params.treasury._financial_account_create_params import ( + FinancialAccountCreateParams, + ) + from stripe.params.treasury._financial_account_list_params import ( + FinancialAccountListParams, + ) + from stripe.params.treasury._financial_account_retrieve_params import ( + FinancialAccountRetrieveParams, + ) + from stripe.params.treasury._financial_account_update_params import ( + FinancialAccountUpdateParams, + ) + from stripe.treasury._financial_account import FinancialAccount + from stripe.treasury._financial_account_features_service import ( + FinancialAccountFeaturesService, + ) + +_subservices = { + "features": [ + "stripe.treasury._financial_account_features_service", + "FinancialAccountFeaturesService", + ], +} + + +class FinancialAccountService(StripeService): + features: "FinancialAccountFeaturesService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["FinancialAccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[FinancialAccount]": + """ + Returns a list of FinancialAccounts. + """ + return cast( + "ListObject[FinancialAccount]", + self._request( + "get", + "/v1/treasury/financial_accounts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["FinancialAccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[FinancialAccount]": + """ + Returns a list of FinancialAccounts. + """ + return cast( + "ListObject[FinancialAccount]", + await self._request_async( + "get", + "/v1/treasury/financial_accounts", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "FinancialAccountCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Creates a new FinancialAccount. Each connected account can have up to three FinancialAccounts by default. + """ + return cast( + "FinancialAccount", + self._request( + "post", + "/v1/treasury/financial_accounts", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "FinancialAccountCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Creates a new FinancialAccount. Each connected account can have up to three FinancialAccounts by default. + """ + return cast( + "FinancialAccount", + await self._request_async( + "post", + "/v1/treasury/financial_accounts", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + financial_account: str, + params: Optional["FinancialAccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Retrieves the details of a FinancialAccount. + """ + return cast( + "FinancialAccount", + self._request( + "get", + "/v1/treasury/financial_accounts/{financial_account}".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + financial_account: str, + params: Optional["FinancialAccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Retrieves the details of a FinancialAccount. + """ + return cast( + "FinancialAccount", + await self._request_async( + "get", + "/v1/treasury/financial_accounts/{financial_account}".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + financial_account: str, + params: Optional["FinancialAccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Updates the details of a FinancialAccount. + """ + return cast( + "FinancialAccount", + self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + financial_account: str, + params: Optional["FinancialAccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Updates the details of a FinancialAccount. + """ + return cast( + "FinancialAccount", + await self._request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def close( + self, + financial_account: str, + params: Optional["FinancialAccountCloseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def close_async( + self, + financial_account: str, + params: Optional["FinancialAccountCloseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FinancialAccount": + """ + Closes a FinancialAccount. A FinancialAccount can only be closed if it has a zero balance, has no pending InboundTransfers, and has canceled all attached Issuing cards. + """ + return cast( + "FinancialAccount", + await self._request_async( + "post", + "/v1/treasury/financial_accounts/{financial_account}/close".format( + financial_account=sanitize_id(financial_account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer.py new file mode 100644 index 00000000..2c06ec5f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer.py @@ -0,0 +1,815 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe.params.treasury._inbound_transfer_cancel_params import ( + InboundTransferCancelParams, + ) + from stripe.params.treasury._inbound_transfer_create_params import ( + InboundTransferCreateParams, + ) + from stripe.params.treasury._inbound_transfer_fail_params import ( + InboundTransferFailParams, + ) + from stripe.params.treasury._inbound_transfer_list_params import ( + InboundTransferListParams, + ) + from stripe.params.treasury._inbound_transfer_retrieve_params import ( + InboundTransferRetrieveParams, + ) + from stripe.params.treasury._inbound_transfer_return_inbound_transfer_params import ( + InboundTransferReturnInboundTransferParams, + ) + from stripe.params.treasury._inbound_transfer_succeed_params import ( + InboundTransferSucceedParams, + ) + from stripe.treasury._transaction import Transaction + + +class InboundTransfer( + CreateableAPIResource["InboundTransfer"], + ListableAPIResource["InboundTransfer"], +): + """ + Use [InboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) to add funds to your [FinancialAccount](https://stripe.com/docs/api#financial_accounts) via a PaymentMethod that is owned by you. The funds will be transferred via an ACH debit. + + Related guide: [Moving money with Treasury using InboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) + """ + + OBJECT_NAME: ClassVar[Literal["treasury.inbound_transfer"]] = ( + "treasury.inbound_transfer" + ) + + class FailureDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "debit_not_authorized", + "incorrect_account_holder_address", + "incorrect_account_holder_name", + "incorrect_account_holder_tax_id", + "insufficient_funds", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + """ + Reason for the failure. + """ + + class LinkedFlows(StripeObject): + received_debit: Optional[str] + """ + If funds for this flow were returned after the flow went to the `succeeded` state, this field contains a reference to the ReceivedDebit return. + """ + + class OriginPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + _inner_class_types = {"address": Address} + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + network: Literal["ach"] + """ + The network rails used. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + billing_details: BillingDetails + type: Literal["us_bank_account"] + """ + The type of the payment method used in the InboundTransfer. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "us_bank_account": UsBankAccount, + } + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + """ + Timestamp describing when an InboundTransfer changed status to `canceled`. + """ + failed_at: Optional[int] + """ + Timestamp describing when an InboundTransfer changed status to `failed`. + """ + succeeded_at: Optional[int] + """ + Timestamp describing when an InboundTransfer changed status to `succeeded`. + """ + + amount: int + """ + Amount (in cents) transferred. + """ + cancelable: bool + """ + Returns `true` if the InboundTransfer is able to be canceled. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + failure_details: Optional[FailureDetails] + """ + Details about this InboundTransfer's failure. Only set when status is `failed`. + """ + financial_account: str + """ + The FinancialAccount that received the funds. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + linked_flows: LinkedFlows + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["treasury.inbound_transfer"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + origin_payment_method: Optional[str] + """ + The origin payment method to be debited for an InboundTransfer. + """ + origin_payment_method_details: Optional[OriginPaymentMethodDetails] + """ + Details about the PaymentMethod for an InboundTransfer. + """ + returned: Optional[bool] + """ + Returns `true` if the funds for an InboundTransfer were returned after the InboundTransfer went to the `succeeded` state. + """ + statement_descriptor: str + """ + Statement descriptor shown when funds are debited from the source. Not all payment networks support `statement_descriptor`. + """ + status: Literal["canceled", "failed", "processing", "succeeded"] + """ + Status of the InboundTransfer: `processing`, `succeeded`, `failed`, and `canceled`. An InboundTransfer is `processing` if it is created and pending. The status changes to `succeeded` once the funds have been "confirmed" and a `transaction` is created and posted. The status changes to `failed` if the transfer fails. + """ + status_transitions: StatusTransitions + transaction: Optional[ExpandableField["Transaction"]] + """ + The Transaction associated with this object. + """ + + @classmethod + def _cls_cancel( + cls, + inbound_transfer: str, + **params: Unpack["InboundTransferCancelParams"], + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + cls._static_request( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(inbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + inbound_transfer: str, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + ... + + @overload + def cancel( + self, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, + inbound_transfer: str, + **params: Unpack["InboundTransferCancelParams"], + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + await cls._static_request_async( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(inbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + inbound_transfer: str, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferCancelParams"] + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["InboundTransferCreateParams"] + ) -> "InboundTransfer": + """ + Creates an InboundTransfer. + """ + return cast( + "InboundTransfer", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["InboundTransferCreateParams"] + ) -> "InboundTransfer": + """ + Creates an InboundTransfer. + """ + return cast( + "InboundTransfer", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["InboundTransferListParams"] + ) -> ListObject["InboundTransfer"]: + """ + Returns a list of InboundTransfers sent from the specified FinancialAccount. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["InboundTransferListParams"] + ) -> ListObject["InboundTransfer"]: + """ + Returns a list of InboundTransfers sent from the specified FinancialAccount. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["InboundTransferRetrieveParams"] + ) -> "InboundTransfer": + """ + Retrieves the details of an existing InboundTransfer. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["InboundTransferRetrieveParams"] + ) -> "InboundTransfer": + """ + Retrieves the details of an existing InboundTransfer. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["InboundTransfer"]): + _resource_cls: Type["InboundTransfer"] + + @classmethod + def _cls_fail( + cls, id: str, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def fail( + id: str, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + ... + + @overload + def fail( + self, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail") + def fail( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_fail_async( + cls, id: str, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def fail_async( + id: str, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + ... + + @overload + async def fail_async( + self, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail_async") + async def fail_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferFailParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the failed status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_return_inbound_transfer( + cls, + id: str, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def return_inbound_transfer( + id: str, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + ... + + @overload + def return_inbound_transfer( + self, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + ... + + @class_method_variant("_cls_return_inbound_transfer") + def return_inbound_transfer( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_return_inbound_transfer_async( + cls, + id: str, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def return_inbound_transfer_async( + id: str, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + ... + + @overload + async def return_inbound_transfer_async( + self, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + ... + + @class_method_variant("_cls_return_inbound_transfer_async") + async def return_inbound_transfer_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["InboundTransferReturnInboundTransferParams"], + ) -> "InboundTransfer": + """ + Marks the test mode InboundTransfer object as returned and links the InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the succeeded state. + """ + return cast( + "InboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_succeed( + cls, id: str, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def succeed( + id: str, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + ... + + @overload + def succeed( + self, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_succeed") + def succeed( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_succeed_async( + cls, id: str, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def succeed_async( + id: str, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + ... + + @overload + async def succeed_async( + self, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_succeed_async") + async def succeed_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InboundTransferSucceedParams"] + ) -> "InboundTransfer": + """ + Transitions a test mode created InboundTransfer to the succeeded status. The InboundTransfer must already be in the processing state. + """ + return cast( + "InboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "failure_details": FailureDetails, + "linked_flows": LinkedFlows, + "origin_payment_method_details": OriginPaymentMethodDetails, + "status_transitions": StatusTransitions, + } + + +InboundTransfer.TestHelpers._resource_cls = InboundTransfer diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer_service.py new file mode 100644 index 00000000..7ce66d3e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_inbound_transfer_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._inbound_transfer_cancel_params import ( + InboundTransferCancelParams, + ) + from stripe.params.treasury._inbound_transfer_create_params import ( + InboundTransferCreateParams, + ) + from stripe.params.treasury._inbound_transfer_list_params import ( + InboundTransferListParams, + ) + from stripe.params.treasury._inbound_transfer_retrieve_params import ( + InboundTransferRetrieveParams, + ) + from stripe.treasury._inbound_transfer import InboundTransfer + + +class InboundTransferService(StripeService): + def list( + self, + params: "InboundTransferListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InboundTransfer]": + """ + Returns a list of InboundTransfers sent from the specified FinancialAccount. + """ + return cast( + "ListObject[InboundTransfer]", + self._request( + "get", + "/v1/treasury/inbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "InboundTransferListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InboundTransfer]": + """ + Returns a list of InboundTransfers sent from the specified FinancialAccount. + """ + return cast( + "ListObject[InboundTransfer]", + await self._request_async( + "get", + "/v1/treasury/inbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "InboundTransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Creates an InboundTransfer. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/treasury/inbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "InboundTransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Creates an InboundTransfer. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/treasury/inbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["InboundTransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Retrieves the details of an existing InboundTransfer. + """ + return cast( + "InboundTransfer", + self._request( + "get", + "/v1/treasury/inbound_transfers/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["InboundTransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Retrieves the details of an existing InboundTransfer. + """ + return cast( + "InboundTransfer", + await self._request_async( + "get", + "/v1/treasury/inbound_transfers/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + inbound_transfer: str, + params: Optional["InboundTransferCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + self._request( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(inbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + inbound_transfer: str, + params: Optional["InboundTransferCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InboundTransfer": + """ + Cancels an InboundTransfer. + """ + return cast( + "InboundTransfer", + await self._request_async( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=sanitize_id(inbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment.py new file mode 100644 index 00000000..08a834cd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment.py @@ -0,0 +1,990 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe.params.treasury._outbound_payment_cancel_params import ( + OutboundPaymentCancelParams, + ) + from stripe.params.treasury._outbound_payment_create_params import ( + OutboundPaymentCreateParams, + ) + from stripe.params.treasury._outbound_payment_fail_params import ( + OutboundPaymentFailParams, + ) + from stripe.params.treasury._outbound_payment_list_params import ( + OutboundPaymentListParams, + ) + from stripe.params.treasury._outbound_payment_post_params import ( + OutboundPaymentPostParams, + ) + from stripe.params.treasury._outbound_payment_retrieve_params import ( + OutboundPaymentRetrieveParams, + ) + from stripe.params.treasury._outbound_payment_return_outbound_payment_params import ( + OutboundPaymentReturnOutboundPaymentParams, + ) + from stripe.params.treasury._outbound_payment_update_params import ( + OutboundPaymentUpdateParams, + ) + from stripe.treasury._transaction import Transaction + + +class OutboundPayment( + CreateableAPIResource["OutboundPayment"], + ListableAPIResource["OutboundPayment"], +): + """ + Use [OutboundPayments](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) to send funds to another party's external bank account or [FinancialAccount](https://stripe.com/docs/api#financial_accounts). To send money to an account belonging to the same user, use an [OutboundTransfer](https://stripe.com/docs/api#outbound_transfers). + + Simulate OutboundPayment state changes with the `/v1/test_helpers/treasury/outbound_payments` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundPayment objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) + """ + + OBJECT_NAME: ClassVar[Literal["treasury.outbound_payment"]] = ( + "treasury.outbound_payment" + ) + + class DestinationPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + """ + Token of the FinancialAccount. + """ + network: Literal["stripe"] + """ + The rails used to send funds. + """ + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + network: Literal["ach", "us_domestic_wire"] + """ + The network rails used. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + type: Literal["financial_account", "us_bank_account"] + """ + The type of the payment method used in the OutboundPayment. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class EndUserDetails(StripeObject): + ip_address: Optional[str] + """ + IP address of the user initiating the OutboundPayment. Set if `present` is set to `true`. IP address collection is required for risk and compliance reasons. This will be used to help determine if the OutboundPayment is authorized or should be blocked. + """ + present: bool + """ + `true` if the OutboundPayment creation request is being made on behalf of an end user by a platform. Otherwise, `false`. + """ + + class ReturnedDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + """ + Reason for the return. + """ + transaction: ExpandableField["Transaction"] + """ + The Transaction associated with this object. + """ + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + """ + Timestamp describing when an OutboundPayment changed status to `canceled`. + """ + failed_at: Optional[int] + """ + Timestamp describing when an OutboundPayment changed status to `failed`. + """ + posted_at: Optional[int] + """ + Timestamp describing when an OutboundPayment changed status to `posted`. + """ + returned_at: Optional[int] + """ + Timestamp describing when an OutboundPayment changed status to `returned`. + """ + + class TrackingDetails(StripeObject): + class Ach(StripeObject): + trace_id: str + """ + ACH trace ID of the OutboundPayment for payments sent over the `ach` network. + """ + + class UsDomesticWire(StripeObject): + chips: Optional[str] + """ + CHIPS System Sequence Number (SSN) of the OutboundPayment for payments sent over the `us_domestic_wire` network. + """ + imad: Optional[str] + """ + IMAD of the OutboundPayment for payments sent over the `us_domestic_wire` network. + """ + omad: Optional[str] + """ + OMAD of the OutboundPayment for payments sent over the `us_domestic_wire` network. + """ + + ach: Optional[Ach] + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: Optional[UsDomesticWire] + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + amount: int + """ + Amount (in cents) transferred. + """ + cancelable: bool + """ + Returns `true` if the object can be canceled, and `false` otherwise. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[str] + """ + ID of the [customer](https://stripe.com/docs/api/customers) to whom an OutboundPayment is sent. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination_payment_method: Optional[str] + """ + The PaymentMethod via which an OutboundPayment is sent. This field can be empty if the OutboundPayment was created using `destination_payment_method_data`. + """ + destination_payment_method_details: Optional[ + DestinationPaymentMethodDetails + ] + """ + Details about the PaymentMethod for an OutboundPayment. + """ + end_user_details: Optional[EndUserDetails] + """ + Details about the end user. + """ + expected_arrival_date: int + """ + The date when funds are expected to arrive in the destination account. + """ + financial_account: str + """ + The FinancialAccount that funds were pulled from. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["treasury.outbound_payment"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + returned_details: Optional[ReturnedDetails] + """ + Details about a returned OutboundPayment. Only set when the status is `returned`. + """ + statement_descriptor: str + """ + The description that appears on the receiving end for an OutboundPayment (for example, bank statement for external bank transfer). + """ + status: Literal["canceled", "failed", "posted", "processing", "returned"] + """ + Current status of the OutboundPayment: `processing`, `failed`, `posted`, `returned`, `canceled`. An OutboundPayment is `processing` if it has been created and is pending. The status changes to `posted` once the OutboundPayment has been "confirmed" and funds have left the account, or to `failed` or `canceled`. If an OutboundPayment fails to arrive at its destination, its status will change to `returned`. + """ + status_transitions: StatusTransitions + tracking_details: Optional[TrackingDetails] + """ + Details about network-specific tracking information if available. + """ + transaction: ExpandableField["Transaction"] + """ + The Transaction associated with this object. + """ + + @classmethod + def _cls_cancel( + cls, id: str, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + id: str, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + ... + + @overload + def cancel( + self, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, id: str, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + id: str, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentCancelParams"] + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["OutboundPaymentCreateParams"] + ) -> "OutboundPayment": + """ + Creates an OutboundPayment. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["OutboundPaymentCreateParams"] + ) -> "OutboundPayment": + """ + Creates an OutboundPayment. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["OutboundPaymentListParams"] + ) -> ListObject["OutboundPayment"]: + """ + Returns a list of OutboundPayments sent from the specified FinancialAccount. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["OutboundPaymentListParams"] + ) -> ListObject["OutboundPayment"]: + """ + Returns a list of OutboundPayments sent from the specified FinancialAccount. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["OutboundPaymentRetrieveParams"] + ) -> "OutboundPayment": + """ + Retrieves the details of an existing OutboundPayment by passing the unique OutboundPayment ID from either the OutboundPayment creation request or OutboundPayment list. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["OutboundPaymentRetrieveParams"] + ) -> "OutboundPayment": + """ + Retrieves the details of an existing OutboundPayment by passing the unique OutboundPayment ID from either the OutboundPayment creation request or OutboundPayment list. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["OutboundPayment"]): + _resource_cls: Type["OutboundPayment"] + + @classmethod + def _cls_fail( + cls, id: str, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def fail( + id: str, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + def fail( + self, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail") + def fail( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_fail_async( + cls, id: str, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def fail_async( + id: str, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + async def fail_async( + self, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail_async") + async def fail_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentFailParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the failed status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_post( + cls, id: str, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def post( + id: str, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + def post( + self, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_post") + def post( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_post_async( + cls, id: str, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def post_async( + id: str, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + async def post_async( + self, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_post_async") + async def post_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentPostParams"] + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the posted status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_return_outbound_payment( + cls, + id: str, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def return_outbound_payment( + id: str, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + def return_outbound_payment( + self, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_return_outbound_payment") + def return_outbound_payment( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_return_outbound_payment_async( + cls, + id: str, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def return_outbound_payment_async( + id: str, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + ... + + @overload + async def return_outbound_payment_async( + self, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + ... + + @class_method_variant("_cls_return_outbound_payment_async") + async def return_outbound_payment_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["OutboundPaymentReturnOutboundPaymentParams"], + ) -> "OutboundPayment": + """ + Transitions a test mode created OutboundPayment to the returned status. The OutboundPayment must already be in the processing state. + """ + return cast( + "OutboundPayment", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_update( + cls, id: str, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def update( + id: str, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @overload + def update( + self, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @class_method_variant("_cls_update") + def update( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_update_async( + cls, id: str, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def update_async( + id: str, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @overload + async def update_async( + self, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @class_method_variant("_cls_update_async") + async def update_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundPaymentUpdateParams"] + ) -> "OutboundPayment": + """ + Updates a test mode created OutboundPayment with tracking details. The OutboundPayment must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundPayment", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}".format( + id=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "destination_payment_method_details": DestinationPaymentMethodDetails, + "end_user_details": EndUserDetails, + "returned_details": ReturnedDetails, + "status_transitions": StatusTransitions, + "tracking_details": TrackingDetails, + } + + +OutboundPayment.TestHelpers._resource_cls = OutboundPayment diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment_service.py new file mode 100644 index 00000000..97a27c73 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_payment_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._outbound_payment_cancel_params import ( + OutboundPaymentCancelParams, + ) + from stripe.params.treasury._outbound_payment_create_params import ( + OutboundPaymentCreateParams, + ) + from stripe.params.treasury._outbound_payment_list_params import ( + OutboundPaymentListParams, + ) + from stripe.params.treasury._outbound_payment_retrieve_params import ( + OutboundPaymentRetrieveParams, + ) + from stripe.treasury._outbound_payment import OutboundPayment + + +class OutboundPaymentService(StripeService): + def list( + self, + params: "OutboundPaymentListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[OutboundPayment]": + """ + Returns a list of OutboundPayments sent from the specified FinancialAccount. + """ + return cast( + "ListObject[OutboundPayment]", + self._request( + "get", + "/v1/treasury/outbound_payments", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "OutboundPaymentListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[OutboundPayment]": + """ + Returns a list of OutboundPayments sent from the specified FinancialAccount. + """ + return cast( + "ListObject[OutboundPayment]", + await self._request_async( + "get", + "/v1/treasury/outbound_payments", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "OutboundPaymentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Creates an OutboundPayment. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/treasury/outbound_payments", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "OutboundPaymentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Creates an OutboundPayment. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/treasury/outbound_payments", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["OutboundPaymentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Retrieves the details of an existing OutboundPayment by passing the unique OutboundPayment ID from either the OutboundPayment creation request or OutboundPayment list. + """ + return cast( + "OutboundPayment", + self._request( + "get", + "/v1/treasury/outbound_payments/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["OutboundPaymentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Retrieves the details of an existing OutboundPayment by passing the unique OutboundPayment ID from either the OutboundPayment creation request or OutboundPayment list. + """ + return cast( + "OutboundPayment", + await self._request_async( + "get", + "/v1/treasury/outbound_payments/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + id: str, + params: Optional["OutboundPaymentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + self._request( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + id: str, + params: Optional["OutboundPaymentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundPayment": + """ + Cancel an OutboundPayment. + """ + return cast( + "OutboundPayment", + await self._request_async( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer.py new file mode 100644 index 00000000..fe71e6fa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer.py @@ -0,0 +1,990 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe.params.treasury._outbound_transfer_cancel_params import ( + OutboundTransferCancelParams, + ) + from stripe.params.treasury._outbound_transfer_create_params import ( + OutboundTransferCreateParams, + ) + from stripe.params.treasury._outbound_transfer_fail_params import ( + OutboundTransferFailParams, + ) + from stripe.params.treasury._outbound_transfer_list_params import ( + OutboundTransferListParams, + ) + from stripe.params.treasury._outbound_transfer_post_params import ( + OutboundTransferPostParams, + ) + from stripe.params.treasury._outbound_transfer_retrieve_params import ( + OutboundTransferRetrieveParams, + ) + from stripe.params.treasury._outbound_transfer_return_outbound_transfer_params import ( + OutboundTransferReturnOutboundTransferParams, + ) + from stripe.params.treasury._outbound_transfer_update_params import ( + OutboundTransferUpdateParams, + ) + from stripe.treasury._transaction import Transaction + + +class OutboundTransfer( + CreateableAPIResource["OutboundTransfer"], + ListableAPIResource["OutboundTransfer"], +): + """ + Use [OutboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) to transfer funds from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) to a PaymentMethod belonging to the same entity. To send funds to a different party, use [OutboundPayments](https://stripe.com/docs/api#outbound_payments) instead. You can send funds over ACH rails or through a domestic wire transfer to a user's own external bank account. + + Simulate OutboundTransfer state changes with the `/v1/test_helpers/treasury/outbound_transfers` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) + """ + + OBJECT_NAME: ClassVar[Literal["treasury.outbound_transfer"]] = ( + "treasury.outbound_transfer" + ) + + class DestinationPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + """ + Token of the FinancialAccount. + """ + network: Literal["stripe"] + """ + The rails used to send funds. + """ + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + network: Literal["ach", "us_domestic_wire"] + """ + The network rails used. See the [docs](https://stripe.com/docs/treasury/money-movement/timelines) to learn more about money movement timelines for each network type. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + type: Literal["financial_account", "us_bank_account"] + """ + The type of the payment method used in the OutboundTransfer. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class ReturnedDetails(StripeObject): + code: Literal[ + "account_closed", + "account_frozen", + "bank_account_restricted", + "bank_ownership_changed", + "declined", + "incorrect_account_holder_name", + "invalid_account_number", + "invalid_currency", + "no_account", + "other", + ] + """ + Reason for the return. + """ + transaction: ExpandableField["Transaction"] + """ + The Transaction associated with this object. + """ + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + """ + Timestamp describing when an OutboundTransfer changed status to `canceled` + """ + failed_at: Optional[int] + """ + Timestamp describing when an OutboundTransfer changed status to `failed` + """ + posted_at: Optional[int] + """ + Timestamp describing when an OutboundTransfer changed status to `posted` + """ + returned_at: Optional[int] + """ + Timestamp describing when an OutboundTransfer changed status to `returned` + """ + + class TrackingDetails(StripeObject): + class Ach(StripeObject): + trace_id: str + """ + ACH trace ID of the OutboundTransfer for transfers sent over the `ach` network. + """ + + class UsDomesticWire(StripeObject): + chips: Optional[str] + """ + CHIPS System Sequence Number (SSN) of the OutboundTransfer for transfers sent over the `us_domestic_wire` network. + """ + imad: Optional[str] + """ + IMAD of the OutboundTransfer for transfers sent over the `us_domestic_wire` network. + """ + omad: Optional[str] + """ + OMAD of the OutboundTransfer for transfers sent over the `us_domestic_wire` network. + """ + + ach: Optional[Ach] + type: Literal["ach", "us_domestic_wire"] + """ + The US bank account network used to send funds. + """ + us_domestic_wire: Optional[UsDomesticWire] + _inner_class_types = {"ach": Ach, "us_domestic_wire": UsDomesticWire} + + amount: int + """ + Amount (in cents) transferred. + """ + cancelable: bool + """ + Returns `true` if the object can be canceled, and `false` otherwise. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination_payment_method: Optional[str] + """ + The PaymentMethod used as the payment instrument for an OutboundTransfer. + """ + destination_payment_method_details: DestinationPaymentMethodDetails + expected_arrival_date: int + """ + The date when funds are expected to arrive in the destination account. + """ + financial_account: str + """ + The FinancialAccount that funds were pulled from. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["treasury.outbound_transfer"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + returned_details: Optional[ReturnedDetails] + """ + Details about a returned OutboundTransfer. Only set when the status is `returned`. + """ + statement_descriptor: str + """ + Information about the OutboundTransfer to be sent to the recipient account. + """ + status: Literal["canceled", "failed", "posted", "processing", "returned"] + """ + Current status of the OutboundTransfer: `processing`, `failed`, `canceled`, `posted`, `returned`. An OutboundTransfer is `processing` if it has been created and is pending. The status changes to `posted` once the OutboundTransfer has been "confirmed" and funds have left the account, or to `failed` or `canceled`. If an OutboundTransfer fails to arrive at its destination, its status will change to `returned`. + """ + status_transitions: StatusTransitions + tracking_details: Optional[TrackingDetails] + """ + Details about network-specific tracking information if available. + """ + transaction: ExpandableField["Transaction"] + """ + The Transaction associated with this object. + """ + + @classmethod + def _cls_cancel( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferCancelParams"], + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + outbound_transfer: str, + **params: Unpack["OutboundTransferCancelParams"], + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + ... + + @overload + def cancel( + self, **params: Unpack["OutboundTransferCancelParams"] + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferCancelParams"] + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferCancelParams"], + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + outbound_transfer: str, + **params: Unpack["OutboundTransferCancelParams"], + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["OutboundTransferCancelParams"] + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferCancelParams"] + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["OutboundTransferCreateParams"] + ) -> "OutboundTransfer": + """ + Creates an OutboundTransfer. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["OutboundTransferCreateParams"] + ) -> "OutboundTransfer": + """ + Creates an OutboundTransfer. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["OutboundTransferListParams"] + ) -> ListObject["OutboundTransfer"]: + """ + Returns a list of OutboundTransfers sent from the specified FinancialAccount. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["OutboundTransferListParams"] + ) -> ListObject["OutboundTransfer"]: + """ + Returns a list of OutboundTransfers sent from the specified FinancialAccount. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["OutboundTransferRetrieveParams"] + ) -> "OutboundTransfer": + """ + Retrieves the details of an existing OutboundTransfer by passing the unique OutboundTransfer ID from either the OutboundTransfer creation request or OutboundTransfer list. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["OutboundTransferRetrieveParams"] + ) -> "OutboundTransfer": + """ + Retrieves the details of an existing OutboundTransfer by passing the unique OutboundTransfer ID from either the OutboundTransfer creation request or OutboundTransfer list. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["OutboundTransfer"]): + _resource_cls: Type["OutboundTransfer"] + + @classmethod + def _cls_fail( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferFailParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def fail( + outbound_transfer: str, + **params: Unpack["OutboundTransferFailParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + def fail( + self, **params: Unpack["OutboundTransferFailParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail") + def fail( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferFailParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_fail_async( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferFailParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def fail_async( + outbound_transfer: str, + **params: Unpack["OutboundTransferFailParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + async def fail_async( + self, **params: Unpack["OutboundTransferFailParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_fail_async") + async def fail_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferFailParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the failed status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_post( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferPostParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def post( + outbound_transfer: str, + **params: Unpack["OutboundTransferPostParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + def post( + self, **params: Unpack["OutboundTransferPostParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_post") + def post( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferPostParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_post_async( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferPostParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def post_async( + outbound_transfer: str, + **params: Unpack["OutboundTransferPostParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + async def post_async( + self, **params: Unpack["OutboundTransferPostParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_post_async") + async def post_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferPostParams"] + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the posted status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_return_outbound_transfer( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def return_outbound_transfer( + outbound_transfer: str, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + def return_outbound_transfer( + self, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_return_outbound_transfer") + def return_outbound_transfer( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_return_outbound_transfer_async( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def return_outbound_transfer_async( + outbound_transfer: str, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + ... + + @overload + async def return_outbound_transfer_async( + self, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + ... + + @class_method_variant("_cls_return_outbound_transfer_async") + async def return_outbound_transfer_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["OutboundTransferReturnOutboundTransferParams"], + ) -> "OutboundTransfer": + """ + Transitions a test mode created OutboundTransfer to the returned status. The OutboundTransfer must already be in the processing state. + """ + return cast( + "OutboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_update( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferUpdateParams"], + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def update( + outbound_transfer: str, + **params: Unpack["OutboundTransferUpdateParams"], + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @overload + def update( + self, **params: Unpack["OutboundTransferUpdateParams"] + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @class_method_variant("_cls_update") + def update( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferUpdateParams"] + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_update_async( + cls, + outbound_transfer: str, + **params: Unpack["OutboundTransferUpdateParams"], + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def update_async( + outbound_transfer: str, + **params: Unpack["OutboundTransferUpdateParams"], + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @overload + async def update_async( + self, **params: Unpack["OutboundTransferUpdateParams"] + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + ... + + @class_method_variant("_cls_update_async") + async def update_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OutboundTransferUpdateParams"] + ) -> "OutboundTransfer": + """ + Updates a test mode created OutboundTransfer with tracking details. The OutboundTransfer must not be cancelable, and cannot be in the canceled or failed states. + """ + return cast( + "OutboundTransfer", + await self.resource._request_async( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "destination_payment_method_details": DestinationPaymentMethodDetails, + "returned_details": ReturnedDetails, + "status_transitions": StatusTransitions, + "tracking_details": TrackingDetails, + } + + +OutboundTransfer.TestHelpers._resource_cls = OutboundTransfer diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer_service.py new file mode 100644 index 00000000..b4783fb4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_outbound_transfer_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._outbound_transfer_cancel_params import ( + OutboundTransferCancelParams, + ) + from stripe.params.treasury._outbound_transfer_create_params import ( + OutboundTransferCreateParams, + ) + from stripe.params.treasury._outbound_transfer_list_params import ( + OutboundTransferListParams, + ) + from stripe.params.treasury._outbound_transfer_retrieve_params import ( + OutboundTransferRetrieveParams, + ) + from stripe.treasury._outbound_transfer import OutboundTransfer + + +class OutboundTransferService(StripeService): + def list( + self, + params: "OutboundTransferListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[OutboundTransfer]": + """ + Returns a list of OutboundTransfers sent from the specified FinancialAccount. + """ + return cast( + "ListObject[OutboundTransfer]", + self._request( + "get", + "/v1/treasury/outbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "OutboundTransferListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[OutboundTransfer]": + """ + Returns a list of OutboundTransfers sent from the specified FinancialAccount. + """ + return cast( + "ListObject[OutboundTransfer]", + await self._request_async( + "get", + "/v1/treasury/outbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "OutboundTransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Creates an OutboundTransfer. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/treasury/outbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "OutboundTransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Creates an OutboundTransfer. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/treasury/outbound_transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + outbound_transfer: str, + params: Optional["OutboundTransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Retrieves the details of an existing OutboundTransfer by passing the unique OutboundTransfer ID from either the OutboundTransfer creation request or OutboundTransfer list. + """ + return cast( + "OutboundTransfer", + self._request( + "get", + "/v1/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + outbound_transfer: str, + params: Optional["OutboundTransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + Retrieves the details of an existing OutboundTransfer by passing the unique OutboundTransfer ID from either the OutboundTransfer creation request or OutboundTransfer list. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "get", + "/v1/treasury/outbound_transfers/{outbound_transfer}".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + outbound_transfer: str, + params: Optional["OutboundTransferCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + self._request( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + outbound_transfer: str, + params: Optional["OutboundTransferCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "OutboundTransfer": + """ + An OutboundTransfer can be canceled if the funds have not yet been paid out. + """ + return cast( + "OutboundTransfer", + await self._request_async( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=sanitize_id(outbound_transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit.py new file mode 100644 index 00000000..3b7863a5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit.py @@ -0,0 +1,389 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._payout import Payout + from stripe.params.treasury._received_credit_create_params import ( + ReceivedCreditCreateParams, + ) + from stripe.params.treasury._received_credit_list_params import ( + ReceivedCreditListParams, + ) + from stripe.params.treasury._received_credit_retrieve_params import ( + ReceivedCreditRetrieveParams, + ) + from stripe.treasury._credit_reversal import CreditReversal + from stripe.treasury._outbound_payment import OutboundPayment + from stripe.treasury._outbound_transfer import OutboundTransfer + from stripe.treasury._transaction import Transaction + + +class ReceivedCredit(ListableAPIResource["ReceivedCredit"]): + """ + ReceivedCredits represent funds sent to a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) (for example, via ACH or wire). These money movements are not initiated from the FinancialAccount. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.received_credit"]] = ( + "treasury.received_credit" + ) + + class InitiatingPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + """ + The FinancialAccount ID. + """ + network: Literal["stripe"] + """ + The rails the ReceivedCredit was sent over. A FinancialAccount can only send funds over `stripe`. + """ + + class UsBankAccount(StripeObject): + bank_name: Optional[str] + """ + Bank name. + """ + last4: Optional[str] + """ + The last four digits of the bank account number. + """ + routing_number: Optional[str] + """ + The routing number for the bank account. + """ + + balance: Optional[Literal["payments"]] + """ + Set when `type` is `balance`. + """ + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + issuing_card: Optional[str] + """ + Set when `type` is `issuing_card`. This is an [Issuing Card](https://stripe.com/docs/api#issuing_cards) ID. + """ + type: Literal[ + "balance", + "financial_account", + "issuing_card", + "stripe", + "us_bank_account", + ] + """ + Polymorphic type matching the originating money movement's source. This can be an external account, a Stripe balance, or a FinancialAccount. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class LinkedFlows(StripeObject): + class SourceFlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + """ + You can reverse some [ReceivedCredits](https://stripe.com/docs/api#received_credits) depending on their network and source flow. Reversing a ReceivedCredit leads to the creation of a new object known as a CreditReversal. + """ + outbound_payment: Optional["OutboundPayment"] + """ + Use [OutboundPayments](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) to send funds to another party's external bank account or [FinancialAccount](https://stripe.com/docs/api#financial_accounts). To send money to an account belonging to the same user, use an [OutboundTransfer](https://stripe.com/docs/api#outbound_transfers). + + Simulate OutboundPayment state changes with the `/v1/test_helpers/treasury/outbound_payments` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundPayment objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) + """ + outbound_transfer: Optional["OutboundTransfer"] + """ + Use [OutboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) to transfer funds from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) to a PaymentMethod belonging to the same entity. To send funds to a different party, use [OutboundPayments](https://stripe.com/docs/api#outbound_payments) instead. You can send funds over ACH rails or through a domestic wire transfer to a user's own external bank account. + + Simulate OutboundTransfer state changes with the `/v1/test_helpers/treasury/outbound_transfers` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) + """ + payout: Optional["Payout"] + """ + A `Payout` object is created when you receive funds from Stripe, or when you + initiate a payout to either a bank account or debit card of a [connected + Stripe account](https://docs.stripe.com/docs/connect/bank-debit-card-payouts). You can retrieve individual payouts, + and list all payouts. Payouts are made on [varying + schedules](https://docs.stripe.com/docs/connect/manage-payout-schedule), depending on your country and + industry. + + Related guide: [Receiving payouts](https://stripe.com/docs/payouts) + """ + type: Literal[ + "credit_reversal", + "other", + "outbound_payment", + "outbound_transfer", + "payout", + ] + """ + The type of the source flow that originated the ReceivedCredit. + """ + + credit_reversal: Optional[str] + """ + The CreditReversal created as a result of this ReceivedCredit being reversed. + """ + issuing_authorization: Optional[str] + """ + Set if the ReceivedCredit was created due to an [Issuing Authorization](https://stripe.com/docs/api#issuing_authorizations) object. + """ + issuing_transaction: Optional[str] + """ + Set if the ReceivedCredit is also viewable as an [Issuing transaction](https://stripe.com/docs/api#issuing_transactions) object. + """ + source_flow: Optional[str] + """ + ID of the source flow. Set if `network` is `stripe` and the source flow is visible to the user. Examples of source flows include OutboundPayments, payouts, or CreditReversals. + """ + source_flow_details: Optional[SourceFlowDetails] + """ + The expandable object of the source flow. + """ + source_flow_type: Optional[str] + """ + The type of flow that originated the ReceivedCredit (for example, `outbound_payment`). + """ + _inner_class_types = {"source_flow_details": SourceFlowDetails} + + class ReversalDetails(StripeObject): + deadline: Optional[int] + """ + Time before which a ReceivedCredit can be reversed. + """ + restricted_reason: Optional[ + Literal[ + "already_reversed", + "deadline_passed", + "network_restricted", + "other", + "source_flow_restricted", + ] + ] + """ + Set if a ReceivedCredit cannot be reversed. + """ + + amount: int + """ + Amount (in cents) transferred. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: str + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + failure_code: Optional[ + Literal[ + "account_closed", + "account_frozen", + "international_transaction", + "other", + ] + ] + """ + Reason for the failure. A ReceivedCredit might fail because the receiving FinancialAccount is closed or frozen. + """ + financial_account: Optional[str] + """ + The FinancialAccount that received the funds. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + initiating_payment_method_details: InitiatingPaymentMethodDetails + linked_flows: LinkedFlows + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + network: Literal["ach", "card", "stripe", "us_domestic_wire"] + """ + The rails used to send the funds. + """ + object: Literal["treasury.received_credit"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + reversal_details: Optional[ReversalDetails] + """ + Details describing when a ReceivedCredit may be reversed. + """ + status: Literal["failed", "succeeded"] + """ + Status of the ReceivedCredit. ReceivedCredits are created either `succeeded` (approved) or `failed` (declined). If a ReceivedCredit is declined, the failure reason can be found in the `failure_code` field. + """ + transaction: Optional[ExpandableField["Transaction"]] + """ + The Transaction associated with this object. + """ + + @classmethod + def list( + cls, **params: Unpack["ReceivedCreditListParams"] + ) -> ListObject["ReceivedCredit"]: + """ + Returns a list of ReceivedCredits. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReceivedCreditListParams"] + ) -> ListObject["ReceivedCredit"]: + """ + Returns a list of ReceivedCredits. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReceivedCreditRetrieveParams"] + ) -> "ReceivedCredit": + """ + Retrieves the details of an existing ReceivedCredit by passing the unique ReceivedCredit ID from the ReceivedCredit list. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReceivedCreditRetrieveParams"] + ) -> "ReceivedCredit": + """ + Retrieves the details of an existing ReceivedCredit by passing the unique ReceivedCredit ID from the ReceivedCredit list. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["ReceivedCredit"]): + _resource_cls: Type["ReceivedCredit"] + + @classmethod + def create( + cls, **params: Unpack["ReceivedCreditCreateParams"] + ) -> "ReceivedCredit": + """ + Use this endpoint to simulate a test mode ReceivedCredit initiated by a third party. In live mode, you can't directly create ReceivedCredits initiated by third parties. + """ + return cast( + "ReceivedCredit", + cls._static_request( + "post", + "/v1/test_helpers/treasury/received_credits", + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ReceivedCreditCreateParams"] + ) -> "ReceivedCredit": + """ + Use this endpoint to simulate a test mode ReceivedCredit initiated by a third party. In live mode, you can't directly create ReceivedCredits initiated by third parties. + """ + return cast( + "ReceivedCredit", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/received_credits", + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "initiating_payment_method_details": InitiatingPaymentMethodDetails, + "linked_flows": LinkedFlows, + "reversal_details": ReversalDetails, + } + + +ReceivedCredit.TestHelpers._resource_cls = ReceivedCredit diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit_service.py new file mode 100644 index 00000000..06baf601 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_credit_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._received_credit_list_params import ( + ReceivedCreditListParams, + ) + from stripe.params.treasury._received_credit_retrieve_params import ( + ReceivedCreditRetrieveParams, + ) + from stripe.treasury._received_credit import ReceivedCredit + + +class ReceivedCreditService(StripeService): + def list( + self, + params: "ReceivedCreditListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReceivedCredit]": + """ + Returns a list of ReceivedCredits. + """ + return cast( + "ListObject[ReceivedCredit]", + self._request( + "get", + "/v1/treasury/received_credits", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "ReceivedCreditListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReceivedCredit]": + """ + Returns a list of ReceivedCredits. + """ + return cast( + "ListObject[ReceivedCredit]", + await self._request_async( + "get", + "/v1/treasury/received_credits", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["ReceivedCreditRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReceivedCredit": + """ + Retrieves the details of an existing ReceivedCredit by passing the unique ReceivedCredit ID from the ReceivedCredit list. + """ + return cast( + "ReceivedCredit", + self._request( + "get", + "/v1/treasury/received_credits/{id}".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["ReceivedCreditRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReceivedCredit": + """ + Retrieves the details of an existing ReceivedCredit by passing the unique ReceivedCredit ID from the ReceivedCredit list. + """ + return cast( + "ReceivedCredit", + await self._request_async( + "get", + "/v1/treasury/received_credits/{id}".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit.py new file mode 100644 index 00000000..ab84855b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit.py @@ -0,0 +1,338 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.treasury._received_debit_create_params import ( + ReceivedDebitCreateParams, + ) + from stripe.params.treasury._received_debit_list_params import ( + ReceivedDebitListParams, + ) + from stripe.params.treasury._received_debit_retrieve_params import ( + ReceivedDebitRetrieveParams, + ) + from stripe.treasury._transaction import Transaction + + +class ReceivedDebit(ListableAPIResource["ReceivedDebit"]): + """ + ReceivedDebits represent funds pulled from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts). These are not initiated from the FinancialAccount. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.received_debit"]] = ( + "treasury.received_debit" + ) + + class InitiatingPaymentMethodDetails(StripeObject): + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + _inner_class_types = {"address": Address} + + class FinancialAccount(StripeObject): + id: str + """ + The FinancialAccount ID. + """ + network: Literal["stripe"] + """ + The rails the ReceivedCredit was sent over. A FinancialAccount can only send funds over `stripe`. + """ + + class UsBankAccount(StripeObject): + bank_name: Optional[str] + """ + Bank name. + """ + last4: Optional[str] + """ + The last four digits of the bank account number. + """ + routing_number: Optional[str] + """ + The routing number for the bank account. + """ + + balance: Optional[Literal["payments"]] + """ + Set when `type` is `balance`. + """ + billing_details: BillingDetails + financial_account: Optional[FinancialAccount] + issuing_card: Optional[str] + """ + Set when `type` is `issuing_card`. This is an [Issuing Card](https://stripe.com/docs/api#issuing_cards) ID. + """ + type: Literal[ + "balance", + "financial_account", + "issuing_card", + "stripe", + "us_bank_account", + ] + """ + Polymorphic type matching the originating money movement's source. This can be an external account, a Stripe balance, or a FinancialAccount. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "billing_details": BillingDetails, + "financial_account": FinancialAccount, + "us_bank_account": UsBankAccount, + } + + class LinkedFlows(StripeObject): + debit_reversal: Optional[str] + """ + The DebitReversal created as a result of this ReceivedDebit being reversed. + """ + inbound_transfer: Optional[str] + """ + Set if the ReceivedDebit is associated with an InboundTransfer's return of funds. + """ + issuing_authorization: Optional[str] + """ + Set if the ReceivedDebit was created due to an [Issuing Authorization](https://stripe.com/docs/api#issuing_authorizations) object. + """ + issuing_transaction: Optional[str] + """ + Set if the ReceivedDebit is also viewable as an [Issuing Dispute](https://stripe.com/docs/api#issuing_disputes) object. + """ + payout: Optional[str] + """ + Set if the ReceivedDebit was created due to a [Payout](https://stripe.com/docs/api#payouts) object. + """ + + class ReversalDetails(StripeObject): + deadline: Optional[int] + """ + Time before which a ReceivedDebit can be reversed. + """ + restricted_reason: Optional[ + Literal[ + "already_reversed", + "deadline_passed", + "network_restricted", + "other", + "source_flow_restricted", + ] + ] + """ + Set if a ReceivedDebit can't be reversed. + """ + + amount: int + """ + Amount (in cents) transferred. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: str + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + failure_code: Optional[ + Literal[ + "account_closed", + "account_frozen", + "insufficient_funds", + "international_transaction", + "other", + ] + ] + """ + Reason for the failure. A ReceivedDebit might fail because the FinancialAccount doesn't have sufficient funds, is closed, or is frozen. + """ + financial_account: Optional[str] + """ + The FinancialAccount that funds were pulled from. + """ + hosted_regulatory_receipt_url: Optional[str] + """ + A [hosted transaction receipt](https://stripe.com/docs/treasury/moving-money/regulatory-receipts) URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. + """ + id: str + """ + Unique identifier for the object. + """ + initiating_payment_method_details: Optional[InitiatingPaymentMethodDetails] + linked_flows: LinkedFlows + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + network: Literal["ach", "card", "stripe"] + """ + The network used for the ReceivedDebit. + """ + object: Literal["treasury.received_debit"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + reversal_details: Optional[ReversalDetails] + """ + Details describing when a ReceivedDebit might be reversed. + """ + status: Literal["failed", "succeeded"] + """ + Status of the ReceivedDebit. ReceivedDebits are created with a status of either `succeeded` (approved) or `failed` (declined). The failure reason can be found under the `failure_code`. + """ + transaction: Optional[ExpandableField["Transaction"]] + """ + The Transaction associated with this object. + """ + + @classmethod + def list( + cls, **params: Unpack["ReceivedDebitListParams"] + ) -> ListObject["ReceivedDebit"]: + """ + Returns a list of ReceivedDebits. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReceivedDebitListParams"] + ) -> ListObject["ReceivedDebit"]: + """ + Returns a list of ReceivedDebits. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReceivedDebitRetrieveParams"] + ) -> "ReceivedDebit": + """ + Retrieves the details of an existing ReceivedDebit by passing the unique ReceivedDebit ID from the ReceivedDebit list + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReceivedDebitRetrieveParams"] + ) -> "ReceivedDebit": + """ + Retrieves the details of an existing ReceivedDebit by passing the unique ReceivedDebit ID from the ReceivedDebit list + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["ReceivedDebit"]): + _resource_cls: Type["ReceivedDebit"] + + @classmethod + def create( + cls, **params: Unpack["ReceivedDebitCreateParams"] + ) -> "ReceivedDebit": + """ + Use this endpoint to simulate a test mode ReceivedDebit initiated by a third party. In live mode, you can't directly create ReceivedDebits initiated by third parties. + """ + return cast( + "ReceivedDebit", + cls._static_request( + "post", + "/v1/test_helpers/treasury/received_debits", + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ReceivedDebitCreateParams"] + ) -> "ReceivedDebit": + """ + Use this endpoint to simulate a test mode ReceivedDebit initiated by a third party. In live mode, you can't directly create ReceivedDebits initiated by third parties. + """ + return cast( + "ReceivedDebit", + await cls._static_request_async( + "post", + "/v1/test_helpers/treasury/received_debits", + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "initiating_payment_method_details": InitiatingPaymentMethodDetails, + "linked_flows": LinkedFlows, + "reversal_details": ReversalDetails, + } + + +ReceivedDebit.TestHelpers._resource_cls = ReceivedDebit diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit_service.py new file mode 100644 index 00000000..678e51db --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_received_debit_service.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._received_debit_list_params import ( + ReceivedDebitListParams, + ) + from stripe.params.treasury._received_debit_retrieve_params import ( + ReceivedDebitRetrieveParams, + ) + from stripe.treasury._received_debit import ReceivedDebit + + +class ReceivedDebitService(StripeService): + def list( + self, + params: "ReceivedDebitListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReceivedDebit]": + """ + Returns a list of ReceivedDebits. + """ + return cast( + "ListObject[ReceivedDebit]", + self._request( + "get", + "/v1/treasury/received_debits", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "ReceivedDebitListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ReceivedDebit]": + """ + Returns a list of ReceivedDebits. + """ + return cast( + "ListObject[ReceivedDebit]", + await self._request_async( + "get", + "/v1/treasury/received_debits", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["ReceivedDebitRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReceivedDebit": + """ + Retrieves the details of an existing ReceivedDebit by passing the unique ReceivedDebit ID from the ReceivedDebit list + """ + return cast( + "ReceivedDebit", + self._request( + "get", + "/v1/treasury/received_debits/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["ReceivedDebitRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ReceivedDebit": + """ + Retrieves the details of an existing ReceivedDebit by passing the unique ReceivedDebit ID from the ReceivedDebit list + """ + return cast( + "ReceivedDebit", + await self._request_async( + "get", + "/v1/treasury/received_debits/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction.py new file mode 100644 index 00000000..3892b176 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction.py @@ -0,0 +1,256 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._authorization import Authorization + from stripe.params.treasury._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.treasury._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + from stripe.treasury._credit_reversal import CreditReversal + from stripe.treasury._debit_reversal import DebitReversal + from stripe.treasury._inbound_transfer import InboundTransfer + from stripe.treasury._outbound_payment import OutboundPayment + from stripe.treasury._outbound_transfer import OutboundTransfer + from stripe.treasury._received_credit import ReceivedCredit + from stripe.treasury._received_debit import ReceivedDebit + from stripe.treasury._transaction_entry import TransactionEntry + + +class Transaction(ListableAPIResource["Transaction"]): + """ + Transactions represent changes to a [FinancialAccount's](https://stripe.com/docs/api#financial_accounts) balance. + """ + + OBJECT_NAME: ClassVar[Literal["treasury.transaction"]] = ( + "treasury.transaction" + ) + + class BalanceImpact(StripeObject): + cash: int + """ + The change made to funds the user can spend right now. + """ + inbound_pending: int + """ + The change made to funds that are not spendable yet, but will become available at a later time. + """ + outbound_pending: int + """ + The change made to funds in the account, but not spendable because they are being held for pending outbound flows. + """ + + class FlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + """ + You can reverse some [ReceivedCredits](https://stripe.com/docs/api#received_credits) depending on their network and source flow. Reversing a ReceivedCredit leads to the creation of a new object known as a CreditReversal. + """ + debit_reversal: Optional["DebitReversal"] + """ + You can reverse some [ReceivedDebits](https://stripe.com/docs/api#received_debits) depending on their network and source flow. Reversing a ReceivedDebit leads to the creation of a new object known as a DebitReversal. + """ + inbound_transfer: Optional["InboundTransfer"] + """ + Use [InboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) to add funds to your [FinancialAccount](https://stripe.com/docs/api#financial_accounts) via a PaymentMethod that is owned by you. The funds will be transferred via an ACH debit. + + Related guide: [Moving money with Treasury using InboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) + """ + issuing_authorization: Optional["Authorization"] + """ + When an [issued card](https://stripe.com/docs/issuing) is used to make a purchase, an Issuing `Authorization` + object is created. [Authorizations](https://stripe.com/docs/issuing/purchases/authorizations) must be approved for the + purchase to be completed successfully. + + Related guide: [Issued card authorizations](https://stripe.com/docs/issuing/purchases/authorizations) + """ + outbound_payment: Optional["OutboundPayment"] + """ + Use [OutboundPayments](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) to send funds to another party's external bank account or [FinancialAccount](https://stripe.com/docs/api#financial_accounts). To send money to an account belonging to the same user, use an [OutboundTransfer](https://stripe.com/docs/api#outbound_transfers). + + Simulate OutboundPayment state changes with the `/v1/test_helpers/treasury/outbound_payments` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundPayment objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) + """ + outbound_transfer: Optional["OutboundTransfer"] + """ + Use [OutboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) to transfer funds from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) to a PaymentMethod belonging to the same entity. To send funds to a different party, use [OutboundPayments](https://stripe.com/docs/api#outbound_payments) instead. You can send funds over ACH rails or through a domestic wire transfer to a user's own external bank account. + + Simulate OutboundTransfer state changes with the `/v1/test_helpers/treasury/outbound_transfers` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) + """ + received_credit: Optional["ReceivedCredit"] + """ + ReceivedCredits represent funds sent to a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) (for example, via ACH or wire). These money movements are not initiated from the FinancialAccount. + """ + received_debit: Optional["ReceivedDebit"] + """ + ReceivedDebits represent funds pulled from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts). These are not initiated from the FinancialAccount. + """ + type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + """ + Type of the flow that created the Transaction. Set to the same value as `flow_type`. + """ + + class StatusTransitions(StripeObject): + posted_at: Optional[int] + """ + Timestamp describing when the Transaction changed status to `posted`. + """ + void_at: Optional[int] + """ + Timestamp describing when the Transaction changed status to `void`. + """ + + amount: int + """ + Amount (in cents) transferred. + """ + balance_impact: BalanceImpact + """ + Change to a FinancialAccount's balance + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: str + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + entries: Optional[ListObject["TransactionEntry"]] + """ + A list of TransactionEntries that are part of this Transaction. This cannot be expanded in any list endpoints. + """ + financial_account: str + """ + The FinancialAccount associated with this object. + """ + flow: Optional[str] + """ + ID of the flow that created the Transaction. + """ + flow_details: Optional[FlowDetails] + """ + Details of the flow that created the Transaction. + """ + flow_type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + """ + Type of the flow that created the Transaction. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["treasury.transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["open", "posted", "void"] + """ + Status of the Transaction. + """ + status_transitions: StatusTransitions + + @classmethod + def list( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Retrieves a list of Transaction objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Retrieves a list of Transaction objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves the details of an existing Transaction. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves the details of an existing Transaction. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "balance_impact": BalanceImpact, + "flow_details": FlowDetails, + "status_transitions": StatusTransitions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry.py new file mode 100644 index 00000000..2e4012cb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry.py @@ -0,0 +1,266 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._authorization import Authorization + from stripe.params.treasury._transaction_entry_list_params import ( + TransactionEntryListParams, + ) + from stripe.params.treasury._transaction_entry_retrieve_params import ( + TransactionEntryRetrieveParams, + ) + from stripe.treasury._credit_reversal import CreditReversal + from stripe.treasury._debit_reversal import DebitReversal + from stripe.treasury._inbound_transfer import InboundTransfer + from stripe.treasury._outbound_payment import OutboundPayment + from stripe.treasury._outbound_transfer import OutboundTransfer + from stripe.treasury._received_credit import ReceivedCredit + from stripe.treasury._received_debit import ReceivedDebit + from stripe.treasury._transaction import Transaction + + +class TransactionEntry(ListableAPIResource["TransactionEntry"]): + """ + TransactionEntries represent individual units of money movements within a single [Transaction](https://stripe.com/docs/api#transactions). + """ + + OBJECT_NAME: ClassVar[Literal["treasury.transaction_entry"]] = ( + "treasury.transaction_entry" + ) + + class BalanceImpact(StripeObject): + cash: int + """ + The change made to funds the user can spend right now. + """ + inbound_pending: int + """ + The change made to funds that are not spendable yet, but will become available at a later time. + """ + outbound_pending: int + """ + The change made to funds in the account, but not spendable because they are being held for pending outbound flows. + """ + + class FlowDetails(StripeObject): + credit_reversal: Optional["CreditReversal"] + """ + You can reverse some [ReceivedCredits](https://stripe.com/docs/api#received_credits) depending on their network and source flow. Reversing a ReceivedCredit leads to the creation of a new object known as a CreditReversal. + """ + debit_reversal: Optional["DebitReversal"] + """ + You can reverse some [ReceivedDebits](https://stripe.com/docs/api#received_debits) depending on their network and source flow. Reversing a ReceivedDebit leads to the creation of a new object known as a DebitReversal. + """ + inbound_transfer: Optional["InboundTransfer"] + """ + Use [InboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) to add funds to your [FinancialAccount](https://stripe.com/docs/api#financial_accounts) via a PaymentMethod that is owned by you. The funds will be transferred via an ACH debit. + + Related guide: [Moving money with Treasury using InboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers) + """ + issuing_authorization: Optional["Authorization"] + """ + When an [issued card](https://stripe.com/docs/issuing) is used to make a purchase, an Issuing `Authorization` + object is created. [Authorizations](https://stripe.com/docs/issuing/purchases/authorizations) must be approved for the + purchase to be completed successfully. + + Related guide: [Issued card authorizations](https://stripe.com/docs/issuing/purchases/authorizations) + """ + outbound_payment: Optional["OutboundPayment"] + """ + Use [OutboundPayments](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) to send funds to another party's external bank account or [FinancialAccount](https://stripe.com/docs/api#financial_accounts). To send money to an account belonging to the same user, use an [OutboundTransfer](https://stripe.com/docs/api#outbound_transfers). + + Simulate OutboundPayment state changes with the `/v1/test_helpers/treasury/outbound_payments` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundPayment objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-payments) + """ + outbound_transfer: Optional["OutboundTransfer"] + """ + Use [OutboundTransfers](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) to transfer funds from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) to a PaymentMethod belonging to the same entity. To send funds to a different party, use [OutboundPayments](https://stripe.com/docs/api#outbound_payments) instead. You can send funds over ACH rails or through a domestic wire transfer to a user's own external bank account. + + Simulate OutboundTransfer state changes with the `/v1/test_helpers/treasury/outbound_transfers` endpoints. These methods can only be called on test mode objects. + + Related guide: [Moving money with Treasury using OutboundTransfer objects](https://docs.stripe.com/docs/treasury/moving-money/financial-accounts/out-of/outbound-transfers) + """ + received_credit: Optional["ReceivedCredit"] + """ + ReceivedCredits represent funds sent to a [FinancialAccount](https://stripe.com/docs/api#financial_accounts) (for example, via ACH or wire). These money movements are not initiated from the FinancialAccount. + """ + received_debit: Optional["ReceivedDebit"] + """ + ReceivedDebits represent funds pulled from a [FinancialAccount](https://stripe.com/docs/api#financial_accounts). These are not initiated from the FinancialAccount. + """ + type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + """ + Type of the flow that created the Transaction. Set to the same value as `flow_type`. + """ + + balance_impact: BalanceImpact + """ + Change to a FinancialAccount's balance + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + effective_at: int + """ + When the TransactionEntry will impact the FinancialAccount's balance. + """ + financial_account: str + """ + The FinancialAccount associated with this object. + """ + flow: Optional[str] + """ + Token of the flow associated with the TransactionEntry. + """ + flow_details: Optional[FlowDetails] + """ + Details of the flow associated with the TransactionEntry. + """ + flow_type: Literal[ + "credit_reversal", + "debit_reversal", + "inbound_transfer", + "issuing_authorization", + "other", + "outbound_payment", + "outbound_transfer", + "received_credit", + "received_debit", + ] + """ + Type of the flow associated with the TransactionEntry. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["treasury.transaction_entry"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + transaction: ExpandableField["Transaction"] + """ + The Transaction associated with this object. + """ + type: Literal[ + "credit_reversal", + "credit_reversal_posting", + "debit_reversal", + "inbound_transfer", + "inbound_transfer_return", + "issuing_authorization_hold", + "issuing_authorization_release", + "other", + "outbound_payment", + "outbound_payment_cancellation", + "outbound_payment_failure", + "outbound_payment_posting", + "outbound_payment_return", + "outbound_transfer", + "outbound_transfer_cancellation", + "outbound_transfer_failure", + "outbound_transfer_posting", + "outbound_transfer_return", + "received_credit", + "received_debit", + ] + """ + The specific money movement that generated the TransactionEntry. + """ + + @classmethod + def list( + cls, **params: Unpack["TransactionEntryListParams"] + ) -> ListObject["TransactionEntry"]: + """ + Retrieves a list of TransactionEntry objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TransactionEntryListParams"] + ) -> ListObject["TransactionEntry"]: + """ + Retrieves a list of TransactionEntry objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransactionEntryRetrieveParams"] + ) -> "TransactionEntry": + """ + Retrieves a TransactionEntry object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransactionEntryRetrieveParams"] + ) -> "TransactionEntry": + """ + Retrieves a TransactionEntry object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/treasury/transaction_entries" + + _inner_class_types = { + "balance_impact": BalanceImpact, + "flow_details": FlowDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry_service.py new file mode 100644 index 00000000..590fa1c0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_entry_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._transaction_entry_list_params import ( + TransactionEntryListParams, + ) + from stripe.params.treasury._transaction_entry_retrieve_params import ( + TransactionEntryRetrieveParams, + ) + from stripe.treasury._transaction_entry import TransactionEntry + + +class TransactionEntryService(StripeService): + def list( + self, + params: "TransactionEntryListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TransactionEntry]": + """ + Retrieves a list of TransactionEntry objects. + """ + return cast( + "ListObject[TransactionEntry]", + self._request( + "get", + "/v1/treasury/transaction_entries", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "TransactionEntryListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TransactionEntry]": + """ + Retrieves a list of TransactionEntry objects. + """ + return cast( + "ListObject[TransactionEntry]", + await self._request_async( + "get", + "/v1/treasury/transaction_entries", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["TransactionEntryRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TransactionEntry": + """ + Retrieves a TransactionEntry object. + """ + return cast( + "TransactionEntry", + self._request( + "get", + "/v1/treasury/transaction_entries/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["TransactionEntryRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TransactionEntry": + """ + Retrieves a TransactionEntry object. + """ + return cast( + "TransactionEntry", + await self._request_async( + "get", + "/v1/treasury/transaction_entries/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_service.py new file mode 100644 index 00000000..c43c5068 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/treasury/_transaction_service.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.treasury._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.treasury._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + from stripe.treasury._transaction import Transaction + + +class TransactionService(StripeService): + def list( + self, + params: "TransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Retrieves a list of Transaction objects. + """ + return cast( + "ListObject[Transaction]", + self._request( + "get", + "/v1/treasury/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "TransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Retrieves a list of Transaction objects. + """ + return cast( + "ListObject[Transaction]", + await self._request_async( + "get", + "/v1/treasury/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves the details of an existing Transaction. + """ + return cast( + "Transaction", + self._request( + "get", + "/v1/treasury/transactions/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves the details of an existing Transaction. + """ + return cast( + "Transaction", + await self._request_async( + "get", + "/v1/treasury/transactions/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/__init__.py new file mode 100644 index 00000000..68753079 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/__init__.py @@ -0,0 +1,39 @@ +from typing_extensions import TYPE_CHECKING +from stripe.v2._list_object import ListObject as ListObject +from stripe.v2._amount import Amount as Amount, AmountParam as AmountParam + + +# The beginning of the section generated from our OpenAPI spec +from importlib import import_module + +if TYPE_CHECKING: + from stripe.v2 import billing as billing, core as core + from stripe.v2._billing_service import BillingService as BillingService + from stripe.v2._core_service import CoreService as CoreService + from stripe.v2._deleted_object import DeletedObject as DeletedObject + +# name -> (import_target, is_submodule) +_import_map = { + "billing": ("stripe.v2.billing", True), + "core": ("stripe.v2.core", True), + "BillingService": ("stripe.v2._billing_service", False), + "CoreService": ("stripe.v2._core_service", False), + "DeletedObject": ("stripe.v2._deleted_object", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() + +# The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b93a4ea0328c4382be9268596acf485f64861644 GIT binary patch literal 1310 zcmaJ=%WoS+7@ygPz4m(j$dei&g*ca`s#k=E1O=ofO-M-sNK8@KP=+Hy8`wl;Tf?0pJ>;!QtcpSQjuZDvY5cP)&MBF6P>z2#Cj z6ubPe6I14dv3C>@sLQwfAn>CDuC!xHprX8y1@;N;`fU->Hz9N38rMlc81be@-LEB# z`W@2jt~V#mZky8m@GwUBPMQ?%GqRnfbXGW`3|~=O}uBSTz95$xE-2@BA!1W z%w>#nZI|@6D2*vEUjyH79Wj#nroxrT4GGUNmqIl!`H7PpwK7C`E?X1v+7*y<$GRJb z#5#zMt?MK?WO2vZi5Us5Y{c;)0B>!$?L!iIR+mIwEAU%Zr^oKb(L2qz*R8~7W(foluZM^%mwDNHK z(aqZ1Js!+do%cA1uG|$oOr(KBz7YstaRPUMP={Y?S}`Q$y9){y-SE&#gS0 zTm7lDI+DRVPXw?J>L&V5H_?-YkL5jcf!A2C18;H2F(Xmp$5BEBh@N-BwO{1w3+2P1vO82ZhRV(eMtXTr kS{p1~9n8NsSp49no~uZw`pYuX7RO3SZH!c~=$p{(Uv7P9pa1{> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_amount.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_amount.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20575e7a6dc805a20e68f40c4a62c45489962458 GIT binary patch literal 728 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 LE?-^)ZG-eb_CS-$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_list_object.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/__pycache__/_list_object.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e7ab06f8cb0a72192cd6d093bac85e59e0e33db GIT binary patch literal 2803 zcmcgu|8EpU6rb5IciU^PS2-x96dgfB7x9j^Dk^H^o8OQUrIL7tEZf^@dvtI2Ix|PP z%aK&ncqSN&MvGAs5;c(&6aNo?X;UJXjYbn=qQ6yo@2X7`Q)f!~ai+}nBc-n@BV zKJ(_jO(qiv2EW!@xEw?1XUViiyg6CP!DJ3O$iXfu;vB|uuDD83&8bB#rxo>_UX0~p z7%7PAj!N-GZC;6X=i&-_7CHKx$ca%*V>G@21oK)`YEbcMzp^$GbkXj_xlBwt5k7~D2;2`Ba@%C$RjpdF3@H0iVf z?X07dIF~w%%tVloo<@FG|49%SFVhmEoO*&2-=m~tk5l505u3Q6DQ8CpNfa*e!+3dy zyuv9tmT_!hA0xsic0Nxz53Pv_*d3{XIU*(sJT$qT_>7b}O@vxwz!U^6l7bf=V?|ps zc3Joqcu?@hEs(Q*^YKuhkS)aV3HOT>EPCT)x*#S(3z0qWL8{vV4nILzbgb<;#CBaW z=DV&xEqBS-cqX(MXfnJ&lQ9HIkDe6rTxyk>n{NUFQj3rQKUt%d_knzf=a9fK2}cc! z>zXYPv9xFc1|b13ZEB)-(+Jh@d~@$%B-&dt2a9BDzN+yFc9c7;tDosDJEyU!4Oe?! z^~(hCNS)PMKn5tOeh&F{=*jJ5v@FPK;h~@c@G0xC7wHrXmOxRvxzPZaV{5+0r`*NDxST`@C6y5|-qDV#NJ zdqO%XO_C5luT_AS>selz*tsb9H5o`jQK3k z7(mxl1C3L6EWndNn`Px)n{&(JvSx(L{GHEE0BEw~-pTAf$|r?i%0A}{>OQ!~_a`CV z>>fKmNj)cff_f*iZecWAs)z~S8_Em}W;q=BU^mpS=MH$ z*b4;WOm)wSb4SjtPjkZ3flyqAZ}SM^(>3s1Kf>{ z-wS+o%}tJniuX&s+xfj?F|}hUHMn35{vUpKfXftm7pKl`oZljyUw@PHtJ?i{is0eJ z)Wb`uoeRd!+eaX+u6zgN0Kx#E8afX1TgNF3>(?9Is`Ql71}$wLItp#>lv-0i!gKK6 zo-s63Q)X~QT9W|1WjMH|ILbw}1>@K^4%i!SoB+#R}fBaoYflLy&oi&Rha*j>RU+N*XUaJ)4C0FN6#LGS)*%HW7Fp4IO^WA zg0$|=`ZHG(XzktS#=bayDLt^zF|d#xXrwpH?K-=wzOT`@`EuWm#l9W&gUcIHD*YFi zuhi+?TX&n-?2jgiYU~*+`ZoJIlU*~2!9xkJL=;^ZhfEifkPU+k zja)#HLD?VwHlB#m_7vL*tZbY-0|bhP@ee5TBN|#lL%+w6-cjE>Tf3y)H-oRnhVZ~_ R-?{1YQy*9VK){6d{sp#PsEGgo literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/_amount.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_amount.py new file mode 100644 index 00000000..97a6bf63 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_amount.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# NOT codegenned +from typing_extensions import TypedDict +from stripe._stripe_object import StripeObject + + +class Amount(StripeObject): + value: int + currency: str + + +class AmountParam(TypedDict): + value: int + currency: str diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/_billing_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_billing_service.py new file mode 100644 index 00000000..992329ca --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_billing_service.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.v2.billing._meter_event_adjustment_service import ( + MeterEventAdjustmentService, + ) + from stripe.v2.billing._meter_event_service import MeterEventService + from stripe.v2.billing._meter_event_session_service import ( + MeterEventSessionService, + ) + from stripe.v2.billing._meter_event_stream_service import ( + MeterEventStreamService, + ) + +_subservices = { + "meter_events": [ + "stripe.v2.billing._meter_event_service", + "MeterEventService", + ], + "meter_event_adjustments": [ + "stripe.v2.billing._meter_event_adjustment_service", + "MeterEventAdjustmentService", + ], + "meter_event_session": [ + "stripe.v2.billing._meter_event_session_service", + "MeterEventSessionService", + ], + "meter_event_stream": [ + "stripe.v2.billing._meter_event_stream_service", + "MeterEventStreamService", + ], +} + + +class BillingService(StripeService): + meter_events: "MeterEventService" + meter_event_adjustments: "MeterEventAdjustmentService" + meter_event_session: "MeterEventSessionService" + meter_event_stream: "MeterEventStreamService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/_core_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_core_service.py new file mode 100644 index 00000000..746a472a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_core_service.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.v2.core._event_destination_service import ( + EventDestinationService, + ) + from stripe.v2.core._event_service import EventService + +_subservices = { + "events": ["stripe.v2.core._event_service", "EventService"], + "event_destinations": [ + "stripe.v2.core._event_destination_service", + "EventDestinationService", + ], +} + + +class CoreService(StripeService): + events: "EventService" + event_destinations: "EventDestinationService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/_deleted_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_deleted_object.py new file mode 100644 index 00000000..ebcfd677 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_deleted_object.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import Optional + + +class DeletedObject(StripeObject): + id: str + """ + The ID of the object that's being deleted. + """ + object: Optional[str] + """ + String representing the type of the object that has been deleted. Objects of the same type share the same value of the object field. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/_list_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_list_object.py new file mode 100644 index 00000000..a314650c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/_list_object.py @@ -0,0 +1,59 @@ +from stripe._stripe_object import StripeObject +from typing import List, Optional, TypeVar, Generic + + +T = TypeVar("T", bound=StripeObject) + + +class ListObject(StripeObject, Generic[T]): + """ + Represents one page of a list of V2 Stripe objects. Use `.data` to access + the objects on this page, or use + + for item in list_object.auto_paging_iter(): + # do something with item + + to iterate over this and all following pages. + """ + + OBJECT_NAME = "list" + data: List[T] + next_page_url: Optional[str] + + def __getitem__(self, k): + if isinstance(k, str): # type: ignore + return super(ListObject, self).__getitem__(k) + else: + raise KeyError( + "You tried to access the %s index, but ListObjectV2 types only " + "support string keys. (HINT: List calls return an object with " + "a 'data' (which is the data array). You likely want to call " + ".data[%s])" % (repr(k), repr(k)) + ) + + def __iter__(self): + return getattr(self, "data", []).__iter__() + + def __len__(self): + return getattr(self, "data", []).__len__() + + def __reversed__(self): + return getattr(self, "data", []).__reversed__() + + def auto_paging_iter(self): + page = self.data + next_page_url = self.next_page_url + while True: + for item in page: + yield item + if next_page_url is None: + break + + result = self._request( + "get", + next_page_url, + base_address="api", + ) + assert isinstance(result, ListObject) + page = result.data + next_page_url = result.next_page_url diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__init__.py new file mode 100644 index 00000000..7488a07f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__init__.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.v2.billing._meter_event import MeterEvent as MeterEvent + from stripe.v2.billing._meter_event_adjustment import ( + MeterEventAdjustment as MeterEventAdjustment, + ) + from stripe.v2.billing._meter_event_adjustment_service import ( + MeterEventAdjustmentService as MeterEventAdjustmentService, + ) + from stripe.v2.billing._meter_event_service import ( + MeterEventService as MeterEventService, + ) + from stripe.v2.billing._meter_event_session import ( + MeterEventSession as MeterEventSession, + ) + from stripe.v2.billing._meter_event_session_service import ( + MeterEventSessionService as MeterEventSessionService, + ) + from stripe.v2.billing._meter_event_stream_service import ( + MeterEventStreamService as MeterEventStreamService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "MeterEvent": ("stripe.v2.billing._meter_event", False), + "MeterEventAdjustment": ( + "stripe.v2.billing._meter_event_adjustment", + False, + ), + "MeterEventAdjustmentService": ( + "stripe.v2.billing._meter_event_adjustment_service", + False, + ), + "MeterEventService": ("stripe.v2.billing._meter_event_service", False), + "MeterEventSession": ("stripe.v2.billing._meter_event_session", False), + "MeterEventSessionService": ( + "stripe.v2.billing._meter_event_session_service", + False, + ), + "MeterEventStreamService": ( + "stripe.v2.billing._meter_event_stream_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e310d8bcab710dfe758f7716f2c98dba4bea7915 GIT binary patch literal 1784 zcmb7D&2JM&6rb7guIx zCPt1Fp&mGLsKlj}dMwJH(n}GSbOncsUV1Y%K~+w?nN3Iz&?L|DoA=(lH}l@?@AtcD z4j~Z!cHAG!A@oW*2Lis5!B4O}K_2pOfI{qGENv~&LgEmNC}A_;lOPl7j;{7Hfe~h% ztg`hW7v`P3vW;LUEI0*aXM! zheiUt+M##F`(d4nFpZ!8P<)xPj=w5TtsZWFB*?iRN052;Xr>At7K|O)6O1;)gDvgB zCtNVUO&guL#)=;Ve$;BXp={ixvhxK?dtm*4iraiYkIcS!;%t|vW6G*ekEuFUs+wM& z+Bo)9m3p+1+2cyo`yEzfnGS$phE!RpB!*dDDv5Je0JVxi9Y_WY0{_7ls3$0o1gxp_ z&^a*fY6xxOO-;xwB|W^of5Il|X-w;pWhCUa=`QJ^ZK#p5jOs|pUX)D3^%x1+jFRpB z^&!5GHpm@xA6t0I(vyOF0On?!$y<|bi;AWYEXgg>?mS~LOG;P3_gB^hRlb!;GEp<6 zi6NQ{vXi3EUB14O@*y$OmCI=-K=xYpy*Q+HE84KXrhHArZTm(nXfS&o38d-v+gX`dT4he^GDzCZ5$le^#7$wD9=b7o$_Ze(`*C=F!5Rq#i>34Z;uz@3hNy>2p>^w+%D8bVJZc@|83BFv&6GQ_xCIPCtdh2v5I6pZ!HD zFEiJ7HBC2mjgP2)5sh5#Yvh8_&yi_RXnYaxoVy93Ng0|jUQgD_+E(H949blTGDW@K K*TG_waN9dkJQ>{p literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e24b03853bc49b7e46e435365e280e4426feaefc GIT binary patch literal 1012 zcmZuvOHUL*5bmD$4$ET|4I(k1F}R7l6Y-|R#0AtCSPni8bFeeJ)4;g%a;Dj^T+tXW zW^ecxjQ$fZ5N@3q51zcOK|FA>x@So^*hyD^^>tNs*W=shsEuIdf2V`520}lDa<=p# zIBo#gM?Ug#h$8G_EU*$Pk?N|E=4w(`Lp?HF10w}JM!xnI`8vg4)FOs!_Kd3eODI*$ z%gf%5;u6@HLp+QDj5TCzh+%EW$iSA)`P%~b zMyh3QuTl8&N|(lL_qsg`>rt>X8_`)BrL0H%q)l>2JKn6z%iYV}g?cLpL%~GCl~Cc! zN7frpSC*cW=EJoWZniV(G3s+$UXs|0D7OP2414= zi3JhOnHQza>Ik=pbS8w`gn+|#NCB4#d9&?>A}nYok>4a)36jb*Az&sDA1B0%U0;JVT~Meu1NK?ms#+l6awV$LA*o1 z6-BoOHY&{xRHRSzr#{UeT)%fXegCksc#IU?7#L`*vbQ>rb_S|U?ydh1k6+wtp7EoT z2a~rC%e5n|c1Dd|=-=q){aYVi9cfnwiVkm<(S-C-bt@CYCx6zgTKrOxNnJKSrKIRm zCT5u%td~Mrib{(@@=C!Fy2EIki)zab6v#fsR$q9eI-MaD=#tH_eRAWNqByBNP;QJP9o{mTzU z%=EWWVAttJb(_{AIBQFe8HOLs0I<4dM>H^pAwP(ibCWuQ4&%(DDC1#-&`>O~9I_HG!tfIi=E%#^COj-z@(g13QrN)8 z;+y5Acci?qzI;QOL|=3<3Y_|tp`eR}c@IsYC|(zCt6W+#y&82`+P0vc{n4gDxhOM@ z5YKceAuLUZ>sz}H$2uXOc1mfz84a5f-ayQx^5U-zDtcwZ_ju| z!=1>l8?XI{I@623zXL3dMYFa;J<9-^4a2dkM!gwr`QD4t^BE(A`=72ug1JdU1Ioap z7>yYtQOF>-OH`^inG*8}_&8@^g*uo6^ecbwYql*2DLohlN00}@lv>PPtp(JKsKwH; z=$s!DY>R1*-JrmpGR2PvRbX1pck2#Z5mW2XKTu&x2=sSDCPmFUEf@8G*9>^|V2~S) z8;Kh}#K90Z{L(sI1X(~#s`|dehKcQYaQ8L-FA)Brw^7}<14M)>ID*HL4&#dwJy%(_cyvY zrSGqHakei%lRwSBZ0WOS(rh=(UB#9@c_vMET?501Ph082nN;X{3J<@noQ_Skq`NT- zPM};=*`4@WOC;V&EO18`rT}#iwxb!##Ro$7BI<>F%3>KiO59ZETAPb!bv}3mWiXd$ e0!&-P7+)y}8|SESjviksQ~25O+!cbY)75|MM@HBH literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40302c0e23ab969392cf3b8e71b487e7c69f264f GIT binary patch literal 1848 zcmbVN&2Jk;6rb5I+Z#JLPLx2Z!jdY8CD^N`d|Xf^l12@xl2(KZi^OW2z75GcI&=b~56(BBfGjamRC*JI=n^a9z#2ntfnfIHSH^29r*&iwu z9YJG%&9*+%5c-XGMorC~!8SPi$U`3XQGjiXxi9%rAlq`F*h`J#}>VNQ#iPOqPLR&G}AhgqJ z5>rZxSL37=g|43}O_wDc^3J>0R-EP4mE|jMtzU+L@wds%HercCG8i$|NJ8jJhlI(S z-gcWM0eH)lxCy!DQa9k3snak`k(026yfat@XCDz{V-ML<33<9Fd9tSv*;Ai^n5TJ# z>zY^GQ*Gt3(Go<}E;h%~GpFsGpLjjh;w(d2goV>Wl%1YYo=d7xlC)_^OVDZN^nr^I zFDUO1mcZOL0WXE&;dXdM*Qo?5XLEh^9(<-ZbSjG zw!&N1CBk-+D7IFkg!uKPDB9sEEV<1c5_%RKvSazJO)KsuH=^)DKLtv_qGJ6Hg$LO$%s#Cr4T(4aHa_#fA zUUj-xeYJOXt~YbG_w;l9F;tlyAgwY!P)k+4k4hzd0P`M|$Q>9QybtCI!v9+)cR=nR z0-s+=`|_u%ijHOTI{Kpcz5D?-3zR3Hm6=X(ug1+JH&bBNM->|%Rm^c&H*C@w2#!ic z`Nc}hf(sG9{o<2Z6UcLXp-W(XNB^9luQvTtZT?p?4f=USr`5+OsM)V)y2LF-@b-wvp>$hbZ=sz&&L6w8-o(}Uj9$mLyi^O z@*UUB@pM`!x8aEINS>76kyJ~%G28=@d3LQP#E3&~B_w3<6f+8c4V2D|mdS6O^Uzau zF^`JJtkGF)SV9vtEQUriZ|ky%`!#;x`CX+0dk52ABmYSv(hOw)Ia!711FWOn7R?!BDC!` zNkd4A??$m32DX<-O`FBsgGlGM)pw3SQ?u*LPz!r$rvI8PQts4MnQ47;5Y@ zxP!&ScJ!x-r7$K^6tehq(r7Ok+pg!i!H$uhw$eOVBHEGrP)y3(aJOYU4uwQ$8IYnC zAPs?X^pc`Qvn~Tui4pJinF-_Y1D2=E*bRMR>;(6W>xAvaVPvd_G4bYC!f=oKU9p>c zBybD>xNUguwh?vW-7r|z7ncm?LZ%TI*gJ$7kQ0o-aLm?F&=$+)LytO%(o8%2{^Z8f zp3gf?&oottj=c)x6Leff)yv)TWVc-Xa^v%jZgsp{z1F>QwL5X8JNZIy1XZT`NU4nW zrhvH|ljLy3Ab@WB?d+{UOC{P}J zT1HyqT%D6KPA&u49294CP#i05KRN-*K~*T9+N7Lek?HSGUxZbre~BNz4&-0^28+m8g~l zZQt@ZU$(5fE!)d9RDzRqij!#|4-tKy^E@9qG9Z_LVJ46R)GH!m`OiX4R-aT~>B+G7 z6jY!3aq8Nm+H8-@!9pGHmpC`~pKOo0ZRVDH+-!^{<5_F!R<;jXk@6u(l(-W?qi2z) zb5qMC7P%LbfWb@7sKPBL2G`_cWu1Emmve3QQtIs`Js(~D+!*9V9ez)z^OF}G$$BY8 z?<$0GhUjVW&8!M<(FQ2^`^x5k^hAvDiGuLr&*;U+X!aMe`dE7HL=a>Jr1Bfb$_!S& LuACs)(%b$82JG`b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e2ff792f4b17d42cc18289823e0aced01720c6a GIT binary patch literal 911 zcmZvay>AmS6u|BKPDm*cDIaa=fP^4JV^Qc*qUh~b?##`EYwY#Ni{*gQYZP@iCI8&J%vRJv@jQNrUs?3hlFk^!H zQW;^OJRbI0lmtvUNnWQ`y`(%!V?Sb)sxqaZJmQ)wlzu$&d7;TXNH~KwqD=Qr%~I;e zaU%0e1z4LxX3FX$3IB%1V1cd$IY=T#dhs#YWa3aJDS4ep#+RE(atLoDO}`7d1_U10 zCp_$sbRZ9s_(kLS3K7t**QB^Gj%8n(A z^%oF%k&DO7>5zHc`#{&;TG62OYym_JQ!K(VGBL(i4#MOTEnK1}f1E|^omQ?8Y`OP8 D1kLj@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_session_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ecbec20372b41298d435ea098c2615b19ac99ec GIT binary patch literal 2001 zcmbVM&2Jk;6rb5I+Z#JLPL-rVAxlvzxxro~e2WjMNu#!^Vk*J`d|eW9Qt zSnQ8U`>PB>Kl8(2$tlyn1!K^wrT8p5va8e;jEF)@AeWqs zo2_SKne60TwXVjz;taX@dLAPIT}4)A2U%Hy_rxStz0k>()nECcjHALzNbP{E5ZbmI zq%1_)w}a63J=2M#hRH&%^6vXLmyE@0ON%$I*RI0F@H^yoi?A@!WN+p^;>hP=F;~{r6zoMFiEch3Y~M<&dRX0ue3oJV-1FI63AN zE3>9p*&VqqovD=rExCisL(#;kG}4FHA|;4(rCEp*W&9WfMtNe9LP^-79?ij_k)jAJ zLcFg0++P5)i$V-ryezzpZXMSg+zXayN!xf^_*ULaYriKX!WC3j4u4a%bR_^X&D30u ztwuPw8cWdCLLXSq(pt=1Cz|hRVUuW0d%al+o78WuH-lDq(lCUAxK-_P3pBmZZkW8v z;Aew)5QK6kPDg8-j%{gcKGo)4(p=kXg@iq?F<)w`rg|Lm#5AdwrWGQz6$uERm@e^4_N6q^R`YijM zxQWXd%9D?aOGh|Y;$)PQb3kf?S`80sWtgnvHRw192SuWM#-n_KMIyg5a|UFI+H>5? z6(GN$zm8#78hccld03h`jo#=*KyP&T&yx`LBtZ0#@do=?tKhHktolu^g3Cg!R#u?R z49|3lVMMB7xW3hLIG;C++bz>cBvb-ZI?2g1K<*>@H0Sxd=+J;X1q}0m?4X{4-n@*v z)%o8uBeMEqapJ-GS05H%>&b8eS!wdYW)!l=SE#|LiG2{cZ8p|7XXJof{7 h_A#3MNi05=UOo^6S%F*mI^I`iu=?eP2MD&<-QR7?9CiQz literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_stream_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/__pycache__/_meter_event_stream_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a021d15ca0a3ff35cef5f8cbe6f58d1329c4a2b GIT binary patch literal 1771 zcmb7EOK%)S5boZ2?CyBib{?{^jgn4eh?Y1rwu3-Ih(nBtQOFWuF6?DAo^E>w&nw-t zOV;=h5eo?ki5unsKfnt75-#L~HIgMFE^u4e7$Tpjo|z@a0R(fXsqU(-{;K+``nFy- z5PagdY45I%(2sI4{Io(Dv_RQK6jAJ>0JkufddV*ZN=wOf#a9EZrD4Q0UIUxz>p{6y z&TN`r3979sMkRC|QGEx|GQ;i$cej z#&_SlwQMh~EHB-7vw0mhM&Dt#J4__GkAR(LZ?c5(pHFMXf5?0tyQpUJ=_>cCr=_Ma%rY| zoT1?I=CmATc?k|BN2$(P(&1sMHlvWaMPG>#;$KFRz3kfvgZ=vP8lpS*ZkZI3qESTqXpg#1XyFZSyFMI>PVG5ifN8 z4)wwf(sg`~I`TzKB8%^F28WNwBm!c9ovcTkIGv;o_jqn`WVI8=5l;l^#3YHx!u;I) z{5;|LD+&?=Fu~j?q;Mtiy)FwP%1rVGgpzoYh^l);!+_^j4O-ouzJzj2>z2*q&%8X>H9B%yuY+!~~a}!AC$eB^B)g z=$?|Qg8A!D%tAg9)cI)3YDWRHHo`mB>r8AWQEaV53G=U9i=s^l;hN)avXEMkP1o|h zH7o8V?I^rzE-YHYgS29Ba5k8*03dY2arpKztOb5sYd7=jj2Aa8j z44{fx5O-03998R|)jz54*G})(=Juy9?Vp+2KReSOLDh*vq*sjr_@So=c@H)RZ-Kah z@c$y^Jw&w+p;n)lc9oAc4Nmv8m(i!%H_8W?OJK68hh?@i8uGKSJ*+REfJIu%6Upsc zv;UrM?sZ-Uc@e}<=y8_!*qQG~FFY8%@O0*57Y9fmGk%xp|0>0isKLRHrf2b&_@eri zK8qW;+0cOxcIX7mwo}8lfv6o{>NVTG-EsWf!c{oQC#9GHv4{9GQkPlq>QIb=BIJPG zLH!D{uKrRU)r=p;&AtZzzK%{$e>eTYgHxCLavwa5@j+E;&;KXiN76UHR^Hfz5jBxh z%aj}fiVZo$C5cl#>BT_Q40(DgU)bzU!a~{Ag3IxeP7Wg!9bx}vn!Qq3^Lb}>7tNvp z&A(%C@tDVkV_q8hWKYUCRK^d~mkvuM RO@CyZ$Ho`IA%b5P=nrJp=-B`O literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event.py new file mode 100644 index 00000000..7ab581a1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict +from typing_extensions import Literal + + +class MeterEvent(StripeObject): + """ + Fix me empty_doc_string. + """ + + OBJECT_NAME: ClassVar[Literal["v2.billing.meter_event"]] = ( + "v2.billing.meter_event" + ) + created: str + """ + The creation time of this meter event. + """ + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + identifier: str + """ + A unique identifier for the event. If not provided, one will be generated. We recommend using a globally unique identifier for this. We'll enforce uniqueness within a rolling 24 hour period. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["v2.billing.meter_event"] + """ + String representing the object's type. Objects of the same type share the same value of the object field. + """ + payload: Dict[str, str] + """ + The payload of the event. This must contain the fields corresponding to a meter's + `customer_mapping.event_payload_key` (default is `stripe_customer_id`) and + `value_settings.event_payload_key` (default is `value`). Read more about + the [payload](https://docs.stripe.com/billing/subscriptions/usage-based/recording-usage#payload-key-overrides).. + """ + timestamp: str + """ + The time of the event. Must be within the past 35 calendar days or up to + 5 minutes in the future. Defaults to current timestamp if not specified. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment.py new file mode 100644 index 00000000..662e8b9b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal + + +class MeterEventAdjustment(StripeObject): + OBJECT_NAME: ClassVar[Literal["v2.billing.meter_event_adjustment"]] = ( + "v2.billing.meter_event_adjustment" + ) + + class Cancel(StripeObject): + identifier: str + """ + Unique identifier for the event. You can only cancel events within 24 hours of Stripe receiving them. + """ + + cancel: Cancel + """ + Specifies which event to cancel. + """ + created: str + """ + The time the adjustment was created. + """ + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + id: str + """ + The unique id of this meter event adjustment. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["v2.billing.meter_event_adjustment"] + """ + String representing the object's type. Objects of the same type share the same value of the object field. + """ + status: Literal["complete", "pending"] + """ + Open Enum. The meter event adjustment's status. + """ + type: Literal["cancel"] + """ + Open Enum. Specifies whether to cancel a single event or a range of events for a time period. Time period cancellation is not supported yet. + """ + _inner_class_types = {"cancel": Cancel} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment_service.py new file mode 100644 index 00000000..70640a84 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_adjustment_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.billing._meter_event_adjustment_create_params import ( + MeterEventAdjustmentCreateParams, + ) + from stripe.v2.billing._meter_event_adjustment import MeterEventAdjustment + + +class MeterEventAdjustmentService(StripeService): + def create( + self, + params: "MeterEventAdjustmentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEventAdjustment": + """ + Creates a meter event adjustment to cancel a previously sent meter event. + """ + return cast( + "MeterEventAdjustment", + self._request( + "post", + "/v2/billing/meter_event_adjustments", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "MeterEventAdjustmentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEventAdjustment": + """ + Creates a meter event adjustment to cancel a previously sent meter event. + """ + return cast( + "MeterEventAdjustment", + await self._request_async( + "post", + "/v2/billing/meter_event_adjustments", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_service.py new file mode 100644 index 00000000..ed8ef8f2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.billing._meter_event_create_params import ( + MeterEventCreateParams, + ) + from stripe.v2.billing._meter_event import MeterEvent + + +class MeterEventService(StripeService): + def create( + self, + params: "MeterEventCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEvent": + """ + Creates a meter event. Events are validated synchronously, but are processed asynchronously. Supports up to 1,000 events per second in livemode. For higher rate-limits, please use meter event streams instead. + """ + return cast( + "MeterEvent", + self._request( + "post", + "/v2/billing/meter_events", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "MeterEventCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEvent": + """ + Creates a meter event. Events are validated synchronously, but are processed asynchronously. Supports up to 1,000 events per second in livemode. For higher rate-limits, please use meter event streams instead. + """ + return cast( + "MeterEvent", + await self._request_async( + "post", + "/v2/billing/meter_events", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session.py new file mode 100644 index 00000000..8a6d4753 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal + + +class MeterEventSession(StripeObject): + OBJECT_NAME: ClassVar[Literal["v2.billing.meter_event_session"]] = ( + "v2.billing.meter_event_session" + ) + authentication_token: str + """ + The authentication token for this session. Use this token when calling the + high-throughput meter event API. + """ + created: str + """ + The creation time of this session. + """ + expires_at: str + """ + The time at which this session will expire. + """ + id: str + """ + The unique id of this auth session. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["v2.billing.meter_event_session"] + """ + String representing the object's type. Objects of the same type share the same value of the object field. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session_service.py new file mode 100644 index 00000000..5bf06cd0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_session_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.billing._meter_event_session_create_params import ( + MeterEventSessionCreateParams, + ) + from stripe.v2.billing._meter_event_session import MeterEventSession + + +class MeterEventSessionService(StripeService): + def create( + self, + params: Optional["MeterEventSessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "MeterEventSession": + """ + Creates a meter event session to send usage on the high-throughput meter event stream. Authentication tokens are only valid for 15 minutes, so you will need to create a new meter event session when your token expires. + """ + return cast( + "MeterEventSession", + self._request( + "post", + "/v2/billing/meter_event_session", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["MeterEventSessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "MeterEventSession": + """ + Creates a meter event session to send usage on the high-throughput meter event stream. Authentication tokens are only valid for 15 minutes, so you will need to create a new meter event session when your token expires. + """ + return cast( + "MeterEventSession", + await self._request_async( + "post", + "/v2/billing/meter_event_session", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_stream_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_stream_service.py new file mode 100644 index 00000000..f55da6af --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/billing/_meter_event_stream_service.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.billing._meter_event_stream_create_params import ( + MeterEventStreamCreateParams, + ) + + +class MeterEventStreamService(StripeService): + def create( + self, + params: "MeterEventStreamCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "None": + """ + Creates meter events. Events are processed asynchronously, including validation. Requires a meter event session for authentication. Supports up to 10,000 requests per second in livemode. For even higher rate-limits, contact sales. + """ + self._request( + "post", + "/v2/billing/meter_event_stream", + base_address="meter_events", + params=params, + options=options, + ) + + async def create_async( + self, + params: "MeterEventStreamCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "None": + """ + Creates meter events. Events are processed asynchronously, including validation. Requires a meter event session for authentication. Supports up to 10,000 requests per second in livemode. For even higher rate-limits, contact sales. + """ + await self._request_async( + "post", + "/v2/billing/meter_event_stream", + base_address="meter_events", + params=params, + options=options, + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__init__.py new file mode 100644 index 00000000..dc715b4b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__init__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +from typing_extensions import TYPE_CHECKING +from stripe.v2.core._event import ( + EventNotification as EventNotification, + RelatedObject as RelatedObject, + Reason as Reason, + ReasonRequest as ReasonRequest, +) + +# The beginning of the section generated from our OpenAPI spec +from importlib import import_module + +if TYPE_CHECKING: + from stripe.v2.core._event import Event as Event + from stripe.v2.core._event_destination import ( + EventDestination as EventDestination, + ) + from stripe.v2.core._event_destination_service import ( + EventDestinationService as EventDestinationService, + ) + from stripe.v2.core._event_service import EventService as EventService + +# name -> (import_target, is_submodule) +_import_map = { + "Event": ("stripe.v2.core._event", False), + "EventDestination": ("stripe.v2.core._event_destination", False), + "EventDestinationService": ( + "stripe.v2.core._event_destination_service", + False, + ), + "EventService": ("stripe.v2.core._event_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() + +# The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75458bee3f1264c0c965cc8058564be348b0f605 GIT binary patch literal 1353 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 None: + self.id = d["id"] + self.idempotency_key = d["idempotency_key"] + + def __repr__(self) -> str: + return f"" + + +class Reason: + type: Literal["request"] + request: Optional[ReasonRequest] = None + + def __init__(self, d) -> None: + self.type = d["type"] + if self.type == "request": + self.request = ReasonRequest(d["request"]) + + def __repr__(self) -> str: + return f"" + + +class RelatedObject: + id: str + type: str + url: str + + def __init__(self, d) -> None: + self.id = d["id"] + self.type = d["type"] + self.url = d["url"] + + def __repr__(self) -> str: + return f"" + + +class EventNotification: + """ + EventNotification represents the json that's delivered from an Event Destination. It's a basic struct-like object with a few convenience methods. Use `fetch_event()` to get the full event object. + """ + + id: str + """ + Unique identifier for the event. + """ + type: str + """ + The type of the event. + """ + created: str + """ + Time at which the object was created. + """ + livemode: bool + """ + Livemode indicates if the event is from a production(true) or test(false) account. + """ + context: Optional[StripeContext] = None + """ + [Optional] Authentication context needed to fetch the event or related object. + """ + reason: Optional[Reason] = None + """ + [Optional] Reason for the event. + """ + + def __init__( + self, parsed_body: Dict[str, Any], client: "StripeClient" + ) -> None: + self.id = parsed_body["id"] + self.type = parsed_body["type"] + self.created = parsed_body["created"] + self.livemode = bool(parsed_body.get("livemode")) + context_value = parsed_body.get("context") + if context_value: + self.context = StripeContext.parse(context_value) + + if parsed_body.get("reason"): + self.reason = Reason(parsed_body["reason"]) + + self._client = client + + @staticmethod + def from_json(payload: str, client: "StripeClient") -> "EventNotification": + """ + Helper for constructing an Event Notification. Doesn't perform signature validation, so you + should use StripeClient.parseEventNotification() instead for initial handling. + This is useful in unit tests and working with EventNotifications that you've already validated the authenticity of. + """ + parsed_body = json.loads(payload) + + # circular import busting + from stripe.events._event_classes import ( + get_v2_event_notification_class, + ) + + event_class = get_v2_event_notification_class(parsed_body["type"]) + + return event_class(parsed_body, client) + + def __repr__(self) -> str: + return f"" + + def fetch_event(self) -> Event: + response = self._client.raw_request( + "get", + f"/v2/core/events/{self.id}", + stripe_context=self.context, + usage=["pushed_event_pull"], + ) + return cast(Event, self._client.deserialize(response, api_mode="V2")) + + async def fetch_event_async(self) -> Event: + response = await self._client.raw_request_async( + "get", + f"/v2/core/events/{self.id}", + stripe_context=self.context, + usage=["pushed_event_pull", "pushed_event_pull_async"], + ) + return cast(Event, self._client.deserialize(response, api_mode="V2")) + + +class UnknownEventNotification(EventNotification): + """ + Represents an EventNotification payload that the SDK doesn't have types for. May have a related object. + """ + + related_object: Optional[RelatedObject] = None + """ + [Optional] Object containing the reference to API resource relevant to the event. + """ + + def __init__( + self, parsed_body: Dict[str, Any], client: "StripeClient" + ) -> None: + super().__init__(parsed_body, client) + + if parsed_body.get("related_object"): + self.related_object = RelatedObject(parsed_body["related_object"]) + + def fetch_related_object(self) -> Optional[StripeObject]: + if self.related_object is None: + return None + + response = self._client.raw_request( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object", "unknown_event"], + ) + return self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ) + + async def fetch_related_object_async(self) -> Optional[StripeObject]: + if self.related_object is None: + return None + + response = await self._client.raw_request_async( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object", "unknown_event"], + ) + return self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination.py new file mode 100644 index 00000000..02d4ca17 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, List, Optional +from typing_extensions import Literal + + +class EventDestination(StripeObject): + """ + Set up an event destination to receive events from Stripe across multiple destination types, including [webhook endpoints](https://docs.stripe.com/webhooks) and [Amazon EventBridge](https://docs.stripe.com/event-destinations/eventbridge). Event destinations support receiving [thin events](https://docs.stripe.com/api/v2/events) and [snapshot events](https://docs.stripe.com/api/events). + """ + + OBJECT_NAME: ClassVar[Literal["v2.core.event_destination"]] = ( + "v2.core.event_destination" + ) + + class AmazonEventbridge(StripeObject): + aws_account_id: str + """ + The AWS account ID. + """ + aws_event_source_arn: str + """ + The ARN of the AWS event source. + """ + aws_event_source_status: Literal[ + "active", "deleted", "pending", "unknown" + ] + """ + The state of the AWS event source. + """ + + class StatusDetails(StripeObject): + class Disabled(StripeObject): + reason: Literal["no_aws_event_source_exists", "user"] + """ + Reason event destination has been disabled. + """ + + disabled: Optional[Disabled] + """ + Details about why the event destination has been disabled. + """ + _inner_class_types = {"disabled": Disabled} + + class WebhookEndpoint(StripeObject): + signing_secret: Optional[str] + """ + The signing secret of the webhook endpoint, only includable on creation. + """ + url: Optional[str] + """ + The URL of the webhook endpoint, includable. + """ + + amazon_eventbridge: Optional[AmazonEventbridge] + """ + Amazon EventBridge configuration. + """ + created: str + """ + Time at which the object was created. + """ + description: str + """ + An optional description of what the event destination is used for. + """ + enabled_events: List[str] + """ + The list of events to enable for this endpoint. + """ + event_payload: Literal["snapshot", "thin"] + """ + Payload type of events being subscribed to. + """ + events_from: Optional[List[Literal["other_accounts", "self"]]] + """ + Where events should be routed from. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Metadata. + """ + name: str + """ + Event destination name. + """ + object: Literal["v2.core.event_destination"] + """ + String representing the object's type. Objects of the same type share the same value of the object field. + """ + snapshot_api_version: Optional[str] + """ + If using the snapshot event payload, the API version events are rendered as. + """ + status: Literal["disabled", "enabled"] + """ + Status. It can be set to either enabled or disabled. + """ + status_details: Optional[StatusDetails] + """ + Additional information about event destination status. + """ + type: Literal["amazon_eventbridge", "webhook_endpoint"] + """ + Event destination type. + """ + updated: str + """ + Time at which the object was last updated. + """ + webhook_endpoint: Optional[WebhookEndpoint] + """ + Webhook endpoint configuration. + """ + _inner_class_types = { + "amazon_eventbridge": AmazonEventbridge, + "status_details": StatusDetails, + "webhook_endpoint": WebhookEndpoint, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination_service.py new file mode 100644 index 00000000..a788a391 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_destination_service.py @@ -0,0 +1,367 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.core._event_destination_create_params import ( + EventDestinationCreateParams, + ) + from stripe.params.v2.core._event_destination_delete_params import ( + EventDestinationDeleteParams, + ) + from stripe.params.v2.core._event_destination_disable_params import ( + EventDestinationDisableParams, + ) + from stripe.params.v2.core._event_destination_enable_params import ( + EventDestinationEnableParams, + ) + from stripe.params.v2.core._event_destination_list_params import ( + EventDestinationListParams, + ) + from stripe.params.v2.core._event_destination_ping_params import ( + EventDestinationPingParams, + ) + from stripe.params.v2.core._event_destination_retrieve_params import ( + EventDestinationRetrieveParams, + ) + from stripe.params.v2.core._event_destination_update_params import ( + EventDestinationUpdateParams, + ) + from stripe.v2._deleted_object import DeletedObject + from stripe.v2._list_object import ListObject + from stripe.v2.core._event import Event + from stripe.v2.core._event_destination import EventDestination + + +class EventDestinationService(StripeService): + def list( + self, + params: Optional["EventDestinationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[EventDestination]": + """ + Lists all event destinations. + """ + return cast( + "ListObject[EventDestination]", + self._request( + "get", + "/v2/core/event_destinations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["EventDestinationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[EventDestination]": + """ + Lists all event destinations. + """ + return cast( + "ListObject[EventDestination]", + await self._request_async( + "get", + "/v2/core/event_destinations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "EventDestinationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Create a new event destination. + """ + return cast( + "EventDestination", + self._request( + "post", + "/v2/core/event_destinations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "EventDestinationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Create a new event destination. + """ + return cast( + "EventDestination", + await self._request_async( + "post", + "/v2/core/event_destinations", + base_address="api", + params=params, + options=options, + ), + ) + + def delete( + self, + id: str, + params: Optional["EventDestinationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "DeletedObject": + """ + Delete an event destination. + """ + return cast( + "DeletedObject", + self._request( + "delete", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + id: str, + params: Optional["EventDestinationDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "DeletedObject": + """ + Delete an event destination. + """ + return cast( + "DeletedObject", + await self._request_async( + "delete", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["EventDestinationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Retrieves the details of an event destination. + """ + return cast( + "EventDestination", + self._request( + "get", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["EventDestinationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Retrieves the details of an event destination. + """ + return cast( + "EventDestination", + await self._request_async( + "get", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["EventDestinationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Update the details of an event destination. + """ + return cast( + "EventDestination", + self._request( + "post", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["EventDestinationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Update the details of an event destination. + """ + return cast( + "EventDestination", + await self._request_async( + "post", + "/v2/core/event_destinations/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def disable( + self, + id: str, + params: Optional["EventDestinationDisableParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Disable an event destination. + """ + return cast( + "EventDestination", + self._request( + "post", + "/v2/core/event_destinations/{id}/disable".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def disable_async( + self, + id: str, + params: Optional["EventDestinationDisableParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Disable an event destination. + """ + return cast( + "EventDestination", + await self._request_async( + "post", + "/v2/core/event_destinations/{id}/disable".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def enable( + self, + id: str, + params: Optional["EventDestinationEnableParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Enable an event destination. + """ + return cast( + "EventDestination", + self._request( + "post", + "/v2/core/event_destinations/{id}/enable".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def enable_async( + self, + id: str, + params: Optional["EventDestinationEnableParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EventDestination": + """ + Enable an event destination. + """ + return cast( + "EventDestination", + await self._request_async( + "post", + "/v2/core/event_destinations/{id}/enable".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def ping( + self, + id: str, + params: Optional["EventDestinationPingParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Send a `ping` event to an event destination. + """ + return cast( + "Event", + self._request( + "post", + "/v2/core/event_destinations/{id}/ping".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def ping_async( + self, + id: str, + params: Optional["EventDestinationPingParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Send a `ping` event to an event destination. + """ + return cast( + "Event", + await self._request_async( + "post", + "/v2/core/event_destinations/{id}/ping".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_service.py new file mode 100644 index 00000000..38da51e6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/v2/core/_event_service.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.params.v2.core._event_list_params import EventListParams + from stripe.params.v2.core._event_retrieve_params import ( + EventRetrieveParams, + ) + from stripe.v2._list_object import ListObject + from stripe.v2.core._event import Event + + +class EventService(StripeService): + def list( + self, + params: Optional["EventListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Event]": + """ + List events, going back up to 30 days. + """ + return cast( + "ListObject[Event]", + self._request( + "get", + "/v2/core/events", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["EventListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Event]": + """ + List events, going back up to 30 days. + """ + return cast( + "ListObject[Event]", + await self._request_async( + "get", + "/v2/core/events", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["EventRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Retrieves the details of an event. + """ + return cast( + "Event", + self._request( + "get", + "/v2/core/events/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["EventRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Retrieves the details of an event. + """ + return cast( + "Event", + await self._request_async( + "get", + "/v2/core/events/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/METADATA new file mode 100644 index 00000000..15116c78 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/METADATA @@ -0,0 +1,154 @@ +Metadata-Version: 2.4 +Name: urllib3 +Version: 2.5.0 +Summary: HTTP library with thread-safe connection pooling, file post, and more. +Project-URL: Changelog, https://github.com/urllib3/urllib3/blob/main/CHANGES.rst +Project-URL: Documentation, https://urllib3.readthedocs.io +Project-URL: Code, https://github.com/urllib3/urllib3 +Project-URL: Issue tracker, https://github.com/urllib3/urllib3/issues +Author-email: Andrey Petrov +Maintainer-email: Seth Michael Larson , Quentin Pradet , Illia Volochii +License-Expression: MIT +License-File: LICENSE.txt +Keywords: filepost,http,httplib,https,pooling,ssl,threadsafe,urllib +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Internet :: WWW/HTTP +Classifier: Topic :: Software Development :: Libraries +Requires-Python: >=3.9 +Provides-Extra: brotli +Requires-Dist: brotli>=1.0.9; (platform_python_implementation == 'CPython') and extra == 'brotli' +Requires-Dist: brotlicffi>=0.8.0; (platform_python_implementation != 'CPython') and extra == 'brotli' +Provides-Extra: h2 +Requires-Dist: h2<5,>=4; extra == 'h2' +Provides-Extra: socks +Requires-Dist: pysocks!=1.5.7,<2.0,>=1.5.6; extra == 'socks' +Provides-Extra: zstd +Requires-Dist: zstandard>=0.18.0; extra == 'zstd' +Description-Content-Type: text/markdown + +

    + +![urllib3](https://github.com/urllib3/urllib3/raw/main/docs/_static/banner_github.svg) + +

    + +

    + PyPI Version + Python Versions + Join our Discord + Coverage Status + Build Status on GitHub + Documentation Status
    + OpenSSF Scorecard + SLSA 3 + CII Best Practices +

    + +urllib3 is a powerful, *user-friendly* HTTP client for Python. Much of the +Python ecosystem already uses urllib3 and you should too. +urllib3 brings many critical features that are missing from the Python +standard libraries: + +- Thread safety. +- Connection pooling. +- Client-side SSL/TLS verification. +- File uploads with multipart encoding. +- Helpers for retrying requests and dealing with HTTP redirects. +- Support for gzip, deflate, brotli, and zstd encoding. +- Proxy support for HTTP and SOCKS. +- 100% test coverage. + +urllib3 is powerful and easy to use: + +```python3 +>>> import urllib3 +>>> resp = urllib3.request("GET", "http://httpbin.org/robots.txt") +>>> resp.status +200 +>>> resp.data +b"User-agent: *\nDisallow: /deny\n" +``` + +## Installing + +urllib3 can be installed with [pip](https://pip.pypa.io): + +```bash +$ python -m pip install urllib3 +``` + +Alternatively, you can grab the latest source code from [GitHub](https://github.com/urllib3/urllib3): + +```bash +$ git clone https://github.com/urllib3/urllib3.git +$ cd urllib3 +$ pip install . +``` + + +## Documentation + +urllib3 has usage and reference documentation at [urllib3.readthedocs.io](https://urllib3.readthedocs.io). + + +## Community + +urllib3 has a [community Discord channel](https://discord.gg/urllib3) for asking questions and +collaborating with other contributors. Drop by and say hello 👋 + + +## Contributing + +urllib3 happily accepts contributions. Please see our +[contributing documentation](https://urllib3.readthedocs.io/en/latest/contributing.html) +for some tips on getting started. + + +## Security Disclosures + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure with maintainers. + + +## Maintainers + +- [@sethmlarson](https://github.com/sethmlarson) (Seth M. Larson) +- [@pquentin](https://github.com/pquentin) (Quentin Pradet) +- [@illia-v](https://github.com/illia-v) (Illia Volochii) +- [@theacodes](https://github.com/theacodes) (Thea Flowers) +- [@haikuginger](https://github.com/haikuginger) (Jess Shapiro) +- [@lukasa](https://github.com/lukasa) (Cory Benfield) +- [@sigmavirus24](https://github.com/sigmavirus24) (Ian Stapleton Cordasco) +- [@shazow](https://github.com/shazow) (Andrey Petrov) + +👋 + + +## Sponsorship + +If your company benefits from this library, please consider [sponsoring its +development](https://urllib3.readthedocs.io/en/latest/sponsors.html). + + +## For Enterprise + +Professional support for urllib3 is available as part of the [Tidelift +Subscription][1]. Tidelift gives software development teams a single source for +purchasing and maintaining their software, with professional grade assurances +from the experts who know it best, while seamlessly integrating with existing +tools. + +[1]: https://tidelift.com/subscription/pkg/pypi-urllib3?utm_source=pypi-urllib3&utm_medium=referral&utm_campaign=readme diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/RECORD new file mode 100644 index 00000000..6315d906 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/RECORD @@ -0,0 +1,79 @@ +urllib3-2.5.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +urllib3-2.5.0.dist-info/METADATA,sha256=maYkTIZt0a-lkEC-hMZWbCBmcGZyJcYOeRk4_nuTrNc,6461 +urllib3-2.5.0.dist-info/RECORD,, +urllib3-2.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87 +urllib3-2.5.0.dist-info/licenses/LICENSE.txt,sha256=Ew46ZNX91dCWp1JpRjSn2d8oRGnehuVzIQAmgEHj1oY,1093 +urllib3/__init__.py,sha256=JMo1tg1nIV1AeJ2vENC_Txfl0e5h6Gzl9DGVk1rWRbo,6979 +urllib3/__pycache__/__init__.cpython-312.pyc,, +urllib3/__pycache__/_base_connection.cpython-312.pyc,, +urllib3/__pycache__/_collections.cpython-312.pyc,, +urllib3/__pycache__/_request_methods.cpython-312.pyc,, +urllib3/__pycache__/_version.cpython-312.pyc,, +urllib3/__pycache__/connection.cpython-312.pyc,, +urllib3/__pycache__/connectionpool.cpython-312.pyc,, +urllib3/__pycache__/exceptions.cpython-312.pyc,, +urllib3/__pycache__/fields.cpython-312.pyc,, +urllib3/__pycache__/filepost.cpython-312.pyc,, +urllib3/__pycache__/poolmanager.cpython-312.pyc,, +urllib3/__pycache__/response.cpython-312.pyc,, +urllib3/_base_connection.py,sha256=T1cwH3RhzsrBh6Bz3AOGVDboRsE7veijqZPXXQTR2Rg,5568 +urllib3/_collections.py,sha256=tM7c6J1iKtWZYV_QGYb8-r7Nr1524Dehnsa0Ufh6_mU,17295 +urllib3/_request_methods.py,sha256=gCeF85SO_UU4WoPwYHIoz_tw-eM_EVOkLFp8OFsC7DA,9931 +urllib3/_version.py,sha256=ZlSUkBo_Pd90B6pM0GDO7l2vitQD3QCK3xPR_K0zFJA,511 +urllib3/connection.py,sha256=iP4pgSJtpusXyYlejzNn-gih_wWCxMU-qy6OU1kaapc,42613 +urllib3/connectionpool.py,sha256=ZEhudsa8BIubD2M0XoxBBsjxbsXwMgUScH7oQ9i-j1Y,43371 +urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +urllib3/contrib/__pycache__/__init__.cpython-312.pyc,, +urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc,, +urllib3/contrib/__pycache__/socks.cpython-312.pyc,, +urllib3/contrib/emscripten/__init__.py,sha256=u6KNgzjlFZbuAAXa_ybCR7gQ71VJESnF-IIdDA73brw,733 +urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc,, +urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc,, +urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc,, +urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc,, +urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc,, +urllib3/contrib/emscripten/connection.py,sha256=j8DR_flE7hsoFhNfiqHLiaPaCsVbzG44jgahwvsQ52A,8771 +urllib3/contrib/emscripten/emscripten_fetch_worker.js,sha256=CDfYF_9CDobtx2lGidyJ1zjDEvwNT5F-dchmVWXDh0E,3655 +urllib3/contrib/emscripten/fetch.py,sha256=kco06lWoQ-fdFfN51-nzeTywPVBEHg89WIst33H3xcg,23484 +urllib3/contrib/emscripten/request.py,sha256=mL28szy1KvE3NJhWor5jNmarp8gwplDU-7gwGZY5g0Q,566 +urllib3/contrib/emscripten/response.py,sha256=7oVPENYZHuzEGRtG40HonpH5tAIYHsGcHPbJt2Z0U-Y,9507 +urllib3/contrib/pyopenssl.py,sha256=Xp5Ym05VgXGhHa0C4wlutvHxY8SnKSS6WLb2t5Miu0s,19720 +urllib3/contrib/socks.py,sha256=-iardc61GypsJzD6W6yuRS7KVCyfowcQrl_719H7lIM,7549 +urllib3/exceptions.py,sha256=pziumHf0Vwx3z4gvUy7ou8nlM2yIYX0N3l3znEdeF5U,9938 +urllib3/fields.py,sha256=FCf7UULSkf10cuTRUWTQESzxgl1WT8e2aCy3kfyZins,10829 +urllib3/filepost.py,sha256=U8eNZ-mpKKHhrlbHEEiTxxgK16IejhEa7uz42yqA_dI,2388 +urllib3/http2/__init__.py,sha256=xzrASH7R5ANRkPJOot5lGnATOq3KKuyXzI42rcnwmqs,1741 +urllib3/http2/__pycache__/__init__.cpython-312.pyc,, +urllib3/http2/__pycache__/connection.cpython-312.pyc,, +urllib3/http2/__pycache__/probe.cpython-312.pyc,, +urllib3/http2/connection.py,sha256=4DB0DkZEC3yIkhGjUDIHB17wrYCLaL0Ag5bDW2_mGPI,12694 +urllib3/http2/probe.py,sha256=nnAkqbhAakOiF75rz7W0udZ38Eeh_uD8fjV74N73FEI,3014 +urllib3/poolmanager.py,sha256=oKsgP1EsAI4OVgK9-9D3AYXZS5HYV8yKUSog-QbJ8Ts,23866 +urllib3/py.typed,sha256=UaCuPFa3H8UAakbt-5G8SPacldTOGvJv18pPjUJ5gDY,93 +urllib3/response.py,sha256=TVTSu6Q1U0U7hoHYMIRxxuh4zroeMo8b5EI4DOA13Eo,46480 +urllib3/util/__init__.py,sha256=-qeS0QceivazvBEKDNFCAI-6ACcdDOE4TMvo7SLNlAQ,1001 +urllib3/util/__pycache__/__init__.cpython-312.pyc,, +urllib3/util/__pycache__/connection.cpython-312.pyc,, +urllib3/util/__pycache__/proxy.cpython-312.pyc,, +urllib3/util/__pycache__/request.cpython-312.pyc,, +urllib3/util/__pycache__/response.cpython-312.pyc,, +urllib3/util/__pycache__/retry.cpython-312.pyc,, +urllib3/util/__pycache__/ssl_.cpython-312.pyc,, +urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc,, +urllib3/util/__pycache__/ssltransport.cpython-312.pyc,, +urllib3/util/__pycache__/timeout.cpython-312.pyc,, +urllib3/util/__pycache__/url.cpython-312.pyc,, +urllib3/util/__pycache__/util.cpython-312.pyc,, +urllib3/util/__pycache__/wait.cpython-312.pyc,, +urllib3/util/connection.py,sha256=JjO722lzHlzLXPTkr9ZWBdhseXnMVjMSb1DJLVrXSnQ,4444 +urllib3/util/proxy.py,sha256=seP8-Q5B6bB0dMtwPj-YcZZQ30vHuLqRu-tI0JZ2fzs,1148 +urllib3/util/request.py,sha256=XuAsEBT58DAZYUTwpMH5Hr3A1OPoMNvNIYIunbIqbc8,8411 +urllib3/util/response.py,sha256=vQE639uoEhj1vpjEdxu5lNIhJCSUZkd7pqllUI0BZOA,3374 +urllib3/util/retry.py,sha256=bj-2YUqblxLlv8THg5fxww-DM54XCbjgZXIQ71XioCY,18459 +urllib3/util/ssl_.py,sha256=jxnQ3msYkVaokJVWqHNnAVdVtDdidrTHDeyk50gwqaQ,19786 +urllib3/util/ssl_match_hostname.py,sha256=Di7DU7zokoltapT_F0Sj21ffYxwaS_cE5apOtwueeyA,5845 +urllib3/util/ssltransport.py,sha256=Ez4O8pR_vT8dan_FvqBYS6dgDfBXEMfVfrzcdUoWfi4,8847 +urllib3/util/timeout.py,sha256=4eT1FVeZZU7h7mYD1Jq2OXNe4fxekdNvhoWUkZusRpA,10346 +urllib3/util/url.py,sha256=WRh-TMYXosmgp8m8lT4H5spoHw5yUjlcMCfU53AkoAs,15205 +urllib3/util/util.py,sha256=j3lbZK1jPyiwD34T8IgJzdWEZVT-4E-0vYIJi9UjeNA,1146 +urllib3/util/wait.py,sha256=_ph8IrUR3sqPqi0OopQgJUlH4wzkGeM5CiyA7XGGtmI,4423 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/WHEEL new file mode 100644 index 00000000..12228d41 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: hatchling 1.27.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/licenses/LICENSE.txt b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/licenses/LICENSE.txt new file mode 100644 index 00000000..e6183d02 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3-2.5.0.dist-info/licenses/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2008-2020 Andrey Petrov and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__init__.py b/Backend/venv/lib/python3.12/site-packages/urllib3/__init__.py new file mode 100644 index 00000000..3fe782c8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/__init__.py @@ -0,0 +1,211 @@ +""" +Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more +""" + +from __future__ import annotations + +# Set default logging handler to avoid "No handler found" warnings. +import logging +import sys +import typing +import warnings +from logging import NullHandler + +from . import exceptions +from ._base_connection import _TYPE_BODY +from ._collections import HTTPHeaderDict +from ._version import __version__ +from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url +from .filepost import _TYPE_FIELDS, encode_multipart_formdata +from .poolmanager import PoolManager, ProxyManager, proxy_from_url +from .response import BaseHTTPResponse, HTTPResponse +from .util.request import make_headers +from .util.retry import Retry +from .util.timeout import Timeout + +# Ensure that Python is compiled with OpenSSL 1.1.1+ +# If the 'ssl' module isn't available at all that's +# fine, we only care if the module is available. +try: + import ssl +except ImportError: + pass +else: + if not ssl.OPENSSL_VERSION.startswith("OpenSSL "): # Defensive: + warnings.warn( + "urllib3 v2 only supports OpenSSL 1.1.1+, currently " + f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. " + "See: https://github.com/urllib3/urllib3/issues/3020", + exceptions.NotOpenSSLWarning, + ) + elif ssl.OPENSSL_VERSION_INFO < (1, 1, 1): # Defensive: + raise ImportError( + "urllib3 v2 only supports OpenSSL 1.1.1+, currently " + f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. " + "See: https://github.com/urllib3/urllib3/issues/2168" + ) + +__author__ = "Andrey Petrov (andrey.petrov@shazow.net)" +__license__ = "MIT" +__version__ = __version__ + +__all__ = ( + "HTTPConnectionPool", + "HTTPHeaderDict", + "HTTPSConnectionPool", + "PoolManager", + "ProxyManager", + "HTTPResponse", + "Retry", + "Timeout", + "add_stderr_logger", + "connection_from_url", + "disable_warnings", + "encode_multipart_formdata", + "make_headers", + "proxy_from_url", + "request", + "BaseHTTPResponse", +) + +logging.getLogger(__name__).addHandler(NullHandler()) + + +def add_stderr_logger( + level: int = logging.DEBUG, +) -> logging.StreamHandler[typing.TextIO]: + """ + Helper for quickly adding a StreamHandler to the logger. Useful for + debugging. + + Returns the handler after adding it. + """ + # This method needs to be in this __init__.py to get the __name__ correct + # even if urllib3 is vendored within another package. + logger = logging.getLogger(__name__) + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) + logger.addHandler(handler) + logger.setLevel(level) + logger.debug("Added a stderr logging handler to logger: %s", __name__) + return handler + + +# ... Clean up. +del NullHandler + + +# All warning filters *must* be appended unless you're really certain that they +# shouldn't be: otherwise, it's very hard for users to use most Python +# mechanisms to silence them. +# SecurityWarning's always go off by default. +warnings.simplefilter("always", exceptions.SecurityWarning, append=True) +# InsecurePlatformWarning's don't vary between requests, so we keep it default. +warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True) + + +def disable_warnings(category: type[Warning] = exceptions.HTTPWarning) -> None: + """ + Helper for quickly disabling all urllib3 warnings. + """ + warnings.simplefilter("ignore", category) + + +_DEFAULT_POOL = PoolManager() + + +def request( + method: str, + url: str, + *, + body: _TYPE_BODY | None = None, + fields: _TYPE_FIELDS | None = None, + headers: typing.Mapping[str, str] | None = None, + preload_content: bool | None = True, + decode_content: bool | None = True, + redirect: bool | None = True, + retries: Retry | bool | int | None = None, + timeout: Timeout | float | int | None = 3, + json: typing.Any | None = None, +) -> BaseHTTPResponse: + """ + A convenience, top-level request method. It uses a module-global ``PoolManager`` instance. + Therefore, its side effects could be shared across dependencies relying on it. + To avoid side effects create a new ``PoolManager`` instance and use it instead. + The method does not accept low-level ``**urlopen_kw`` keyword arguments. + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param body: + Data to send in the request body, either :class:`str`, :class:`bytes`, + an iterable of :class:`str`/:class:`bytes`, or a file-like object. + + :param fields: + Data to encode and send in the request body. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. + + :param bool preload_content: + If True, the response's body will be preloaded into memory. + + :param bool decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + + :param redirect: + If True, automatically handle redirects (status codes 301, 302, + 303, 307, 308). Each redirect counts as a retry. Disabling retries + will disable redirect, too. + + :param retries: + Configure the number of retries to allow before raising a + :class:`~urllib3.exceptions.MaxRetryError` exception. + + If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a + :class:`~urllib3.util.retry.Retry` object for fine-grained control + over different types of retries. + Pass an integer number to retry connection errors that many times, + but no other types of errors. Pass zero to never retry. + + If ``False``, then retries are disabled and any exception is raised + immediately. Also, instead of raising a MaxRetryError on redirects, + the redirect response will be returned. + + :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. + + :param timeout: + If specified, overrides the default timeout for this one + request. It may be a float (in seconds) or an instance of + :class:`urllib3.util.Timeout`. + + :param json: + Data to encode and send as JSON with UTF-encoded in the request body. + The ``"Content-Type"`` header will be set to ``"application/json"`` + unless specified otherwise. + """ + + return _DEFAULT_POOL.request( + method, + url, + body=body, + fields=fields, + headers=headers, + preload_content=preload_content, + decode_content=decode_content, + redirect=redirect, + retries=retries, + timeout=timeout, + json=json, + ) + + +if sys.platform == "emscripten": + from .contrib.emscripten import inject_into_urllib3 # noqa: 401 + + inject_into_urllib3() diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4fe77f0c1f240d2670940a2009ae7ad17da47b36 GIT binary patch literal 7315 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 OPXfp;`-za|2Ko;hziB!E literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_collections.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ed983093c1fc8381a74266a40d87afb31874080 GIT binary patch literal 22574 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 IvKdtWAOB1>PXGV_ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/_request_methods.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab4c91d7e0678319422c1e5ba50279ab7bd96780 GIT binary patch literal 10607 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 F`Ugv@vLXNg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connection.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73ffdf3654eddebb2454f9873b1004cfb6d09daf GIT binary patch literal 38418 zcmdVDd30M>dMEg>kyr_U1b2{p+zGDQ7it$5Z8RlIv{iyih9N#sA_W5U11O0s(4}%b z9cso^mO7P4PPy82+TA6O-6>^KXQE8^bi2ywq|$SG0*G=0M#&jX+I>#kbEXe$$!$mJ zKj!z{w}BAss#MLHbLNSjw@B8j||2K!j%Hg^2U+bpl|2fC~M|x4763L@` z_!9%i-QWaH(1p2KonNOTzdo$@>)EftZ)CqFzlr^p_)FMtslSx{n*C<>Yw=syuhnm5 zzc#;({o4I@{2IcBS%<%j31@}34WK~#r!2<^Q_xnuH!TjKG^S7}uXSjW~!{5RDu5jmUm%mHLS)|_Z`F$bZ%!F1O#pmxqO)A0zv+Mlp zSV|B4>;3DQzY_ip{te7u72Y_z$-jyDtHYaTxA?crZuM`S-R9pmyWPKicF;dKyTiYO zeXj}coZaQ$HM`rtdv=e1&+K0RUKU;(-Z#77zn}T*(E1_&F!R^LKjI&m9rcgS9`GNS zJ?K9;d&qx?ee;G7&mQp~nH}?wvG<1XQ?uj#arE+0|IyGf|1mumGR^#f(jM(Mbo?Ei z^yWVyGzv`u|GM5kf!O+)|51yj_=INkL+Lx1OZ51kMZD6PKa}3`U7PvV!T5AE5*x>R*};j4V?)tMBs5832ysxz$mPkRaj zid-BBPoEu_TZo^JMmF}Z-!KrHj)(f@5FvOj6dRZq!}z{&U{W2e{<#IQ8l^C&9iEs8 z&dXfJY!|&sINEKM`ey&p;Zu0C9TTIM7ck~i)93K&3Mk`tl#O`oZA1wKE{4$8(MTZR zE6G;K6GZM))(_coX~>RAVFe%K+>LB^uCl+Gy&@5$s zGAKr9fQ?z(i6e)O1rCnv8y-2Hb<@kSef!5odI44d=;yzQhY7)aA4+Z274Iry{=yE)3pN<8l=YoPDhGMa-8*Vgw zF%+1j87PKch-E93ASzJqpsbT#E{VapKrD)(jAO#MhLB`>YI+i-NNp^e4aO(W2hK-h zahe~fn&BBS{K+v4()7Q?+h=dvbpW7D6Ma@=D5>F4^ITie<@I=g%Np9?&n zcyV3d_F&)QzCQn%HIvtjZ1CtF?gdQ!?Y!yx3^29d5Hbq-T6_mqHiSw9<4*Viab1*V z?Ss(rwITE-n5GQpbimamNL@;)1v4PvJ$WH@ETlItq@INUucEhP&8uff@!QJE02euzraT${NQ95@MQ3LTB7}v z;ptE$-oF-oKF^<>kMqD@7pH|#j1NY5z!fpb1Hu3U%}>UoBFpkDVEUz?D8%|EqqB3s z#%HI))A0p999#&A{Mk_aQYaMRqhX*#WFqj9&?WeeG0YI_x3WC;3Boi1*etsIm9Hgmpc|jgv zo*zZ;g)RqY=fa_0etL>uh|cqureo(RyHEs`2vH&Ykx*!k-xr>~7(ykf>)E`ZNYr6U z2lUF-rA%h0&z;9SrP(YED$n=#V{n8}-`Oy**x(>9ks-=gEQ4RExA-3Zv|J7?9Xws~ zD4jSu7C3Qq=*Y-KuQG5ajs}j5j2zoHcIerWUi6PrL!>&R6ns=Z4oDar`C?dcR5{RH;m0GMWq!g7L+#rvnErQb0$5vEN`D_ow z=aE^Mkw1^EsPhwFsI#+WO1#+Q`Os|W6K*fIEF~gQH{vik`^g!B!*&Rl7qWJ#w@_CA zxJdwP_7J-Q^b?17-NQeF=XZ5CxH$Vn&Q(i-`z{FOgf5|v6T!@$8JWqUywh*O@Q%DM zNEj2QcXjW`v2|RcB*6s;O|U0XiZ?Z% zY@o!%8Ck3@04GY7U&hCn2mH4~wsZV=0raT*OA6WJ5%+&ib zRZTe?XQ_R}l~}B~GOnp_*?7-fpQ)@{Hojubc)RGe_CaSa{kCPA+v&G4)5YFv)!**^ zW#b3tdbVYnlm{F&U=v81MBDIk1A{fgg4a4T%CyT17IezQ0X?A)zJVwzR6G!h14Hw` z)90fMJ&U2)C_r~GvcQ8@03iSvCPaZi;^%{LtZ;$tBN(_-_78+J0Om%Y9v)Yb1fXF#FO=Kr^69~;HNHRv~f!+j_hE_}~#21eQ zQG`x{gpScv01e7=&Tm`SbbkmKnvIOqf7GjT%ZSp6#fjb`vgf=u_QAyPI`eNGImU6bOoLF`Gl4hR- zVzA9qAMzUrPtm>`AVvp_pnfFo(_&g3AJEtYITV`uc`EaHc>={Xs*&eU0-D5P^RqPn z0YccA$jlDf6i91JZK}2_*um4*223Ul5iGbu~m*>J>=nvK`|7c7bAl_7@JS#qs?&4>|xZ9kw@c;WkcGQ z5720_fhRf)jD>js-7Xo1u`q<}daUy;c8r1=K#VmoFi6aRylM~fixv3{2{|L5TkJvE zS+~sV)L(J6E4C*}x5AA#sMnQK`CptCghdqh$2YSKqLv?@ik}j@7#H%Lkj{rMqf0Qu1YgAS} zpb1uOfX0$N*pryXMIwzC+YUt-8MW7Cyr#)ODW_+WLf06WTgQenJgc zG2|Cx3ZnS62@4tqb%+%sZ50u&6apPtJ{zYrTSvBvb=#Vt?tmGNPzrk8ny}3H zlrZgANdaQRsPxE7&>uhxy0ut}Z>CT2X}?&rHd>uZ>LqJ@K>3=mDxnG81yBxRQ(k*% z`4&7g>k9(#D%h1gUeYD3FJw!l9Nc^`iImv4l9Ez5MGx^td+-g6Abs{(MtRjBdCyE$4jhTn}lbuSBZoG zgRdYX1{kHx7|eVum z#xSqsF!YOtNgUzDssa=&hkt<*Vk8&8!riZLdSl0HJJR(7srrFy=1kqzjHl+t(d$Q7 zhSP1EQ*E2mZ97wKJMWxaZ5vtjjN)V3)1LCQ=S+qj<)3nf`toa~IWy;Nz3IDFnrZi? z+qb9Mx2N0pq}unaw(kSY=RT^t{?xV6nj z-;}QJPu2HJWaoRHzwrLlo2>6&tslQ;&gm=N?U{kC>4D+Y!0_t8Xv))j?c_~i<-mjL z`q$%ceEYR;r<>NNn%3W~UZ1J)zF~dM`nvsoV|%7?+a1rHk~_ioO8>&~Q^)(xCa;7yf8$wQ1i?`Aw5Pql2n)3@4kFzG$`VN>e^Z*!);DcQO$RlhCcZAL5J*z?++TTkDu z@4xSDUh&ca>;{Kwm z{J@}L4R2M&`L8pa&+xapJx5CU0n91}`H09Zc#7h0qWcOS8GnO@0{;GrZG16|t3baz z{B2k=CiFAZ&VnalVECJ`IN|SNwf!pmT{OP}{Ov3#4zIx9MQ9Fe*$ZeI9rq%&xfspy zRSX7ogRhmEhrdn0ex_pdfYM(Kf0qyjkE`^-Oc9!(7!81&d975%r?d&15w*=|Q=9T# z`xPt4H z$@w-pSID7J7QaIdtzq#Wk@H*RybQ-zr{PWUDuo^)=f5ZCe<0@-a=uH>_sDsb972oY zHFB<#Lvmd4x8Xqjk6}m|(~7@GVdViacuA67${K_*@%Jgk56F3)oPSKt?~wC-atMWr zzYE7_k+9$oDS(il_)o|o%qPA<&I&nilJf^}Vzi%Av7EHUd<#Keh2L7RDr4V+gFVw% zA+%>#+lE&?KuZ6=L1?b8KxiNLZ}{)*cRzFXa$>F7>(>`Ha)0#2^oeREVoHqZX}%-d()34Gw)1=L%+8`!PJ`x~K06IZhV zd-|_NSxrOc(e2!yZ!bS!TZ^)QsHAOp5*{WF#0VBX%8~?dQojQH7z^WJ=2R2X)A%Wf zMboI@QSt*&uqmGq)2{fn-#oBLHDwQC7D0hv6|9j;FG%v`iBX?foIyHinH?hEC^F5 zT~G282-=_vbPpTh`6{`sz|Dh4^0toT5Dcsov?yzV5(cBJg(vuw>X&DzWrT#Ta9}3B zx^Q*j=5W%k!1r#_nO;PP zThh5LY2Nl^duej8_7d9vs!=$>i8RA825hDkjzQH|sG_tN)Vg>yT7fZQ&#=)+J9|>j zo}{_w$*NL^v#Lr%qj5^HerPfkJjzPDtP^oe1#xI-3m!p7(+l#u39Et_jx(_VKOxRT z3OdCHi9t$QfFv@O7^fs%R+ROi#uf@gb}9)Q_|YI<)U2R|p0^;`N-gZV3YH~l5^2RO zwiNVRkvK%9%Y#m=YtOae8;7qSUUfFzb?#F3Tz5Rlwp~f{t|xo)S6h0zdB~;EHz(8v zJ<&JP2JzSG8l9xTQrIEoYGc*B7n{GTKh!8Q)E%^rND_hWNIUtIlfPw5I(w7m-X}YN zrUIKvm>G=y4zZ&;HLe2Slj@NM)R~%(I>pu^1olmxTI`#;lVIOe(9Ygy;j@Rmnb*9j zh=nLW_Wl3EGF3`aKR)WSiYHJriQHl^Y7f2cC5J(P1LR{9`Uv@GLCXATiIY$DR=D^? zvn_fGhLC~m7iiRokoywDrng%<@7vv14_tlfm800M*ETE_klt(bO@oMv*_l#rkJJ(6cWPF7l`xX z^Qa0bUBoU-&q+!b9_9@)9pnIGr2zoo07`8DJi&>5hsIAZ&vEFI4jtTg9H)vP=3)9R z;w&=Dn$AHRWsc3TtaWZaE-QNYN+oLkC5mH!CWLqgKJiak5_U2}np@OO60nxVME@%S zo)CR#`Cg$}b`Ehc%N}_+cX!&gF6CNxyK2?7ZQ1mp&BX*pyY5Wg@h1;_BYEn%^eG{A zN?1KLmHftZa(X7|x{xPAGIOrVtCv#F=8V1k+R)1OHrl#}B!)bK&LG0& z48#+tl-jk4JZY&yh=CTckiJD+1=tt5IPUj!H*{c=Hyc4={|mz7TYluu3*R5S8GNf^wW9rQ#o(>xcfXbD9$c*$OqCz`yBJmarS?wUqOr4= z?_BJXwT1ej))wy1JBlUg5<$(B6vJYC=VM*xxX+d~KzUJGbr!Wwq6c|qO;G%SE&*{z z*fyS&3`A%Zi|@0q@#%Ot#MZ9QB&|`}XJ<Z;J{*{aO?EUv071u^@j9nl5 zo$*yi>%E?xDaXzX-|-{co3{Jwx8B=!Xm$PJ|KK{Za`F2WH)^lf-rVwmyXCIy2v%`( zS<>DBF>pmgrhG8DV=OuN)X$$zx{hiKJZIs`cKzMoxQ;Ms^iO&3{tEL11l*Xmz5U9m*iU9cf=i=v8@js0stz3paZo&O3s{1?b zAX*Wz@F|L5ijud=%Eh)c4^}{7paja$W=&NZ8(eikB#c+|(~x><8(BdQ7-f7CMlD&e zb}bjVB`ajw^lL+Xi}6`WMZub|y=ziX6Y8VFnS_DV>58d5y<4IvH7wZ^_L=g+e!y~f zAe?4!!Lw8bBwG!IEDIprN#qWARruh%l0^XvILkFm(nLt$41#UR6xqen(wiM`TPQ41 zcBMMu_|7^C`IU04|B6_SJmsr0WrVbv2xY9+bzhO%87E}`_9(=GmNsFWX;8juze+rC zQqd1grtMsE70*B6Ot`fC2yP=D0Bhl+HG2JUA@n$7{!W}1J zA$yd3MZ}tERYJ92!KL&D@&S>AlH0YficfHBoZy68Ns(|%5(DKO;QUbW^jaFkIgR$2 z#PZ@Xg>o%7#(b$D<$lNjnO>?Q^|LAOM6nRhNlcM*7fx}UMcf$`XJNS3;;dqeTj^}2 zIx@a$T8ppr43>-k4%vei|1 zHU6S|LJ1ln@hoUc@vo@DWilM?li=v+1XI!@$l5o?AnT$P>at=Vq?wWUqV*Z_?_++` ze0-{JTa3uB_R9`y`&oyTAtgwu9af)*abK9Cl5*C9Vv0OD2jFBaID)nq!kPNGNHnI{ zN6vowQX(B*&MI}2VZ2Bg5SyeZ z1Y8MMuYF`WuslVcU>wTfe?ar(zrevR&db?d5(|pYz<22Cp|qV(*@+Y7ebWov4GO$v zL#DntQ&XSu_R#T=*6ojMB`sEV>H~Vh_KM{_nW~!Q1NW<%FvIR_z1K9fS~aw6%QUUK zeI(hmCu#O(JasoOBt5=m3l7o0>b&Y?#CWoQ|IepEj9Y3R5gq=>&ee9V#BYzjC;Ua^ zr;&R#&n!DK?#8scJ>_m+F3Hq(q-!^)YBw*JeOiK2GtQP<<2`+oB zEZI4D=gwh--5atb<_CO@tZsE`Sz~*_TRG) zWg6PvIP=<>9|TC%vHR*%%cIvulvrCUo>r7<+B(R`sfP{k4$~E9!{Hd+7S1o6(+U?0 zTsM?z9QwdBO!cKNA&81|mB{Z?jB15EoY%r1*jtICTOn~()Qv1AkV@5@#|t#XFeRj? z7<*30Bf=T46qFD>j8&&nD^eJ_$_7_3f{u_&#V)ACSGxFHR%P1m3u7M}fx-!$Dv?fB z;_U7$bc5x&Dxc_~gA8~}tuyH)h)nR|45tK*nCdYdV8NLV90KIoSwA)1 z;w#1Bs$}LMBy{=cIFJwm^+*N>aJmNP94^t(kF&%*q{Br5j%4u434n_m`k_uk=W1Yf zAt=y^fWpI_a+A9H`*AQsuI(=3Tl)Gx(WA%S)@RLB77n~F0L;a4oSEs8On@!<*Z8i1 zlW`EZW-vL)tV1koBwx0CSgtEhFQ1e?iGPDs$`;@y%7I{$mX}KLOVWm{Q?8-X2aAng z-$w@2I<^T}VxwNgS=_HWt~zpho#Pw2k1IPf)is}6OgKSi=PZs_?N{yBp1pYj%lqVe z!m|AX^N}Z+d_-b0BKxnAFVnFtN={#~YFlju(?Tt)Xk1B!F@TJv2eDMbSqbC*0V<9P zMkgaNFsWpkEm^|GH;*_jn!f;DVU;vCXxs3sIMeuDkW5M|mT(YX+h~J0ETSZ!)gZ1C zTg79}bZRYBd`d}5E=whPurr{6T!K8hlvvs?LTQs(@Z`6bk>xTdKTZ)vZ5XuRYQ1Wi6wrM&ArQ#*ii>6opgY=D^?kS$31$0{_!@kKg^1;8Sy ze@TbwDFlQFG{N%DNgR?)46I$51gijyD8VF77|?k=QftG3LP^lU4mK*h5wcQ1$&V|A zK~o$-mvE|yPV4c}von+dvXl}7(BU9>e)T|{;3yP-5eJcojj*@EOwppQtkPqt`)Qz$B2m%bhbqj?;*MP0p;PKb0`6&*1me_lru?BBr$1*e2hYWgM2nhQwk!R%wJ>V z|-#GNzp_Rqkn^ryBmMvhO zd7EF`3Vq4d`gKWjP0nbxl-;*CCtEh8TehTHw%oICeN@hYByL`xZr+?~-kfgUk!s$t z+PrJEeD`wc|5?$LaW_NnGE>o-uINrxbZ0zmX-_W{EAQ90tZcf~bf;^zen|W3?Mi#M zrM%lR^_}VZEvfn~85~$>9Z0v1rdmg}z?!yn&AL?0x=dZ`qxv$Bb=jP21?+PbD=)=#S8^A2=KW4m}V$UvDkp+ zM`z!%M#}kZy=cJ1VB1okQPPfLm1Lnte8SG0{EyiR48{AU6K1ewFwS(hAPsz)DqGMp znzWCbWUCubL0cLN|1{P=j(^8R#omP&Ra0uk8N~&JW=&@oVB6QBF^ zqa=}hNzI8-ovb!@C~P-5jLpD&S~(@sK9|M(_iAeGyMBBeJMCim{xxDhc54RN@3IzQASyiSp=xv!sF)p;%KC%dTJm!XJ{(;9Kg>)hFg9oMmTn>X76b1&yK+ZwFGR{+-bCS=cueIjflm6Uy^cbU2$8sN*3FW1JESbzKUcTRt%FEuq$xI4#u<@F{{Zm$m2 z&1~G7sq*G*c2hg68GhxOkLWf_k2&kxA=kY>4zl-OBIsZp&wSCven<5xohisWbSaZ=Z@*PvdWu=bWK;P zrt6+#^R2-T9Gf4O@Q(I}!#by_2PgHZIXY9b+#L8&F$y!7w##AgA$KWWuNtpcj%PIO zmc!sfwJDy_)Tf5^eQtM{I&&Rh=|FKUXDc^ZAGj)VCj24?3{xrj%$%ntXCa@JYieb& z*1Q)b1YZP2W#2GY8HCfpwz)_8pAmVG=n^HJD680 zk9no?n3qQLp@VrlcA9D)SSr6T;rCMx4%=X})i#OMratnXQupwmU}1i}Swk2aHik+C z6Tv6J05iiSc#}*O8enXg-pukhD-0Kw%7zOKFk?vRZ1OiUV^}JiF*Nuc?5#}xR>pFX z3>zB!PQitkZu$n3ay22BV1NNu_Y6^l1rNS_{lALWJx`jc`+qA$sAVSZJTQb<@noJt z-IHO(LWFvu5=Qepf>)@5xxh-HL8!)W6*HPw4SkTttdmH{6GJMcvG}`e&-fJCwULd@ z<=K>DEHv6@XqNGq%{sD4hFzS@Vaqf227@*%KZ$~%ZQg7Me16J$aBg96YCbYK_`J;G zlEl^pb~&GyHZ$TNhG+b-OR_=*dP1RWEUKMP@gSlQgNvE|jAd=IFCa{dkIQ9}N=nJ- zjI3Ra5R3=2wmj>gB2jAD3JRHpO{UrTS=DZ+6d1gmA1D(0VX;}UHx>+sY14X|vEis( zh4#t1l^sO@V*fCi6BM69Qb-;cRX7a4W-W`6can{#8my$Ollqvf>cV~q+45nf!j381 zzpJ5AJ1{bogeE6AE5CW; zAlr&+-HuHtH&p^)#$)VAQKOfj97sqY}+ zSxu%1CerRfI;Q-#Y@+uj^?U0Udgn9BZw-I9X5U-Ke{}NAlj-)YsrIdR%s6bxN~rI+ zTYvc74L{!c_SSUIu2j#iI~P`a4ok(z7TZ8g*eglZ+*y%!Hl>_RNoNlz+qAbg~TveE5V@_j&Nih&K&BkugHGz04S)nt#IdYr_*&DHOSD z@X7pZ=VvYop9o^mj*vYIMxSZ%8w}6W^q)8n3PCoMC$mJEB`V^J0_}lLh(dv`H=hd% zd?j-_h>MAp4fC=C=cSjE6bGks-H5EoEzFmey4o1C@42TYDsn zd_H_C08@ov={EpBADC;Ol=so1WB_Cn#K&K&RHu?9NFhJpsr@R6AHs{oU(!cv@WrU4 z*M65scBle~yl_24-ZFUv8KDXav=~r7tBK2!Cd4Syz9>E-xZYJQXaPt;YRJr+sHB7v z6U0IX>Y*-LEnF~aR>X=a&%Gl@h1|=eNEzwc6y#Q|<)ZkM*p~?`+Lcfoxh~!}FmAsD zKv<0Y68{mxy-E(+uTVldx+1lvNefkc#mh+;6&YG#y@b-Gk_gDpq9vJGNu^M0%p=ao zuA2t@kg{DVTl-ad0VJj>B`qfZjCU((kdNZc`&DYqR1ACbKFHqhfH*ED6NS`~zzch3 z)+s*i_v?-&$2TeQE?}OMgi~yZZ&ku(wkbaCSFmVlpt^1Sp&?HDHTEbizy`oHLp;TT zN3baf21m__-N+uHahi@#8-GV9U^6hYR}Rkm!Iv_8*`F6Ad-27IFSMH~c<_bP97hX+ z@rp0lF3cP(`i0a14;TG{4adw_(J$EE%#0WPf^E>uv7%pS782!J@Stwh2{T-RFGNWe zJor+ZD1l2VqJ%FB9(*Cy({B_6`2Eul*`B zuV6j5XfYI@*n}K-iqZkD_&1ewZ8(z4)SA>d%9pQ!(%xSON@L{m zG00c+zrf}9|4W>zMbI>!)t}!0age&J8eJ@trPngeMn{3-=h-p-X(3w~4~mdN29&b~ zOl-V?ac?G=>}at`x;KWIOeA9O5^Od`r>6KWIorj}KC)&@Ut~kOXTeQ@S$I-<0)vT6 zB(q&0*;j^Smd7qJD#pZ9=t4;@%*ZTaaA>>B0=lYj7pHFivetMQx5-2T_|dkiinAs!3y$sNrQoAKvR?uQnll5)RI})cx6$y-I%l3^O8xJti%h1uW6HwTMe0>9% zJvbWzt7r0s`DqbXH9$|3gu1lBRl1qP=@#l^kgkz<-pTKuP!A9^f(Zq=s?-k2l!CaI zz7phP=fZKl5;LQpHNwbmT$1EbFJ#SR2b$Dhvqth|P4TD@T*%svj|`2B<1(my6C-)_ zF4i|Eo`#cc4HPi$Sl!p&pCj$L|3M?eXlaegCAg4v(A6I5Rae9Ti?hOT3Vtxd=5s9-WMaB`FgVXfcr-L1)=)Qr5-#U7D=YnYJ|{%y2s{e3K^_n=ZKX z4bn55)1}S|UOWeTSJT&2_1!bx9nOB>S4=PuaZ>np)pj zcx^!nm3l&fr*_$EIXzxzio7q8r zNsFKl+Mj8AO9}@tUHtvJ)^uH8s;+OfZXnaKBUcKM)+5g7D9hOo=`7_`@{6y%xY{(3 zw8LJ&D~E0xGp(IJ+WzMD<)e^*EguHsfKKRk+;w(5sHm1|bF1@i#rg-GJ?YNfsm|SZ z;{RshPZxgPw%U0#={b6B`1^-ejL=xPemGNEo389iRd(GPy<52<)3<@_Q*4yHh4gEPcy_dt( z6DzBN-aJa$N_wl(;#TAR(;BXMYp#~Q)M>fa(-$x2?Z`FImqy5!()^~o{H9zJz4KgK zSGslZZtGyK8Sgkv1$kF(x1@VPgPrT*pbTQ`$~5$+8#bpJHm4iLQVnCP4dcn<&!!rl zT^_%0uTI-LQ}#~GI{Its`@EDU54M_^;jMRVt?bb62Q-J*rJHu9ns%}yz|cl1G&O-_T3(>l)8@EK>flrx@Hd&=3K zbgqZOciPpFa&=@pJ@*?s(~av>jq6t%H)gu`U~0QNF|{$ucFu*!z4u-9X;)7QCT(kd z$#r{^Pe1dyL66T6>z3zgk@MpiZQFk4JFpq7{(sNys~)d5sBCq7;VST-?NVO`Q21qR zF72Em=#e6ON`>0S9?(#fjg@zdE1{pFovEEFvGzeIRl49oXc2k^q2&b;@rqDS(NI}B znEwrNiGy13fG#wm4W!sm@F29X_I}oiGLkq$(ZRKBOgHaNHSZ=a zcVouMr=6WCXJ^vf$yiO2l2^Y(1HMl^!=w(hQT!E@yhM&hhiDK{N4}%v)02;l81B54 zWF?PV)<`a88RHmCQsTmp)6Bfc8Htm4kaA$thWTg;Jgx*$)(?t#NScO<))M0#vRI65 z$b3vdSWm?=DIseH6BRNaBidM{m{5nMU|dP&V?0gfGf)OhU&}JCJP>bcQMKe+JGJCm z#n_}gLb>%*yIAJMDytSq=eTLg9;P&GIL=eT5_+Xbiw?OjPJkN2eUCK-+Eb#9V%o{s zNeNl?9Q4X6rSew`Pl7sZP;OUF@R|Oy!Bzg;+t32M)8rv{zDEs-i%0 zo+0vXKOCmCWPs9=mGiW$bV4Wc%GiUJjw{evY+5yTz|P~9gUd6k#->bT3lx*;R*fxC zCLzV9wpC+KrmgGBk)#`{NL?__l{8l0L=JN7`EDOtTuQivk` zq@AV?l$)=gRG+r5PubT?T1v<#vwMHW*GHbd^`ytr(gE$IOm{#1b@j^1Ev=oOZbnv2 zYlyOx^qHj0NuP;)l0FmpBz-3GN%~CWlk}O$C+Rbhua3hJq4V}3r z^6^|N#li;168_T_1Fb)I+Rea+RGX--B{* z&V*ld1F|e7A2f&Bau)JgDN7sq>{N_{d}Y);C;42|JU98usR0$_^H2jQUvv^F`M~$^ zxbA@7G^G3DxUt?OS=VBdY7)~>eE@Um(LL;dtKF9?T{tS}apkCiCO@=mjFMIk9jAgF zkCV74buJ|AiwMuk7obV2Xi>U0PX5fxS{~Ty(7iCwUze{D%$M#k%&KgJcxhuzn(l;L zNijcmK6pX0n6&6!vtj|f0Lj>yP_`c<6eX#8657H^+@cGbtzg=WOE9~EeBixE&OG{q zSqUN~L211?e6(!bmG_L5QVNPZ3PV?fZ71=cJtSBox(VrZ4+Xen-W^A%%dWJ6pY75P zy2a%l2j!s}^~3>pqh{|#vjn4AYFTne^og=1cd=Lrcb@Gzd#od2i?tuDtI>sJ>V!j1{@HTh9{aSWChZ<6)4xG2s%uakr9t!Y!z`eZZi-yO_BTg$oEi zm*YEI5{{zg%T)vCOSt+yQ4V>BCs7XDH|5173%Gn-?*BS&sXXt{ym~BKM9L+Hb|4=2 zuarO)1*Q$4;$TfU67GZ(Mo_I%JC>kXm9UEqd3Taj6q6_jhIcJW$qBncVZ%g#fR-1b z!Q;HrPsQj{SL>cp*yqBT+abjgG9Fkr@2M%;O)wA_MKI|p`I7Xvv# zaWn}8lx}QNIQpVec!vJ6#~AgZ+Q7#)Yfl0v$L=$mXgGhCt^N~Z?K9_vq^d8})P=$YuJ zY$?>iBn>h8Nt1LOOi8o?oaDn;eP;aZYlj2#MsR39W2)Ik*A+IbbMr3LQ?yv z?C&ED^rRSN$_UH?W+!SCGIX7_EIq;ylW4RPtuuturqw+&n{f92^hxVrX z_KIrMS_|#S0_tbGL>!V%I;KU_pME*# z)V3zucC5^#JGP`cw%m@bcI-&j?p!{6-&TFodJnv&#;)a~A3GZ}4tK_dD=e`yY|glA zGoB{$)O50wN)3-HZLX3l2Xl3;rm_!h4fpL$h@5t{rCe>dJxN#Fs%uMf+hMSRz{fIk z4o}+Nl(ILywed&0-rRN9z7CnBJ>7Rb-5FQY%6tlZ%D&C%zI~~_eXD&#%fsjtS8Jw! zBiKsBSM=UIkZj-o9t`ClzUw*h^AJwkyL%rYTQ68u$lFrHI#!*Xh)x#Dj27#c*n!(?Kf_^%vW(gFYT4B? z(jGHAaK(`cN1aH1_r7=k)=>}l=brk}fwlZA!hnnp`d9Ek%R)DU2~zlIS8Kx5mqrt* zHyHtQ8E^Yzy4c29rb@y<;mZ5mc<6RI{`kKn)l*MXi@$P;trl zqA~BxtYKUPN03|GJA|bnU%`oci*b=R4*9cnF5guN6($9u(NW2MJ}&_UKwt8AQ6CAs zY$o3(a{i8-$8c~*4}le?#00u^3Wa9f68wSGLdlvfPDl^vLPHSWTKF`wC^%X#K94+@ z^WSKV5`e)PbumutK&ocowsEy)Gj@9SOELKE_ewi5-acY-7;UDq`{t@^@nl1Pa@~;+ z%wu2Px7B~fSt!`{s_m*RV;|4h8^Cr zS8w=}rhQe0pH`XReZu4&n zR|yk1h}LmtEPb)$^mD;G)4eBMHQdqx!9HAI9aTJIyw-F4B*xlT)sIF z6fTnaJE3o$ZVTx@AD<1klISwl$M~RqOd8uqAyU9%-81qPlk7%&((bDk(Q3QWnHY`Kpv{|KsFbi zz7Ps8NN1N>k=b&pnj{hpC?|eP>1I2mFXUxHU!Ps2#ZpoPoP3|hI;#ScCw2q1!V)uc zHT5?xU%&j8{zv9F&9`cPvhjB8kGK8F?mybSx^ZZgA6~523#jJ0gZ z*cxycHfdY`nE`JPa4NTbbJDgM!Ua=p&Tg=D0l=H80mz-T8Ee~z&71G^{=D<<;L|Cj zJ9#Q;^^>`mZ|WYHZ4XP0&XOw!fb(j-gib3nw(=|EY~wnK`l%1iRkr$Qt$>rzhOb|Gi05^^Ru%HLn@PCvF{oAFo_U~(|m!+W$8*qEzVF_x#zYYwn~cb z{0lbymkB_Uvym!Jy2UTUiqcl8X%xN&T&YOyWmacxL!aQZEB6!-AVQH3fB{!)=AkdT zuR}#w$V7e+sv<2V49o!?Y=fg-^b}JBWI~B&Bx}oLdmzNqDwZ}m{5cr6fz?*E|KyDZ zG$`oaXQ)n)KCN`EA6BrmR|1HMo+HT6FD=6DC>Z@1#gC@c!1PkVQvDf)GA`wowcr0W zr80n&MA?!OD`gPFOyfXIO2p&eQxbA^Q@<0f%^3c*tt*?}ZMs*p{p!g(7q5(d4C-uZ zWfKX7Z*TgO?SHiWy-oLQ2h+B(lx-|&9Al&8Ymo?N#?mF~`LSyaZycLAX_NCU8tP(P zY>oM>F{BxxeUK{2sBPve#%OM)OplPmC~y{!k>Sk8wmxI@mA0r7#ZO#k#%uEF$V5M3 z`Nbyb2=TEI+PKhG;`j)ZDh}b=tOQSu5vM89`&1nw&GRw>k|OqY6hB#us{J6&Q7l#k zRvf`f(L`aigGT&C_!k+Z*A@@TDp0AG22aa|D&U(0nG%?q$H8$xU6BS=+)1S~Rh53} zIxXpLtx|b1iA8mSfvQ70_xV(s~qWxk#cDfg(93P8}PO zws(id4@l+^h|J4cn0-^)$%w?p%DRIlOZq#=t# z*6d1d76Q#5*r%92J0F*{fh%wpsw;|=4D}UBcqvKrc*?@8oIn#>=oM#VCPQ;l z!&)h38#$ziDt3^==0O*HStF||F?b|%u078?Iu0I)Ffl)eP{z|`8&yUL6Pjjdih=xWwZgV8 zoc9bmt;H0N%{y_tXg(a;E&e`o!5{vmXElukGP%(220vdeb-R^k+I_=8T;JD>3kn?+diTg&0pwCb^0$jau7bGTcuEBv-b;q ziBA7H2j`12PB)6Wk>R(BmMhLodGi$~{G~Nl&ZSGLQzg|m&8sENR}2s8yeqMkyXOk+ zN}b;2^RLccoxM4{(!BEYYFXzM+XHXM&HZm2e(i9wb7a*!n&fI9mFzX^YOVzyarFCW z)OE(F>$(P(JnOJ8vK$(17Xag0FH&&ph*d$>Q}<2g`m_=_qX-2Vrfzg0#6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/connectionpool.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4faa4dbed0235f254804bceb23a467e08d5a36e5 GIT binary patch literal 39740 zcmeIb3wT@CeJ6N903=8N1W14{@OAkT35gHMl4XgqBuk{8mMB@G?3jrIg1na!C_I=8 z&=OhDmEEL6Wt>`SvXwk>zsOCdrpMliyR+YnyW82=Z8C9ZzP6;u3=u@xDl?vMzwC5( zpipTt^6qwj|8wpOBxF0;o&CPuEkvDr?z!jv_@Dpl{LjB}yUPUpF8*yGa`8<;`1kap z{ffEAvi6`z5N-&PAX%b9%rauJkiRHeG*ZN#))6av+D2^bX&%dvOH{2SIj-)hTkp~N6TZL5fAg1M7^k*Zkr zNOi1cq$XB7QX8uqsfz_h0mM`Jrjb~1lO^s(5kkzLGR8QmT0AL)jt;~IM+Pl|Ts-+@ZFr2QQpx)F z@W^32YobSDM@NpbbhYTyV>~6J&F|cQp=e~7!S0_@&OuAo8IH#jsc_)4Q9>ICObjo?@Rp^m^9x-FaF`T&4^rBImOep-W15Dl|nwA(={~I!z^%RA_7_ zlpMbx$K;?p>luh9lCpFd(X6XhbS8u2rXu zwTXZ7o`9OHIS+> zASkPm{zo?Nm+SbR#@)w&J-FrMXPyTzLHiuQ~tdyZ0JE5 zriGXmhZ1o)Tg)NAxH`;i$Oum3-Lm#BJU4{2CFxA5yN7^be@pehWJ&3%(w4L^slsUgo zvef&gMcIi+L5D)yoYF%M1!Qd$F>9l)%$Dl|##UC=9!*@5m8?qz1AMtzv$iDGm9m?% z=!cV}_F?!QjQ3qg#N@v7@ymUKa`Iv-G1YezGbY+|Fp;IUx;am}Z=<(gDY+vlyyq0`{8CwLIfMpdDR;_kA;7p;`hS2BHXF0zLxsx=GDrM zrOJ-QicPmB7KXq5?3>RnoP4+DJ^%OX-miPl{lQaPmCQ_2A($?G91ll2fa32R9> zE4*nLdQ(si}uJ|uDc%p#;&4Tvbs|lH&C}Xi)IHkFeWnmgu!@P0kUKQ z^+^W1rARV77L~=+1)0Hq4(+I}L&|aFxW31glL(ykuj^~p4{>~1qpo~WVAWKP!5=JU zGb(Gv1Yzs_L0Kf8(&4Bgr>2#7)<#e@Sfo6I6v{bDruw&%-=PfQF&m)1{VZ)?Iu`ew znvrsfBKY&ZX`fEBPkBhF_KAv{twOc{FTE!KLX>dyvxmdcr2O2QY6U)nD8X{&5FWr; zL$QQ34TL2Gs22LdbU4Zv4J`~QF^<*4fTAZ9GNHqWYzHbkEoVzlL?#kXF|UI?2BJyj z3FNFCA?HbQ2>h@<=DklVgRMPf2l>bu!2jfPaK0qmD{|N!IlmBSx^j5___D1rBx0ay4E0W@BGF!zJ{naEIUji* z$TrYqF_utdJ+p~OT<$rqgz;cIMoLLU#RQ?xYPnkTlfB}B34l#jG4uj}{PcJVb-AF@ z4z!Vs$#NXi12mS@jfm(3{Dq^J!ZUb?qlN327@GtgpFdAy;mb+TZN^v(O~=MiI2vnA zc63@oOopGQEe#!u{ze5*Z<MMx} z8aevb`Mfa}toK;uIU%L46jl+VCr~-HKEuki+zr}^)rdEBbX4s*RJ>5t*b)n;^lk{V z;q4WlxqyK~P7{i31}7LbbYl4Va3o5o1C1#@6CKIhN?oMqH66#a!!R4=(%j&4LXo2~ zc5@61TN*SgG~z88kz`Sxn7|w$Fr;UPX_ShLPe;SbLq`fzTSol|F6gA>r7(vJXledP zv8kZ;j;W4Gq6;|@gdv_%WY8R_NHmd<2vx`%i3^Nvl{ChJ^Rd`GjKs&I(`d;hOeuzi zsp|(6_H;Zdg9J~Y^H37cgLN#eNdrd6m#3nU@klB6;8PlPeEc}28J5b$E_kx@r^jpCdyqfMvT@{EVZf-3$()Nr)vIGg;dWv<1(2Qzyf5kZj6mfzm@8diH=QfjbCBQCOk%gFfXI zQX_tRrSv&OKvJvR1}ORPN_}qgW}3vIi}d%l zFKj5xSQP8GMFX&}@3nPlOzajwB^CT9ITjD<92@WK4jpgKM;!=x&iiD_>$$9ZK*t|| zrVc4YKph^}nGSff<3HXlYyTEVKgd{)8p55l>R#QG216uWq_M3nLW)weUm;Q#v5Pep z2;%AtinKKaREPhx@5!oEsTMZLL^j$Rf2OT(snpz@HC=MWn^JLD)UyEJZLTD31xrLP zC0&9yJ%3P!Rr$HoTiT|TfVg@OrR{jr%St=&rn6zvrI#(qB8w0Ktr^m5kuJlVN6SCe zqWO&c2ZiSv1!2yGdQ@v)jpt;W;n#eU&Qh=lFE`s53n5gge+5G!H_%{&P}osXB6L>jNCNeLsBqaD!vuympONe zI9BX8*{k`CXIe-RoymS_w=qY-4zmv_MA2r;lML+(C7AFanYA;(lXbBNvBd#(gLRxp zdjbg*nuyu5NK#vp%4QZYp(J7W+{txg>`#D)L0u z0j!Vl#j`abM$dySpNN{X1075pA%jJv)>_>^l{nR>M5|qt-irA~0!DmZ)xozn_nbno zBWnpMF+7vB9tdwVew+e+0^zgu`7rD>@%1#;-M1+0p`=O`qX6LsaTk&kUQ{A{)-L+KRwNSHMy>0%;U1#O|{yWw6H)7Xg zc&ljwm(P{qkGs1b|Bm~Q-S3@W-ZjK{fK>rJ%I;Rx(<9Tk<#yw?1!dm0;s|6Kg7mDr z4|2Qa+NG~H{Ya~Y1NH6t0l9gZ*|M#OIsdS z!{U0@=4{jbbiotd}YcL=54RY&cTqxPnMrFrMO;8E_~$W|hd3ove3gXosA#4cMV z5w!j%S!My$#*0GwhZLVQ~}Dsa##SvAQh$!`&} z%!r}+B!J*gpD*I-;9AR}@FpSIUc)9a=`~_$zHeE6$1-P0TflKGp53jZ96-*%<^p<~ zj|b$>WzfRflxMr`Y}Z+cAyPm%#khQl(|yM7FLrfE!G5tL+24`O7J=Zku3MLkffOuN zNCK6$Mib|=c1a$aK5vRfY(~C@J!-}wmD*%05S(y_Xt-rrar#<|&H%?qXvFhKtkwcUEW<3`DG5P|AU%p%3{lZR#7z@={SsUzvs07g9qrrEsq(?v#!W zAy=E$4$Ade;pMMg5-wYx6)stV#o<@cMf&nN0@B<}a)Oj4Djd5jUxl=>an6RSEI`6S zm64>=wJN;$l-~a(Rub0a*Ri(Ka z6$S|f*N8~==IbtioS0ywJ@ppVP$ty|$~Qm10_`Rq#Hb0J4b6H8E>I>6vyghh-zRK= z0iW5U+DE+vj2?kJQxAcU1F0=2O_CC0?4)V1N)jULZE7(X^K$R32z>=P#XzR2pJ2*^ zfF)2E!Z8%Wa5@3-Lq z^fJ7NAc^uNIGRk8OU+6{DCc8)rP61phd=;u<9Adi?6~mrvaF_-=bTucdChaQ%hln$AT>=P&QK2wsM#9I}|o ze9yM%8vGE#h2OaP8$T0@Q8-}h?3ZWnRJTJ0n(=>r&2Fu!gjk`rAy;CpXt+nnO3sal z50V72Uh6#Q7yi_Lz%o#4{j(Z!$IT#EM>c*3UBKjTNVER;V)H}6tPXmNG--=eWPntX z*`+N?McOi{(`QCp4XjbD84Ez0P5TDmWVHwYHO(m5eAl`WZF^l5;q!Iw=3LqID z2k25dnlY(UYFhn(P!Wow(`-gKLX8*QH(8^5b&uA1gYH3lZMPdUItk?*_XdUN+uK|Q`JuQ)QdR1Wq7>U!0Ld-UjD=;8NG6ATf=l~Mztb70z zgNhgcua1(85;whH3)NPaCTSoT2zahlmS9piN>Y;<5n3Zrm78f)Pls8oG7y)JhZRXS zVBnZM9wsK+CGaZ&N@aW#Rf34|j13sZcMUxU!Ue&^j}ya8ZxE^l9yI53Yb-VZJ@64x zMPij2yTiIhaKNf=HPkwzV3jY6Af~OB-w*@o96AhDe%C~161y|X7w!%H)QI+=H_+IoW6Mrs1gy=M6mOT$?G1hQQmWPbrQ zQwW#j(Ah?sbzD-)b`nB+7=#8z%XR1&l!ok;GE%;X&+AZFP|P0#m9?*%2rBQDvZ@90!Z%PXt*W4@Ktr>6iyY1mS(5 zbiihP-+5ps9)D)Fz|8}`h{y3?f_kJt5G;CdPM?qi;Ok=!D3S9QbR;8;waCOzG_Ely zZFY-cT?)h*C2Xtb5)ab^<1+0HLs3q;5)ldF5k4L*g-D9LC{JNflws7D6RzgHWPNi4 zriSp)lEK>t=N2l6#Mz!LSaM#Jr)fISMt?=P>)=xIyxycv#CBv^dj}rU0wdN2|4j=@ z0AP82W%02PouGl`vu5_E#lX5XT$pV+RH1c0Q+l0!S%^kX>zZkxSuL~uN98EVKA7-K z71D9k6l;6~13OQq2vrYa403{!RAb_@5}|<2qr$SM0(<<^g!!s|=tOSvv}dCx$TQ zG{jjq7mKS|DNPhs0zqFGc(p=$^U&SZaCOqBjwh0u+LRTqSu4nqtXmyl0tb+8(}2)! z&9Uh65K%MGzJweiKqJ@1};cmD@1 zi}fegtVO=^yT0n2y~teyFzfPN+kUfT#VOu8`^K}cKfChC!KIFapO_Gke$#+u(J8VC zH9QW^nErFZXC=6B8f%qM+)v9-1H?eO^}lqCV0u|X{2fS|*fcD-$TOP%>Zo!yf=jQlj; z9HG-YwKwCLY)nIy=OUnuQjsEBjQz0otWt5>i?vr`ti6{kY2;#V1@hdZr7@lwyqv2@ z7pE&iG=teMU5dA6{Y}7|sJ*2QYQD)sn$LJj5cw1ml_2!65lizS^r+@Ho~+L*CXX8- znlD{3c|!9WPlOH`Z<_Bdbq7E{S1{g31^SH15iiczO8qE6*=9+Nn%yilqM zogb$-Q^t6eYcn}72hS(e%BX?Pb5i<2-t9skv}*M=3`v6PmVP#0cb)aXAJsJYI+G-}IcUf^SAp7-NtS+F#`3qVXqT2IRgxM49dtRt!k zV!kuY3XwCuOyq|~fu_PxF9%hYh+*3^shoUDk~WVj=D9!x1-eOe2*DtB7>S%T$T*eB zN91Zk$|sTu4boe{BZyt<$qezxq2X>3XKBbi2S-kg_Xam)i^k^XISk4W`WwVM1DeNr ziHJoFp-;q36sD$Xl#pifGZ_r0fKWiq3hMZvO&Kw*JY&x03aH}!3Ch5mt#B(?`(sSTEi1hs09-HVP#lxPH;nesA-uJ{*pfFOd2gR#p zNvcw$3&MB-ATppA2sJo;rc#yAQ^3Wv1mlU=R1|t7K-xf>L~(QueKW%{?NJY8jBAlM zjulY#e6=7d0Ms~B3S!D-B1FQf(wrKZnhhi|aY@7A`+{*2@zayz_!pVRQ(~ ztoICM2^J8W6pX7>NSiTl0GMW@6oIxG<2;d03>32_SnZ%=We~7>8we8?ufVq|cN1SV5qJ8W76;p4$ut6JJ znt!T}zr>g~R1cl!Ph>j7nGJpxwJ{Ql$x;OLIJC~h1JPtc*XUy1!leorq`YB=00lk9 zb->m&l0z8&332$y>Rc&Q6=In@-c~>Lgx3H48>ile@$T02FbOu09;~K1%BBm`&C)2K zd{Bn2(~miIGaXk2E0ohvn$ny~av1v1n7?@wNQHe^<22ASB&N_5d%FN0RR!T716+AZ zx_P;13rt&IdBnA8#8vP%eqlO(QC_!YpgCLtRLz8UGK14J2n3t~ju`umCl^!DA4y{7 z=T(KBvO}z1@f5-FOCY?UvB*zVJv>V)f%K0ha7gpA!{AD-PlBJsxY=t{Be6x ze+0XfBt?9cN_JyS;oLcTjzlJ0k*o%7OGKZSLn@5Y*doerQ8Ho&Dqkb#_sJpNgYr!{ z*^*Od4-sQXA>qCvl0yWFLi7^n)t!egTMf>QR-P<{a3q?sM-@We`4J~*sxc0*Lc%Q0 z;3+$F`pl`}Q*^99TXtyR)X>nGLuU^SXI;cS((0EjrBmcg48fU1PVn`#^`JzlaHm!> zCVke#&Bz@`4i!np2tT}LwA%yr`5mTh8yX~mE`P7o52}ext zRtHwAJC~|E7fP0^x6V5=4&SPy1xhw6jPu^LHk-Q|+^|(|+mg5K*5D7k!Q8Hz(rOZ3K%WeWrf(kS6Me6|@Z}ds)289(7jApRJJp*Ypt#w#*s}jU*Sjy^ zyl3+%u-YIg7K$LKfMBC*e(>cJxnf&sWu~TnwWf2argOO_IDZs*G_=h-RvfjN=5Bg6 zWa=8{9WR%EsOby^sg6%xeUcuKZ|jfBjLVa8`MH)HJg=O(dWyYwEV(-F`^un81mSw^ zyyutqFBJ(@t>1cl(YKWZGe$owSQe7+wST|+{q99?+lu#8##{9faR#eDx?e81{dZhV zcU-mXui=i%pL3UZ%YG(Qpf|mw!guHn^a@*Ei>`D(zSy{T#k22Dt$3^A>&|O-=mB~I z$n3R}m6q-Q?dQI`Yq93UeQS}o95SGrgWov*kB%>-R{M_M?mK>`Hn`A%qsDhJWZ7Axa`!HkTZ6<}nimc0f$5TyW`RZJm;H`M&($!0^b*u(9 zF9kN=_H17G!nZHIdFf9&R{M`H^;71k!QcI763(MNJA{hH*Um3`HlYVF2Be17yyR-W zbzoupyU|5g^NI@{TtTfbg-nTn!~2aDgZqW|x7HnP7XEa<_t@jYclUb^J!1V{dGnzj z>-T!>Pys1N)EGSU;$-Naj)p61KuSGlj<0^X-B{Ie-XP$lzFAviXxB}Tdm{%-8z9U)2i=dPzn3NQ) zS`0Jma>k;ZML47sOh@E0_wU0a>qtZ;28zsL3w{>1wt%#PLAYM5*JKY;Gvzl;a@de@ zRo-oC{YK=~$bx^-Q9tjv*8a61rbelF%kcw8aHB+vpgHPmStHpKiIfVRPBsh-D3+Nb zlQNbr-ub+3u4v9WXPdJ_51!P#pnnbqO;OtRqT3|Eu%(OMw(ATi8+ue{0HYr2PpM7Y zlhvP~cdx6h&DrCd3g?pyr0t(J7sl=_l2CszMZrd%AQep7e%AdETD~p_uZ7E>uu`r} zS#wfHF9rxF(UhM!&uElRsexn#z8Mx{vPM8Ngcrx=Rb>UD8X~$q3Nx}vECB=Gcwp%p zR>o1OA!Qd_*tUUf32gC6I?|#Le~w#NplwbeoeyQ69AbnsnKpzjG%5KW#zJ4vK5>%@ zG-7<);oFT1n{JYh_mfgZLGhY7LO;#hZz2oKTZlqDuk5?J?`GSIvk5Xb%+rqEh4F6= zEjn7}i?3O(?YQZ`Wyw_3+^%T3xpTfa#>+kqlZ|!)ec*XbF{2-t_P5m$Les%bc zuSFHSO)UF*t`0KY&EKuNnflfXtDU=-I(NUjX}R;j?dAh0XnydnxB8~-rnKm3Td;lG z`KI%o;eYY$A3gh??fa$gmo9c5U-BGZbR6fa#VnGbu?NCqS^Ib32>I_f$<|Mp$99Mn3eH!9wTYQscBLroo-0e2fC*bz)S|Z{ z={Bi|LhP8fYm9h^Jc7Pg$}kT^YBarFBd({&6jq@l03J zX)Hj{8YYr+LMT_4cBjjwlGhw*4^v_fNRGMcbak>iU8z)}KA$yGYd&o(Sg%$hzAx=V zTw#)|6Ri80Ylv1VkuSJ;*Yd+&CxlpGn%t&=Ds!IN2MhwkIEl~xF#p#lX5{MT| zxqy+i$o*OgZ_!ztDZ2~}J&W+0fk|0QZ9KKs%r&GNl&>Ssgz-)DN#$%8YLq;4)W6mg z3BTFTIHNUrQ42Gkdfqm)-9AZJ#=0MC1=K^{_G&E#Gzd(R_%L^lIpG>a%h}U$$ zm*XshmHd$@smc!Gqt=;L)gT=`m=*2AewS}Ewi0#I~vM*D6&C7)Jb z?K#(omi>kiL-V1J3XV#;QEP(||G&9^pVi7Xp1(r>`Z0g8nbPlLdza1MPww4xfC+DP zL3v6Sji(5YV801#yP)ivtHmnZqlFpIG=&#{$c5lK*1Rq%G;(;mSnF#h?zPO-zEGPd z?j_8G{ZNl$Kn6e&z+2x-Lh1?igJ6iwO)VJIzZ&g3tcU5M@zilGY{G#O{?lA7LGyI& zT)k<3u1y(v=qd9A#7DGT(zW`mGv`oms@VxGuBin^%?@f`Cv>b?*#nrl8~srt6JdJ_b6~yEx~c{UL$Oe{(2yPDh=auTzI*|5T3W(AW*FBq^<$ev)$gp53Z*9(3uF>OH$scb+< zOcNx)>%{jsbfAgT%*85DJ&Q*5+EG1}@Fj4eQ?MQZ$(sJfun(vQp-IeK2PC4gL>yYu zV7h~49-g8TCklzDs2I|{W}Q+!V4Eas&e}o7Z5g6 z=nxUr1Ogr=8Gu$g>@$EVixx*F%q5PlV-oM>M}d$~*A~}oQV=Kb(nWm>UF3H2N7s>Io3Qy-FfW)qS&cnW|9jCn)hi$ql^(X+w1qeQ~A zovV8Z*@T1WQs+HxXyoW9KPw8WXSBJ}UI^2?&{<(hGqmNgb6}A3lAob4>h4We#PaF| z`Dii%%RUe;%dp_6E@r0ZeiUp^v(;_Yw3SI`hLn$R#56BM!YuSsvAb&c5|f4E4X0w% zV=zF8FibBW->YXGeCv{JwUQD`8y!*Ieg^+f2Rd^0@G2`KD zw#zU{z_RBGj5JDw8%Gl6Q+DbQjv;SSD0rBDhe_jtTCNF!AFkoSPE10QkjPW!GMARG zRj{F>|DRLuFeAYms-c>{Q^ym!j@*v7$sQb;xKp!Wv%(mP{PEs!jufaiuz7+?s_qRb zt8oQEN$euUIR-Pdyz>!oRh^K|tzbL=6kwZ-W&yzmrrc*9Ce7SAnU2ec0UPjm2Ce`^ zhgCa<01}3=@lKRM%~dA~AZT6_%|&8nsI|%0wtE(Uh&4+iqX_Wl|^qPmHD~Kh* z6?lxULL`KOJOTtKn+H_%r|x*BtIBm*VOfCGqDitPi@MGYRwQa*Qgs>~&8s3e#jc`N zs)`ne^BcDawzB?zpv#5@&$PWDMK)ROBiM9Wz5Rd@&9Z!vo`6Y)f-_UpQlS*LM2P)R z-L0WhnAi2%zK$6Rv&I~2V0vvv?+r{z zKph`?1K**lQ;lZ*XViY6dO)?SXCK^P8E@tXRA=vcmMM`oR@ zZ9UBB>TD@{VGY>N#l|}+HtSOoOmGup4rX%<(~p<^ujm5_p_K2D(?HaJ4Qp{3{8GvFNKmQ99F2qrh&^WuFMF~)Z3Vxyx zT4q`{*)j=XaW*Nk9#)AEB?h2XW|(yl(i%)enan=xfMA_{$$IphILaPu;zIoYjwy=IB$;_P=sQEJlWsK0R)Q{oJrve(_1+q0q695dXE#9y z-WtE@(iYU3-Q*%Ew@`&_**KO$oSCgx{)FoEFUeucmCgD8fg&MGzV`L5&U#3bkaa+a z9T88G;Fkf5hdNAULHQx#%?1jn)~I8Po0f#+PtY?s+&N|ys+(^nzxw%k*k9{hZR}lY z>|JyOm=(87b>K$ydUXB>xAykviYG{h-Qw5dx1M?D@(2FEYWVYpmFlPGVe_qK(b=4- z-#mZf9#j?@ZVj%sKf2WZ=sV*p?fp3Vd27dlZ{hrM<<3RdPSR;G)FSRw*1p!XU|p{3 zUasu9I`Cm-?ajb9nqF;MuI!p0fKD82PgM(z!9_>iht2y)PYt$LZrWCBgG;r+#VvcG z5GR%`IvVc5#8rEyx{<2;)%g68jLY}R(AA-vJ67v^mg;*}T)oVs)w~st>iYRII>_8{ zYj|PTvTw({BWIH>r5$$zO{;+|OMxv5N0tLS=AWcf(fh9NTj;*FZ<&-a?$&Qwt>3v+ zzmu!okx{tWtFw!qj-}1}-rMp0eSf+yS5#aPfYRQozjMjoxnNuI_uQ)%f{(sB_-_0B zNi@86^R?7!O>n6u2)#kBAebw0*OsGJb?t_#AhZRWws3{Pdo}dAR`505tAh{9eIhK@ z&mX_{d5hq0x>qKU1sT->LZ-g?+F+)=Yth^C6A#(MgO#uH>*Y67Kk&By#N+!A-A+1x z-hua?`CxqU?9))6gA!t~;1{p$p!46V#v;|MhW*uMykgGd^_N3AuTIP~2I&u#t7}m! z*GS)*sB+EZgGq+++$N#1<95Tbh1%8Nk)_~~<=`<4-VdD(8BYzF*T2l026}!buphX>w!|x2d*R^=&>BYd7<-jxe3^l?k zu4%UdgMBU^*H*lBbj8)9+w19G7+>5zxZ*mL@im(o*TTBJCRa+eEu%J}DJ|QmO`oc9 z_csak%{MQvHuo(x_pLT>Uuxd|&dKHGgUf+|c~8b!x$3N6a@OBGeCy~Nr(QqxPH4q> z2y^0BY7H}N*tOznQ`>Uw;;ro~E}X(Qx5M{;u^qW~Rf}`lF4T2=>-^hui#2c_+mG$T#3_%WKFPzi&D+X}$I6JGSq(kq+yh^)5bjX6fKrG`*&4O(?1Xw66WhJLk0nJX2%Eg#)KgH$c(easVIVAa=s+t;1(H*g>VOH>(u zU8bh_cRlECxA@WhC-P%&zU|xm(AW=>DQpGb4IC&R+9iB1SaC8ae6N2K{C{3nHC!e9 zoBpbER^cy#{-H;$f3bJ_&{peTZneYzmycQz=P!5lpKY=J)guG#XB(``)x~Gqh2;i2 zf|gsX2@^Bg%{E4>F*<;^#x4a@}#}fe2Q^qJmm8Vm0NNZT^Ew`GvY&xhnEi17~6-V5{&q zt<@oHZPrq0_uubow|A|bumtUO(Cx;hJ8NY{cK4d2%-)x)t+3bJb#Kqv@kEVKw-WL> zgxc<0Dfw_+Px+dYd|QRKPHK?Y&hUUn)!*Ef>D-d5PZrs0@0N=>J9&^(g+Euqybj8= zlzGbp;95@Rby1_-%!~Fltj_tE*Dus=%T+ONH88qd4fECtb&a_? z<_!of9lQoGomCcCYoyS%Nqd=n^IEOn{-hE4Z$R+% zpQbcJ$MIkP`MA%rb{n350R7~RH$#5X4NB@QL;8(M^giMH^==mWq*Rh?UYM}p7A7}t zVREatFqPvDCfq_PdDu7S7hNNWb=flFh912)>!Y2*bdvya<-_$@n~Y6#mbB#|Ytm$A z>+U_E$S@Q@yj_-!$}Y@{ZOVI;v_HVj<#rZEM^%mr4t(QE38;v~Q!u{D%GJM-IEgOp z0(X?e2cx4DfEUJI1A{pM<9@Jyl@M{dEHW`;Vw$Swz?tM&Ey$D^lB%q5oaSa}>E=>Z z-XNidYEy>6LK_{uD9^B)Psujy=;%1f$cWu%dIkBNRA0j(ia>8_Q^t8n2*fszl1xTJ z>S;J0K>3p`r%PxKwG@15rniFbB25)oM})13Q6%GhTU1^*d&|0o5=>B3c4rdtMf&Lk z1YN4g?-8OB*$uhe+#6#xPfy{>Ac^a;^RWoj4E4**ZG* z&2D&GH;JBOyNGrPMU}psn5w@3ev@Tw5rO}e#jNmuwK^?)1#HKB1z}QNohXe6=_*ol zCUt2X48ru}KXwIzRe!@_0OQ6@s1pkz+Gg1=4NEzORiU&WZzcLS58fR5n-_1yZeqW5 z1>VZ^H>gXSu8i>E&82;tQL!{PcwN&FOtGyq>(J&-wp5=ts+Z@0>@B|`oi{&OLLO@5qLtq7ipZp4<{Su6&twL$})e>0B2iJ!E`9Q0KE@Un| zI4~Eu=X2snpYsI5nd*GxaT?LS-71_u7P4rru(VlHP>0Qid z&*olwZ^*RnpgTmH*=~|&XRsJmL{%+o|06sPI})cfK;0ML*Z&GBl1dh)+HQsFWl(BCWx6{HTFIlyF^bnY)W6?+w zrcy+ho?-V&n_x2}6G~$G`~|MiNN0}^4Gi}xe~S{>K`Y?i3?VfpCC$R2UHc0 zhI&=4vX>I}laruN?BWcl`Duopi7bM(I#vsnshVf@BLUAi6EnQ3Uddh%{V>-14816dVHYwrtWFrQr;>bmOsN;#iASULKSSnF)^)WZE$jL{j!4+~9=|1y_56rMut zoJoPHW!&xqbDK`Xd_0WDt380zQ3WS3oe(WFh1qogUcK*h&x;2Uzd(4Q#qnbIr;p3( zQ7GR6%WJOap;uoNvu#h9q_JN2dx*X0>UGiZidxqe3=I?vZ73K@EdO;s8A4Bb>Pl!(lAKjgc4T@YR+`)g$Eu6yGbLJWY*mdu`D2p8=r;0YAEz(d1{4C&%J zgw|vPpWo>bJiGo*kF#btX1>(Jx?{)o*?|FO_+Bl55K{(Km<=yYdP~R_p;Y{GT2gQ! zB?KL#>xI#K1Msokm~FLe(`8#N+jQA}%eGZxmtD909!Fnce^>A*WRiiC`fhy9I*-N3 zZZ}iM;V_n!`&*Rq*DRbidldj@o!qb~zh_)~p#t;4FtHhC8w-MA?S>LRLEr&^26jmM zp*NH~#*W4px}l`$W|e+Ji68fq-1fBG8eZ*qY^me1KiR+3ar{nYW5#=q85o7t0|*x! zU_^Xl_p7^MrUA04$n^+31pBY{FFIRpNpDQPKKVxC^~B<)1DQY*Z3f@yd$kXu9P`Uv zPm6IGikB`!X`nyzB`B0Rq+F25+<5N#bD*wQ>ozadZC)2#+pt>OwN%@cX%JT%wk|bn z1-ZT2ymP5}CoE8_pTzc6ao3W#3&c40+-pRUkeR6Wt2EP_;4LlNh^5e=vyJ91JPbR> zlmD&)kN66{n-Aav7r=0=|1k^4I&N)zeM|K+9HIblOzuQ}1-6J}Fhz5e{R$lwhy7kl zA;8XU`Wm(;wL>$&QLOY2NXA!@>Fm~XaZUh&fZ~f)(-XwX9Fs{QfQ)9-S|$Qg?414W zPMF!kRf70JIDKS-Xh-PV5D97`Bf&6E#Lq(wG%P(2i%hU7cUG4BMMgWpl#B+9$leM- z0xqOZ_C^wYa=ed}HkcvgyQqg3OYA-!G1pS0xq6M5E_s_^z zf|ZeVLO`swC|ki0mykKgp=FS@k&go#+BeMj64|NLF2+!?abo*D1WU@Z_Pv+Z=ma7Y zPL6AY7*5`FGqvJq2QLT$)qP)Pa#dI?d3gvSuxH|FzU^sVu&s9OyWO=9QX7(W+^s(R zUh4ZZ@6Wts}@^B>8{=k*($ zWX`K)M9%+8@zUh{4LJ<*K1x0Y3z?5#@B=Sr`D36pE-Zu3ECPei%*UXz58cTqqX$)> z-+G5noPCU_Ju7CYJAK@QR84B?=`Z z#l(MC#S4#6=sk+YuT3w=8D>c(iuoKlv}r3(kn?-w5Zq>y5RwB<+>Oi8Xebo4@L7av z3Qur~?&lPhoIeAcNgl_SUlJ482_|qrD6aw!xNjfvfV-D%#KnCW4;ai+uo^dQCgvmj zUEP^Schld#gPCAYrgc+pOP~Ew#v#TNQ;ayodlxRN-H90922*qUK|0q2z0eGA&dS2PCX5xQMh#680buKIvt3d8E+20wB@ zS2$z5NN~VFd6FI~RPG|s93_aYv+@AX@fW6xI+WBnn3i-lj&LuW4kKU=2+ve;$c#Ej zROsBn-dPN$^e7ixng9kQAuSBcR8`zjFYFPdP|mN8rEI`4(>b6ItDnXx<)#jii=nA| zU<{_haJ3P`836@Y&6rI}GOeavQEXHXhg(o7Y8k)nGOXR`qG~7OB3$zwxMb9msPckW z;i3m9W1z1nm|qR9Hq>;CPsg$!*2-Qo#7b(m)W7PvLf#6vNs+9;>UpTj_PCLo-=c!f z#(oIU$j!9!6NiT`hsnxnf4^}6ao@gu3=tRin(*-u)15|8-u5NWu7%-6&#rgQz_;kwwGkCW`5YBQZ2&b?=B7d<#hXRE zS;U6Pv#->H0A>p33)BRHJ6D9v-Y0&g%$0g{LE&7dO}Xybw=q|$DZ^f;;K>Jcz*<$F z@f^rjr4xiCVy^$0j52{2U6^I^mI_)GT;wEKC0jtC96^5CXZN%DH3Vy!;V9j`Lr?=3 z>0k}8Bb-VkiDkv02>AN!D1*vXS49;MET4T~d5+PYKm9xWfR61!6`A5EG%4c}H#qe0 z4w|73q9m9(umlvi*?y~d+1Ytz@Saz2xUSi5c&>YHSy#O63;u66zS;OrawWJ2H-lX} zaBXaUcHV~Bbmhs7-AWVpA>CStF^P_&fmruLDCM*6m$tlZ(O8Rxcsc0SqS+Bn%yXS~ zvW3lzb!+Cqja9^s8yTAZWK9sbHxr@I7!XR$p|d37cFptf_io@b;u7C*>H=2z7Swb- z5At<{X~xFd*3DAfmSG>VaWC3vx+2bsx0NJ~Bw^w6u!?YT{BqY!Ai|@Y&6*so|(Kom(SG z+F^wl^h4@QOca(36kCKn6Q!w1R*hF^_K;-y1`%ZZxf0mx5 zTKAoWF~y!@C5E`OT||BkG^$YMr6qe;yTo`_5&o}v-@tf5i#oT=WQ z&6b5i6VpJbB#N;@U*Fd_nZg~ItJ3aDWbnHY}@BQrSvbZ6k*$!fYvY@lOCuLXLTe0$-#+`?)ycX6^h&^q*1q z4hkZrP6n_m2b*UVkiX`LWRaAB3(S z(_i;5ib^d-zYyT8k@IuEVA=hPqH+q;oS&2L=S_m8^T)y?KNcSQYvG9>3ynV(9{p?K z;F56guZ182ktYK0T1!{0HMgxbKeCno2ivCq$#(2+am|(UtHm`-#Wgn_%f&5MtT29e z!*$(t^O;-n!gKEqE;c@~C0#dS}BlanmaU!^;bZ*{D;ZeMEMzUbSrD0uG| zA9Y)5Z#FG7-51Dr|LMR`k)?bw(0yMZ&)S$RVA-AP7m6JJp!vn-tnkE|6~qcpTMuLM@L4!s=3e-OeG(dr1?ZybZtxy38P#FDDIb2tUe-!=B zxihn~tEC*KNJpAGchB6p_uPBW`&|B0Lqn~E>&kzxiNC*1l73DC;j{kOa}1uCxXeU$trFWNK_|7lQpuW`(JBwx-CA9PA#Za zCF+v(ll5pH)T$E=$;Qb>u7?s$$>zysuGb`1C0iz2WXUIuNLuYpNvqRa-|>r{CfgWV z4`_qF+J(039T;_YaWto(?4BZ6iW)E~LLtg-Ni@p_oU}x!?+{W;&fN#^cy5n^-v>VXvdN+D;T5o4~ z81NnXcDHqyp*sQX@vPDghVBA1;(_jDXfL3*m9@p>70 z0MLUT=x&C-2eGN*ZFih0Z2Wy8Q0BO^sVD}a9p>HxfqS?T+|ybd8rxYo02X~%9;e}Bv1N* zr9WRoT?`pU+Q`0eQZ=#q*JJuDji_WyT~jX4Db`HfRFY{elh7k$_XGJ*G@4SAdNi7^ zjYb6=_4;V^%NaFczp0K!wR9{Ry)P}%@SjF|XVOW%cRF>wcThL4Sn1i`Q)x?2>^hlF zUx}xtdrzvdD|$-ny{f0K_9o(&duQjYnRIGjWY6ASGj8d-X3+r4X7*-`1m5rKbrCfq zvvWp0M&Y6b6*Gw9rj!rtGFlz@idLnLR^@Z5kpgPjO}sAG#IMS$Vl>b&G_)9yB)ZY= z6jX6h+9_HPEK-7#O=nlz}QC^rmV;|=(gZEm+ z(6vkq?38Wu&clIjMcbt{C~ioPn_A!a%I&Y*4cyhfm;7!rw{d^2X@4%XpHUB2@tPSS zG&K|ydB15H`6@%VGDa#N7)z&g;If0>v_>y{;rvi^d}#3E06iuyj$XK5Z8XxSO;nJu zFji4P3v6_w$T!$~5YrP0Ft*Io;;9@Ld(lZvsaTKOq%JJqYE?VXxS*}KrvBomD&yR{u89db#!ZQCuY*)oryK0dvH~(v;s9kZN;1-`I;fee#kebjreptr6!`Re@YaMOOXzXSwKcy ztV}RLFqN;!RIGYj#&cP$$Xy0aCmawgrl6h=^00!xXuLA^YAw#uWv=6BW|FW4bGcmA zad+!aL)#ZOyl^Y)u?8XeS-SSpr{yHtM?fm* zHc4cD@-+z4gHNiY)f@gfu>L7Xb<0N*3PA$Ytb_zUi&X0d^;lZd#U3B_?y;J&(n%Ps zF-4;$FoBfIuqiYJHX%$!6eL&dLaFITh!%+9IwP=P#nFO1R>^+ah zC))C;eTpN|hL!03_7Y-nWfRTHBxMQN1S!z59;(0YaofHJ0}l>7tbg~_cVGUonrk_K ztNIs?h1<4Z-W~ZM)WalPV%ie*^0NKr4FaBVMT4NTe4dU)Fhes{P*k!A>V8m{+t{CL z>d%Gx1#fOa%W!40fCkStyA-6%D`W;2<@9rGgkgMYP;mjbc?bop*^hjoVCYG^^s+oA zKk-)wcP+MU7SC{xcpe<)=i{1&kArysw8a-ZBG9D1DvJ#EAEw>jFZAule&7pGuq7z>J!j)-@r_k9kE0EDZg6+_Z?(h?SLT-7*ywq|IitLhhkTr5>M7DKqG+ z)E0Ib>^P7l2DAM;A6N+xaor|XvQ@U1mF9^VJxV(aKd}1(gqB8@LmCpgY-|sMh5bc7 z%2(U6?pcN!0|uYPP+jFqm{)K(6J)t!h{MGZXzZ)U(*J;a1?A z^}Ls1`9nWGT88KdrEDFGa}ZoSWfke|e%10$Rz)*__|u>wiQ6PQkA14s5CFsS2xu@E z+{iRYPohD3zIc+Kpuwj>{QgKnA!v|#is5!IC>pw!4G*ol5Krpqj5UD>mTfES@sigp z94R6#kXbx+RZYY-#iXXfGPK0Ul`YzFjB8MF9k;7*4+}&Iz9K~HZA1kN{Jj@PRe`T} zMYj|i9iefQbS#!JOj~0Ps8)<^2o83!N&+n=5{Q}Lg>pF!x!(sh(07Sqbl$N{R$cw& z;G>tYCYt??tvX9SQ~E1Fk6wy!ca>L+B#}YIJgrzYiks3eeSu&|tQoyo(V8`vBb^<7 z?z)K;gG&=n=nx<=J${w;UQ;bd5F?#bu+qA5RW~Z5|0?h^sJMyS-SG1Qd4jJ9`PK@{ zmp%Tg;~%pissFxFQa|Sz+(yw_uwTN=jM07SW zrwk388yg!R8ooF&H2D7#{4>^IS`^o#73VNmQLsDy+LzG8BgM%)DKm=JKD!LA6#ql| zdNUQRC`t?++6&zB66x5LMm|Igk7FFhR_eZ@8MD43W{xfM$MoHHDxSg3RjnlK-jpm` z7E2Z5iJDvtw`#uc`-}D};xkp~pzH$ez>5768UNj+_q)kWN2t}BBY#2DXTiT5{vs*G zlI}9`bTWMv${CRf+YwN%?v3n;>?ZO-N3?_8cxze^f{_nNvm@(J3#yAG{`nzRQuq+f)Z-)Okq@WdxK9QZ~3 zhQ*G~k86T8wNDzQ=C(KHZqMaHoxIkt6?hzylY+KL(HC_w+kRmY5jCh$xMq3f%n{I# zvxLH+uc)vmX$&g<0Jlk|DJ$%84uURG5cEk%s%rct49Tt~KWYW42}weq#c;b9Q7^7v zD=^wRh8zuYL+M0@vN=L`0BV1n5$;t=l zz1VX0ITU;+fOHpN{~`WbIgh~k1(JtlSB3a1xlKl#igMN>>dkJbJYh#r{WaQ{3JQ1ZrSs3Ab>z@y)SrN7OX*SN?7Bw4A;h?1~{(zVAMe0j2GKdht zxTRoL;>B2MEV+nE0xU}vdj%Ceu#UCggRv&&kDQ=z9PIEhBJvo z5$zE#+R*e!@3Og~X^QH>S(q?W_*6J~5a5>+FnY;6LxvW4+loPDa(@ge9^!T_vR4G^ z1YZ&AO#_KE!h}WS%hud+IT1h9k&U!BL7l=cWM)Jt3V}OQxvax6jB#hnAZ`%iRQw%P zQdE$7WzdRnZW&EO4MIM?swOhFgVXO_b07u^fXXa}8Lt^>EGvhCRAoAjj5XzupcZE{ z)-w27gd7#`;&vB$SRhUC5~TeA;F6a}eUt|VG=DJ@?1ljXd3Pe`Rl~F=a>P3k`28$F z6*&B6JQ+`@hMk9i;fMeo^gC@raV9a>aR(NJ5^i~^AC;mGc-!~7kI)yF8@czrqbK!?sVk}UwN!SmcZb#D<}n+=Cx?K`%+96_ z3W=NiW#l)vtzBbjODT>=lqAM1-QFqzylfZ5gpOEE+?ul;i0p2vU@bVi3ah2R*5`0Biwx7l+EZ_;Nn`5gEvb|nplPW7^=1oLOkP*f-L=M>2kISf#-y>Y9_&IJ@ zg&Y#N5`0Ctt^%)~L;Mw)X$Q@)7tIVu^}OPPa@aU`WvIqn<;A>32vYGMUIh0E1PQ(} z1SjU;WhN{7pv~aPvW~8dC&h3KD*lryH>qITfj}!lvBTN# z^9j`=3Um-X?OjRA`-7{M3!@Xgd=4O;nuQ#6@2;JzEV})U4ceo5G ze1mYN;=gdaq%a|-LGTq#V-*~9oV?RhF_*n!9E9}F0`#g{*pFF@P)@2EM|k5&(k(z( zoB|X!Q8F$|qCn7@4l&R1i~4OuQxWnl_M}BrrrT8xQ&xkFi8<; zMd)^(OlxyM^^|4Jg4qUeE);YEy2yT=w}f6R=1e-1z{yPAP20|(c_aqykg_;c>rC(x zIQELpUv3x2o>I!xEbXKbznnpo9-&-Bw~<`I5iwISRD=w9o?%u&H2tW(F5AP;+qOTV zDO2%3RC$96UH}4>EPx*XTuwaBIga|wu@pL>5+GYs3u!?*?5NdfRd`m-RflU0a4@0jvst0W20OZW-B zrMPV08pm;D3nw0E*?JWGWEb68sj%^Fn%y=OeAvrAVTrS)211ZHU-|6Z#EUkX+Y9&% zb89-jSl|4{=1j?q_q{^u>KwNSx4(?&I-a4v#`8yzA18j{aJB%d3l##LV(T|{wq31@&d6+(fa zz>3?)(A2$bze`?H04lYsaERCkesXgVuuZG;EvH2eZ-9h=V3q7n8zv-!!)9!R+M)s5 zA*{{Pbb?E(2_Af2e$6(KUGz|KQXbxbAzG4)S9YO=%LyEAbldRJFj_FaoTFh?`2fzB zCwQOo%|beW5R%ZvunT$9@*xNFe3fY6aLAvdE8{OvRN#=c&n}Y7B^zkBhzdYS>$ZI7 z?6=Rpb&h#uOV7`?9C>fc5&URi#=*nmm;7erqb`d zPK@YC$trGN_=^bsvaAybaQED{@jB*OG3xZ}`nr-}KW!>0z)$$JR(;EzFTP)=P~Kp8 zv2N9^ql@jY-X3|}dFbJ`hn=|-YOekAtr0hm(D6Y?#ElS&qIg9XDK_KT!%Gzd828cM zprV&Ba03{JpN49Jn?I6J2nwSnB^35q)Zbn*TQ|;=Ju3u3g7D|)u1vXAyxGzlt>dwF9-U{3H7%w68tjW^}-(vl-o%fwCvLsRS!szJnM z#_Y%%4)@`R3w*e!;PfaAG-}nOz<^c|kw?@9emvYFoG+o%(24YP z9mwcYjPIj&`)>~N)f)e~nVD~JT1Baqp`eXOl92#{DOhq6aqY7U;}ZA??F^|pLE!D{ z-(MZRTa#QR0h5q{&>hB0?Sv4)LXs^XM4%YQ3+U2Mo%KbIG6^RP5C;HpTlNj zzMUX&IisaEcfNuDQfT1R(7>6~V&yQTCp07pnIT4}LdviuD zMi%Gf>j{TyJ6ytlCzlUe8T<)kJ~V)28?9-+O8860F8ZpIioI0O5jZ{<&xgzTymr0` z-ktqtlDrLkY?DvT@%b`7GQ|gv_zVwc=Q-)fSv$^uapEXnTTB9RvW5fu91P~5CPxZ6 z1jk`6jv;Xvh65G`2LZ_8Wz&N-d%p1m%MK_1&T^UM8WSt;Y?v$w|J}Ox`bKl>M&D~c zo0D1#RkiW~`W}zMni~1ookIl)k3y#`56ZXZsIx)25DLj#?sOF-JPPfyJS^V{)0<(u zk>%6!ozwK|wEU!2YE^DD73$mNBX>p%5*~%UA$jASdHQrCecHdk$o3aPK{-T&;ZbOo zSg(iywF3x&R~eua#yaa=U%)Zp;p*kCm)w{Yw(sTg>^Cx=-&AP zwH;%0#%*-Q`4`^dJLlbqys+jjw;jRTYI#$xYiB{iv(Q#8ug`Ua>Bss)TR=WabHbz0 zD9eZMT%j%w(`5S=qEzpr`u>F`s_&=zVNvHc7vzOBy|{oe0&-}fj(Q4FPs8%U`g^tX zj+Tzz&Drl-<=Q)6$SDU45^9B>2Dx^jE4QVuAfZ-JWO<)h<9&rtqr7=xLoSS^L#?n` hmQTqGlhoxYp3>%pE}F#VLL2Se!s(CkW>BQo{}+nj^(X)U literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/fields.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a62069a417e6d852b59fe2d70e5e509d016df60 GIT binary patch literal 12027 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 W%%QbTDE_lE%Q8p52E)(j^#5;?Hz|Su literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/filepost.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c8c4d010f122bc78abbd5f80a93f9ca891d5ae3 GIT binary patch literal 3494 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

    VnuslBZf9K6d=X;aARF2p>5EU2gL9 z)bU`I%H%t?gjD~AiBnzrT&s4VgVtkqQ&F87(kk?i)}bKCuK-kA!lE=AS%{~ZglBFu zsHAur#=o)^^z{Z;3UU7Kwc1Vj+D(Pp{u?KYtvz?$`PSfC>uA1pw9vZ!#>wodyrZeu z+_f@$JGIt4ly4p?G>;(r#MjQ1s<^Nxp6}lMsH6Yx zYpav*d|_?#p8V!Lh0Xg49pl-Pw~l`EOv#BFB_G$&erM?RP_8>vs2{!YQqfhPb9F!J z53UXs`gdntxqy&&_da!VfyP@W@0_`P=35g5f8Q@S-nkvE30uGKeaE|cv>@4L$1H1zi5TTllHBG4JiUbrng@(Zks8J)7zvrCN1Tszfn|=Fg!){F4wS z^>->LldxmiC8wyVk+!KS(TO{zN|H@RY_Kdd?7lI}&GMq_&6+8f*d)4P9dWNOfjZ5i z2l*aAEgPR9uT`vm(>YZwwuxSp@@gf-_6j9CL?24}j3;8JSc4ih#ywrdF0mGQwd>o0 z4atw1exoGpI02Ljh=N#$YaL4W8qch&xJj%>t@17au5Ge!X$(Pi*9Mh0NMf%-#rv3GP^4kI5L zYOsp+G(8E!15-CGQaG`Yn2}^+md~Id1`~l12ZV~)8VH*bjp)1*xp66?q)l2b>!v7; zq){X5o7U-*)$l1zw;)zxD6WhjfJ>P(F)S=3!LSqo+!&qIaWEcy5qvjkwk}lw_2_s63ZVH+MrmADVLDfVg7T-{P$3IqmF>)!DG8#5pW_sE{TuKhGZqxiKL91hZ z!k9L|3Hc~CnCfJDseFQ9pJv6w%YnWb#m+N-M9CmN^G^VtjG6yvQrhUgAq-9h~!(HM#d7dBhUa6Feb#rOx9?HY;Of3Y)2^)Jt!ju9TMy8KzDL5gHDOm?*i{hr zWF0?tYsz(0U)ty|b^-peIrt~Ej-gj`liWRig2{sSc=;R1RH%q9a$$PFk6>~RFEy>7 z2tE5Br~=L04X)^K$ayx_V5~ zgRTN6mP)=a30AqQG^yx3a;i_h%GVqo~C`$d`+kx(;OPK z%dcU%$mFSa3qPIQg-Bj$}wAQ^V-@R+CdpzGgUg+MRJqM-A*Rkg9&U?F8zEbcG<-9u{ z4IRjyTX`w(8vuD|3_&yV3}ufNQOwtq_x0Sh-@Wi--yl>n&kz(vU;V9DA9y<+HA5-m zYeKhd#X!$mpf4ZjyL)8S@#DY<3f6>v4vn&P#jzsh{k!j`kmTIEHF86g*7%uplFYf! zBR8LA-qdL4(w~^i;&@^{O|~&vfC~viE`)xXZAiSZZfRVXR&qih8JvXQcuIkB%dF3A zI#*+O2*0%unVlt*Nh~=s8;@PQ#B6N34gz=93|1^~Ey7l%m!Gkgxh#!nmXBGm5{SPf z4wD>Sw&sF1`3A-<|1Kq2BxPKPWiHi~^B=|=5XrzPWI4oJuhnV!n!6R8_{Z+{XX!cd z2}aM005HM4;!T?`0Mt&0zs`e>quj=yWp@R&w_oEG8$?A|IW>=J#-?nw#KbvMNVKp} zNoI96#WL%e!4E`-LAS}GjT+2`n&AO4#Tq@UMDI;oF;q`i>WL7=0zuz=&#cYg%B+8Y8M~HGuNK$q5Bc6i5JM)U(V4xBw~fqS@i; z=c!rLf+g|6e5nz3Mn5iJg-=#t?VE@;68D58UqlZ~BcvgkZdJe@%1Eq^aC+LrbR{Ck z$dbzTjX~BeYAz77vkdFY^ z&(33cXoQl8Z?Hc?}w z@yG4mYwg?f?c47U71|GG{l)&l2mL!&XS4nlHwW z(FxJ?l6V0WZ>x5*)iM&1JeN!f@f7)zvEOMUlc;*0xom|UL%Q_G$Q@H{(Nh7!7Njh6 zM>pmOSH?oyL)$`Ze?!?K0VwEE-5_2`kU&Ls5Tw>0ljfmPGpXz~?GY2IWZK>G*C}Dr z7AgH|>&CsQ?Ph5)=+t&QHNqNH8;wWgAkkb=h~?4*FwC1mdJ5b2n)dq#xLxWy4}sx% zn_PdlhiRV^%LW^+=X{N~zMA)LdE{%nd3O11$;Q_m{3NjHsmoDQ3)^%}r!GgiANqoi z>x8?l`MSZix^4NoZH2nAY*n$RZ>?u%zGvrJ&)$5`-Vd4!Jul|mogex89@THUySq?7 znDY&O)Ub8cUuf8yb+ZjWoc9l}zW#%+=KRA2|7$t-Yuc_aXW_I@anCVHa~WhZ}#D)Vi`=hy5vgGxjK4&h%$djY-&=H1{)hrcI*{5GZV-gM z0_%@6Qds-3 za`dPgQsx*%fP++vjGiIE^vpz zX{Bw(e@odeZOi=!z?yagjVTr1fT7IJr14kzdnmuu|5-cDn64?>YTrh2Y_&$Nw*KbS z^3=`na`@+*&ocmhq_OqR`0epK2X7y|J5XpC${qtFEw*(0%8SQZnE=m_O-!KSXS_ZYS+FMrp?>l~wx^=M7@G747ZOtCL`MKrK-MW_d3BPKi#yY{#v)*5I zS@5R{QKUOPhY#3)$nBu?fb)pU6)oS0BwDbINX9o9Vlf`=w{GiHmcQ+D`qDS*&^2SP zC~Mm*8enbj@y7N6!?Q*Hx_rq`#uBl31W|b@VVr#V_ZV3{j;US0ENH3Q06XvBaQ<+Q>Es3;d$&^_xWN8cHs%FM8L{c)l##rQmxj{&P z|ILK|N@BH%u7b^kHBPcL{5v6p>>=`iZC%K}WkVEGh(mxDX<{NCN>dH4tx3|*4fK#m zU38$Zin5qW+M(rh3a^cY4C*QM!`im6TQC~~GhTcL>jdnu6&LvrDOoQ88zx3OUZhNA zReoWEQL&-IJ74NK{~5dyxM*=Jd}5{U zyUlMmuk!D^@3}v?T(Wb4;1kXks4j6fPxZ6%t7()ZqVdnM5?G%1=!|4In%GeKZZ`FVk8No{p6xu^v#qx>tbF!Vd%Uiuy4bH+xTFSTCSyIEW zG^~gWvPMaPIVg{Q3GTmU8ngmo0*dd!5hW5e+Ohs-Q`R4Sfx08i#7{gpOW4Ehs*>Am4Y-qi8pk%W*brm~@S10qG z6reCNmTT<4JNck7Sn{J}DZmAUoV(}OPd!{`KMZ6|T_3e}!XnnxrLl_tY(H$b{m||? z?05dKmPcAS0Fb~DS_*?UCzeLmttN0Y9GZB3@$XpV52jRK;O6-9 zc+QIe)7DQK#)`OyJh9?fYYieYXLWpSXn%fa{}a2dktp9f@>l-yNPd6?jDPYc$XzEt zm>v^~L#(94-{|~o`y7;fvOKe&XoqU7FDs@1RJ6LynZ6XG9^?_{9NB3${3`bd!o1$b z^(qm*94+#ZLHaq2jN=L~`>}w@W3}Oj@*eUA;c3H$N0e*Y1mz|e1ghp}HEj67u4uEo zIoDmu?$0RcoNL}t9k=DR$tEh}P+G<{N1DurpJCy=?#{RsTgElXr8|rwU?^@wLBey_ zT&MBGx{B4zf3-#QUWYn`v9nVt=^mp5%?365E><1==6bbjd1~~*oH@r_U-@$l7HiOh z{%7;e9(vMSji(t;dcc5<=SoXDXynZe8jy9(cry0)YK_v@JsHp3u=Uh{?mJ)>8vAM#i(4;^*uGx3!X)K(p7V4S{A8*0g7i1i1}AxehDkGh6&Rc0<(m z2AGK{4%I~_@B&ThJ&7<`ayRO(J`i0B^$!uHKe{fiD1=9;c`0d`rI|3I9}kMkDMc9} z%@)B_x@#w%x)_Txv4?RLgfHWS5J@&V{~1}3V`e`{{Urw?gc>Tstng-tFsU^ckjw1) z#J$dyzKIt&FqKWniQ5G+o0$+gBhhL|vfb+LD5b%#!Yu{(rfZ4C)8Lx+MGi)u^; z1>%^ZEFc)z=>J8GZefN+P3b)`4~MXl%IMg>v28yizK+9?IHj1DE~ex~6$hpeMi`f_ z;NYaq(u_{10sZKVLg!s*`N)f?%OYiBqnK0Gj({=MF_RJ(wV;`6I%*0Lqa&QEQ}fF< zzN{}h3R>K(2qOoP275K7i)mr+5aK_gbMNxr9Q@ga@z!2(1J;vkW%U1W)JOZ6En@lBpwm?r9a* z)qnSBE;wH3d;$57y$v@HEgxEmKJfNFZfeh-c-+>7UR+uJ+@sFH)v?vsy#s~LeQTW; z@|_n7ov-R0tZ%%t<@T19w!5d+`gi90cNXdqP5sE0CHLQ6@9(YIYi)*`2=69bg`nsOlZF{O=o$KgYdE@Powf5nB`*5K>lzpk# z-bpzK=&l*NRaIw!dgy-fu{*Hl?#R149=f}V{*G+=W@b6Faw6BiEAQX`K|K=q(SH53jSF=B zf^(obe>2|y1K2MDty-wV!@%ZZpb3-y&2uFWN_?u+W8wX%zUkC3_u=rs=@$E6H1kM< zwx3nw!34rV-o#b4BRYjqnooNW*af-~ItxyLt9A$!w8%J}$aLgStMyV))YU3YlUE(2 ze}kkIfKVp+56IubWvQKF#Xe65&W~S7{ts_Im#n1!l#{N1<(d)4ae*m8-|yV z=|g%5_?~@&xrHb0Rcm;65;lf6L=dB{EblvX`(sKhL=LUpri$&Bm8+7O*_s4aRzohX z$5W*dEH#yLuud;GTuN>lPOB@2{L)TX>l$xTYgFt0_GFpfiBEoN|+|06+UC1GqwCSs}9 z=+U52DIUjBPG0_P^PmM+&XmQ zOs>Aa;245kq`kAaV^7J|p7+wa`-IM7gX;)?SA`jU$vH$fhP zs=4;vtQ7R|>dq%M$a`{zcR4#stuX!+yZVYd_m;dJ&I6BYTT4z{2}@haMG#u;D0v8~ z=9o=Zif%OLhVtdpe#t2`G)VIva8Nrevq<*hzL}PjO$`%^l}Y^Cf%0 zSzW}uucZ(DnIN(-%YR%dJrU5t-pWXo#iJw3Sl}7qxQ`q!i%v6+Sp3QrP6R zMV!^3xE-b~=q4#W`j8p&wS$Z#`Revs{fwSwHG&*soys81f~;h^>cL9rt^v)c&&IN@ zzApAyILc4>84g40opFSOsUk)&5{8OkH9d-x#sZ%Q&NYHpnCc1o!i;SgHi8Zykk3ej zj@4u`yo8f7h9WhrpWx99$0iOo1*68?5PF&{4IM+o)Up&#iiCut#y2FGJB2(UY#K~l zkp)yurpW}!;^v;668iiAq(=(2u%?BkR+~@6V;Zp-6wJVy!4$wy35O~>UW%glVgVI0 zP8MlXWcEQr#H^CqtJmH!W#hvR>t8eQll+Z%20ClYL~%`rF|iFC)6ViS#}{LxL2{kp z8wK=gF31S$VDC%EV$3xwj=9iI%9_};zM&%gNeO%~hk`TcglrtH1x=%k#$)u_bx#%L zGQShO)d&sTM5WnNg)6a0g|!_L1_zHPY0B8r$4t(~BNwsoadr#Eq3`NSi;0dDOhZ{R zmm_7emxUe~tMUp?OHh!R86sy*@8aN~i4XISIAS!$K7&Kuprc}n(JoVHKdU_x5ft(( z&<|mSK7F3zsZj}WoX}FCX|b?0I>9?EOir9;u5!34p}*2rh{Uf(;3m=gYvRM?>n7?+ zea%7LOloI_nUc(A3NwatW#q(%w~p0ax3M>T$zlCUCjFE;Wxi5;^Z{XWq~+3@ftpVK zpU6cD7BC`?Dq%1CB*gj#${zeCZT!m|@Y0rW*$FSAOvVu}^S~BqzHyp}@g3X8_R^s( z^99gbrvqOM(LeLV*JszIEj$xThEnpybuC+`wzT^5knz?Z+uFXqn{+ztH)_gMY%#{2 z|7hhjNHpa0&p2K7yngP``WY>c(KUSz1JIb+@iB;f+AqVWk*EC(i>@4mb5)lojAwNH z0~Typ$?1eAaLQJSSoj0(51rSmlX!Z)I!$^3`(>)%)qB9KxfR+H?eH5km3JrEVKmc=mpfVaWuwRO$-;Q1&U0gjke8&5M1EwUPCOv(TFtZT+&Mp9SsXW%LO`UL8BT6GKvPnloF@;WTn z;P~K+@U|G|Vmx#%27&m9>zi1z!>acwKQ7M$f&4a-AkWk`wMz4~$y3OK&cPNVF>f4P z4AyD3DSFu(0*5qPT7Vvy5x+QX2WwXx-;rZ#kXobRGVDWj+HIL^Ak$21iqaB6q%A>i z{01)gZW@ss@(eNsT{|!L36=UgdffUvrmi+=6*mxXwRK%~8F6L$yjlYdUmrU)$<#Qe z)iR}v-lMVW+4Y8|fl-HX3Z#rUny2#c0y^=!*~w;_1>?knH_!aH9m)Q{zSV>mE&bLpE)R*>7N~wQY5VPU^K6d&lV7{it&*EJQ_Lf6>>A^ohsWRZS1t zV7(a_{{GTCOF4J@%HF)Yzc{*MZS-({^e{4V9YcBda1jSxLWlC9LsaBY-aYh*yGA>R z*mn11-hCuDdbr>|qQ#Jqq15;hL9>$+mDFn@Xmqlaxz`%#C1}58Y`Nbtd2adK%7yPvy*>5a@Y~^4 z@%_1bbJ|<~@beTcG`uld2yfQ>5zO9n8~{bTi?$el-Cil|u9C}~Vt-^DZN&OupDW7P z;PSFpiX5`y&*3aXRB6z$bjuV>CMA3-&(Os5;0By-BkBOfVO-FUKhOtjpjMJ_e>h4u zJ0{DXf~;d=(vgIOa}*c~U7-vw0wsV^`v4!X6B-aK*$RwMt2DGr_QBCX)j^06Cf16X zQLB^CD3nDsf9f^9TK%ABb zxi{JBXzE&#at-}i_a}AjD?7f`y;ip+U$-S&^^v!(*t0o%>ej1yU*}J~^+j0bX+fNP z2#Vov$@;b3UB07er-OU&Pks$xgSb)_B(W}Pro29C(GR0&w#*ItBf*m3A4Cn>#X~-3lyqfqfoPmsm|DA2n^59cAb_@3KfXQ zxlP~ABY$W${r=Lur4M$ly>KS~!kG^ve|70EEkI+T ze}$$eCMHfyOu!oZKWH37l)OnvjuJMkJVBpO!l1t+=ny4;PsvA=`~#AuO=P}@fgO?n z(#p2=pHbrM7y)O!uui`e&RBvP#u|f+XmvXkaFh zL-SX%S4=NQeniQ~NXo6l9h6DQ|Ai2u>?TR%O<0F_!a6MTni;sb?*NR!#bBs->=Zb9 zsbQ=0D9_Bo1i;|h*iv#a5Fh;6Uh*)onrq!t@-ooJA=Ivhfwf%U){>ur0Zur=m+BZ? z&-IOHXiJS`TW(^x&176|Vc_e0nYFjpSK~Ewf9AK|Jc*}#EJV-KQqtzoX2@)o@D@;XBj}|Sq6}KmH=j+B>+L{NZDdz z6B*Uj1k9;+AfHjTPTZ6Se~CC{k>RlWd1LoaXlrv41tA8|D}hIa?LzV^ln1`agp4I` z(bj6h-3{)Mw+OzMTF#hvCiPaWwxkxO6{xjV25Imz=9-g9 z>tgzbT8-~5Xr45Moki3<-b^2s6|dgb|#xlMn|1%ATS{)DUf z3FrTq>-m@y{+>JZF*p1%*Y`KvWS*P+mCec9o^VKh>ErmVA9LG3=JtHdb$!hB{tegv z*zQ@gw>+@7{KQfFcaAOpz50b4F6>%Y>y3+RRW13dmKArQs`rMyYrBi^WE9mwc4J1ZO>BC-FCodHJh{mPs=rMME?DRcx;=Xi^=W4pMr`LR4d0$tq zd)NJ|1>d0}vffy$>CV@5=X!R3;40L-_;aVd(U#)^pb~w%a)(~dw@v1_=BHJ!Ir#&( eLQgrmK22AjweiRKTQ5B281Qu3!Sf?*&i)@!W6bCP literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/__pycache__/response.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8573f03c70bcfcd4e5424e9f7655fa656280eea3 GIT binary patch literal 52718 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 None: ... + + def set_tunnel( + self, + host: str, + port: int | None = None, + headers: typing.Mapping[str, str] | None = None, + scheme: str = "http", + ) -> None: ... + + def connect(self) -> None: ... + + def request( + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + # We know *at least* botocore is depending on the order of the + # first 3 parameters so to be safe we only mark the later ones + # as keyword-only to ensure we have space to extend. + *, + chunked: bool = False, + preload_content: bool = True, + decode_content: bool = True, + enforce_content_length: bool = True, + ) -> None: ... + + def getresponse(self) -> BaseHTTPResponse: ... + + def close(self) -> None: ... + + @property + def is_closed(self) -> bool: + """Whether the connection either is brand new or has been previously closed. + If this property is True then both ``is_connected`` and ``has_connected_to_proxy`` + properties must be False. + """ + + @property + def is_connected(self) -> bool: + """Whether the connection is actively connected to any origin (proxy or target)""" + + @property + def has_connected_to_proxy(self) -> bool: + """Whether the connection has successfully connected to its proxy. + This returns False if no proxy is in use. Used to determine whether + errors are coming from the proxy layer or from tunnelling to the target origin. + """ + + class BaseHTTPSConnection(BaseHTTPConnection, Protocol): + default_port: typing.ClassVar[int] + default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] + + # Certificate verification methods + cert_reqs: int | str | None + assert_hostname: None | str | typing.Literal[False] + assert_fingerprint: str | None + ssl_context: ssl.SSLContext | None + + # Trusted CAs + ca_certs: str | None + ca_cert_dir: str | None + ca_cert_data: None | str | bytes + + # TLS version + ssl_minimum_version: int | None + ssl_maximum_version: int | None + ssl_version: int | str | None # Deprecated + + # Client certificates + cert_file: str | None + key_file: str | None + key_password: str | None + + def __init__( + self, + host: str, + port: int | None = None, + *, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + blocksize: int = 16384, + socket_options: _TYPE_SOCKET_OPTIONS | None = ..., + proxy: Url | None = None, + proxy_config: ProxyConfig | None = None, + cert_reqs: int | str | None = None, + assert_hostname: None | str | typing.Literal[False] = None, + assert_fingerprint: str | None = None, + server_hostname: str | None = None, + ssl_context: ssl.SSLContext | None = None, + ca_certs: str | None = None, + ca_cert_dir: str | None = None, + ca_cert_data: None | str | bytes = None, + ssl_minimum_version: int | None = None, + ssl_maximum_version: int | None = None, + ssl_version: int | str | None = None, # Deprecated + cert_file: str | None = None, + key_file: str | None = None, + key_password: str | None = None, + ) -> None: ... diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/_collections.py b/Backend/venv/lib/python3.12/site-packages/urllib3/_collections.py new file mode 100644 index 00000000..1b6c1364 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/_collections.py @@ -0,0 +1,479 @@ +from __future__ import annotations + +import typing +from collections import OrderedDict +from enum import Enum, auto +from threading import RLock + +if typing.TYPE_CHECKING: + # We can only import Protocol if TYPE_CHECKING because it's a development + # dependency, and is not available at runtime. + from typing import Protocol + + from typing_extensions import Self + + class HasGettableStringKeys(Protocol): + def keys(self) -> typing.Iterator[str]: ... + + def __getitem__(self, key: str) -> str: ... + + +__all__ = ["RecentlyUsedContainer", "HTTPHeaderDict"] + + +# Key type +_KT = typing.TypeVar("_KT") +# Value type +_VT = typing.TypeVar("_VT") +# Default type +_DT = typing.TypeVar("_DT") + +ValidHTTPHeaderSource = typing.Union[ + "HTTPHeaderDict", + typing.Mapping[str, str], + typing.Iterable[tuple[str, str]], + "HasGettableStringKeys", +] + + +class _Sentinel(Enum): + not_passed = auto() + + +def ensure_can_construct_http_header_dict( + potential: object, +) -> ValidHTTPHeaderSource | None: + if isinstance(potential, HTTPHeaderDict): + return potential + elif isinstance(potential, typing.Mapping): + # Full runtime checking of the contents of a Mapping is expensive, so for the + # purposes of typechecking, we assume that any Mapping is the right shape. + return typing.cast(typing.Mapping[str, str], potential) + elif isinstance(potential, typing.Iterable): + # Similarly to Mapping, full runtime checking of the contents of an Iterable is + # expensive, so for the purposes of typechecking, we assume that any Iterable + # is the right shape. + return typing.cast(typing.Iterable[tuple[str, str]], potential) + elif hasattr(potential, "keys") and hasattr(potential, "__getitem__"): + return typing.cast("HasGettableStringKeys", potential) + else: + return None + + +class RecentlyUsedContainer(typing.Generic[_KT, _VT], typing.MutableMapping[_KT, _VT]): + """ + Provides a thread-safe dict-like container which maintains up to + ``maxsize`` keys while throwing away the least-recently-used keys beyond + ``maxsize``. + + :param maxsize: + Maximum number of recent elements to retain. + + :param dispose_func: + Every time an item is evicted from the container, + ``dispose_func(value)`` is called. Callback which will get called + """ + + _container: typing.OrderedDict[_KT, _VT] + _maxsize: int + dispose_func: typing.Callable[[_VT], None] | None + lock: RLock + + def __init__( + self, + maxsize: int = 10, + dispose_func: typing.Callable[[_VT], None] | None = None, + ) -> None: + super().__init__() + self._maxsize = maxsize + self.dispose_func = dispose_func + self._container = OrderedDict() + self.lock = RLock() + + def __getitem__(self, key: _KT) -> _VT: + # Re-insert the item, moving it to the end of the eviction line. + with self.lock: + item = self._container.pop(key) + self._container[key] = item + return item + + def __setitem__(self, key: _KT, value: _VT) -> None: + evicted_item = None + with self.lock: + # Possibly evict the existing value of 'key' + try: + # If the key exists, we'll overwrite it, which won't change the + # size of the pool. Because accessing a key should move it to + # the end of the eviction line, we pop it out first. + evicted_item = key, self._container.pop(key) + self._container[key] = value + except KeyError: + # When the key does not exist, we insert the value first so that + # evicting works in all cases, including when self._maxsize is 0 + self._container[key] = value + if len(self._container) > self._maxsize: + # If we didn't evict an existing value, and we've hit our maximum + # size, then we have to evict the least recently used item from + # the beginning of the container. + evicted_item = self._container.popitem(last=False) + + # After releasing the lock on the pool, dispose of any evicted value. + if evicted_item is not None and self.dispose_func: + _, evicted_value = evicted_item + self.dispose_func(evicted_value) + + def __delitem__(self, key: _KT) -> None: + with self.lock: + value = self._container.pop(key) + + if self.dispose_func: + self.dispose_func(value) + + def __len__(self) -> int: + with self.lock: + return len(self._container) + + def __iter__(self) -> typing.NoReturn: + raise NotImplementedError( + "Iteration over this class is unlikely to be threadsafe." + ) + + def clear(self) -> None: + with self.lock: + # Copy pointers to all values, then wipe the mapping + values = list(self._container.values()) + self._container.clear() + + if self.dispose_func: + for value in values: + self.dispose_func(value) + + def keys(self) -> set[_KT]: # type: ignore[override] + with self.lock: + return set(self._container.keys()) + + +class HTTPHeaderDictItemView(set[tuple[str, str]]): + """ + HTTPHeaderDict is unusual for a Mapping[str, str] in that it has two modes of + address. + + If we directly try to get an item with a particular name, we will get a string + back that is the concatenated version of all the values: + + >>> d['X-Header-Name'] + 'Value1, Value2, Value3' + + However, if we iterate over an HTTPHeaderDict's items, we will optionally combine + these values based on whether combine=True was called when building up the dictionary + + >>> d = HTTPHeaderDict({"A": "1", "B": "foo"}) + >>> d.add("A", "2", combine=True) + >>> d.add("B", "bar") + >>> list(d.items()) + [ + ('A', '1, 2'), + ('B', 'foo'), + ('B', 'bar'), + ] + + This class conforms to the interface required by the MutableMapping ABC while + also giving us the nonstandard iteration behavior we want; items with duplicate + keys, ordered by time of first insertion. + """ + + _headers: HTTPHeaderDict + + def __init__(self, headers: HTTPHeaderDict) -> None: + self._headers = headers + + def __len__(self) -> int: + return len(list(self._headers.iteritems())) + + def __iter__(self) -> typing.Iterator[tuple[str, str]]: + return self._headers.iteritems() + + def __contains__(self, item: object) -> bool: + if isinstance(item, tuple) and len(item) == 2: + passed_key, passed_val = item + if isinstance(passed_key, str) and isinstance(passed_val, str): + return self._headers._has_value_for_header(passed_key, passed_val) + return False + + +class HTTPHeaderDict(typing.MutableMapping[str, str]): + """ + :param headers: + An iterable of field-value pairs. Must not contain multiple field names + when compared case-insensitively. + + :param kwargs: + Additional field-value pairs to pass in to ``dict.update``. + + A ``dict`` like container for storing HTTP Headers. + + Field names are stored and compared case-insensitively in compliance with + RFC 7230. Iteration provides the first case-sensitive key seen for each + case-insensitive pair. + + Using ``__setitem__`` syntax overwrites fields that compare equal + case-insensitively in order to maintain ``dict``'s api. For fields that + compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` + in a loop. + + If multiple fields that are equal case-insensitively are passed to the + constructor or ``.update``, the behavior is undefined and some will be + lost. + + >>> headers = HTTPHeaderDict() + >>> headers.add('Set-Cookie', 'foo=bar') + >>> headers.add('set-cookie', 'baz=quxx') + >>> headers['content-length'] = '7' + >>> headers['SET-cookie'] + 'foo=bar, baz=quxx' + >>> headers['Content-Length'] + '7' + """ + + _container: typing.MutableMapping[str, list[str]] + + def __init__(self, headers: ValidHTTPHeaderSource | None = None, **kwargs: str): + super().__init__() + self._container = {} # 'dict' is insert-ordered + if headers is not None: + if isinstance(headers, HTTPHeaderDict): + self._copy_from(headers) + else: + self.extend(headers) + if kwargs: + self.extend(kwargs) + + def __setitem__(self, key: str, val: str) -> None: + # avoid a bytes/str comparison by decoding before httplib + if isinstance(key, bytes): + key = key.decode("latin-1") + self._container[key.lower()] = [key, val] + + def __getitem__(self, key: str) -> str: + val = self._container[key.lower()] + return ", ".join(val[1:]) + + def __delitem__(self, key: str) -> None: + del self._container[key.lower()] + + def __contains__(self, key: object) -> bool: + if isinstance(key, str): + return key.lower() in self._container + return False + + def setdefault(self, key: str, default: str = "") -> str: + return super().setdefault(key, default) + + def __eq__(self, other: object) -> bool: + maybe_constructable = ensure_can_construct_http_header_dict(other) + if maybe_constructable is None: + return False + else: + other_as_http_header_dict = type(self)(maybe_constructable) + + return {k.lower(): v for k, v in self.itermerged()} == { + k.lower(): v for k, v in other_as_http_header_dict.itermerged() + } + + def __ne__(self, other: object) -> bool: + return not self.__eq__(other) + + def __len__(self) -> int: + return len(self._container) + + def __iter__(self) -> typing.Iterator[str]: + # Only provide the originally cased names + for vals in self._container.values(): + yield vals[0] + + def discard(self, key: str) -> None: + try: + del self[key] + except KeyError: + pass + + def add(self, key: str, val: str, *, combine: bool = False) -> None: + """Adds a (name, value) pair, doesn't overwrite the value if it already + exists. + + If this is called with combine=True, instead of adding a new header value + as a distinct item during iteration, this will instead append the value to + any existing header value with a comma. If no existing header value exists + for the key, then the value will simply be added, ignoring the combine parameter. + + >>> headers = HTTPHeaderDict(foo='bar') + >>> headers.add('Foo', 'baz') + >>> headers['foo'] + 'bar, baz' + >>> list(headers.items()) + [('foo', 'bar'), ('foo', 'baz')] + >>> headers.add('foo', 'quz', combine=True) + >>> list(headers.items()) + [('foo', 'bar, baz, quz')] + """ + # avoid a bytes/str comparison by decoding before httplib + if isinstance(key, bytes): + key = key.decode("latin-1") + key_lower = key.lower() + new_vals = [key, val] + # Keep the common case aka no item present as fast as possible + vals = self._container.setdefault(key_lower, new_vals) + if new_vals is not vals: + # if there are values here, then there is at least the initial + # key/value pair + assert len(vals) >= 2 + if combine: + vals[-1] = vals[-1] + ", " + val + else: + vals.append(val) + + def extend(self, *args: ValidHTTPHeaderSource, **kwargs: str) -> None: + """Generic import function for any type of header-like object. + Adapted version of MutableMapping.update in order to insert items + with self.add instead of self.__setitem__ + """ + if len(args) > 1: + raise TypeError( + f"extend() takes at most 1 positional arguments ({len(args)} given)" + ) + other = args[0] if len(args) >= 1 else () + + if isinstance(other, HTTPHeaderDict): + for key, val in other.iteritems(): + self.add(key, val) + elif isinstance(other, typing.Mapping): + for key, val in other.items(): + self.add(key, val) + elif isinstance(other, typing.Iterable): + other = typing.cast(typing.Iterable[tuple[str, str]], other) + for key, value in other: + self.add(key, value) + elif hasattr(other, "keys") and hasattr(other, "__getitem__"): + # THIS IS NOT A TYPESAFE BRANCH + # In this branch, the object has a `keys` attr but is not a Mapping or any of + # the other types indicated in the method signature. We do some stuff with + # it as though it partially implements the Mapping interface, but we're not + # doing that stuff safely AT ALL. + for key in other.keys(): + self.add(key, other[key]) + + for key, value in kwargs.items(): + self.add(key, value) + + @typing.overload + def getlist(self, key: str) -> list[str]: ... + + @typing.overload + def getlist(self, key: str, default: _DT) -> list[str] | _DT: ... + + def getlist( + self, key: str, default: _Sentinel | _DT = _Sentinel.not_passed + ) -> list[str] | _DT: + """Returns a list of all the values for the named field. Returns an + empty list if the key doesn't exist.""" + try: + vals = self._container[key.lower()] + except KeyError: + if default is _Sentinel.not_passed: + # _DT is unbound; empty list is instance of List[str] + return [] + # _DT is bound; default is instance of _DT + return default + else: + # _DT may or may not be bound; vals[1:] is instance of List[str], which + # meets our external interface requirement of `Union[List[str], _DT]`. + return vals[1:] + + def _prepare_for_method_change(self) -> Self: + """ + Remove content-specific header fields before changing the request + method to GET or HEAD according to RFC 9110, Section 15.4. + """ + content_specific_headers = [ + "Content-Encoding", + "Content-Language", + "Content-Location", + "Content-Type", + "Content-Length", + "Digest", + "Last-Modified", + ] + for header in content_specific_headers: + self.discard(header) + return self + + # Backwards compatibility for httplib + getheaders = getlist + getallmatchingheaders = getlist + iget = getlist + + # Backwards compatibility for http.cookiejar + get_all = getlist + + def __repr__(self) -> str: + return f"{type(self).__name__}({dict(self.itermerged())})" + + def _copy_from(self, other: HTTPHeaderDict) -> None: + for key in other: + val = other.getlist(key) + self._container[key.lower()] = [key, *val] + + def copy(self) -> Self: + clone = type(self)() + clone._copy_from(self) + return clone + + def iteritems(self) -> typing.Iterator[tuple[str, str]]: + """Iterate over all header lines, including duplicate ones.""" + for key in self: + vals = self._container[key.lower()] + for val in vals[1:]: + yield vals[0], val + + def itermerged(self) -> typing.Iterator[tuple[str, str]]: + """Iterate over all headers, merging duplicate ones together.""" + for key in self: + val = self._container[key.lower()] + yield val[0], ", ".join(val[1:]) + + def items(self) -> HTTPHeaderDictItemView: # type: ignore[override] + return HTTPHeaderDictItemView(self) + + def _has_value_for_header(self, header_name: str, potential_value: str) -> bool: + if header_name in self: + return potential_value in self._container[header_name.lower()][1:] + return False + + def __ior__(self, other: object) -> HTTPHeaderDict: + # Supports extending a header dict in-place using operator |= + # combining items with add instead of __setitem__ + maybe_constructable = ensure_can_construct_http_header_dict(other) + if maybe_constructable is None: + return NotImplemented + self.extend(maybe_constructable) + return self + + def __or__(self, other: object) -> Self: + # Supports merging header dicts using operator | + # combining items with add instead of __setitem__ + maybe_constructable = ensure_can_construct_http_header_dict(other) + if maybe_constructable is None: + return NotImplemented + result = self.copy() + result.extend(maybe_constructable) + return result + + def __ror__(self, other: object) -> Self: + # Supports merging header dicts using operator | when other is on left side + # combining items with add instead of __setitem__ + maybe_constructable = ensure_can_construct_http_header_dict(other) + if maybe_constructable is None: + return NotImplemented + result = type(self)(maybe_constructable) + result.extend(self) + return result diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/_request_methods.py b/Backend/venv/lib/python3.12/site-packages/urllib3/_request_methods.py new file mode 100644 index 00000000..297c271b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/_request_methods.py @@ -0,0 +1,278 @@ +from __future__ import annotations + +import json as _json +import typing +from urllib.parse import urlencode + +from ._base_connection import _TYPE_BODY +from ._collections import HTTPHeaderDict +from .filepost import _TYPE_FIELDS, encode_multipart_formdata +from .response import BaseHTTPResponse + +__all__ = ["RequestMethods"] + +_TYPE_ENCODE_URL_FIELDS = typing.Union[ + typing.Sequence[tuple[str, typing.Union[str, bytes]]], + typing.Mapping[str, typing.Union[str, bytes]], +] + + +class RequestMethods: + """ + Convenience mixin for classes who implement a :meth:`urlopen` method, such + as :class:`urllib3.HTTPConnectionPool` and + :class:`urllib3.PoolManager`. + + Provides behavior for making common types of HTTP request methods and + decides which type of request field encoding to use. + + Specifically, + + :meth:`.request_encode_url` is for sending requests whose fields are + encoded in the URL (such as GET, HEAD, DELETE). + + :meth:`.request_encode_body` is for sending requests whose fields are + encoded in the *body* of the request using multipart or www-form-urlencoded + (such as for POST, PUT, PATCH). + + :meth:`.request` is for making any kind of request, it will look up the + appropriate encoding format and use one of the above two methods to make + the request. + + Initializer parameters: + + :param headers: + Headers to include with all requests, unless other headers are given + explicitly. + """ + + _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"} + + def __init__(self, headers: typing.Mapping[str, str] | None = None) -> None: + self.headers = headers or {} + + def urlopen( + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + encode_multipart: bool = True, + multipart_boundary: str | None = None, + **kw: typing.Any, + ) -> BaseHTTPResponse: # Abstract + raise NotImplementedError( + "Classes extending RequestMethods must implement " + "their own ``urlopen`` method." + ) + + def request( + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + fields: _TYPE_FIELDS | None = None, + headers: typing.Mapping[str, str] | None = None, + json: typing.Any | None = None, + **urlopen_kw: typing.Any, + ) -> BaseHTTPResponse: + """ + Make a request using :meth:`urlopen` with the appropriate encoding of + ``fields`` based on the ``method`` used. + + This is a convenience method that requires the least amount of manual + effort. It can be used in most situations, while still having the + option to drop down to more specific methods when necessary, such as + :meth:`request_encode_url`, :meth:`request_encode_body`, + or even the lowest level :meth:`urlopen`. + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param body: + Data to send in the request body, either :class:`str`, :class:`bytes`, + an iterable of :class:`str`/:class:`bytes`, or a file-like object. + + :param fields: + Data to encode and send in the URL or request body, depending on ``method``. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. If None, pool headers are used. If provided, + these headers completely replace any pool-specific headers. + + :param json: + Data to encode and send as JSON with UTF-encoded in the request body. + The ``"Content-Type"`` header will be set to ``"application/json"`` + unless specified otherwise. + """ + method = method.upper() + + if json is not None and body is not None: + raise TypeError( + "request got values for both 'body' and 'json' parameters which are mutually exclusive" + ) + + if json is not None: + if headers is None: + headers = self.headers + + if not ("content-type" in map(str.lower, headers.keys())): + headers = HTTPHeaderDict(headers) + headers["Content-Type"] = "application/json" + + body = _json.dumps(json, separators=(",", ":"), ensure_ascii=False).encode( + "utf-8" + ) + + if body is not None: + urlopen_kw["body"] = body + + if method in self._encode_url_methods: + return self.request_encode_url( + method, + url, + fields=fields, # type: ignore[arg-type] + headers=headers, + **urlopen_kw, + ) + else: + return self.request_encode_body( + method, url, fields=fields, headers=headers, **urlopen_kw + ) + + def request_encode_url( + self, + method: str, + url: str, + fields: _TYPE_ENCODE_URL_FIELDS | None = None, + headers: typing.Mapping[str, str] | None = None, + **urlopen_kw: str, + ) -> BaseHTTPResponse: + """ + Make a request using :meth:`urlopen` with the ``fields`` encoded in + the url. This is useful for request methods like GET, HEAD, DELETE, etc. + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param fields: + Data to encode and send in the URL. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. If None, pool headers are used. If provided, + these headers completely replace any pool-specific headers. + """ + if headers is None: + headers = self.headers + + extra_kw: dict[str, typing.Any] = {"headers": headers} + extra_kw.update(urlopen_kw) + + if fields: + url += "?" + urlencode(fields) + + return self.urlopen(method, url, **extra_kw) + + def request_encode_body( + self, + method: str, + url: str, + fields: _TYPE_FIELDS | None = None, + headers: typing.Mapping[str, str] | None = None, + encode_multipart: bool = True, + multipart_boundary: str | None = None, + **urlopen_kw: str, + ) -> BaseHTTPResponse: + """ + Make a request using :meth:`urlopen` with the ``fields`` encoded in + the body. This is useful for request methods like POST, PUT, PATCH, etc. + + When ``encode_multipart=True`` (default), then + :func:`urllib3.encode_multipart_formdata` is used to encode + the payload with the appropriate content type. Otherwise + :func:`urllib.parse.urlencode` is used with the + 'application/x-www-form-urlencoded' content type. + + Multipart encoding must be used when posting files, and it's reasonably + safe to use it in other times too. However, it may break request + signing, such as with OAuth. + + Supports an optional ``fields`` parameter of key/value strings AND + key/filetuple. A filetuple is a (filename, data, MIME type) tuple where + the MIME type is optional. For example:: + + fields = { + 'foo': 'bar', + 'fakefile': ('foofile.txt', 'contents of foofile'), + 'realfile': ('barfile.txt', open('realfile').read()), + 'typedfile': ('bazfile.bin', open('bazfile').read(), + 'image/jpeg'), + 'nonamefile': 'contents of nonamefile field', + } + + When uploading a file, providing a filename (the first parameter of the + tuple) is optional but recommended to best mimic behavior of browsers. + + Note that if ``headers`` are supplied, the 'Content-Type' header will + be overwritten because it depends on the dynamic random boundary string + which is used to compose the body of the request. The random boundary + string can be explicitly set with the ``multipart_boundary`` parameter. + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param fields: + Data to encode and send in the request body. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. If None, pool headers are used. If provided, + these headers completely replace any pool-specific headers. + + :param encode_multipart: + If True, encode the ``fields`` using the multipart/form-data MIME + format. + + :param multipart_boundary: + If not specified, then a random boundary will be generated using + :func:`urllib3.filepost.choose_boundary`. + """ + if headers is None: + headers = self.headers + + extra_kw: dict[str, typing.Any] = {"headers": HTTPHeaderDict(headers)} + body: bytes | str + + if fields: + if "body" in urlopen_kw: + raise TypeError( + "request got values for both 'fields' and 'body', can only specify one." + ) + + if encode_multipart: + body, content_type = encode_multipart_formdata( + fields, boundary=multipart_boundary + ) + else: + body, content_type = ( + urlencode(fields), # type: ignore[arg-type] + "application/x-www-form-urlencoded", + ) + + extra_kw["body"] = body + extra_kw["headers"].setdefault("Content-Type", content_type) + + extra_kw.update(urlopen_kw) + + return self.urlopen(method, url, **extra_kw) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/_version.py b/Backend/venv/lib/python3.12/site-packages/urllib3/_version.py new file mode 100644 index 00000000..49707ce5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/_version.py @@ -0,0 +1,21 @@ +# file generated by setuptools-scm +# don't change, don't track in version control + +__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"] + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple + from typing import Union + + VERSION_TUPLE = Tuple[Union[int, str], ...] +else: + VERSION_TUPLE = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE + +__version__ = version = '2.5.0' +__version_tuple__ = version_tuple = (2, 5, 0) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/connection.py b/Backend/venv/lib/python3.12/site-packages/urllib3/connection.py new file mode 100644 index 00000000..8082387d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/connection.py @@ -0,0 +1,1093 @@ +from __future__ import annotations + +import datetime +import http.client +import logging +import os +import re +import socket +import sys +import threading +import typing +import warnings +from http.client import HTTPConnection as _HTTPConnection +from http.client import HTTPException as HTTPException # noqa: F401 +from http.client import ResponseNotReady +from socket import timeout as SocketTimeout + +if typing.TYPE_CHECKING: + from .response import HTTPResponse + from .util.ssl_ import _TYPE_PEER_CERT_RET_DICT + from .util.ssltransport import SSLTransport + +from ._collections import HTTPHeaderDict +from .http2 import probe as http2_probe +from .util.response import assert_header_parsing +from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT, Timeout +from .util.util import to_str +from .util.wait import wait_for_read + +try: # Compiled with SSL? + import ssl + + BaseSSLError = ssl.SSLError +except (ImportError, AttributeError): + ssl = None # type: ignore[assignment] + + class BaseSSLError(BaseException): # type: ignore[no-redef] + pass + + +from ._base_connection import _TYPE_BODY +from ._base_connection import ProxyConfig as ProxyConfig +from ._base_connection import _ResponseOptions as _ResponseOptions +from ._version import __version__ +from .exceptions import ( + ConnectTimeoutError, + HeaderParsingError, + NameResolutionError, + NewConnectionError, + ProxyError, + SystemTimeWarning, +) +from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection, ssl_ +from .util.request import body_to_chunks +from .util.ssl_ import assert_fingerprint as _assert_fingerprint +from .util.ssl_ import ( + create_urllib3_context, + is_ipaddress, + resolve_cert_reqs, + resolve_ssl_version, + ssl_wrap_socket, +) +from .util.ssl_match_hostname import CertificateError, match_hostname +from .util.url import Url + +# Not a no-op, we're adding this to the namespace so it can be imported. +ConnectionError = ConnectionError +BrokenPipeError = BrokenPipeError + + +log = logging.getLogger(__name__) + +port_by_scheme = {"http": 80, "https": 443} + +# When it comes time to update this value as a part of regular maintenance +# (ie test_recent_date is failing) update it to ~6 months before the current date. +RECENT_DATE = datetime.date(2025, 1, 1) + +_CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]") + + +class HTTPConnection(_HTTPConnection): + """ + Based on :class:`http.client.HTTPConnection` but provides an extra constructor + backwards-compatibility layer between older and newer Pythons. + + Additional keyword parameters are used to configure attributes of the connection. + Accepted parameters include: + + - ``source_address``: Set the source address for the current connection. + - ``socket_options``: Set specific options on the underlying socket. If not specified, then + defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling + Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. + + For example, if you wish to enable TCP Keep Alive in addition to the defaults, + you might pass: + + .. code-block:: python + + HTTPConnection.default_socket_options + [ + (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), + ] + + Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). + """ + + default_port: typing.ClassVar[int] = port_by_scheme["http"] # type: ignore[misc] + + #: Disable Nagle's algorithm by default. + #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` + default_socket_options: typing.ClassVar[connection._TYPE_SOCKET_OPTIONS] = [ + (socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + ] + + #: Whether this connection verifies the host's certificate. + is_verified: bool = False + + #: Whether this proxy connection verified the proxy host's certificate. + # If no proxy is currently connected to the value will be ``None``. + proxy_is_verified: bool | None = None + + blocksize: int + source_address: tuple[str, int] | None + socket_options: connection._TYPE_SOCKET_OPTIONS | None + + _has_connected_to_proxy: bool + _response_options: _ResponseOptions | None + _tunnel_host: str | None + _tunnel_port: int | None + _tunnel_scheme: str | None + + def __init__( + self, + host: str, + port: int | None = None, + *, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + blocksize: int = 16384, + socket_options: None | ( + connection._TYPE_SOCKET_OPTIONS + ) = default_socket_options, + proxy: Url | None = None, + proxy_config: ProxyConfig | None = None, + ) -> None: + super().__init__( + host=host, + port=port, + timeout=Timeout.resolve_default_timeout(timeout), + source_address=source_address, + blocksize=blocksize, + ) + self.socket_options = socket_options + self.proxy = proxy + self.proxy_config = proxy_config + + self._has_connected_to_proxy = False + self._response_options = None + self._tunnel_host: str | None = None + self._tunnel_port: int | None = None + self._tunnel_scheme: str | None = None + + @property + def host(self) -> str: + """ + Getter method to remove any trailing dots that indicate the hostname is an FQDN. + + In general, SSL certificates don't include the trailing dot indicating a + fully-qualified domain name, and thus, they don't validate properly when + checked against a domain name that includes the dot. In addition, some + servers may not expect to receive the trailing dot when provided. + + However, the hostname with trailing dot is critical to DNS resolution; doing a + lookup with the trailing dot will properly only resolve the appropriate FQDN, + whereas a lookup without a trailing dot will search the system's search domain + list. Thus, it's important to keep the original host around for use only in + those cases where it's appropriate (i.e., when doing DNS lookup to establish the + actual TCP connection across which we're going to send HTTP requests). + """ + return self._dns_host.rstrip(".") + + @host.setter + def host(self, value: str) -> None: + """ + Setter for the `host` property. + + We assume that only urllib3 uses the _dns_host attribute; httplib itself + only uses `host`, and it seems reasonable that other libraries follow suit. + """ + self._dns_host = value + + def _new_conn(self) -> socket.socket: + """Establish a socket connection and set nodelay settings on it. + + :return: New socket connection. + """ + try: + sock = connection.create_connection( + (self._dns_host, self.port), + self.timeout, + source_address=self.source_address, + socket_options=self.socket_options, + ) + except socket.gaierror as e: + raise NameResolutionError(self.host, self, e) from e + except SocketTimeout as e: + raise ConnectTimeoutError( + self, + f"Connection to {self.host} timed out. (connect timeout={self.timeout})", + ) from e + + except OSError as e: + raise NewConnectionError( + self, f"Failed to establish a new connection: {e}" + ) from e + + sys.audit("http.client.connect", self, self.host, self.port) + + return sock + + def set_tunnel( + self, + host: str, + port: int | None = None, + headers: typing.Mapping[str, str] | None = None, + scheme: str = "http", + ) -> None: + if scheme not in ("http", "https"): + raise ValueError( + f"Invalid proxy scheme for tunneling: {scheme!r}, must be either 'http' or 'https'" + ) + super().set_tunnel(host, port=port, headers=headers) + self._tunnel_scheme = scheme + + if sys.version_info < (3, 11, 9) or ((3, 12) <= sys.version_info < (3, 12, 3)): + # Taken from python/cpython#100986 which was backported in 3.11.9 and 3.12.3. + # When using connection_from_host, host will come without brackets. + def _wrap_ipv6(self, ip: bytes) -> bytes: + if b":" in ip and ip[0] != b"["[0]: + return b"[" + ip + b"]" + return ip + + if sys.version_info < (3, 11, 9): + # `_tunnel` copied from 3.11.13 backporting + # https://github.com/python/cpython/commit/0d4026432591d43185568dd31cef6a034c4b9261 + # and https://github.com/python/cpython/commit/6fbc61070fda2ffb8889e77e3b24bca4249ab4d1 + def _tunnel(self) -> None: + _MAXLINE = http.client._MAXLINE # type: ignore[attr-defined] + connect = b"CONNECT %s:%d HTTP/1.0\r\n" % ( # type: ignore[str-format] + self._wrap_ipv6(self._tunnel_host.encode("ascii")), # type: ignore[union-attr] + self._tunnel_port, + ) + headers = [connect] + for header, value in self._tunnel_headers.items(): # type: ignore[attr-defined] + headers.append(f"{header}: {value}\r\n".encode("latin-1")) + headers.append(b"\r\n") + # Making a single send() call instead of one per line encourages + # the host OS to use a more optimal packet size instead of + # potentially emitting a series of small packets. + self.send(b"".join(headers)) + del headers + + response = self.response_class(self.sock, method=self._method) # type: ignore[attr-defined] + try: + (version, code, message) = response._read_status() # type: ignore[attr-defined] + + if code != http.HTTPStatus.OK: + self.close() + raise OSError( + f"Tunnel connection failed: {code} {message.strip()}" + ) + while True: + line = response.fp.readline(_MAXLINE + 1) + if len(line) > _MAXLINE: + raise http.client.LineTooLong("header line") + if not line: + # for sites which EOF without sending a trailer + break + if line in (b"\r\n", b"\n", b""): + break + + if self.debuglevel > 0: + print("header:", line.decode()) + finally: + response.close() + + elif (3, 12) <= sys.version_info < (3, 12, 3): + # `_tunnel` copied from 3.12.11 backporting + # https://github.com/python/cpython/commit/23aef575c7629abcd4aaf028ebd226fb41a4b3c8 + def _tunnel(self) -> None: # noqa: F811 + connect = b"CONNECT %s:%d HTTP/1.1\r\n" % ( # type: ignore[str-format] + self._wrap_ipv6(self._tunnel_host.encode("idna")), # type: ignore[union-attr] + self._tunnel_port, + ) + headers = [connect] + for header, value in self._tunnel_headers.items(): # type: ignore[attr-defined] + headers.append(f"{header}: {value}\r\n".encode("latin-1")) + headers.append(b"\r\n") + # Making a single send() call instead of one per line encourages + # the host OS to use a more optimal packet size instead of + # potentially emitting a series of small packets. + self.send(b"".join(headers)) + del headers + + response = self.response_class(self.sock, method=self._method) # type: ignore[attr-defined] + try: + (version, code, message) = response._read_status() # type: ignore[attr-defined] + + self._raw_proxy_headers = http.client._read_headers(response.fp) # type: ignore[attr-defined] + + if self.debuglevel > 0: + for header in self._raw_proxy_headers: + print("header:", header.decode()) + + if code != http.HTTPStatus.OK: + self.close() + raise OSError( + f"Tunnel connection failed: {code} {message.strip()}" + ) + + finally: + response.close() + + def connect(self) -> None: + self.sock = self._new_conn() + if self._tunnel_host: + # If we're tunneling it means we're connected to our proxy. + self._has_connected_to_proxy = True + + # TODO: Fix tunnel so it doesn't depend on self.sock state. + self._tunnel() + + # If there's a proxy to be connected to we are fully connected. + # This is set twice (once above and here) due to forwarding proxies + # not using tunnelling. + self._has_connected_to_proxy = bool(self.proxy) + + if self._has_connected_to_proxy: + self.proxy_is_verified = False + + @property + def is_closed(self) -> bool: + return self.sock is None + + @property + def is_connected(self) -> bool: + if self.sock is None: + return False + return not wait_for_read(self.sock, timeout=0.0) + + @property + def has_connected_to_proxy(self) -> bool: + return self._has_connected_to_proxy + + @property + def proxy_is_forwarding(self) -> bool: + """ + Return True if a forwarding proxy is configured, else return False + """ + return bool(self.proxy) and self._tunnel_host is None + + @property + def proxy_is_tunneling(self) -> bool: + """ + Return True if a tunneling proxy is configured, else return False + """ + return self._tunnel_host is not None + + def close(self) -> None: + try: + super().close() + finally: + # Reset all stateful properties so connection + # can be re-used without leaking prior configs. + self.sock = None + self.is_verified = False + self.proxy_is_verified = None + self._has_connected_to_proxy = False + self._response_options = None + self._tunnel_host = None + self._tunnel_port = None + self._tunnel_scheme = None + + def putrequest( + self, + method: str, + url: str, + skip_host: bool = False, + skip_accept_encoding: bool = False, + ) -> None: + """""" + # Empty docstring because the indentation of CPython's implementation + # is broken but we don't want this method in our documentation. + match = _CONTAINS_CONTROL_CHAR_RE.search(method) + if match: + raise ValueError( + f"Method cannot contain non-token characters {method!r} (found at least {match.group()!r})" + ) + + return super().putrequest( + method, url, skip_host=skip_host, skip_accept_encoding=skip_accept_encoding + ) + + def putheader(self, header: str, *values: str) -> None: # type: ignore[override] + """""" + if not any(isinstance(v, str) and v == SKIP_HEADER for v in values): + super().putheader(header, *values) + elif to_str(header.lower()) not in SKIPPABLE_HEADERS: + skippable_headers = "', '".join( + [str.title(header) for header in sorted(SKIPPABLE_HEADERS)] + ) + raise ValueError( + f"urllib3.util.SKIP_HEADER only supports '{skippable_headers}'" + ) + + # `request` method's signature intentionally violates LSP. + # urllib3's API is different from `http.client.HTTPConnection` and the subclassing is only incidental. + def request( # type: ignore[override] + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + *, + chunked: bool = False, + preload_content: bool = True, + decode_content: bool = True, + enforce_content_length: bool = True, + ) -> None: + # Update the inner socket's timeout value to send the request. + # This only triggers if the connection is re-used. + if self.sock is not None: + self.sock.settimeout(self.timeout) + + # Store these values to be fed into the HTTPResponse + # object later. TODO: Remove this in favor of a real + # HTTP lifecycle mechanism. + + # We have to store these before we call .request() + # because sometimes we can still salvage a response + # off the wire even if we aren't able to completely + # send the request body. + self._response_options = _ResponseOptions( + request_method=method, + request_url=url, + preload_content=preload_content, + decode_content=decode_content, + enforce_content_length=enforce_content_length, + ) + + if headers is None: + headers = {} + header_keys = frozenset(to_str(k.lower()) for k in headers) + skip_accept_encoding = "accept-encoding" in header_keys + skip_host = "host" in header_keys + self.putrequest( + method, url, skip_accept_encoding=skip_accept_encoding, skip_host=skip_host + ) + + # Transform the body into an iterable of sendall()-able chunks + # and detect if an explicit Content-Length is doable. + chunks_and_cl = body_to_chunks(body, method=method, blocksize=self.blocksize) + chunks = chunks_and_cl.chunks + content_length = chunks_and_cl.content_length + + # When chunked is explicit set to 'True' we respect that. + if chunked: + if "transfer-encoding" not in header_keys: + self.putheader("Transfer-Encoding", "chunked") + else: + # Detect whether a framing mechanism is already in use. If so + # we respect that value, otherwise we pick chunked vs content-length + # depending on the type of 'body'. + if "content-length" in header_keys: + chunked = False + elif "transfer-encoding" in header_keys: + chunked = True + + # Otherwise we go off the recommendation of 'body_to_chunks()'. + else: + chunked = False + if content_length is None: + if chunks is not None: + chunked = True + self.putheader("Transfer-Encoding", "chunked") + else: + self.putheader("Content-Length", str(content_length)) + + # Now that framing headers are out of the way we send all the other headers. + if "user-agent" not in header_keys: + self.putheader("User-Agent", _get_default_user_agent()) + for header, value in headers.items(): + self.putheader(header, value) + self.endheaders() + + # If we're given a body we start sending that in chunks. + if chunks is not None: + for chunk in chunks: + # Sending empty chunks isn't allowed for TE: chunked + # as it indicates the end of the body. + if not chunk: + continue + if isinstance(chunk, str): + chunk = chunk.encode("utf-8") + if chunked: + self.send(b"%x\r\n%b\r\n" % (len(chunk), chunk)) + else: + self.send(chunk) + + # Regardless of whether we have a body or not, if we're in + # chunked mode we want to send an explicit empty chunk. + if chunked: + self.send(b"0\r\n\r\n") + + def request_chunked( + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + ) -> None: + """ + Alternative to the common request method, which sends the + body with chunked encoding and not as one block + """ + warnings.warn( + "HTTPConnection.request_chunked() is deprecated and will be removed " + "in urllib3 v2.1.0. Instead use HTTPConnection.request(..., chunked=True).", + category=DeprecationWarning, + stacklevel=2, + ) + self.request(method, url, body=body, headers=headers, chunked=True) + + def getresponse( # type: ignore[override] + self, + ) -> HTTPResponse: + """ + Get the response from the server. + + If the HTTPConnection is in the correct state, returns an instance of HTTPResponse or of whatever object is returned by the response_class variable. + + If a request has not been sent or if a previous response has not be handled, ResponseNotReady is raised. If the HTTP response indicates that the connection should be closed, then it will be closed before the response is returned. When the connection is closed, the underlying socket is closed. + """ + # Raise the same error as http.client.HTTPConnection + if self._response_options is None: + raise ResponseNotReady() + + # Reset this attribute for being used again. + resp_options = self._response_options + self._response_options = None + + # Since the connection's timeout value may have been updated + # we need to set the timeout on the socket. + self.sock.settimeout(self.timeout) + + # This is needed here to avoid circular import errors + from .response import HTTPResponse + + # Save a reference to the shutdown function before ownership is passed + # to httplib_response + # TODO should we implement it everywhere? + _shutdown = getattr(self.sock, "shutdown", None) + + # Get the response from http.client.HTTPConnection + httplib_response = super().getresponse() + + try: + assert_header_parsing(httplib_response.msg) + except (HeaderParsingError, TypeError) as hpe: + log.warning( + "Failed to parse headers (url=%s): %s", + _url_from_connection(self, resp_options.request_url), + hpe, + exc_info=True, + ) + + headers = HTTPHeaderDict(httplib_response.msg.items()) + + response = HTTPResponse( + body=httplib_response, + headers=headers, + status=httplib_response.status, + version=httplib_response.version, + version_string=getattr(self, "_http_vsn_str", "HTTP/?"), + reason=httplib_response.reason, + preload_content=resp_options.preload_content, + decode_content=resp_options.decode_content, + original_response=httplib_response, + enforce_content_length=resp_options.enforce_content_length, + request_method=resp_options.request_method, + request_url=resp_options.request_url, + sock_shutdown=_shutdown, + ) + return response + + +class HTTPSConnection(HTTPConnection): + """ + Many of the parameters to this constructor are passed to the underlying SSL + socket by means of :py:func:`urllib3.util.ssl_wrap_socket`. + """ + + default_port = port_by_scheme["https"] # type: ignore[misc] + + cert_reqs: int | str | None = None + ca_certs: str | None = None + ca_cert_dir: str | None = None + ca_cert_data: None | str | bytes = None + ssl_version: int | str | None = None + ssl_minimum_version: int | None = None + ssl_maximum_version: int | None = None + assert_fingerprint: str | None = None + _connect_callback: typing.Callable[..., None] | None = None + + def __init__( + self, + host: str, + port: int | None = None, + *, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + blocksize: int = 16384, + socket_options: None | ( + connection._TYPE_SOCKET_OPTIONS + ) = HTTPConnection.default_socket_options, + proxy: Url | None = None, + proxy_config: ProxyConfig | None = None, + cert_reqs: int | str | None = None, + assert_hostname: None | str | typing.Literal[False] = None, + assert_fingerprint: str | None = None, + server_hostname: str | None = None, + ssl_context: ssl.SSLContext | None = None, + ca_certs: str | None = None, + ca_cert_dir: str | None = None, + ca_cert_data: None | str | bytes = None, + ssl_minimum_version: int | None = None, + ssl_maximum_version: int | None = None, + ssl_version: int | str | None = None, # Deprecated + cert_file: str | None = None, + key_file: str | None = None, + key_password: str | None = None, + ) -> None: + super().__init__( + host, + port=port, + timeout=timeout, + source_address=source_address, + blocksize=blocksize, + socket_options=socket_options, + proxy=proxy, + proxy_config=proxy_config, + ) + + self.key_file = key_file + self.cert_file = cert_file + self.key_password = key_password + self.ssl_context = ssl_context + self.server_hostname = server_hostname + self.assert_hostname = assert_hostname + self.assert_fingerprint = assert_fingerprint + self.ssl_version = ssl_version + self.ssl_minimum_version = ssl_minimum_version + self.ssl_maximum_version = ssl_maximum_version + self.ca_certs = ca_certs and os.path.expanduser(ca_certs) + self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) + self.ca_cert_data = ca_cert_data + + # cert_reqs depends on ssl_context so calculate last. + if cert_reqs is None: + if self.ssl_context is not None: + cert_reqs = self.ssl_context.verify_mode + else: + cert_reqs = resolve_cert_reqs(None) + self.cert_reqs = cert_reqs + self._connect_callback = None + + def set_cert( + self, + key_file: str | None = None, + cert_file: str | None = None, + cert_reqs: int | str | None = None, + key_password: str | None = None, + ca_certs: str | None = None, + assert_hostname: None | str | typing.Literal[False] = None, + assert_fingerprint: str | None = None, + ca_cert_dir: str | None = None, + ca_cert_data: None | str | bytes = None, + ) -> None: + """ + This method should only be called once, before the connection is used. + """ + warnings.warn( + "HTTPSConnection.set_cert() is deprecated and will be removed " + "in urllib3 v2.1.0. Instead provide the parameters to the " + "HTTPSConnection constructor.", + category=DeprecationWarning, + stacklevel=2, + ) + + # If cert_reqs is not provided we'll assume CERT_REQUIRED unless we also + # have an SSLContext object in which case we'll use its verify_mode. + if cert_reqs is None: + if self.ssl_context is not None: + cert_reqs = self.ssl_context.verify_mode + else: + cert_reqs = resolve_cert_reqs(None) + + self.key_file = key_file + self.cert_file = cert_file + self.cert_reqs = cert_reqs + self.key_password = key_password + self.assert_hostname = assert_hostname + self.assert_fingerprint = assert_fingerprint + self.ca_certs = ca_certs and os.path.expanduser(ca_certs) + self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) + self.ca_cert_data = ca_cert_data + + def connect(self) -> None: + # Today we don't need to be doing this step before the /actual/ socket + # connection, however in the future we'll need to decide whether to + # create a new socket or re-use an existing "shared" socket as a part + # of the HTTP/2 handshake dance. + if self._tunnel_host is not None and self._tunnel_port is not None: + probe_http2_host = self._tunnel_host + probe_http2_port = self._tunnel_port + else: + probe_http2_host = self.host + probe_http2_port = self.port + + # Check if the target origin supports HTTP/2. + # If the value comes back as 'None' it means that the current thread + # is probing for HTTP/2 support. Otherwise, we're waiting for another + # probe to complete, or we get a value right away. + target_supports_http2: bool | None + if "h2" in ssl_.ALPN_PROTOCOLS: + target_supports_http2 = http2_probe.acquire_and_get( + host=probe_http2_host, port=probe_http2_port + ) + else: + # If HTTP/2 isn't going to be offered it doesn't matter if + # the target supports HTTP/2. Don't want to make a probe. + target_supports_http2 = False + + if self._connect_callback is not None: + self._connect_callback( + "before connect", + thread_id=threading.get_ident(), + target_supports_http2=target_supports_http2, + ) + + try: + sock: socket.socket | ssl.SSLSocket + self.sock = sock = self._new_conn() + server_hostname: str = self.host + tls_in_tls = False + + # Do we need to establish a tunnel? + if self.proxy_is_tunneling: + # We're tunneling to an HTTPS origin so need to do TLS-in-TLS. + if self._tunnel_scheme == "https": + # _connect_tls_proxy will verify and assign proxy_is_verified + self.sock = sock = self._connect_tls_proxy(self.host, sock) + tls_in_tls = True + elif self._tunnel_scheme == "http": + self.proxy_is_verified = False + + # If we're tunneling it means we're connected to our proxy. + self._has_connected_to_proxy = True + + self._tunnel() + # Override the host with the one we're requesting data from. + server_hostname = typing.cast(str, self._tunnel_host) + + if self.server_hostname is not None: + server_hostname = self.server_hostname + + is_time_off = datetime.date.today() < RECENT_DATE + if is_time_off: + warnings.warn( + ( + f"System time is way off (before {RECENT_DATE}). This will probably " + "lead to SSL verification errors" + ), + SystemTimeWarning, + ) + + # Remove trailing '.' from fqdn hostnames to allow certificate validation + server_hostname_rm_dot = server_hostname.rstrip(".") + + sock_and_verified = _ssl_wrap_socket_and_match_hostname( + sock=sock, + cert_reqs=self.cert_reqs, + ssl_version=self.ssl_version, + ssl_minimum_version=self.ssl_minimum_version, + ssl_maximum_version=self.ssl_maximum_version, + ca_certs=self.ca_certs, + ca_cert_dir=self.ca_cert_dir, + ca_cert_data=self.ca_cert_data, + cert_file=self.cert_file, + key_file=self.key_file, + key_password=self.key_password, + server_hostname=server_hostname_rm_dot, + ssl_context=self.ssl_context, + tls_in_tls=tls_in_tls, + assert_hostname=self.assert_hostname, + assert_fingerprint=self.assert_fingerprint, + ) + self.sock = sock_and_verified.socket + + # If an error occurs during connection/handshake we may need to release + # our lock so another connection can probe the origin. + except BaseException: + if self._connect_callback is not None: + self._connect_callback( + "after connect failure", + thread_id=threading.get_ident(), + target_supports_http2=target_supports_http2, + ) + + if target_supports_http2 is None: + http2_probe.set_and_release( + host=probe_http2_host, port=probe_http2_port, supports_http2=None + ) + raise + + # If this connection doesn't know if the origin supports HTTP/2 + # we report back to the HTTP/2 probe our result. + if target_supports_http2 is None: + supports_http2 = sock_and_verified.socket.selected_alpn_protocol() == "h2" + http2_probe.set_and_release( + host=probe_http2_host, + port=probe_http2_port, + supports_http2=supports_http2, + ) + + # Forwarding proxies can never have a verified target since + # the proxy is the one doing the verification. Should instead + # use a CONNECT tunnel in order to verify the target. + # See: https://github.com/urllib3/urllib3/issues/3267. + if self.proxy_is_forwarding: + self.is_verified = False + else: + self.is_verified = sock_and_verified.is_verified + + # If there's a proxy to be connected to we are fully connected. + # This is set twice (once above and here) due to forwarding proxies + # not using tunnelling. + self._has_connected_to_proxy = bool(self.proxy) + + # Set `self.proxy_is_verified` unless it's already set while + # establishing a tunnel. + if self._has_connected_to_proxy and self.proxy_is_verified is None: + self.proxy_is_verified = sock_and_verified.is_verified + + def _connect_tls_proxy(self, hostname: str, sock: socket.socket) -> ssl.SSLSocket: + """ + Establish a TLS connection to the proxy using the provided SSL context. + """ + # `_connect_tls_proxy` is called when self._tunnel_host is truthy. + proxy_config = typing.cast(ProxyConfig, self.proxy_config) + ssl_context = proxy_config.ssl_context + sock_and_verified = _ssl_wrap_socket_and_match_hostname( + sock, + cert_reqs=self.cert_reqs, + ssl_version=self.ssl_version, + ssl_minimum_version=self.ssl_minimum_version, + ssl_maximum_version=self.ssl_maximum_version, + ca_certs=self.ca_certs, + ca_cert_dir=self.ca_cert_dir, + ca_cert_data=self.ca_cert_data, + server_hostname=hostname, + ssl_context=ssl_context, + assert_hostname=proxy_config.assert_hostname, + assert_fingerprint=proxy_config.assert_fingerprint, + # Features that aren't implemented for proxies yet: + cert_file=None, + key_file=None, + key_password=None, + tls_in_tls=False, + ) + self.proxy_is_verified = sock_and_verified.is_verified + return sock_and_verified.socket # type: ignore[return-value] + + +class _WrappedAndVerifiedSocket(typing.NamedTuple): + """ + Wrapped socket and whether the connection is + verified after the TLS handshake + """ + + socket: ssl.SSLSocket | SSLTransport + is_verified: bool + + +def _ssl_wrap_socket_and_match_hostname( + sock: socket.socket, + *, + cert_reqs: None | str | int, + ssl_version: None | str | int, + ssl_minimum_version: int | None, + ssl_maximum_version: int | None, + cert_file: str | None, + key_file: str | None, + key_password: str | None, + ca_certs: str | None, + ca_cert_dir: str | None, + ca_cert_data: None | str | bytes, + assert_hostname: None | str | typing.Literal[False], + assert_fingerprint: str | None, + server_hostname: str | None, + ssl_context: ssl.SSLContext | None, + tls_in_tls: bool = False, +) -> _WrappedAndVerifiedSocket: + """Logic for constructing an SSLContext from all TLS parameters, passing + that down into ssl_wrap_socket, and then doing certificate verification + either via hostname or fingerprint. This function exists to guarantee + that both proxies and targets have the same behavior when connecting via TLS. + """ + default_ssl_context = False + if ssl_context is None: + default_ssl_context = True + context = create_urllib3_context( + ssl_version=resolve_ssl_version(ssl_version), + ssl_minimum_version=ssl_minimum_version, + ssl_maximum_version=ssl_maximum_version, + cert_reqs=resolve_cert_reqs(cert_reqs), + ) + else: + context = ssl_context + + context.verify_mode = resolve_cert_reqs(cert_reqs) + + # In some cases, we want to verify hostnames ourselves + if ( + # `ssl` can't verify fingerprints or alternate hostnames + assert_fingerprint + or assert_hostname + # assert_hostname can be set to False to disable hostname checking + or assert_hostname is False + # We still support OpenSSL 1.0.2, which prevents us from verifying + # hostnames easily: https://github.com/pyca/pyopenssl/pull/933 + or ssl_.IS_PYOPENSSL + or not ssl_.HAS_NEVER_CHECK_COMMON_NAME + ): + context.check_hostname = False + + # Try to load OS default certs if none are given. We need to do the hasattr() check + # for custom pyOpenSSL SSLContext objects because they don't support + # load_default_certs(). + if ( + not ca_certs + and not ca_cert_dir + and not ca_cert_data + and default_ssl_context + and hasattr(context, "load_default_certs") + ): + context.load_default_certs() + + # Ensure that IPv6 addresses are in the proper format and don't have a + # scope ID. Python's SSL module fails to recognize scoped IPv6 addresses + # and interprets them as DNS hostnames. + if server_hostname is not None: + normalized = server_hostname.strip("[]") + if "%" in normalized: + normalized = normalized[: normalized.rfind("%")] + if is_ipaddress(normalized): + server_hostname = normalized + + ssl_sock = ssl_wrap_socket( + sock=sock, + keyfile=key_file, + certfile=cert_file, + key_password=key_password, + ca_certs=ca_certs, + ca_cert_dir=ca_cert_dir, + ca_cert_data=ca_cert_data, + server_hostname=server_hostname, + ssl_context=context, + tls_in_tls=tls_in_tls, + ) + + try: + if assert_fingerprint: + _assert_fingerprint( + ssl_sock.getpeercert(binary_form=True), assert_fingerprint + ) + elif ( + context.verify_mode != ssl.CERT_NONE + and not context.check_hostname + and assert_hostname is not False + ): + cert: _TYPE_PEER_CERT_RET_DICT = ssl_sock.getpeercert() # type: ignore[assignment] + + # Need to signal to our match_hostname whether to use 'commonName' or not. + # If we're using our own constructed SSLContext we explicitly set 'False' + # because PyPy hard-codes 'True' from SSLContext.hostname_checks_common_name. + if default_ssl_context: + hostname_checks_common_name = False + else: + hostname_checks_common_name = ( + getattr(context, "hostname_checks_common_name", False) or False + ) + + _match_hostname( + cert, + assert_hostname or server_hostname, # type: ignore[arg-type] + hostname_checks_common_name, + ) + + return _WrappedAndVerifiedSocket( + socket=ssl_sock, + is_verified=context.verify_mode == ssl.CERT_REQUIRED + or bool(assert_fingerprint), + ) + except BaseException: + ssl_sock.close() + raise + + +def _match_hostname( + cert: _TYPE_PEER_CERT_RET_DICT | None, + asserted_hostname: str, + hostname_checks_common_name: bool = False, +) -> None: + # Our upstream implementation of ssl.match_hostname() + # only applies this normalization to IP addresses so it doesn't + # match DNS SANs so we do the same thing! + stripped_hostname = asserted_hostname.strip("[]") + if is_ipaddress(stripped_hostname): + asserted_hostname = stripped_hostname + + try: + match_hostname(cert, asserted_hostname, hostname_checks_common_name) + except CertificateError as e: + log.warning( + "Certificate did not match expected hostname: %s. Certificate: %s", + asserted_hostname, + cert, + ) + # Add cert to exception and reraise so client code can inspect + # the cert when catching the exception, if they want to + e._peer_cert = cert # type: ignore[attr-defined] + raise + + +def _wrap_proxy_error(err: Exception, proxy_scheme: str | None) -> ProxyError: + # Look for the phrase 'wrong version number', if found + # then we should warn the user that we're very sure that + # this proxy is HTTP-only and they have a configuration issue. + error_normalized = " ".join(re.split("[^a-z]", str(err).lower())) + is_likely_http_proxy = ( + "wrong version number" in error_normalized + or "unknown protocol" in error_normalized + or "record layer failure" in error_normalized + ) + http_proxy_warning = ( + ". Your proxy appears to only use HTTP and not HTTPS, " + "try changing your proxy URL to be HTTP. See: " + "https://urllib3.readthedocs.io/en/latest/advanced-usage.html" + "#https-proxy-error-http-proxy" + ) + new_err = ProxyError( + f"Unable to connect to proxy" + f"{http_proxy_warning if is_likely_http_proxy and proxy_scheme == 'https' else ''}", + err, + ) + new_err.__cause__ = err + return new_err + + +def _get_default_user_agent() -> str: + return f"python-urllib3/{__version__}" + + +class DummyConnection: + """Used to detect a failed ConnectionCls import.""" + + +if not ssl: + HTTPSConnection = DummyConnection # type: ignore[misc, assignment] # noqa: F811 + + +VerifiedHTTPSConnection = HTTPSConnection + + +def _url_from_connection( + conn: HTTPConnection | HTTPSConnection, path: str | None = None +) -> str: + """Returns the URL from a given connection. This is mainly used for testing and logging.""" + + scheme = "https" if isinstance(conn, HTTPSConnection) else "http" + + return Url(scheme=scheme, host=conn.host, port=conn.port, path=path).url diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/connectionpool.py b/Backend/venv/lib/python3.12/site-packages/urllib3/connectionpool.py new file mode 100644 index 00000000..3a0685b4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/connectionpool.py @@ -0,0 +1,1178 @@ +from __future__ import annotations + +import errno +import logging +import queue +import sys +import typing +import warnings +import weakref +from socket import timeout as SocketTimeout +from types import TracebackType + +from ._base_connection import _TYPE_BODY +from ._collections import HTTPHeaderDict +from ._request_methods import RequestMethods +from .connection import ( + BaseSSLError, + BrokenPipeError, + DummyConnection, + HTTPConnection, + HTTPException, + HTTPSConnection, + ProxyConfig, + _wrap_proxy_error, +) +from .connection import port_by_scheme as port_by_scheme +from .exceptions import ( + ClosedPoolError, + EmptyPoolError, + FullPoolError, + HostChangedError, + InsecureRequestWarning, + LocationValueError, + MaxRetryError, + NewConnectionError, + ProtocolError, + ProxyError, + ReadTimeoutError, + SSLError, + TimeoutError, +) +from .response import BaseHTTPResponse +from .util.connection import is_connection_dropped +from .util.proxy import connection_requires_http_tunnel +from .util.request import _TYPE_BODY_POSITION, set_file_position +from .util.retry import Retry +from .util.ssl_match_hostname import CertificateError +from .util.timeout import _DEFAULT_TIMEOUT, _TYPE_DEFAULT, Timeout +from .util.url import Url, _encode_target +from .util.url import _normalize_host as normalize_host +from .util.url import parse_url +from .util.util import to_str + +if typing.TYPE_CHECKING: + import ssl + + from typing_extensions import Self + + from ._base_connection import BaseHTTPConnection, BaseHTTPSConnection + +log = logging.getLogger(__name__) + +_TYPE_TIMEOUT = typing.Union[Timeout, float, _TYPE_DEFAULT, None] + + +# Pool objects +class ConnectionPool: + """ + Base class for all connection pools, such as + :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. + + .. note:: + ConnectionPool.urlopen() does not normalize or percent-encode target URIs + which is useful if your target server doesn't support percent-encoded + target URIs. + """ + + scheme: str | None = None + QueueCls = queue.LifoQueue + + def __init__(self, host: str, port: int | None = None) -> None: + if not host: + raise LocationValueError("No host specified.") + + self.host = _normalize_host(host, scheme=self.scheme) + self.port = port + + # This property uses 'normalize_host()' (not '_normalize_host()') + # to avoid removing square braces around IPv6 addresses. + # This value is sent to `HTTPConnection.set_tunnel()` if called + # because square braces are required for HTTP CONNECT tunneling. + self._tunnel_host = normalize_host(host, scheme=self.scheme).lower() + + def __str__(self) -> str: + return f"{type(self).__name__}(host={self.host!r}, port={self.port!r})" + + def __enter__(self) -> Self: + return self + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc_val: BaseException | None, + exc_tb: TracebackType | None, + ) -> typing.Literal[False]: + self.close() + # Return False to re-raise any potential exceptions + return False + + def close(self) -> None: + """ + Close all pooled connections and disable the pool. + """ + + +# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 +_blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} + + +class HTTPConnectionPool(ConnectionPool, RequestMethods): + """ + Thread-safe connection pool for one host. + + :param host: + Host used for this HTTP Connection (e.g. "localhost"), passed into + :class:`http.client.HTTPConnection`. + + :param port: + Port used for this HTTP Connection (None is equivalent to 80), passed + into :class:`http.client.HTTPConnection`. + + :param timeout: + Socket timeout in seconds for each individual connection. This can + be a float or integer, which sets the timeout for the HTTP request, + or an instance of :class:`urllib3.util.Timeout` which gives you more + fine-grained control over request timeouts. After the constructor has + been parsed, this is always a `urllib3.util.Timeout` object. + + :param maxsize: + Number of connections to save that can be reused. More than 1 is useful + in multithreaded situations. If ``block`` is set to False, more + connections will be created but they will not be saved once they've + been used. + + :param block: + If set to True, no more than ``maxsize`` connections will be used at + a time. When no free connections are available, the call will block + until a connection has been released. This is a useful side effect for + particular multithreaded situations where one does not want to use more + than maxsize connections per host to prevent flooding. + + :param headers: + Headers to include with all requests, unless other headers are given + explicitly. + + :param retries: + Retry configuration to use by default with requests in this pool. + + :param _proxy: + Parsed proxy URL, should not be used directly, instead, see + :class:`urllib3.ProxyManager` + + :param _proxy_headers: + A dictionary with proxy headers, should not be used directly, + instead, see :class:`urllib3.ProxyManager` + + :param \\**conn_kw: + Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, + :class:`urllib3.connection.HTTPSConnection` instances. + """ + + scheme = "http" + ConnectionCls: type[BaseHTTPConnection] | type[BaseHTTPSConnection] = HTTPConnection + + def __init__( + self, + host: str, + port: int | None = None, + timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT, + maxsize: int = 1, + block: bool = False, + headers: typing.Mapping[str, str] | None = None, + retries: Retry | bool | int | None = None, + _proxy: Url | None = None, + _proxy_headers: typing.Mapping[str, str] | None = None, + _proxy_config: ProxyConfig | None = None, + **conn_kw: typing.Any, + ): + ConnectionPool.__init__(self, host, port) + RequestMethods.__init__(self, headers) + + if not isinstance(timeout, Timeout): + timeout = Timeout.from_float(timeout) + + if retries is None: + retries = Retry.DEFAULT + + self.timeout = timeout + self.retries = retries + + self.pool: queue.LifoQueue[typing.Any] | None = self.QueueCls(maxsize) + self.block = block + + self.proxy = _proxy + self.proxy_headers = _proxy_headers or {} + self.proxy_config = _proxy_config + + # Fill the queue up so that doing get() on it will block properly + for _ in range(maxsize): + self.pool.put(None) + + # These are mostly for testing and debugging purposes. + self.num_connections = 0 + self.num_requests = 0 + self.conn_kw = conn_kw + + if self.proxy: + # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. + # We cannot know if the user has added default socket options, so we cannot replace the + # list. + self.conn_kw.setdefault("socket_options", []) + + self.conn_kw["proxy"] = self.proxy + self.conn_kw["proxy_config"] = self.proxy_config + + # Do not pass 'self' as callback to 'finalize'. + # Then the 'finalize' would keep an endless living (leak) to self. + # By just passing a reference to the pool allows the garbage collector + # to free self if nobody else has a reference to it. + pool = self.pool + + # Close all the HTTPConnections in the pool before the + # HTTPConnectionPool object is garbage collected. + weakref.finalize(self, _close_pool_connections, pool) + + def _new_conn(self) -> BaseHTTPConnection: + """ + Return a fresh :class:`HTTPConnection`. + """ + self.num_connections += 1 + log.debug( + "Starting new HTTP connection (%d): %s:%s", + self.num_connections, + self.host, + self.port or "80", + ) + + conn = self.ConnectionCls( + host=self.host, + port=self.port, + timeout=self.timeout.connect_timeout, + **self.conn_kw, + ) + return conn + + def _get_conn(self, timeout: float | None = None) -> BaseHTTPConnection: + """ + Get a connection. Will return a pooled connection if one is available. + + If no connections are available and :prop:`.block` is ``False``, then a + fresh connection is returned. + + :param timeout: + Seconds to wait before giving up and raising + :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and + :prop:`.block` is ``True``. + """ + conn = None + + if self.pool is None: + raise ClosedPoolError(self, "Pool is closed.") + + try: + conn = self.pool.get(block=self.block, timeout=timeout) + + except AttributeError: # self.pool is None + raise ClosedPoolError(self, "Pool is closed.") from None # Defensive: + + except queue.Empty: + if self.block: + raise EmptyPoolError( + self, + "Pool is empty and a new connection can't be opened due to blocking mode.", + ) from None + pass # Oh well, we'll create a new connection then + + # If this is a persistent connection, check if it got disconnected + if conn and is_connection_dropped(conn): + log.debug("Resetting dropped connection: %s", self.host) + conn.close() + + return conn or self._new_conn() + + def _put_conn(self, conn: BaseHTTPConnection | None) -> None: + """ + Put a connection back into the pool. + + :param conn: + Connection object for the current host and port as returned by + :meth:`._new_conn` or :meth:`._get_conn`. + + If the pool is already full, the connection is closed and discarded + because we exceeded maxsize. If connections are discarded frequently, + then maxsize should be increased. + + If the pool is closed, then the connection will be closed and discarded. + """ + if self.pool is not None: + try: + self.pool.put(conn, block=False) + return # Everything is dandy, done. + except AttributeError: + # self.pool is None. + pass + except queue.Full: + # Connection never got put back into the pool, close it. + if conn: + conn.close() + + if self.block: + # This should never happen if you got the conn from self._get_conn + raise FullPoolError( + self, + "Pool reached maximum size and no more connections are allowed.", + ) from None + + log.warning( + "Connection pool is full, discarding connection: %s. Connection pool size: %s", + self.host, + self.pool.qsize(), + ) + + # Connection never got put back into the pool, close it. + if conn: + conn.close() + + def _validate_conn(self, conn: BaseHTTPConnection) -> None: + """ + Called right before a request is made, after the socket is created. + """ + + def _prepare_proxy(self, conn: BaseHTTPConnection) -> None: + # Nothing to do for HTTP connections. + pass + + def _get_timeout(self, timeout: _TYPE_TIMEOUT) -> Timeout: + """Helper that always returns a :class:`urllib3.util.Timeout`""" + if timeout is _DEFAULT_TIMEOUT: + return self.timeout.clone() + + if isinstance(timeout, Timeout): + return timeout.clone() + else: + # User passed us an int/float. This is for backwards compatibility, + # can be removed later + return Timeout.from_float(timeout) + + def _raise_timeout( + self, + err: BaseSSLError | OSError | SocketTimeout, + url: str, + timeout_value: _TYPE_TIMEOUT | None, + ) -> None: + """Is the error actually a timeout? Will raise a ReadTimeout or pass""" + + if isinstance(err, SocketTimeout): + raise ReadTimeoutError( + self, url, f"Read timed out. (read timeout={timeout_value})" + ) from err + + # See the above comment about EAGAIN in Python 3. + if hasattr(err, "errno") and err.errno in _blocking_errnos: + raise ReadTimeoutError( + self, url, f"Read timed out. (read timeout={timeout_value})" + ) from err + + def _make_request( + self, + conn: BaseHTTPConnection, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + retries: Retry | None = None, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + chunked: bool = False, + response_conn: BaseHTTPConnection | None = None, + preload_content: bool = True, + decode_content: bool = True, + enforce_content_length: bool = True, + ) -> BaseHTTPResponse: + """ + Perform a request on a given urllib connection object taken from our + pool. + + :param conn: + a connection from one of our connection pools + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param body: + Data to send in the request body, either :class:`str`, :class:`bytes`, + an iterable of :class:`str`/:class:`bytes`, or a file-like object. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. If None, pool headers are used. If provided, + these headers completely replace any pool-specific headers. + + :param retries: + Configure the number of retries to allow before raising a + :class:`~urllib3.exceptions.MaxRetryError` exception. + + Pass ``None`` to retry until you receive a response. Pass a + :class:`~urllib3.util.retry.Retry` object for fine-grained control + over different types of retries. + Pass an integer number to retry connection errors that many times, + but no other types of errors. Pass zero to never retry. + + If ``False``, then retries are disabled and any exception is raised + immediately. Also, instead of raising a MaxRetryError on redirects, + the redirect response will be returned. + + :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. + + :param timeout: + If specified, overrides the default timeout for this one + request. It may be a float (in seconds) or an instance of + :class:`urllib3.util.Timeout`. + + :param chunked: + If True, urllib3 will send the body using chunked transfer + encoding. Otherwise, urllib3 will send the body using the standard + content-length form. Defaults to False. + + :param response_conn: + Set this to ``None`` if you will handle releasing the connection or + set the connection to have the response release it. + + :param preload_content: + If True, the response's body will be preloaded during construction. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + + :param enforce_content_length: + Enforce content length checking. Body returned by server must match + value of Content-Length header, if present. Otherwise, raise error. + """ + self.num_requests += 1 + + timeout_obj = self._get_timeout(timeout) + timeout_obj.start_connect() + conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) + + try: + # Trigger any extra validation we need to do. + try: + self._validate_conn(conn) + except (SocketTimeout, BaseSSLError) as e: + self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) + raise + + # _validate_conn() starts the connection to an HTTPS proxy + # so we need to wrap errors with 'ProxyError' here too. + except ( + OSError, + NewConnectionError, + TimeoutError, + BaseSSLError, + CertificateError, + SSLError, + ) as e: + new_e: Exception = e + if isinstance(e, (BaseSSLError, CertificateError)): + new_e = SSLError(e) + # If the connection didn't successfully connect to it's proxy + # then there + if isinstance( + new_e, (OSError, NewConnectionError, TimeoutError, SSLError) + ) and (conn and conn.proxy and not conn.has_connected_to_proxy): + new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) + raise new_e + + # conn.request() calls http.client.*.request, not the method in + # urllib3.request. It also calls makefile (recv) on the socket. + try: + conn.request( + method, + url, + body=body, + headers=headers, + chunked=chunked, + preload_content=preload_content, + decode_content=decode_content, + enforce_content_length=enforce_content_length, + ) + + # We are swallowing BrokenPipeError (errno.EPIPE) since the server is + # legitimately able to close the connection after sending a valid response. + # With this behaviour, the received response is still readable. + except BrokenPipeError: + pass + except OSError as e: + # MacOS/Linux + # EPROTOTYPE and ECONNRESET are needed on macOS + # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ + # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. + if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: + raise + + # Reset the timeout for the recv() on the socket + read_timeout = timeout_obj.read_timeout + + if not conn.is_closed: + # In Python 3 socket.py will catch EAGAIN and return None when you + # try and read into the file pointer created by http.client, which + # instead raises a BadStatusLine exception. Instead of catching + # the exception and assuming all BadStatusLine exceptions are read + # timeouts, check for a zero timeout before making the request. + if read_timeout == 0: + raise ReadTimeoutError( + self, url, f"Read timed out. (read timeout={read_timeout})" + ) + conn.timeout = read_timeout + + # Receive the response from the server + try: + response = conn.getresponse() + except (BaseSSLError, OSError) as e: + self._raise_timeout(err=e, url=url, timeout_value=read_timeout) + raise + + # Set properties that are used by the pooling layer. + response.retries = retries + response._connection = response_conn # type: ignore[attr-defined] + response._pool = self # type: ignore[attr-defined] + + log.debug( + '%s://%s:%s "%s %s %s" %s %s', + self.scheme, + self.host, + self.port, + method, + url, + response.version_string, + response.status, + response.length_remaining, + ) + + return response + + def close(self) -> None: + """ + Close all pooled connections and disable the pool. + """ + if self.pool is None: + return + # Disable access to the pool + old_pool, self.pool = self.pool, None + + # Close all the HTTPConnections in the pool. + _close_pool_connections(old_pool) + + def is_same_host(self, url: str) -> bool: + """ + Check if the given ``url`` is a member of the same host as this + connection pool. + """ + if url.startswith("/"): + return True + + # TODO: Add optional support for socket.gethostbyname checking. + scheme, _, host, port, *_ = parse_url(url) + scheme = scheme or "http" + if host is not None: + host = _normalize_host(host, scheme=scheme) + + # Use explicit default port for comparison when none is given + if self.port and not port: + port = port_by_scheme.get(scheme) + elif not self.port and port == port_by_scheme.get(scheme): + port = None + + return (scheme, host, port) == (self.scheme, self.host, self.port) + + def urlopen( # type: ignore[override] + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + retries: Retry | bool | int | None = None, + redirect: bool = True, + assert_same_host: bool = True, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + pool_timeout: int | None = None, + release_conn: bool | None = None, + chunked: bool = False, + body_pos: _TYPE_BODY_POSITION | None = None, + preload_content: bool = True, + decode_content: bool = True, + **response_kw: typing.Any, + ) -> BaseHTTPResponse: + """ + Get a connection from the pool and perform an HTTP request. This is the + lowest level call for making a request, so you'll need to specify all + the raw details. + + .. note:: + + More commonly, it's appropriate to use a convenience method + such as :meth:`request`. + + .. note:: + + `release_conn` will only behave as expected if + `preload_content=False` because we want to make + `preload_content=False` the default behaviour someday soon without + breaking backwards compatibility. + + :param method: + HTTP request method (such as GET, POST, PUT, etc.) + + :param url: + The URL to perform the request on. + + :param body: + Data to send in the request body, either :class:`str`, :class:`bytes`, + an iterable of :class:`str`/:class:`bytes`, or a file-like object. + + :param headers: + Dictionary of custom headers to send, such as User-Agent, + If-None-Match, etc. If None, pool headers are used. If provided, + these headers completely replace any pool-specific headers. + + :param retries: + Configure the number of retries to allow before raising a + :class:`~urllib3.exceptions.MaxRetryError` exception. + + If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a + :class:`~urllib3.util.retry.Retry` object for fine-grained control + over different types of retries. + Pass an integer number to retry connection errors that many times, + but no other types of errors. Pass zero to never retry. + + If ``False``, then retries are disabled and any exception is raised + immediately. Also, instead of raising a MaxRetryError on redirects, + the redirect response will be returned. + + :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. + + :param redirect: + If True, automatically handle redirects (status codes 301, 302, + 303, 307, 308). Each redirect counts as a retry. Disabling retries + will disable redirect, too. + + :param assert_same_host: + If ``True``, will make sure that the host of the pool requests is + consistent else will raise HostChangedError. When ``False``, you can + use the pool on an HTTP proxy and request foreign hosts. + + :param timeout: + If specified, overrides the default timeout for this one + request. It may be a float (in seconds) or an instance of + :class:`urllib3.util.Timeout`. + + :param pool_timeout: + If set and the pool is set to block=True, then this method will + block for ``pool_timeout`` seconds and raise EmptyPoolError if no + connection is available within the time period. + + :param bool preload_content: + If True, the response's body will be preloaded into memory. + + :param bool decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + + :param release_conn: + If False, then the urlopen call will not release the connection + back into the pool once a response is received (but will release if + you read the entire contents of the response such as when + `preload_content=True`). This is useful if you're not preloading + the response's content immediately. You will need to call + ``r.release_conn()`` on the response ``r`` to return the connection + back into the pool. If None, it takes the value of ``preload_content`` + which defaults to ``True``. + + :param bool chunked: + If True, urllib3 will send the body using chunked transfer + encoding. Otherwise, urllib3 will send the body using the standard + content-length form. Defaults to False. + + :param int body_pos: + Position to seek to in file-like body in the event of a retry or + redirect. Typically this won't need to be set because urllib3 will + auto-populate the value when needed. + """ + parsed_url = parse_url(url) + destination_scheme = parsed_url.scheme + + if headers is None: + headers = self.headers + + if not isinstance(retries, Retry): + retries = Retry.from_int(retries, redirect=redirect, default=self.retries) + + if release_conn is None: + release_conn = preload_content + + # Check host + if assert_same_host and not self.is_same_host(url): + raise HostChangedError(self, url, retries) + + # Ensure that the URL we're connecting to is properly encoded + if url.startswith("/"): + url = to_str(_encode_target(url)) + else: + url = to_str(parsed_url.url) + + conn = None + + # Track whether `conn` needs to be released before + # returning/raising/recursing. Update this variable if necessary, and + # leave `release_conn` constant throughout the function. That way, if + # the function recurses, the original value of `release_conn` will be + # passed down into the recursive call, and its value will be respected. + # + # See issue #651 [1] for details. + # + # [1] + release_this_conn = release_conn + + http_tunnel_required = connection_requires_http_tunnel( + self.proxy, self.proxy_config, destination_scheme + ) + + # Merge the proxy headers. Only done when not using HTTP CONNECT. We + # have to copy the headers dict so we can safely change it without those + # changes being reflected in anyone else's copy. + if not http_tunnel_required: + headers = headers.copy() # type: ignore[attr-defined] + headers.update(self.proxy_headers) # type: ignore[union-attr] + + # Must keep the exception bound to a separate variable or else Python 3 + # complains about UnboundLocalError. + err = None + + # Keep track of whether we cleanly exited the except block. This + # ensures we do proper cleanup in finally. + clean_exit = False + + # Rewind body position, if needed. Record current position + # for future rewinds in the event of a redirect/retry. + body_pos = set_file_position(body, body_pos) + + try: + # Request a connection from the queue. + timeout_obj = self._get_timeout(timeout) + conn = self._get_conn(timeout=pool_timeout) + + conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] + + # Is this a closed/new connection that requires CONNECT tunnelling? + if self.proxy is not None and http_tunnel_required and conn.is_closed: + try: + self._prepare_proxy(conn) + except (BaseSSLError, OSError, SocketTimeout) as e: + self._raise_timeout( + err=e, url=self.proxy.url, timeout_value=conn.timeout + ) + raise + + # If we're going to release the connection in ``finally:``, then + # the response doesn't need to know about the connection. Otherwise + # it will also try to release it and we'll have a double-release + # mess. + response_conn = conn if not release_conn else None + + # Make the request on the HTTPConnection object + response = self._make_request( + conn, + method, + url, + timeout=timeout_obj, + body=body, + headers=headers, + chunked=chunked, + retries=retries, + response_conn=response_conn, + preload_content=preload_content, + decode_content=decode_content, + **response_kw, + ) + + # Everything went great! + clean_exit = True + + except EmptyPoolError: + # Didn't get a connection from the pool, no need to clean up + clean_exit = True + release_this_conn = False + raise + + except ( + TimeoutError, + HTTPException, + OSError, + ProtocolError, + BaseSSLError, + SSLError, + CertificateError, + ProxyError, + ) as e: + # Discard the connection for these exceptions. It will be + # replaced during the next _get_conn() call. + clean_exit = False + new_e: Exception = e + if isinstance(e, (BaseSSLError, CertificateError)): + new_e = SSLError(e) + if isinstance( + new_e, + ( + OSError, + NewConnectionError, + TimeoutError, + SSLError, + HTTPException, + ), + ) and (conn and conn.proxy and not conn.has_connected_to_proxy): + new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) + elif isinstance(new_e, (OSError, HTTPException)): + new_e = ProtocolError("Connection aborted.", new_e) + + retries = retries.increment( + method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2] + ) + retries.sleep() + + # Keep track of the error for the retry warning. + err = e + + finally: + if not clean_exit: + # We hit some kind of exception, handled or otherwise. We need + # to throw the connection away unless explicitly told not to. + # Close the connection, set the variable to None, and make sure + # we put the None back in the pool to avoid leaking it. + if conn: + conn.close() + conn = None + release_this_conn = True + + if release_this_conn: + # Put the connection back to be reused. If the connection is + # expired then it will be None, which will get replaced with a + # fresh connection during _get_conn. + self._put_conn(conn) + + if not conn: + # Try again + log.warning( + "Retrying (%r) after connection broken by '%r': %s", retries, err, url + ) + return self.urlopen( + method, + url, + body, + headers, + retries, + redirect, + assert_same_host, + timeout=timeout, + pool_timeout=pool_timeout, + release_conn=release_conn, + chunked=chunked, + body_pos=body_pos, + preload_content=preload_content, + decode_content=decode_content, + **response_kw, + ) + + # Handle redirect? + redirect_location = redirect and response.get_redirect_location() + if redirect_location: + if response.status == 303: + # Change the method according to RFC 9110, Section 15.4.4. + method = "GET" + # And lose the body not to transfer anything sensitive. + body = None + headers = HTTPHeaderDict(headers)._prepare_for_method_change() + + try: + retries = retries.increment(method, url, response=response, _pool=self) + except MaxRetryError: + if retries.raise_on_redirect: + response.drain_conn() + raise + return response + + response.drain_conn() + retries.sleep_for_retry(response) + log.debug("Redirecting %s -> %s", url, redirect_location) + return self.urlopen( + method, + redirect_location, + body, + headers, + retries=retries, + redirect=redirect, + assert_same_host=assert_same_host, + timeout=timeout, + pool_timeout=pool_timeout, + release_conn=release_conn, + chunked=chunked, + body_pos=body_pos, + preload_content=preload_content, + decode_content=decode_content, + **response_kw, + ) + + # Check if we should retry the HTTP response. + has_retry_after = bool(response.headers.get("Retry-After")) + if retries.is_retry(method, response.status, has_retry_after): + try: + retries = retries.increment(method, url, response=response, _pool=self) + except MaxRetryError: + if retries.raise_on_status: + response.drain_conn() + raise + return response + + response.drain_conn() + retries.sleep(response) + log.debug("Retry: %s", url) + return self.urlopen( + method, + url, + body, + headers, + retries=retries, + redirect=redirect, + assert_same_host=assert_same_host, + timeout=timeout, + pool_timeout=pool_timeout, + release_conn=release_conn, + chunked=chunked, + body_pos=body_pos, + preload_content=preload_content, + decode_content=decode_content, + **response_kw, + ) + + return response + + +class HTTPSConnectionPool(HTTPConnectionPool): + """ + Same as :class:`.HTTPConnectionPool`, but HTTPS. + + :class:`.HTTPSConnection` uses one of ``assert_fingerprint``, + ``assert_hostname`` and ``host`` in this order to verify connections. + If ``assert_hostname`` is False, no verification is done. + + The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, + ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl` + is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade + the connection socket into an SSL socket. + """ + + scheme = "https" + ConnectionCls: type[BaseHTTPSConnection] = HTTPSConnection + + def __init__( + self, + host: str, + port: int | None = None, + timeout: _TYPE_TIMEOUT | None = _DEFAULT_TIMEOUT, + maxsize: int = 1, + block: bool = False, + headers: typing.Mapping[str, str] | None = None, + retries: Retry | bool | int | None = None, + _proxy: Url | None = None, + _proxy_headers: typing.Mapping[str, str] | None = None, + key_file: str | None = None, + cert_file: str | None = None, + cert_reqs: int | str | None = None, + key_password: str | None = None, + ca_certs: str | None = None, + ssl_version: int | str | None = None, + ssl_minimum_version: ssl.TLSVersion | None = None, + ssl_maximum_version: ssl.TLSVersion | None = None, + assert_hostname: str | typing.Literal[False] | None = None, + assert_fingerprint: str | None = None, + ca_cert_dir: str | None = None, + **conn_kw: typing.Any, + ) -> None: + super().__init__( + host, + port, + timeout, + maxsize, + block, + headers, + retries, + _proxy, + _proxy_headers, + **conn_kw, + ) + + self.key_file = key_file + self.cert_file = cert_file + self.cert_reqs = cert_reqs + self.key_password = key_password + self.ca_certs = ca_certs + self.ca_cert_dir = ca_cert_dir + self.ssl_version = ssl_version + self.ssl_minimum_version = ssl_minimum_version + self.ssl_maximum_version = ssl_maximum_version + self.assert_hostname = assert_hostname + self.assert_fingerprint = assert_fingerprint + + def _prepare_proxy(self, conn: HTTPSConnection) -> None: # type: ignore[override] + """Establishes a tunnel connection through HTTP CONNECT.""" + if self.proxy and self.proxy.scheme == "https": + tunnel_scheme = "https" + else: + tunnel_scheme = "http" + + conn.set_tunnel( + scheme=tunnel_scheme, + host=self._tunnel_host, + port=self.port, + headers=self.proxy_headers, + ) + conn.connect() + + def _new_conn(self) -> BaseHTTPSConnection: + """ + Return a fresh :class:`urllib3.connection.HTTPConnection`. + """ + self.num_connections += 1 + log.debug( + "Starting new HTTPS connection (%d): %s:%s", + self.num_connections, + self.host, + self.port or "443", + ) + + if not self.ConnectionCls or self.ConnectionCls is DummyConnection: # type: ignore[comparison-overlap] + raise ImportError( + "Can't connect to HTTPS URL because the SSL module is not available." + ) + + actual_host: str = self.host + actual_port = self.port + if self.proxy is not None and self.proxy.host is not None: + actual_host = self.proxy.host + actual_port = self.proxy.port + + return self.ConnectionCls( + host=actual_host, + port=actual_port, + timeout=self.timeout.connect_timeout, + cert_file=self.cert_file, + key_file=self.key_file, + key_password=self.key_password, + cert_reqs=self.cert_reqs, + ca_certs=self.ca_certs, + ca_cert_dir=self.ca_cert_dir, + assert_hostname=self.assert_hostname, + assert_fingerprint=self.assert_fingerprint, + ssl_version=self.ssl_version, + ssl_minimum_version=self.ssl_minimum_version, + ssl_maximum_version=self.ssl_maximum_version, + **self.conn_kw, + ) + + def _validate_conn(self, conn: BaseHTTPConnection) -> None: + """ + Called right before a request is made, after the socket is created. + """ + super()._validate_conn(conn) + + # Force connect early to allow us to validate the connection. + if conn.is_closed: + conn.connect() + + # TODO revise this, see https://github.com/urllib3/urllib3/issues/2791 + if not conn.is_verified and not conn.proxy_is_verified: + warnings.warn( + ( + f"Unverified HTTPS request is being made to host '{conn.host}'. " + "Adding certificate verification is strongly advised. See: " + "https://urllib3.readthedocs.io/en/latest/advanced-usage.html" + "#tls-warnings" + ), + InsecureRequestWarning, + ) + + +def connection_from_url(url: str, **kw: typing.Any) -> HTTPConnectionPool: + """ + Given a url, return an :class:`.ConnectionPool` instance of its host. + + This is a shortcut for not having to parse out the scheme, host, and port + of the url before creating an :class:`.ConnectionPool` instance. + + :param url: + Absolute URL string that must include the scheme. Port is optional. + + :param \\**kw: + Passes additional parameters to the constructor of the appropriate + :class:`.ConnectionPool`. Useful for specifying things like + timeout, maxsize, headers, etc. + + Example:: + + >>> conn = connection_from_url('http://google.com/') + >>> r = conn.request('GET', '/') + """ + scheme, _, host, port, *_ = parse_url(url) + scheme = scheme or "http" + port = port or port_by_scheme.get(scheme, 80) + if scheme == "https": + return HTTPSConnectionPool(host, port=port, **kw) # type: ignore[arg-type] + else: + return HTTPConnectionPool(host, port=port, **kw) # type: ignore[arg-type] + + +@typing.overload +def _normalize_host(host: None, scheme: str | None) -> None: ... + + +@typing.overload +def _normalize_host(host: str, scheme: str | None) -> str: ... + + +def _normalize_host(host: str | None, scheme: str | None) -> str | None: + """ + Normalize hosts for comparisons and use with sockets. + """ + + host = normalize_host(host, scheme) + + # httplib doesn't like it when we include brackets in IPv6 addresses + # Specifically, if we include brackets but also pass the port then + # httplib crazily doubles up the square brackets on the Host header. + # Instead, we need to make sure we never pass ``None`` as the port. + # However, for backward compatibility reasons we can't actually + # *assert* that. See http://bugs.python.org/issue28539 + if host and host.startswith("[") and host.endswith("]"): + host = host[1:-1] + return host + + +def _url_from_pool( + pool: HTTPConnectionPool | HTTPSConnectionPool, path: str | None = None +) -> str: + """Returns the URL from a given connection pool. This is mainly used for testing and logging.""" + return Url(scheme=pool.scheme, host=pool.host, port=pool.port, path=path).url + + +def _close_pool_connections(pool: queue.LifoQueue[typing.Any]) -> None: + """Drains a queue of connections and closes each one.""" + try: + while True: + conn = pool.get(block=False) + if conn: + conn.close() + except queue.Empty: + pass # Done. diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__init__.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55ff06980acb4e6450528314ce920416698c9199 GIT binary patch literal 198 zcmX@j%ge<81lixDGC}lX5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!O4ZNE&rQ`&&#TaP zNiEJU$uH3N$S+CF(RIqt&(6$C*LO-x&Q8rs(JxEQE7Q-(Owuo?EXl~vGuAUS(l5>| zN!2X?Do9LEE!HnB$^pt7>nG>ul@tLL#>Z#oWtPOp>lIY~;;_lhPbtkwwJTx;+R6yT Q#URED^{G%Mu#15C40;W6<79v1UXjd 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py new file mode 100644 index 00000000..8a3c5beb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +import urllib3.connection + +from ...connectionpool import HTTPConnectionPool, HTTPSConnectionPool +from .connection import EmscriptenHTTPConnection, EmscriptenHTTPSConnection + + +def inject_into_urllib3() -> None: + # override connection classes to use emscripten specific classes + # n.b. mypy complains about the overriding of classes below + # if it isn't ignored + HTTPConnectionPool.ConnectionCls = EmscriptenHTTPConnection + HTTPSConnectionPool.ConnectionCls = EmscriptenHTTPSConnection + urllib3.connection.HTTPConnection = EmscriptenHTTPConnection # type: ignore[misc,assignment] + urllib3.connection.HTTPSConnection = EmscriptenHTTPSConnection # type: ignore[misc,assignment] diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dac1453f84a5e23749f2040ec0f2be05da615de7 GIT binary patch literal 906 zcmaJXk`;+m*Q|_haW1~wJ?*U{+)?Bo z@&hz{3l)+P(#jD<3giyS5k)Fy9pBkb!4#vJH#<8sZ{}O6R74=dzmNUP3_@4NNd$Z& zc-{hifjs2l0EO7a*w~pM<7U0AX9ZT6b915X+JNUgJIIHQ>x2cj0KVhp&n>q&&eRJt z^I0A1tsdt>^^`Ao+?{0&n9=3KF~f3dMr`wh%*~4@kS$A2RNdGse#dlp)broe17+JbyuAU$OlN9`pt* zCd)PmbfF|XWa-8Tr9Sr+rHyE;D?UGkr30b_UFOIN^kOE8o1i|UYX{X@cw+5Ltf$l3 z>xs2HvG%65*7@6?*3NeW?@jCN#QR}AlMf*e&dQcdjU?ArS8!I}(nU%?jsRhlN^^O- zysX$*aV5>_^!5sf;20O2FZh)u2;c5u!MSNwJ}}DElx0vi&dX4Eqkz4VRdCJ8#=D^Y ZWHH8<=*bnT{zeDC(7S6pk2`pg_z&-o+cy9J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7dba89bfd6fb9162ad8243101cfd9825a376a11f GIT binary patch literal 10247 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..405be058c0852f1e2afaf258a664a79f489cccd8 GIT binary patch literal 1426 zcmZux&2Jk;6rb5$ufOA_tpiC)>IOu!RhtDWAyuk+h+JBMlp>TKx(G&_opG|wez>#i z2wOf_YC++ED5v}lRXFf}aH%i{GZGRKs!(r1u8Ncs@2#DF2BGu?R&rZ__r*7)UQDSMT$lcWS0yjxiuH}n>Kh-DeN^IlK zr`Orqt>ztXnkX|EhC#>Q0PYh(9LkBK-G)Mi&b6yBn|XTXL7_Yc^X8Q0cpg{*nMQ;u z@;??2C=eJ9_m@B;_gY{mW`(FAv%wKE(e9`DP*5gPhv+YVZOpaz>wtO5i zHe=oe)oNU{+)j|Pmg}Xl?Dl3}Po?tP!sS9H62%88gV;?~KJ`NpchU_7dE!9LaN)&V zFfWdv(A1l1nYC{K0;l6^;OvvW)+cwf!0XVbcVGQ#8a&==)Tc`x(RE9cv*4?e=eGUS z4g8+4bY&zWXelFdL!olJZU8!AvPPqE6x-WzDD181E4wL@oiuLSH{(veD($_dl=`KNXkSu)y6Ci49Ui{IZQ*N?0gfY>h1^d$Zc^ zs!}3SHW96N=0Cf)`Z9VFDoox07?9Bgd(Zg3@@?he#ysG9(_1j zQz`LNkdpQZ!})A&GV4=f^%)evNp1mr zP5!9V?td~WR_@;%y|Xg-=yB!T&{!EQEf1QHON&Ee`M0IFe`@}^bY*a3@5`ZaWmKO7 z@AlA`8!et4tUqiHjk9Be=H7c|(%k&yU-+AKtAIVVI-mmdB=P8}@{9LJBognyq=OS| z(@nCA5(y9ADw)SvR_zLUsB_lAQQ_)DrEBsc%;95_oCi46DW$)Y<-f?v6LR6uBwG0& RtxD$)3BXtf`Zv-n(Z634W*h(j literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c23336c213501b0020c6a350f02c35c97c6403a2 GIT binary patch literal 12220 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py new file mode 100644 index 00000000..41bfd279 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py @@ -0,0 +1,255 @@ +from __future__ import annotations + +import os +import typing + +# use http.client.HTTPException for consistency with non-emscripten +from http.client import HTTPException as HTTPException # noqa: F401 +from http.client import ResponseNotReady + +from ..._base_connection import _TYPE_BODY +from ...connection import HTTPConnection, ProxyConfig, port_by_scheme +from ...exceptions import TimeoutError +from ...response import BaseHTTPResponse +from ...util.connection import _TYPE_SOCKET_OPTIONS +from ...util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT +from ...util.url import Url +from .fetch import _RequestError, _TimeoutError, send_request, send_streaming_request +from .request import EmscriptenRequest +from .response import EmscriptenHttpResponseWrapper, EmscriptenResponse + +if typing.TYPE_CHECKING: + from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection + + +class EmscriptenHTTPConnection: + default_port: typing.ClassVar[int] = port_by_scheme["http"] + default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] + + timeout: None | (float) + + host: str + port: int + blocksize: int + source_address: tuple[str, int] | None + socket_options: _TYPE_SOCKET_OPTIONS | None + + proxy: Url | None + proxy_config: ProxyConfig | None + + is_verified: bool = False + proxy_is_verified: bool | None = None + + _response: EmscriptenResponse | None + + def __init__( + self, + host: str, + port: int = 0, + *, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + blocksize: int = 8192, + socket_options: _TYPE_SOCKET_OPTIONS | None = None, + proxy: Url | None = None, + proxy_config: ProxyConfig | None = None, + ) -> None: + self.host = host + self.port = port + self.timeout = timeout if isinstance(timeout, float) else 0.0 + self.scheme = "http" + self._closed = True + self._response = None + # ignore these things because we don't + # have control over that stuff + self.proxy = None + self.proxy_config = None + self.blocksize = blocksize + self.source_address = None + self.socket_options = None + self.is_verified = False + + def set_tunnel( + self, + host: str, + port: int | None = 0, + headers: typing.Mapping[str, str] | None = None, + scheme: str = "http", + ) -> None: + pass + + def connect(self) -> None: + pass + + def request( + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + # We know *at least* botocore is depending on the order of the + # first 3 parameters so to be safe we only mark the later ones + # as keyword-only to ensure we have space to extend. + *, + chunked: bool = False, + preload_content: bool = True, + decode_content: bool = True, + enforce_content_length: bool = True, + ) -> None: + self._closed = False + if url.startswith("/"): + # no scheme / host / port included, make a full url + url = f"{self.scheme}://{self.host}:{self.port}" + url + request = EmscriptenRequest( + url=url, + method=method, + timeout=self.timeout if self.timeout else 0, + decode_content=decode_content, + ) + request.set_body(body) + if headers: + for k, v in headers.items(): + request.set_header(k, v) + self._response = None + try: + if not preload_content: + self._response = send_streaming_request(request) + if self._response is None: + self._response = send_request(request) + except _TimeoutError as e: + raise TimeoutError(e.message) from e + except _RequestError as e: + raise HTTPException(e.message) from e + + def getresponse(self) -> BaseHTTPResponse: + if self._response is not None: + return EmscriptenHttpResponseWrapper( + internal_response=self._response, + url=self._response.request.url, + connection=self, + ) + else: + raise ResponseNotReady() + + def close(self) -> None: + self._closed = True + self._response = None + + @property + def is_closed(self) -> bool: + """Whether the connection either is brand new or has been previously closed. + If this property is True then both ``is_connected`` and ``has_connected_to_proxy`` + properties must be False. + """ + return self._closed + + @property + def is_connected(self) -> bool: + """Whether the connection is actively connected to any origin (proxy or target)""" + return True + + @property + def has_connected_to_proxy(self) -> bool: + """Whether the connection has successfully connected to its proxy. + This returns False if no proxy is in use. Used to determine whether + errors are coming from the proxy layer or from tunnelling to the target origin. + """ + return False + + +class EmscriptenHTTPSConnection(EmscriptenHTTPConnection): + default_port = port_by_scheme["https"] + # all this is basically ignored, as browser handles https + cert_reqs: int | str | None = None + ca_certs: str | None = None + ca_cert_dir: str | None = None + ca_cert_data: None | str | bytes = None + cert_file: str | None + key_file: str | None + key_password: str | None + ssl_context: typing.Any | None + ssl_version: int | str | None = None + ssl_minimum_version: int | None = None + ssl_maximum_version: int | None = None + assert_hostname: None | str | typing.Literal[False] + assert_fingerprint: str | None = None + + def __init__( + self, + host: str, + port: int = 0, + *, + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + blocksize: int = 16384, + socket_options: ( + None | _TYPE_SOCKET_OPTIONS + ) = HTTPConnection.default_socket_options, + proxy: Url | None = None, + proxy_config: ProxyConfig | None = None, + cert_reqs: int | str | None = None, + assert_hostname: None | str | typing.Literal[False] = None, + assert_fingerprint: str | None = None, + server_hostname: str | None = None, + ssl_context: typing.Any | None = None, + ca_certs: str | None = None, + ca_cert_dir: str | None = None, + ca_cert_data: None | str | bytes = None, + ssl_minimum_version: int | None = None, + ssl_maximum_version: int | None = None, + ssl_version: int | str | None = None, # Deprecated + cert_file: str | None = None, + key_file: str | None = None, + key_password: str | None = None, + ) -> None: + super().__init__( + host, + port=port, + timeout=timeout, + source_address=source_address, + blocksize=blocksize, + socket_options=socket_options, + proxy=proxy, + proxy_config=proxy_config, + ) + self.scheme = "https" + + self.key_file = key_file + self.cert_file = cert_file + self.key_password = key_password + self.ssl_context = ssl_context + self.server_hostname = server_hostname + self.assert_hostname = assert_hostname + self.assert_fingerprint = assert_fingerprint + self.ssl_version = ssl_version + self.ssl_minimum_version = ssl_minimum_version + self.ssl_maximum_version = ssl_maximum_version + self.ca_certs = ca_certs and os.path.expanduser(ca_certs) + self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) + self.ca_cert_data = ca_cert_data + + self.cert_reqs = None + + # The browser will automatically verify all requests. + # We have no control over that setting. + self.is_verified = True + + def set_cert( + self, + key_file: str | None = None, + cert_file: str | None = None, + cert_reqs: int | str | None = None, + key_password: str | None = None, + ca_certs: str | None = None, + assert_hostname: None | str | typing.Literal[False] = None, + assert_fingerprint: str | None = None, + ca_cert_dir: str | None = None, + ca_cert_data: None | str | bytes = None, + ) -> None: + pass + + +# verify that this class implements BaseHTTP(s) connection correctly +if typing.TYPE_CHECKING: + _supports_http_protocol: BaseHTTPConnection = EmscriptenHTTPConnection("", 0) + _supports_https_protocol: BaseHTTPSConnection = EmscriptenHTTPSConnection("", 0) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js new file mode 100644 index 00000000..243b8622 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js @@ -0,0 +1,110 @@ +let Status = { + SUCCESS_HEADER: -1, + SUCCESS_EOF: -2, + ERROR_TIMEOUT: -3, + ERROR_EXCEPTION: -4, +}; + +let connections = {}; +let nextConnectionID = 1; +const encoder = new TextEncoder(); + +self.addEventListener("message", async function (event) { + if (event.data.close) { + let connectionID = event.data.close; + delete connections[connectionID]; + return; + } else if (event.data.getMore) { + let connectionID = event.data.getMore; + let { curOffset, value, reader, intBuffer, byteBuffer } = + connections[connectionID]; + // if we still have some in buffer, then just send it back straight away + if (!value || curOffset >= value.length) { + // read another buffer if required + try { + let readResponse = await reader.read(); + + if (readResponse.done) { + // read everything - clear connection and return + delete connections[connectionID]; + Atomics.store(intBuffer, 0, Status.SUCCESS_EOF); + Atomics.notify(intBuffer, 0); + // finished reading successfully + // return from event handler + return; + } + curOffset = 0; + connections[connectionID].value = readResponse.value; + value = readResponse.value; + } catch (error) { + console.log("Request exception:", error); + let errorBytes = encoder.encode(error.message); + let written = errorBytes.length; + byteBuffer.set(errorBytes); + intBuffer[1] = written; + Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION); + Atomics.notify(intBuffer, 0); + } + } + + // send as much buffer as we can + let curLen = value.length - curOffset; + if (curLen > byteBuffer.length) { + curLen = byteBuffer.length; + } + byteBuffer.set(value.subarray(curOffset, curOffset + curLen), 0); + + Atomics.store(intBuffer, 0, curLen); // store current length in bytes + Atomics.notify(intBuffer, 0); + curOffset += curLen; + connections[connectionID].curOffset = curOffset; + + return; + } else { + // start fetch + let connectionID = nextConnectionID; + nextConnectionID += 1; + const intBuffer = new Int32Array(event.data.buffer); + const byteBuffer = new Uint8Array(event.data.buffer, 8); + try { + const response = await fetch(event.data.url, event.data.fetchParams); + // return the headers first via textencoder + var headers = []; + for (const pair of response.headers.entries()) { + headers.push([pair[0], pair[1]]); + } + let headerObj = { + headers: headers, + status: response.status, + connectionID, + }; + const headerText = JSON.stringify(headerObj); + let headerBytes = encoder.encode(headerText); + let written = headerBytes.length; + byteBuffer.set(headerBytes); + intBuffer[1] = written; + // make a connection + connections[connectionID] = { + reader: response.body.getReader(), + intBuffer: intBuffer, + byteBuffer: byteBuffer, + value: undefined, + curOffset: 0, + }; + // set header ready + Atomics.store(intBuffer, 0, Status.SUCCESS_HEADER); + Atomics.notify(intBuffer, 0); + // all fetching after this goes through a new postmessage call with getMore + // this allows for parallel requests + } catch (error) { + console.log("Request exception:", error); + let errorBytes = encoder.encode(error.message); + let written = errorBytes.length; + byteBuffer.set(errorBytes); + intBuffer[1] = written; + Atomics.store(intBuffer, 0, Status.ERROR_EXCEPTION); + Atomics.notify(intBuffer, 0); + } + } +}); +self.postMessage({ inited: true }); diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py new file mode 100644 index 00000000..66958217 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py @@ -0,0 +1,728 @@ +""" +Support for streaming http requests in emscripten. + +A few caveats - + +If your browser (or Node.js) has WebAssembly JavaScript Promise Integration enabled +https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration/Overview.md +*and* you launch pyodide using `pyodide.runPythonAsync`, this will fetch data using the +JavaScript asynchronous fetch api (wrapped via `pyodide.ffi.call_sync`). In this case +timeouts and streaming should just work. + +Otherwise, it uses a combination of XMLHttpRequest and a web-worker for streaming. + +This approach has several caveats: + +Firstly, you can't do streaming http in the main UI thread, because atomics.wait isn't allowed. +Streaming only works if you're running pyodide in a web worker. + +Secondly, this uses an extra web worker and SharedArrayBuffer to do the asynchronous fetch +operation, so it requires that you have crossOriginIsolation enabled, by serving over https +(or from localhost) with the two headers below set: + + Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp + +You can tell if cross origin isolation is successfully enabled by looking at the global crossOriginIsolated variable in +JavaScript console. If it isn't, streaming requests will fallback to XMLHttpRequest, i.e. getting the whole +request into a buffer and then returning it. it shows a warning in the JavaScript console in this case. + +Finally, the webworker which does the streaming fetch is created on initial import, but will only be started once +control is returned to javascript. Call `await wait_for_streaming_ready()` to wait for streaming fetch. + +NB: in this code, there are a lot of JavaScript objects. They are named js_* +to make it clear what type of object they are. +""" + +from __future__ import annotations + +import io +import json +from email.parser import Parser +from importlib.resources import files +from typing import TYPE_CHECKING, Any + +import js # type: ignore[import-not-found] +from pyodide.ffi import ( # type: ignore[import-not-found] + JsArray, + JsException, + JsProxy, + to_js, +) + +if TYPE_CHECKING: + from typing_extensions import Buffer + +from .request import EmscriptenRequest +from .response import EmscriptenResponse + +""" +There are some headers that trigger unintended CORS preflight requests. +See also https://github.com/koenvo/pyodide-http/issues/22 +""" +HEADERS_TO_IGNORE = ("user-agent",) + +SUCCESS_HEADER = -1 +SUCCESS_EOF = -2 +ERROR_TIMEOUT = -3 +ERROR_EXCEPTION = -4 + +_STREAMING_WORKER_CODE = ( + files(__package__) + .joinpath("emscripten_fetch_worker.js") + .read_text(encoding="utf-8") +) + + +class _RequestError(Exception): + def __init__( + self, + message: str | None = None, + *, + request: EmscriptenRequest | None = None, + response: EmscriptenResponse | None = None, + ): + self.request = request + self.response = response + self.message = message + super().__init__(self.message) + + +class _StreamingError(_RequestError): + pass + + +class _TimeoutError(_RequestError): + pass + + +def _obj_from_dict(dict_val: dict[str, Any]) -> JsProxy: + return to_js(dict_val, dict_converter=js.Object.fromEntries) + + +class _ReadStream(io.RawIOBase): + def __init__( + self, + int_buffer: JsArray, + byte_buffer: JsArray, + timeout: float, + worker: JsProxy, + connection_id: int, + request: EmscriptenRequest, + ): + self.int_buffer = int_buffer + self.byte_buffer = byte_buffer + self.read_pos = 0 + self.read_len = 0 + self.connection_id = connection_id + self.worker = worker + self.timeout = int(1000 * timeout) if timeout > 0 else None + self.is_live = True + self._is_closed = False + self.request: EmscriptenRequest | None = request + + def __del__(self) -> None: + self.close() + + # this is compatible with _base_connection + def is_closed(self) -> bool: + return self._is_closed + + # for compatibility with RawIOBase + @property + def closed(self) -> bool: + return self.is_closed() + + def close(self) -> None: + if self.is_closed(): + return + self.read_len = 0 + self.read_pos = 0 + self.int_buffer = None + self.byte_buffer = None + self._is_closed = True + self.request = None + if self.is_live: + self.worker.postMessage(_obj_from_dict({"close": self.connection_id})) + self.is_live = False + super().close() + + def readable(self) -> bool: + return True + + def writable(self) -> bool: + return False + + def seekable(self) -> bool: + return False + + def readinto(self, byte_obj: Buffer) -> int: + if not self.int_buffer: + raise _StreamingError( + "No buffer for stream in _ReadStream.readinto", + request=self.request, + response=None, + ) + if self.read_len == 0: + # wait for the worker to send something + js.Atomics.store(self.int_buffer, 0, ERROR_TIMEOUT) + self.worker.postMessage(_obj_from_dict({"getMore": self.connection_id})) + if ( + js.Atomics.wait(self.int_buffer, 0, ERROR_TIMEOUT, self.timeout) + == "timed-out" + ): + raise _TimeoutError + data_len = self.int_buffer[0] + if data_len > 0: + self.read_len = data_len + self.read_pos = 0 + elif data_len == ERROR_EXCEPTION: + string_len = self.int_buffer[1] + # decode the error string + js_decoder = js.TextDecoder.new() + json_str = js_decoder.decode(self.byte_buffer.slice(0, string_len)) + raise _StreamingError( + f"Exception thrown in fetch: {json_str}", + request=self.request, + response=None, + ) + else: + # EOF, free the buffers and return zero + # and free the request + self.is_live = False + self.close() + return 0 + # copy from int32array to python bytes + ret_length = min(self.read_len, len(memoryview(byte_obj))) + subarray = self.byte_buffer.subarray( + self.read_pos, self.read_pos + ret_length + ).to_py() + memoryview(byte_obj)[0:ret_length] = subarray + self.read_len -= ret_length + self.read_pos += ret_length + return ret_length + + +class _StreamingFetcher: + def __init__(self) -> None: + # make web-worker and data buffer on startup + self.streaming_ready = False + + js_data_blob = js.Blob.new( + to_js([_STREAMING_WORKER_CODE], create_pyproxies=False), + _obj_from_dict({"type": "application/javascript"}), + ) + + def promise_resolver(js_resolve_fn: JsProxy, js_reject_fn: JsProxy) -> None: + def onMsg(e: JsProxy) -> None: + self.streaming_ready = True + js_resolve_fn(e) + + def onErr(e: JsProxy) -> None: + js_reject_fn(e) # Defensive: never happens in ci + + self.js_worker.onmessage = onMsg + self.js_worker.onerror = onErr + + js_data_url = js.URL.createObjectURL(js_data_blob) + self.js_worker = js.globalThis.Worker.new(js_data_url) + self.js_worker_ready_promise = js.globalThis.Promise.new(promise_resolver) + + def send(self, request: EmscriptenRequest) -> EmscriptenResponse: + headers = { + k: v for k, v in request.headers.items() if k not in HEADERS_TO_IGNORE + } + + body = request.body + fetch_data = {"headers": headers, "body": to_js(body), "method": request.method} + # start the request off in the worker + timeout = int(1000 * request.timeout) if request.timeout > 0 else None + js_shared_buffer = js.SharedArrayBuffer.new(1048576) + js_int_buffer = js.Int32Array.new(js_shared_buffer) + js_byte_buffer = js.Uint8Array.new(js_shared_buffer, 8) + + js.Atomics.store(js_int_buffer, 0, ERROR_TIMEOUT) + js.Atomics.notify(js_int_buffer, 0) + js_absolute_url = js.URL.new(request.url, js.location).href + self.js_worker.postMessage( + _obj_from_dict( + { + "buffer": js_shared_buffer, + "url": js_absolute_url, + "fetchParams": fetch_data, + } + ) + ) + # wait for the worker to send something + js.Atomics.wait(js_int_buffer, 0, ERROR_TIMEOUT, timeout) + if js_int_buffer[0] == ERROR_TIMEOUT: + raise _TimeoutError( + "Timeout connecting to streaming request", + request=request, + response=None, + ) + elif js_int_buffer[0] == SUCCESS_HEADER: + # got response + # header length is in second int of intBuffer + string_len = js_int_buffer[1] + # decode the rest to a JSON string + js_decoder = js.TextDecoder.new() + # this does a copy (the slice) because decode can't work on shared array + # for some silly reason + json_str = js_decoder.decode(js_byte_buffer.slice(0, string_len)) + # get it as an object + response_obj = json.loads(json_str) + return EmscriptenResponse( + request=request, + status_code=response_obj["status"], + headers=response_obj["headers"], + body=_ReadStream( + js_int_buffer, + js_byte_buffer, + request.timeout, + self.js_worker, + response_obj["connectionID"], + request, + ), + ) + elif js_int_buffer[0] == ERROR_EXCEPTION: + string_len = js_int_buffer[1] + # decode the error string + js_decoder = js.TextDecoder.new() + json_str = js_decoder.decode(js_byte_buffer.slice(0, string_len)) + raise _StreamingError( + f"Exception thrown in fetch: {json_str}", request=request, response=None + ) + else: + raise _StreamingError( + f"Unknown status from worker in fetch: {js_int_buffer[0]}", + request=request, + response=None, + ) + + +class _JSPIReadStream(io.RawIOBase): + """ + A read stream that uses pyodide.ffi.run_sync to read from a JavaScript fetch + response. This requires support for WebAssembly JavaScript Promise Integration + in the containing browser, and for pyodide to be launched via runPythonAsync. + + :param js_read_stream: + The JavaScript stream reader + + :param timeout: + Timeout in seconds + + :param request: + The request we're handling + + :param response: + The response this stream relates to + + :param js_abort_controller: + A JavaScript AbortController object, used for timeouts + """ + + def __init__( + self, + js_read_stream: Any, + timeout: float, + request: EmscriptenRequest, + response: EmscriptenResponse, + js_abort_controller: Any, # JavaScript AbortController for timeouts + ): + self.js_read_stream = js_read_stream + self.timeout = timeout + self._is_closed = False + self._is_done = False + self.request: EmscriptenRequest | None = request + self.response: EmscriptenResponse | None = response + self.current_buffer = None + self.current_buffer_pos = 0 + self.js_abort_controller = js_abort_controller + + def __del__(self) -> None: + self.close() + + # this is compatible with _base_connection + def is_closed(self) -> bool: + return self._is_closed + + # for compatibility with RawIOBase + @property + def closed(self) -> bool: + return self.is_closed() + + def close(self) -> None: + if self.is_closed(): + return + self.read_len = 0 + self.read_pos = 0 + self.js_read_stream.cancel() + self.js_read_stream = None + self._is_closed = True + self._is_done = True + self.request = None + self.response = None + super().close() + + def readable(self) -> bool: + return True + + def writable(self) -> bool: + return False + + def seekable(self) -> bool: + return False + + def _get_next_buffer(self) -> bool: + result_js = _run_sync_with_timeout( + self.js_read_stream.read(), + self.timeout, + self.js_abort_controller, + request=self.request, + response=self.response, + ) + if result_js.done: + self._is_done = True + return False + else: + self.current_buffer = result_js.value.to_py() + self.current_buffer_pos = 0 + return True + + def readinto(self, byte_obj: Buffer) -> int: + if self.current_buffer is None: + if not self._get_next_buffer() or self.current_buffer is None: + self.close() + return 0 + ret_length = min( + len(byte_obj), len(self.current_buffer) - self.current_buffer_pos + ) + byte_obj[0:ret_length] = self.current_buffer[ + self.current_buffer_pos : self.current_buffer_pos + ret_length + ] + self.current_buffer_pos += ret_length + if self.current_buffer_pos == len(self.current_buffer): + self.current_buffer = None + return ret_length + + +# check if we are in a worker or not +def is_in_browser_main_thread() -> bool: + return hasattr(js, "window") and hasattr(js, "self") and js.self == js.window + + +def is_cross_origin_isolated() -> bool: + return hasattr(js, "crossOriginIsolated") and js.crossOriginIsolated + + +def is_in_node() -> bool: + return ( + hasattr(js, "process") + and hasattr(js.process, "release") + and hasattr(js.process.release, "name") + and js.process.release.name == "node" + ) + + +def is_worker_available() -> bool: + return hasattr(js, "Worker") and hasattr(js, "Blob") + + +_fetcher: _StreamingFetcher | None = None + +if is_worker_available() and ( + (is_cross_origin_isolated() and not is_in_browser_main_thread()) + and (not is_in_node()) +): + _fetcher = _StreamingFetcher() +else: + _fetcher = None + + +NODE_JSPI_ERROR = ( + "urllib3 only works in Node.js with pyodide.runPythonAsync" + " and requires the flag --experimental-wasm-stack-switching in " + " versions of node <24." +) + + +def send_streaming_request(request: EmscriptenRequest) -> EmscriptenResponse | None: + if has_jspi(): + return send_jspi_request(request, True) + elif is_in_node(): + raise _RequestError( + message=NODE_JSPI_ERROR, + request=request, + response=None, + ) + + if _fetcher and streaming_ready(): + return _fetcher.send(request) + else: + _show_streaming_warning() + return None + + +_SHOWN_TIMEOUT_WARNING = False + + +def _show_timeout_warning() -> None: + global _SHOWN_TIMEOUT_WARNING + if not _SHOWN_TIMEOUT_WARNING: + _SHOWN_TIMEOUT_WARNING = True + message = "Warning: Timeout is not available on main browser thread" + js.console.warn(message) + + +_SHOWN_STREAMING_WARNING = False + + +def _show_streaming_warning() -> None: + global _SHOWN_STREAMING_WARNING + if not _SHOWN_STREAMING_WARNING: + _SHOWN_STREAMING_WARNING = True + message = "Can't stream HTTP requests because: \n" + if not is_cross_origin_isolated(): + message += " Page is not cross-origin isolated\n" + if is_in_browser_main_thread(): + message += " Python is running in main browser thread\n" + if not is_worker_available(): + message += " Worker or Blob classes are not available in this environment." # Defensive: this is always False in browsers that we test in + if streaming_ready() is False: + message += """ Streaming fetch worker isn't ready. If you want to be sure that streaming fetch +is working, you need to call: 'await urllib3.contrib.emscripten.fetch.wait_for_streaming_ready()`""" + from js import console + + console.warn(message) + + +def send_request(request: EmscriptenRequest) -> EmscriptenResponse: + if has_jspi(): + return send_jspi_request(request, False) + elif is_in_node(): + raise _RequestError( + message=NODE_JSPI_ERROR, + request=request, + response=None, + ) + try: + js_xhr = js.XMLHttpRequest.new() + + if not is_in_browser_main_thread(): + js_xhr.responseType = "arraybuffer" + if request.timeout: + js_xhr.timeout = int(request.timeout * 1000) + else: + js_xhr.overrideMimeType("text/plain; charset=ISO-8859-15") + if request.timeout: + # timeout isn't available on the main thread - show a warning in console + # if it is set + _show_timeout_warning() + + js_xhr.open(request.method, request.url, False) + for name, value in request.headers.items(): + if name.lower() not in HEADERS_TO_IGNORE: + js_xhr.setRequestHeader(name, value) + + js_xhr.send(to_js(request.body)) + + headers = dict(Parser().parsestr(js_xhr.getAllResponseHeaders())) + + if not is_in_browser_main_thread(): + body = js_xhr.response.to_py().tobytes() + else: + body = js_xhr.response.encode("ISO-8859-15") + return EmscriptenResponse( + status_code=js_xhr.status, headers=headers, body=body, request=request + ) + except JsException as err: + if err.name == "TimeoutError": + raise _TimeoutError(err.message, request=request) + elif err.name == "NetworkError": + raise _RequestError(err.message, request=request) + else: + # general http error + raise _RequestError(err.message, request=request) + + +def send_jspi_request( + request: EmscriptenRequest, streaming: bool +) -> EmscriptenResponse: + """ + Send a request using WebAssembly JavaScript Promise Integration + to wrap the asynchronous JavaScript fetch api (experimental). + + :param request: + Request to send + + :param streaming: + Whether to stream the response + + :return: The response object + :rtype: EmscriptenResponse + """ + timeout = request.timeout + js_abort_controller = js.AbortController.new() + headers = {k: v for k, v in request.headers.items() if k not in HEADERS_TO_IGNORE} + req_body = request.body + fetch_data = { + "headers": headers, + "body": to_js(req_body), + "method": request.method, + "signal": js_abort_controller.signal, + } + # Node.js returns the whole response (unlike opaqueredirect in browsers), + # so urllib3 can set `redirect: manual` to control redirects itself. + # https://stackoverflow.com/a/78524615 + if _is_node_js(): + fetch_data["redirect"] = "manual" + # Call JavaScript fetch (async api, returns a promise) + fetcher_promise_js = js.fetch(request.url, _obj_from_dict(fetch_data)) + # Now suspend WebAssembly until we resolve that promise + # or time out. + response_js = _run_sync_with_timeout( + fetcher_promise_js, + timeout, + js_abort_controller, + request=request, + response=None, + ) + headers = {} + header_iter = response_js.headers.entries() + while True: + iter_value_js = header_iter.next() + if getattr(iter_value_js, "done", False): + break + else: + headers[str(iter_value_js.value[0])] = str(iter_value_js.value[1]) + status_code = response_js.status + body: bytes | io.RawIOBase = b"" + + response = EmscriptenResponse( + status_code=status_code, headers=headers, body=b"", request=request + ) + if streaming: + # get via inputstream + if response_js.body is not None: + # get a reader from the fetch response + body_stream_js = response_js.body.getReader() + body = _JSPIReadStream( + body_stream_js, timeout, request, response, js_abort_controller + ) + else: + # get directly via arraybuffer + # n.b. this is another async JavaScript call. + body = _run_sync_with_timeout( + response_js.arrayBuffer(), + timeout, + js_abort_controller, + request=request, + response=response, + ).to_py() + response.body = body + return response + + +def _run_sync_with_timeout( + promise: Any, + timeout: float, + js_abort_controller: Any, + request: EmscriptenRequest | None, + response: EmscriptenResponse | None, +) -> Any: + """ + Await a JavaScript promise synchronously with a timeout which is implemented + via the AbortController + + :param promise: + Javascript promise to await + + :param timeout: + Timeout in seconds + + :param js_abort_controller: + A JavaScript AbortController object, used on timeout + + :param request: + The request being handled + + :param response: + The response being handled (if it exists yet) + + :raises _TimeoutError: If the request times out + :raises _RequestError: If the request raises a JavaScript exception + + :return: The result of awaiting the promise. + """ + timer_id = None + if timeout > 0: + timer_id = js.setTimeout( + js_abort_controller.abort.bind(js_abort_controller), int(timeout * 1000) + ) + try: + from pyodide.ffi import run_sync + + # run_sync here uses WebAssembly JavaScript Promise Integration to + # suspend python until the JavaScript promise resolves. + return run_sync(promise) + except JsException as err: + if err.name == "AbortError": + raise _TimeoutError( + message="Request timed out", request=request, response=response + ) + else: + raise _RequestError(message=err.message, request=request, response=response) + finally: + if timer_id is not None: + js.clearTimeout(timer_id) + + +def has_jspi() -> bool: + """ + Return true if jspi can be used. + + This requires both browser support and also WebAssembly + to be in the correct state - i.e. that the javascript + call into python was async not sync. + + :return: True if jspi can be used. + :rtype: bool + """ + try: + from pyodide.ffi import can_run_sync, run_sync # noqa: F401 + + return bool(can_run_sync()) + except ImportError: + return False + + +def _is_node_js() -> bool: + """ + Check if we are in Node.js. + + :return: True if we are in Node.js. + :rtype: bool + """ + return ( + hasattr(js, "process") + and hasattr(js.process, "release") + # According to the Node.js documentation, the release name is always "node". + and js.process.release.name == "node" + ) + + +def streaming_ready() -> bool | None: + if _fetcher: + return _fetcher.streaming_ready + else: + return None # no fetcher, return None to signify that + + +async def wait_for_streaming_ready() -> bool: + if _fetcher: + await _fetcher.js_worker_ready_promise + return True + else: + return False diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py new file mode 100644 index 00000000..e692e692 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from dataclasses import dataclass, field + +from ..._base_connection import _TYPE_BODY + + +@dataclass +class EmscriptenRequest: + method: str + url: str + params: dict[str, str] | None = None + body: _TYPE_BODY | None = None + headers: dict[str, str] = field(default_factory=dict) + timeout: float = 0 + decode_content: bool = True + + def set_header(self, name: str, value: str) -> None: + self.headers[name.capitalize()] = value + + def set_body(self, body: _TYPE_BODY | None) -> None: + self.body = body diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py new file mode 100644 index 00000000..cb1088a1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py @@ -0,0 +1,277 @@ +from __future__ import annotations + +import json as _json +import logging +import typing +from contextlib import contextmanager +from dataclasses import dataclass +from http.client import HTTPException as HTTPException +from io import BytesIO, IOBase + +from ...exceptions import InvalidHeader, TimeoutError +from ...response import BaseHTTPResponse +from ...util.retry import Retry +from .request import EmscriptenRequest + +if typing.TYPE_CHECKING: + from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection + +log = logging.getLogger(__name__) + + +@dataclass +class EmscriptenResponse: + status_code: int + headers: dict[str, str] + body: IOBase | bytes + request: EmscriptenRequest + + +class EmscriptenHttpResponseWrapper(BaseHTTPResponse): + def __init__( + self, + internal_response: EmscriptenResponse, + url: str | None = None, + connection: BaseHTTPConnection | BaseHTTPSConnection | None = None, + ): + self._pool = None # set by pool class + self._body = None + self._response = internal_response + self._url = url + self._connection = connection + self._closed = False + super().__init__( + headers=internal_response.headers, + status=internal_response.status_code, + request_url=url, + version=0, + version_string="HTTP/?", + reason="", + decode_content=True, + ) + self.length_remaining = self._init_length(self._response.request.method) + self.length_is_certain = False + + @property + def url(self) -> str | None: + return self._url + + @url.setter + def url(self, url: str | None) -> None: + self._url = url + + @property + def connection(self) -> BaseHTTPConnection | BaseHTTPSConnection | None: + return self._connection + + @property + def retries(self) -> Retry | None: + return self._retries + + @retries.setter + def retries(self, retries: Retry | None) -> None: + # Override the request_url if retries has a redirect location. + self._retries = retries + + def stream( + self, amt: int | None = 2**16, decode_content: bool | None = None + ) -> typing.Generator[bytes]: + """ + A generator wrapper for the read() method. A call will block until + ``amt`` bytes have been read from the connection or until the + connection is closed. + + :param amt: + How much of the content to read. The generator will return up to + much data per iteration, but may return less. This is particularly + likely when using compressed data. However, the empty string will + never be returned. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + """ + while True: + data = self.read(amt=amt, decode_content=decode_content) + + if data: + yield data + else: + break + + def _init_length(self, request_method: str | None) -> int | None: + length: int | None + content_length: str | None = self.headers.get("content-length") + + if content_length is not None: + try: + # RFC 7230 section 3.3.2 specifies multiple content lengths can + # be sent in a single Content-Length header + # (e.g. Content-Length: 42, 42). This line ensures the values + # are all valid ints and that as long as the `set` length is 1, + # all values are the same. Otherwise, the header is invalid. + lengths = {int(val) for val in content_length.split(",")} + if len(lengths) > 1: + raise InvalidHeader( + "Content-Length contained multiple " + "unmatching values (%s)" % content_length + ) + length = lengths.pop() + except ValueError: + length = None + else: + if length < 0: + length = None + + else: # if content_length is None + length = None + + # Check for responses that shouldn't include a body + if ( + self.status in (204, 304) + or 100 <= self.status < 200 + or request_method == "HEAD" + ): + length = 0 + + return length + + def read( + self, + amt: int | None = None, + decode_content: bool | None = None, # ignored because browser decodes always + cache_content: bool = False, + ) -> bytes: + if ( + self._closed + or self._response is None + or (isinstance(self._response.body, IOBase) and self._response.body.closed) + ): + return b"" + + with self._error_catcher(): + # body has been preloaded as a string by XmlHttpRequest + if not isinstance(self._response.body, IOBase): + self.length_remaining = len(self._response.body) + self.length_is_certain = True + # wrap body in IOStream + self._response.body = BytesIO(self._response.body) + if amt is not None and amt >= 0: + # don't cache partial content + cache_content = False + data = self._response.body.read(amt) + else: # read all we can (and cache it) + data = self._response.body.read() + if cache_content: + self._body = data + if self.length_remaining is not None: + self.length_remaining = max(self.length_remaining - len(data), 0) + if len(data) == 0 or ( + self.length_is_certain and self.length_remaining == 0 + ): + # definitely finished reading, close response stream + self._response.body.close() + return typing.cast(bytes, data) + + def read_chunked( + self, + amt: int | None = None, + decode_content: bool | None = None, + ) -> typing.Generator[bytes]: + # chunked is handled by browser + while True: + bytes = self.read(amt, decode_content) + if not bytes: + break + yield bytes + + def release_conn(self) -> None: + if not self._pool or not self._connection: + return None + + self._pool._put_conn(self._connection) + self._connection = None + + def drain_conn(self) -> None: + self.close() + + @property + def data(self) -> bytes: + if self._body: + return self._body + else: + return self.read(cache_content=True) + + def json(self) -> typing.Any: + """ + Deserializes the body of the HTTP response as a Python object. + + The body of the HTTP response must be encoded using UTF-8, as per + `RFC 8529 Section 8.1 `_. + + To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to + your custom decoder instead. + + If the body of the HTTP response is not decodable to UTF-8, a + `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a + valid JSON document, a `json.JSONDecodeError` will be raised. + + Read more :ref:`here `. + + :returns: The body of the HTTP response as a Python object. + """ + data = self.data.decode("utf-8") + return _json.loads(data) + + def close(self) -> None: + if not self._closed: + if isinstance(self._response.body, IOBase): + self._response.body.close() + if self._connection: + self._connection.close() + self._connection = None + self._closed = True + + @contextmanager + def _error_catcher(self) -> typing.Generator[None]: + """ + Catch Emscripten specific exceptions thrown by fetch.py, + instead re-raising urllib3 variants, so that low-level exceptions + are not leaked in the high-level api. + + On exit, release the connection back to the pool. + """ + from .fetch import _RequestError, _TimeoutError # avoid circular import + + clean_exit = False + + try: + yield + # If no exception is thrown, we should avoid cleaning up + # unnecessarily. + clean_exit = True + except _TimeoutError as e: + raise TimeoutError(str(e)) + except _RequestError as e: + raise HTTPException(str(e)) + finally: + # If we didn't terminate cleanly, we need to throw away our + # connection. + if not clean_exit: + # The response may not be closed but we're not going to use it + # anymore so close it now + if ( + isinstance(self._response.body, IOBase) + and not self._response.body.closed + ): + self._response.body.close() + # release the connection back to the pool + self.release_conn() + else: + # If we have read everything from the response stream, + # return the connection back to the pool. + if ( + isinstance(self._response.body, IOBase) + and self._response.body.closed + ): + self.release_conn() diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py new file mode 100644 index 00000000..3714500e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py @@ -0,0 +1,564 @@ +""" +Module for using pyOpenSSL as a TLS backend. This module was relevant before +the standard library ``ssl`` module supported SNI, but now that we've dropped +support for Python 2.7 all relevant Python versions support SNI so +**this module is no longer recommended**. + +This needs the following packages installed: + +* `pyOpenSSL`_ (tested with 16.0.0) +* `cryptography`_ (minimum 1.3.4, from pyopenssl) +* `idna`_ (minimum 2.0) + +However, pyOpenSSL depends on cryptography, so while we use all three directly here we +end up having relatively few packages required. + +You can install them with the following command: + +.. code-block:: bash + + $ python -m pip install pyopenssl cryptography idna + +To activate certificate checking, call +:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code +before you begin making HTTP requests. This can be done in a ``sitecustomize`` +module, or at any other time before your application begins using ``urllib3``, +like this: + +.. code-block:: python + + try: + import urllib3.contrib.pyopenssl + urllib3.contrib.pyopenssl.inject_into_urllib3() + except ImportError: + pass + +.. _pyopenssl: https://www.pyopenssl.org +.. _cryptography: https://cryptography.io +.. _idna: https://github.com/kjd/idna +""" + +from __future__ import annotations + +import OpenSSL.SSL # type: ignore[import-untyped] +from cryptography import x509 + +try: + from cryptography.x509 import UnsupportedExtension # type: ignore[attr-defined] +except ImportError: + # UnsupportedExtension is gone in cryptography >= 2.1.0 + class UnsupportedExtension(Exception): # type: ignore[no-redef] + pass + + +import logging +import ssl +import typing +from io import BytesIO +from socket import socket as socket_cls +from socket import timeout + +from .. import util + +if typing.TYPE_CHECKING: + from OpenSSL.crypto import X509 # type: ignore[import-untyped] + + +__all__ = ["inject_into_urllib3", "extract_from_urllib3"] + +# Map from urllib3 to PyOpenSSL compatible parameter-values. +_openssl_versions: dict[int, int] = { + util.ssl_.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD, # type: ignore[attr-defined] + util.ssl_.PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD, # type: ignore[attr-defined] + ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, +} + +if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"): + _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD + +if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"): + _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD + + +_stdlib_to_openssl_verify = { + ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, + ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, + ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER + + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, +} +_openssl_to_stdlib_verify = {v: k for k, v in _stdlib_to_openssl_verify.items()} + +# The SSLvX values are the most likely to be missing in the future +# but we check them all just to be sure. +_OP_NO_SSLv2_OR_SSLv3: int = getattr(OpenSSL.SSL, "OP_NO_SSLv2", 0) | getattr( + OpenSSL.SSL, "OP_NO_SSLv3", 0 +) +_OP_NO_TLSv1: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1", 0) +_OP_NO_TLSv1_1: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_1", 0) +_OP_NO_TLSv1_2: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_2", 0) +_OP_NO_TLSv1_3: int = getattr(OpenSSL.SSL, "OP_NO_TLSv1_3", 0) + +_openssl_to_ssl_minimum_version: dict[int, int] = { + ssl.TLSVersion.MINIMUM_SUPPORTED: _OP_NO_SSLv2_OR_SSLv3, + ssl.TLSVersion.TLSv1: _OP_NO_SSLv2_OR_SSLv3, + ssl.TLSVersion.TLSv1_1: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1, + ssl.TLSVersion.TLSv1_2: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1, + ssl.TLSVersion.TLSv1_3: ( + _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 + ), + ssl.TLSVersion.MAXIMUM_SUPPORTED: ( + _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 + ), +} +_openssl_to_ssl_maximum_version: dict[int, int] = { + ssl.TLSVersion.MINIMUM_SUPPORTED: ( + _OP_NO_SSLv2_OR_SSLv3 + | _OP_NO_TLSv1 + | _OP_NO_TLSv1_1 + | _OP_NO_TLSv1_2 + | _OP_NO_TLSv1_3 + ), + ssl.TLSVersion.TLSv1: ( + _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_1 | _OP_NO_TLSv1_2 | _OP_NO_TLSv1_3 + ), + ssl.TLSVersion.TLSv1_1: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_2 | _OP_NO_TLSv1_3, + ssl.TLSVersion.TLSv1_2: _OP_NO_SSLv2_OR_SSLv3 | _OP_NO_TLSv1_3, + ssl.TLSVersion.TLSv1_3: _OP_NO_SSLv2_OR_SSLv3, + ssl.TLSVersion.MAXIMUM_SUPPORTED: _OP_NO_SSLv2_OR_SSLv3, +} + +# OpenSSL will only write 16K at a time +SSL_WRITE_BLOCKSIZE = 16384 + +orig_util_SSLContext = util.ssl_.SSLContext + + +log = logging.getLogger(__name__) + + +def inject_into_urllib3() -> None: + "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support." + + _validate_dependencies_met() + + util.SSLContext = PyOpenSSLContext # type: ignore[assignment] + util.ssl_.SSLContext = PyOpenSSLContext # type: ignore[assignment] + util.IS_PYOPENSSL = True + util.ssl_.IS_PYOPENSSL = True + + +def extract_from_urllib3() -> None: + "Undo monkey-patching by :func:`inject_into_urllib3`." + + util.SSLContext = orig_util_SSLContext + util.ssl_.SSLContext = orig_util_SSLContext + util.IS_PYOPENSSL = False + util.ssl_.IS_PYOPENSSL = False + + +def _validate_dependencies_met() -> None: + """ + Verifies that PyOpenSSL's package-level dependencies have been met. + Throws `ImportError` if they are not met. + """ + # Method added in `cryptography==1.1`; not available in older versions + from cryptography.x509.extensions import Extensions + + if getattr(Extensions, "get_extension_for_class", None) is None: + raise ImportError( + "'cryptography' module missing required functionality. " + "Try upgrading to v1.3.4 or newer." + ) + + # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 + # attribute is only present on those versions. + from OpenSSL.crypto import X509 + + x509 = X509() + if getattr(x509, "_x509", None) is None: + raise ImportError( + "'pyOpenSSL' module missing required functionality. " + "Try upgrading to v0.14 or newer." + ) + + +def _dnsname_to_stdlib(name: str) -> str | None: + """ + Converts a dNSName SubjectAlternativeName field to the form used by the + standard library on the given Python version. + + Cryptography produces a dNSName as a unicode string that was idna-decoded + from ASCII bytes. We need to idna-encode that string to get it back, and + then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib + uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). + + If the name cannot be idna-encoded then we return None signalling that + the name given should be skipped. + """ + + def idna_encode(name: str) -> bytes | None: + """ + Borrowed wholesale from the Python Cryptography Project. It turns out + that we can't just safely call `idna.encode`: it can explode for + wildcard names. This avoids that problem. + """ + import idna + + try: + for prefix in ["*.", "."]: + if name.startswith(prefix): + name = name[len(prefix) :] + return prefix.encode("ascii") + idna.encode(name) + return idna.encode(name) + except idna.core.IDNAError: + return None + + # Don't send IPv6 addresses through the IDNA encoder. + if ":" in name: + return name + + encoded_name = idna_encode(name) + if encoded_name is None: + return None + return encoded_name.decode("utf-8") + + +def get_subj_alt_name(peer_cert: X509) -> list[tuple[str, str]]: + """ + Given an PyOpenSSL certificate, provides all the subject alternative names. + """ + cert = peer_cert.to_cryptography() + + # We want to find the SAN extension. Ask Cryptography to locate it (it's + # faster than looping in Python) + try: + ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value + except x509.ExtensionNotFound: + # No such extension, return the empty list. + return [] + except ( + x509.DuplicateExtension, + UnsupportedExtension, + x509.UnsupportedGeneralNameType, + UnicodeError, + ) as e: + # A problem has been found with the quality of the certificate. Assume + # no SAN field is present. + log.warning( + "A problem was encountered with the certificate that prevented " + "urllib3 from finding the SubjectAlternativeName field. This can " + "affect certificate validation. The error was %s", + e, + ) + return [] + + # We want to return dNSName and iPAddress fields. We need to cast the IPs + # back to strings because the match_hostname function wants them as + # strings. + # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 + # decoded. This is pretty frustrating, but that's what the standard library + # does with certificates, and so we need to attempt to do the same. + # We also want to skip over names which cannot be idna encoded. + names = [ + ("DNS", name) + for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName)) + if name is not None + ] + names.extend( + ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress) + ) + + return names + + +class WrappedSocket: + """API-compatibility wrapper for Python OpenSSL's Connection-class.""" + + def __init__( + self, + connection: OpenSSL.SSL.Connection, + socket: socket_cls, + suppress_ragged_eofs: bool = True, + ) -> None: + self.connection = connection + self.socket = socket + self.suppress_ragged_eofs = suppress_ragged_eofs + self._io_refs = 0 + self._closed = False + + def fileno(self) -> int: + return self.socket.fileno() + + # Copy-pasted from Python 3.5 source code + def _decref_socketios(self) -> None: + if self._io_refs > 0: + self._io_refs -= 1 + if self._closed: + self.close() + + def recv(self, *args: typing.Any, **kwargs: typing.Any) -> bytes: + try: + data = self.connection.recv(*args, **kwargs) + except OpenSSL.SSL.SysCallError as e: + if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): + return b"" + else: + raise OSError(e.args[0], str(e)) from e + except OpenSSL.SSL.ZeroReturnError: + if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: + return b"" + else: + raise + except OpenSSL.SSL.WantReadError as e: + if not util.wait_for_read(self.socket, self.socket.gettimeout()): + raise timeout("The read operation timed out") from e + else: + return self.recv(*args, **kwargs) + + # TLS 1.3 post-handshake authentication + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"read error: {e!r}") from e + else: + return data # type: ignore[no-any-return] + + def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: + try: + return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] + except OpenSSL.SSL.SysCallError as e: + if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): + return 0 + else: + raise OSError(e.args[0], str(e)) from e + except OpenSSL.SSL.ZeroReturnError: + if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: + return 0 + else: + raise + except OpenSSL.SSL.WantReadError as e: + if not util.wait_for_read(self.socket, self.socket.gettimeout()): + raise timeout("The read operation timed out") from e + else: + return self.recv_into(*args, **kwargs) + + # TLS 1.3 post-handshake authentication + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"read error: {e!r}") from e + + def settimeout(self, timeout: float) -> None: + return self.socket.settimeout(timeout) + + def _send_until_done(self, data: bytes) -> int: + while True: + try: + return self.connection.send(data) # type: ignore[no-any-return] + except OpenSSL.SSL.WantWriteError as e: + if not util.wait_for_write(self.socket, self.socket.gettimeout()): + raise timeout() from e + continue + except OpenSSL.SSL.SysCallError as e: + raise OSError(e.args[0], str(e)) from e + + def sendall(self, data: bytes) -> None: + total_sent = 0 + while total_sent < len(data): + sent = self._send_until_done( + data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE] + ) + total_sent += sent + + def shutdown(self, how: int) -> None: + try: + self.connection.shutdown() + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"shutdown error: {e!r}") from e + + def close(self) -> None: + self._closed = True + if self._io_refs <= 0: + self._real_close() + + def _real_close(self) -> None: + try: + return self.connection.close() # type: ignore[no-any-return] + except OpenSSL.SSL.Error: + return + + def getpeercert( + self, binary_form: bool = False + ) -> dict[str, list[typing.Any]] | None: + x509 = self.connection.get_peer_certificate() + + if not x509: + return x509 # type: ignore[no-any-return] + + if binary_form: + return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509) # type: ignore[no-any-return] + + return { + "subject": ((("commonName", x509.get_subject().CN),),), # type: ignore[dict-item] + "subjectAltName": get_subj_alt_name(x509), + } + + def version(self) -> str: + return self.connection.get_protocol_version_name() # type: ignore[no-any-return] + + def selected_alpn_protocol(self) -> str | None: + alpn_proto = self.connection.get_alpn_proto_negotiated() + return alpn_proto.decode() if alpn_proto else None + + +WrappedSocket.makefile = socket_cls.makefile # type: ignore[attr-defined] + + +class PyOpenSSLContext: + """ + I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible + for translating the interface of the standard library ``SSLContext`` object + to calls into PyOpenSSL. + """ + + def __init__(self, protocol: int) -> None: + self.protocol = _openssl_versions[protocol] + self._ctx = OpenSSL.SSL.Context(self.protocol) + self._options = 0 + self.check_hostname = False + self._minimum_version: int = ssl.TLSVersion.MINIMUM_SUPPORTED + self._maximum_version: int = ssl.TLSVersion.MAXIMUM_SUPPORTED + self._verify_flags: int = ssl.VERIFY_X509_TRUSTED_FIRST + + @property + def options(self) -> int: + return self._options + + @options.setter + def options(self, value: int) -> None: + self._options = value + self._set_ctx_options() + + @property + def verify_flags(self) -> int: + return self._verify_flags + + @verify_flags.setter + def verify_flags(self, value: int) -> None: + self._verify_flags = value + self._ctx.get_cert_store().set_flags(self._verify_flags) + + @property + def verify_mode(self) -> int: + return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] + + @verify_mode.setter + def verify_mode(self, value: ssl.VerifyMode) -> None: + self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback) + + def set_default_verify_paths(self) -> None: + self._ctx.set_default_verify_paths() + + def set_ciphers(self, ciphers: bytes | str) -> None: + if isinstance(ciphers, str): + ciphers = ciphers.encode("utf-8") + self._ctx.set_cipher_list(ciphers) + + def load_verify_locations( + self, + cafile: str | None = None, + capath: str | None = None, + cadata: bytes | None = None, + ) -> None: + if cafile is not None: + cafile = cafile.encode("utf-8") # type: ignore[assignment] + if capath is not None: + capath = capath.encode("utf-8") # type: ignore[assignment] + try: + self._ctx.load_verify_locations(cafile, capath) + if cadata is not None: + self._ctx.load_verify_locations(BytesIO(cadata)) + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"unable to load trusted certificates: {e!r}") from e + + def load_cert_chain( + self, + certfile: str, + keyfile: str | None = None, + password: str | None = None, + ) -> None: + try: + self._ctx.use_certificate_chain_file(certfile) + if password is not None: + if not isinstance(password, bytes): + password = password.encode("utf-8") # type: ignore[assignment] + self._ctx.set_passwd_cb(lambda *_: password) + self._ctx.use_privatekey_file(keyfile or certfile) + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"Unable to load certificate chain: {e!r}") from e + + def set_alpn_protocols(self, protocols: list[bytes | str]) -> None: + protocols = [util.util.to_bytes(p, "ascii") for p in protocols] + return self._ctx.set_alpn_protos(protocols) # type: ignore[no-any-return] + + def wrap_socket( + self, + sock: socket_cls, + server_side: bool = False, + do_handshake_on_connect: bool = True, + suppress_ragged_eofs: bool = True, + server_hostname: bytes | str | None = None, + ) -> WrappedSocket: + cnx = OpenSSL.SSL.Connection(self._ctx, sock) + + # If server_hostname is an IP, don't use it for SNI, per RFC6066 Section 3 + if server_hostname and not util.ssl_.is_ipaddress(server_hostname): + if isinstance(server_hostname, str): + server_hostname = server_hostname.encode("utf-8") + cnx.set_tlsext_host_name(server_hostname) + + cnx.set_connect_state() + + while True: + try: + cnx.do_handshake() + except OpenSSL.SSL.WantReadError as e: + if not util.wait_for_read(sock, sock.gettimeout()): + raise timeout("select timed out") from e + continue + except OpenSSL.SSL.Error as e: + raise ssl.SSLError(f"bad handshake: {e!r}") from e + break + + return WrappedSocket(cnx, sock) + + def _set_ctx_options(self) -> None: + self._ctx.set_options( + self._options + | _openssl_to_ssl_minimum_version[self._minimum_version] + | _openssl_to_ssl_maximum_version[self._maximum_version] + ) + + @property + def minimum_version(self) -> int: + return self._minimum_version + + @minimum_version.setter + def minimum_version(self, minimum_version: int) -> None: + self._minimum_version = minimum_version + self._set_ctx_options() + + @property + def maximum_version(self) -> int: + return self._maximum_version + + @maximum_version.setter + def maximum_version(self, maximum_version: int) -> None: + self._maximum_version = maximum_version + self._set_ctx_options() + + +def _verify_callback( + cnx: OpenSSL.SSL.Connection, + x509: X509, + err_no: int, + err_depth: int, + return_code: int, +) -> bool: + return err_no == 0 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py new file mode 100644 index 00000000..c62b5e03 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py @@ -0,0 +1,228 @@ +""" +This module contains provisional support for SOCKS proxies from within +urllib3. This module supports SOCKS4, SOCKS4A (an extension of SOCKS4), and +SOCKS5. To enable its functionality, either install PySocks or install this +module with the ``socks`` extra. + +The SOCKS implementation supports the full range of urllib3 features. It also +supports the following SOCKS features: + +- SOCKS4A (``proxy_url='socks4a://...``) +- SOCKS4 (``proxy_url='socks4://...``) +- SOCKS5 with remote DNS (``proxy_url='socks5h://...``) +- SOCKS5 with local DNS (``proxy_url='socks5://...``) +- Usernames and passwords for the SOCKS proxy + +.. note:: + It is recommended to use ``socks5h://`` or ``socks4a://`` schemes in + your ``proxy_url`` to ensure that DNS resolution is done from the remote + server instead of client-side when connecting to a domain name. + +SOCKS4 supports IPv4 and domain names with the SOCKS4A extension. SOCKS5 +supports IPv4, IPv6, and domain names. + +When connecting to a SOCKS4 proxy the ``username`` portion of the ``proxy_url`` +will be sent as the ``userid`` section of the SOCKS request: + +.. code-block:: python + + proxy_url="socks4a://@proxy-host" + +When connecting to a SOCKS5 proxy the ``username`` and ``password`` portion +of the ``proxy_url`` will be sent as the username/password to authenticate +with the proxy: + +.. code-block:: python + + proxy_url="socks5h://:@proxy-host" + +""" + +from __future__ import annotations + +try: + import socks # type: ignore[import-not-found] +except ImportError: + import warnings + + from ..exceptions import DependencyWarning + + warnings.warn( + ( + "SOCKS support in urllib3 requires the installation of optional " + "dependencies: specifically, PySocks. For more information, see " + "https://urllib3.readthedocs.io/en/latest/advanced-usage.html#socks-proxies" + ), + DependencyWarning, + ) + raise + +import typing +from socket import timeout as SocketTimeout + +from ..connection import HTTPConnection, HTTPSConnection +from ..connectionpool import HTTPConnectionPool, HTTPSConnectionPool +from ..exceptions import ConnectTimeoutError, NewConnectionError +from ..poolmanager import PoolManager +from ..util.url import parse_url + +try: + import ssl +except ImportError: + ssl = None # type: ignore[assignment] + + +class _TYPE_SOCKS_OPTIONS(typing.TypedDict): + socks_version: int + proxy_host: str | None + proxy_port: str | None + username: str | None + password: str | None + rdns: bool + + +class SOCKSConnection(HTTPConnection): + """ + A plain-text HTTP connection that connects via a SOCKS proxy. + """ + + def __init__( + self, + _socks_options: _TYPE_SOCKS_OPTIONS, + *args: typing.Any, + **kwargs: typing.Any, + ) -> None: + self._socks_options = _socks_options + super().__init__(*args, **kwargs) + + def _new_conn(self) -> socks.socksocket: + """ + Establish a new connection via the SOCKS proxy. + """ + extra_kw: dict[str, typing.Any] = {} + if self.source_address: + extra_kw["source_address"] = self.source_address + + if self.socket_options: + extra_kw["socket_options"] = self.socket_options + + try: + conn = socks.create_connection( + (self.host, self.port), + proxy_type=self._socks_options["socks_version"], + proxy_addr=self._socks_options["proxy_host"], + proxy_port=self._socks_options["proxy_port"], + proxy_username=self._socks_options["username"], + proxy_password=self._socks_options["password"], + proxy_rdns=self._socks_options["rdns"], + timeout=self.timeout, + **extra_kw, + ) + + except SocketTimeout as e: + raise ConnectTimeoutError( + self, + f"Connection to {self.host} timed out. (connect timeout={self.timeout})", + ) from e + + except socks.ProxyError as e: + # This is fragile as hell, but it seems to be the only way to raise + # useful errors here. + if e.socket_err: + error = e.socket_err + if isinstance(error, SocketTimeout): + raise ConnectTimeoutError( + self, + f"Connection to {self.host} timed out. (connect timeout={self.timeout})", + ) from e + else: + # Adding `from e` messes with coverage somehow, so it's omitted. + # See #2386. + raise NewConnectionError( + self, f"Failed to establish a new connection: {error}" + ) + else: + raise NewConnectionError( + self, f"Failed to establish a new connection: {e}" + ) from e + + except OSError as e: # Defensive: PySocks should catch all these. + raise NewConnectionError( + self, f"Failed to establish a new connection: {e}" + ) from e + + return conn + + +# We don't need to duplicate the Verified/Unverified distinction from +# urllib3/connection.py here because the HTTPSConnection will already have been +# correctly set to either the Verified or Unverified form by that module. This +# means the SOCKSHTTPSConnection will automatically be the correct type. +class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): + pass + + +class SOCKSHTTPConnectionPool(HTTPConnectionPool): + ConnectionCls = SOCKSConnection + + +class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): + ConnectionCls = SOCKSHTTPSConnection + + +class SOCKSProxyManager(PoolManager): + """ + A version of the urllib3 ProxyManager that routes connections via the + defined SOCKS proxy. + """ + + pool_classes_by_scheme = { + "http": SOCKSHTTPConnectionPool, + "https": SOCKSHTTPSConnectionPool, + } + + def __init__( + self, + proxy_url: str, + username: str | None = None, + password: str | None = None, + num_pools: int = 10, + headers: typing.Mapping[str, str] | None = None, + **connection_pool_kw: typing.Any, + ): + parsed = parse_url(proxy_url) + + if username is None and password is None and parsed.auth is not None: + split = parsed.auth.split(":") + if len(split) == 2: + username, password = split + if parsed.scheme == "socks5": + socks_version = socks.PROXY_TYPE_SOCKS5 + rdns = False + elif parsed.scheme == "socks5h": + socks_version = socks.PROXY_TYPE_SOCKS5 + rdns = True + elif parsed.scheme == "socks4": + socks_version = socks.PROXY_TYPE_SOCKS4 + rdns = False + elif parsed.scheme == "socks4a": + socks_version = socks.PROXY_TYPE_SOCKS4 + rdns = True + else: + raise ValueError(f"Unable to determine SOCKS version from {proxy_url}") + + self.proxy_url = proxy_url + + socks_options = { + "socks_version": socks_version, + "proxy_host": parsed.host, + "proxy_port": parsed.port, + "username": username, + "password": password, + "rdns": rdns, + } + connection_pool_kw["_socks_options"] = socks_options + + super().__init__(num_pools, headers, **connection_pool_kw) + + self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/exceptions.py b/Backend/venv/lib/python3.12/site-packages/urllib3/exceptions.py new file mode 100644 index 00000000..a0de9d6c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/exceptions.py @@ -0,0 +1,335 @@ +from __future__ import annotations + +import socket +import typing +import warnings +from email.errors import MessageDefect +from http.client import IncompleteRead as httplib_IncompleteRead + +if typing.TYPE_CHECKING: + from .connection import HTTPConnection + from .connectionpool import ConnectionPool + from .response import HTTPResponse + from .util.retry import Retry + +# Base Exceptions + + +class HTTPError(Exception): + """Base exception used by this module.""" + + +class HTTPWarning(Warning): + """Base warning used by this module.""" + + +_TYPE_REDUCE_RESULT = tuple[typing.Callable[..., object], tuple[object, ...]] + + +class PoolError(HTTPError): + """Base exception for errors caused within a pool.""" + + def __init__(self, pool: ConnectionPool, message: str) -> None: + self.pool = pool + self._message = message + super().__init__(f"{pool}: {message}") + + def __reduce__(self) -> _TYPE_REDUCE_RESULT: + # For pickling purposes. + return self.__class__, (None, self._message) + + +class RequestError(PoolError): + """Base exception for PoolErrors that have associated URLs.""" + + def __init__(self, pool: ConnectionPool, url: str, message: str) -> None: + self.url = url + super().__init__(pool, message) + + def __reduce__(self) -> _TYPE_REDUCE_RESULT: + # For pickling purposes. + return self.__class__, (None, self.url, self._message) + + +class SSLError(HTTPError): + """Raised when SSL certificate fails in an HTTPS connection.""" + + +class ProxyError(HTTPError): + """Raised when the connection to a proxy fails.""" + + # The original error is also available as __cause__. + original_error: Exception + + def __init__(self, message: str, error: Exception) -> None: + super().__init__(message, error) + self.original_error = error + + +class DecodeError(HTTPError): + """Raised when automatic decoding based on Content-Type fails.""" + + +class ProtocolError(HTTPError): + """Raised when something unexpected happens mid-request/response.""" + + +#: Renamed to ProtocolError but aliased for backwards compatibility. +ConnectionError = ProtocolError + + +# Leaf Exceptions + + +class MaxRetryError(RequestError): + """Raised when the maximum number of retries is exceeded. + + :param pool: The connection pool + :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` + :param str url: The requested Url + :param reason: The underlying error + :type reason: :class:`Exception` + + """ + + def __init__( + self, pool: ConnectionPool, url: str, reason: Exception | None = None + ) -> None: + self.reason = reason + + message = f"Max retries exceeded with url: {url} (Caused by {reason!r})" + + super().__init__(pool, url, message) + + def __reduce__(self) -> _TYPE_REDUCE_RESULT: + # For pickling purposes. + return self.__class__, (None, self.url, self.reason) + + +class HostChangedError(RequestError): + """Raised when an existing pool gets a request for a foreign host.""" + + def __init__( + self, pool: ConnectionPool, url: str, retries: Retry | int = 3 + ) -> None: + message = f"Tried to open a foreign host with url: {url}" + super().__init__(pool, url, message) + self.retries = retries + + +class TimeoutStateError(HTTPError): + """Raised when passing an invalid state to a timeout""" + + +class TimeoutError(HTTPError): + """Raised when a socket timeout error occurs. + + Catching this error will catch both :exc:`ReadTimeoutErrors + ` and :exc:`ConnectTimeoutErrors `. + """ + + +class ReadTimeoutError(TimeoutError, RequestError): + """Raised when a socket timeout occurs while receiving data from a server""" + + +# This timeout error does not have a URL attached and needs to inherit from the +# base HTTPError +class ConnectTimeoutError(TimeoutError): + """Raised when a socket timeout occurs while connecting to a server""" + + +class NewConnectionError(ConnectTimeoutError, HTTPError): + """Raised when we fail to establish a new connection. Usually ECONNREFUSED.""" + + def __init__(self, conn: HTTPConnection, message: str) -> None: + self.conn = conn + self._message = message + super().__init__(f"{conn}: {message}") + + def __reduce__(self) -> _TYPE_REDUCE_RESULT: + # For pickling purposes. + return self.__class__, (None, self._message) + + @property + def pool(self) -> HTTPConnection: + warnings.warn( + "The 'pool' property is deprecated and will be removed " + "in urllib3 v2.1.0. Use 'conn' instead.", + DeprecationWarning, + stacklevel=2, + ) + + return self.conn + + +class NameResolutionError(NewConnectionError): + """Raised when host name resolution fails.""" + + def __init__(self, host: str, conn: HTTPConnection, reason: socket.gaierror): + message = f"Failed to resolve '{host}' ({reason})" + self._host = host + self._reason = reason + super().__init__(conn, message) + + def __reduce__(self) -> _TYPE_REDUCE_RESULT: + # For pickling purposes. + return self.__class__, (self._host, None, self._reason) + + +class EmptyPoolError(PoolError): + """Raised when a pool runs out of connections and no more are allowed.""" + + +class FullPoolError(PoolError): + """Raised when we try to add a connection to a full pool in blocking mode.""" + + +class ClosedPoolError(PoolError): + """Raised when a request enters a pool after the pool has been closed.""" + + +class LocationValueError(ValueError, HTTPError): + """Raised when there is something wrong with a given URL input.""" + + +class LocationParseError(LocationValueError): + """Raised when get_host or similar fails to parse the URL input.""" + + def __init__(self, location: str) -> None: + message = f"Failed to parse: {location}" + super().__init__(message) + + self.location = location + + +class URLSchemeUnknown(LocationValueError): + """Raised when a URL input has an unsupported scheme.""" + + def __init__(self, scheme: str): + message = f"Not supported URL scheme {scheme}" + super().__init__(message) + + self.scheme = scheme + + +class ResponseError(HTTPError): + """Used as a container for an error reason supplied in a MaxRetryError.""" + + GENERIC_ERROR = "too many error responses" + SPECIFIC_ERROR = "too many {status_code} error responses" + + +class SecurityWarning(HTTPWarning): + """Warned when performing security reducing actions""" + + +class InsecureRequestWarning(SecurityWarning): + """Warned when making an unverified HTTPS request.""" + + +class NotOpenSSLWarning(SecurityWarning): + """Warned when using unsupported SSL library""" + + +class SystemTimeWarning(SecurityWarning): + """Warned when system time is suspected to be wrong""" + + +class InsecurePlatformWarning(SecurityWarning): + """Warned when certain TLS/SSL configuration is not available on a platform.""" + + +class DependencyWarning(HTTPWarning): + """ + Warned when an attempt is made to import a module with missing optional + dependencies. + """ + + +class ResponseNotChunked(ProtocolError, ValueError): + """Response needs to be chunked in order to read it as chunks.""" + + +class BodyNotHttplibCompatible(HTTPError): + """ + Body should be :class:`http.client.HTTPResponse` like + (have an fp attribute which returns raw chunks) for read_chunked(). + """ + + +class IncompleteRead(HTTPError, httplib_IncompleteRead): + """ + Response length doesn't match expected Content-Length + + Subclass of :class:`http.client.IncompleteRead` to allow int value + for ``partial`` to avoid creating large objects on streamed reads. + """ + + partial: int # type: ignore[assignment] + expected: int + + def __init__(self, partial: int, expected: int) -> None: + self.partial = partial + self.expected = expected + + def __repr__(self) -> str: + return "IncompleteRead(%i bytes read, %i more expected)" % ( + self.partial, + self.expected, + ) + + +class InvalidChunkLength(HTTPError, httplib_IncompleteRead): + """Invalid chunk length in a chunked response.""" + + def __init__(self, response: HTTPResponse, length: bytes) -> None: + self.partial: int = response.tell() # type: ignore[assignment] + self.expected: int | None = response.length_remaining + self.response = response + self.length = length + + def __repr__(self) -> str: + return "InvalidChunkLength(got length %r, %i bytes read)" % ( + self.length, + self.partial, + ) + + +class InvalidHeader(HTTPError): + """The header provided was somehow invalid.""" + + +class ProxySchemeUnknown(AssertionError, URLSchemeUnknown): + """ProxyManager does not support the supplied scheme""" + + # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. + + def __init__(self, scheme: str | None) -> None: + # 'localhost' is here because our URL parser parses + # localhost:8080 -> scheme=localhost, remove if we fix this. + if scheme == "localhost": + scheme = None + if scheme is None: + message = "Proxy URL had no scheme, should start with http:// or https://" + else: + message = f"Proxy URL had unsupported scheme {scheme}, should use http:// or https://" + super().__init__(message) + + +class ProxySchemeUnsupported(ValueError): + """Fetching HTTPS resources through HTTPS proxies is unsupported""" + + +class HeaderParsingError(HTTPError): + """Raised by assert_header_parsing, but we convert it to a log.warning statement.""" + + def __init__( + self, defects: list[MessageDefect], unparsed_data: bytes | str | None + ) -> None: + message = f"{defects or 'Unknown'}, unparsed data: {unparsed_data!r}" + super().__init__(message) + + +class UnrewindableBodyError(HTTPError): + """urllib3 encountered an error when trying to rewind a body""" diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/fields.py b/Backend/venv/lib/python3.12/site-packages/urllib3/fields.py new file mode 100644 index 00000000..97c4730c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/fields.py @@ -0,0 +1,341 @@ +from __future__ import annotations + +import email.utils +import mimetypes +import typing + +_TYPE_FIELD_VALUE = typing.Union[str, bytes] +_TYPE_FIELD_VALUE_TUPLE = typing.Union[ + _TYPE_FIELD_VALUE, + tuple[str, _TYPE_FIELD_VALUE], + tuple[str, _TYPE_FIELD_VALUE, str], +] + + +def guess_content_type( + filename: str | None, default: str = "application/octet-stream" +) -> str: + """ + Guess the "Content-Type" of a file. + + :param filename: + The filename to guess the "Content-Type" of using :mod:`mimetypes`. + :param default: + If no "Content-Type" can be guessed, default to `default`. + """ + if filename: + return mimetypes.guess_type(filename)[0] or default + return default + + +def format_header_param_rfc2231(name: str, value: _TYPE_FIELD_VALUE) -> str: + """ + Helper function to format and quote a single header parameter using the + strategy defined in RFC 2231. + + Particularly useful for header parameters which might contain + non-ASCII values, like file names. This follows + `RFC 2388 Section 4.4 `_. + + :param name: + The name of the parameter, a string expected to be ASCII only. + :param value: + The value of the parameter, provided as ``bytes`` or `str``. + :returns: + An RFC-2231-formatted unicode string. + + .. deprecated:: 2.0.0 + Will be removed in urllib3 v2.1.0. This is not valid for + ``multipart/form-data`` header parameters. + """ + import warnings + + warnings.warn( + "'format_header_param_rfc2231' is deprecated and will be " + "removed in urllib3 v2.1.0. This is not valid for " + "multipart/form-data header parameters.", + DeprecationWarning, + stacklevel=2, + ) + + if isinstance(value, bytes): + value = value.decode("utf-8") + + if not any(ch in value for ch in '"\\\r\n'): + result = f'{name}="{value}"' + try: + result.encode("ascii") + except (UnicodeEncodeError, UnicodeDecodeError): + pass + else: + return result + + value = email.utils.encode_rfc2231(value, "utf-8") + value = f"{name}*={value}" + + return value + + +def format_multipart_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str: + """ + Format and quote a single multipart header parameter. + + This follows the `WHATWG HTML Standard`_ as of 2021/06/10, matching + the behavior of current browser and curl versions. Values are + assumed to be UTF-8. The ``\\n``, ``\\r``, and ``"`` characters are + percent encoded. + + .. _WHATWG HTML Standard: + https://html.spec.whatwg.org/multipage/ + form-control-infrastructure.html#multipart-form-data + + :param name: + The name of the parameter, an ASCII-only ``str``. + :param value: + The value of the parameter, a ``str`` or UTF-8 encoded + ``bytes``. + :returns: + A string ``name="value"`` with the escaped value. + + .. versionchanged:: 2.0.0 + Matches the WHATWG HTML Standard as of 2021/06/10. Control + characters are no longer percent encoded. + + .. versionchanged:: 2.0.0 + Renamed from ``format_header_param_html5`` and + ``format_header_param``. The old names will be removed in + urllib3 v2.1.0. + """ + if isinstance(value, bytes): + value = value.decode("utf-8") + + # percent encode \n \r " + value = value.translate({10: "%0A", 13: "%0D", 34: "%22"}) + return f'{name}="{value}"' + + +def format_header_param_html5(name: str, value: _TYPE_FIELD_VALUE) -> str: + """ + .. deprecated:: 2.0.0 + Renamed to :func:`format_multipart_header_param`. Will be + removed in urllib3 v2.1.0. + """ + import warnings + + warnings.warn( + "'format_header_param_html5' has been renamed to " + "'format_multipart_header_param'. The old name will be " + "removed in urllib3 v2.1.0.", + DeprecationWarning, + stacklevel=2, + ) + return format_multipart_header_param(name, value) + + +def format_header_param(name: str, value: _TYPE_FIELD_VALUE) -> str: + """ + .. deprecated:: 2.0.0 + Renamed to :func:`format_multipart_header_param`. Will be + removed in urllib3 v2.1.0. + """ + import warnings + + warnings.warn( + "'format_header_param' has been renamed to " + "'format_multipart_header_param'. The old name will be " + "removed in urllib3 v2.1.0.", + DeprecationWarning, + stacklevel=2, + ) + return format_multipart_header_param(name, value) + + +class RequestField: + """ + A data container for request body parameters. + + :param name: + The name of this request field. Must be unicode. + :param data: + The data/value body. + :param filename: + An optional filename of the request field. Must be unicode. + :param headers: + An optional dict-like object of headers to initially use for the field. + + .. versionchanged:: 2.0.0 + The ``header_formatter`` parameter is deprecated and will + be removed in urllib3 v2.1.0. + """ + + def __init__( + self, + name: str, + data: _TYPE_FIELD_VALUE, + filename: str | None = None, + headers: typing.Mapping[str, str] | None = None, + header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None, + ): + self._name = name + self._filename = filename + self.data = data + self.headers: dict[str, str | None] = {} + if headers: + self.headers = dict(headers) + + if header_formatter is not None: + import warnings + + warnings.warn( + "The 'header_formatter' parameter is deprecated and " + "will be removed in urllib3 v2.1.0.", + DeprecationWarning, + stacklevel=2, + ) + self.header_formatter = header_formatter + else: + self.header_formatter = format_multipart_header_param + + @classmethod + def from_tuples( + cls, + fieldname: str, + value: _TYPE_FIELD_VALUE_TUPLE, + header_formatter: typing.Callable[[str, _TYPE_FIELD_VALUE], str] | None = None, + ) -> RequestField: + """ + A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. + + Supports constructing :class:`~urllib3.fields.RequestField` from + parameter of key/value strings AND key/filetuple. A filetuple is a + (filename, data, MIME type) tuple where the MIME type is optional. + For example:: + + 'foo': 'bar', + 'fakefile': ('foofile.txt', 'contents of foofile'), + 'realfile': ('barfile.txt', open('realfile').read()), + 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), + 'nonamefile': 'contents of nonamefile field', + + Field names and filenames must be unicode. + """ + filename: str | None + content_type: str | None + data: _TYPE_FIELD_VALUE + + if isinstance(value, tuple): + if len(value) == 3: + filename, data, content_type = value + else: + filename, data = value + content_type = guess_content_type(filename) + else: + filename = None + content_type = None + data = value + + request_param = cls( + fieldname, data, filename=filename, header_formatter=header_formatter + ) + request_param.make_multipart(content_type=content_type) + + return request_param + + def _render_part(self, name: str, value: _TYPE_FIELD_VALUE) -> str: + """ + Override this method to change how each multipart header + parameter is formatted. By default, this calls + :func:`format_multipart_header_param`. + + :param name: + The name of the parameter, an ASCII-only ``str``. + :param value: + The value of the parameter, a ``str`` or UTF-8 encoded + ``bytes``. + + :meta public: + """ + return self.header_formatter(name, value) + + def _render_parts( + self, + header_parts: ( + dict[str, _TYPE_FIELD_VALUE | None] + | typing.Sequence[tuple[str, _TYPE_FIELD_VALUE | None]] + ), + ) -> str: + """ + Helper function to format and quote a single header. + + Useful for single headers that are composed of multiple items. E.g., + 'Content-Disposition' fields. + + :param header_parts: + A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format + as `k1="v1"; k2="v2"; ...`. + """ + iterable: typing.Iterable[tuple[str, _TYPE_FIELD_VALUE | None]] + + parts = [] + if isinstance(header_parts, dict): + iterable = header_parts.items() + else: + iterable = header_parts + + for name, value in iterable: + if value is not None: + parts.append(self._render_part(name, value)) + + return "; ".join(parts) + + def render_headers(self) -> str: + """ + Renders the headers for this request field. + """ + lines = [] + + sort_keys = ["Content-Disposition", "Content-Type", "Content-Location"] + for sort_key in sort_keys: + if self.headers.get(sort_key, False): + lines.append(f"{sort_key}: {self.headers[sort_key]}") + + for header_name, header_value in self.headers.items(): + if header_name not in sort_keys: + if header_value: + lines.append(f"{header_name}: {header_value}") + + lines.append("\r\n") + return "\r\n".join(lines) + + def make_multipart( + self, + content_disposition: str | None = None, + content_type: str | None = None, + content_location: str | None = None, + ) -> None: + """ + Makes this request field into a multipart request field. + + This method overrides "Content-Disposition", "Content-Type" and + "Content-Location" headers to the request parameter. + + :param content_disposition: + The 'Content-Disposition' of the request body. Defaults to 'form-data' + :param content_type: + The 'Content-Type' of the request body. + :param content_location: + The 'Content-Location' of the request body. + + """ + content_disposition = (content_disposition or "form-data") + "; ".join( + [ + "", + self._render_parts( + (("name", self._name), ("filename", self._filename)) + ), + ] + ) + + self.headers["Content-Disposition"] = content_disposition + self.headers["Content-Type"] = content_type + self.headers["Content-Location"] = content_location diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/filepost.py b/Backend/venv/lib/python3.12/site-packages/urllib3/filepost.py new file mode 100644 index 00000000..14f70b05 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/filepost.py @@ -0,0 +1,89 @@ +from __future__ import annotations + +import binascii +import codecs +import os +import typing +from io import BytesIO + +from .fields import _TYPE_FIELD_VALUE_TUPLE, RequestField + +writer = codecs.lookup("utf-8")[3] + +_TYPE_FIELDS_SEQUENCE = typing.Sequence[ + typing.Union[tuple[str, _TYPE_FIELD_VALUE_TUPLE], RequestField] +] +_TYPE_FIELDS = typing.Union[ + _TYPE_FIELDS_SEQUENCE, + typing.Mapping[str, _TYPE_FIELD_VALUE_TUPLE], +] + + +def choose_boundary() -> str: + """ + Our embarrassingly-simple replacement for mimetools.choose_boundary. + """ + return binascii.hexlify(os.urandom(16)).decode() + + +def iter_field_objects(fields: _TYPE_FIELDS) -> typing.Iterable[RequestField]: + """ + Iterate over fields. + + Supports list of (k, v) tuples and dicts, and lists of + :class:`~urllib3.fields.RequestField`. + + """ + iterable: typing.Iterable[RequestField | tuple[str, _TYPE_FIELD_VALUE_TUPLE]] + + if isinstance(fields, typing.Mapping): + iterable = fields.items() + else: + iterable = fields + + for field in iterable: + if isinstance(field, RequestField): + yield field + else: + yield RequestField.from_tuples(*field) + + +def encode_multipart_formdata( + fields: _TYPE_FIELDS, boundary: str | None = None +) -> tuple[bytes, str]: + """ + Encode a dictionary of ``fields`` using the multipart/form-data MIME format. + + :param fields: + Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). + Values are processed by :func:`urllib3.fields.RequestField.from_tuples`. + + :param boundary: + If not specified, then a random boundary will be generated using + :func:`urllib3.filepost.choose_boundary`. + """ + body = BytesIO() + if boundary is None: + boundary = choose_boundary() + + for field in iter_field_objects(fields): + body.write(f"--{boundary}\r\n".encode("latin-1")) + + writer(body).write(field.render_headers()) + data = field.data + + if isinstance(data, int): + data = str(data) # Backwards compatibility + + if isinstance(data, str): + writer(body).write(data) + else: + body.write(data) + + body.write(b"\r\n") + + body.write(f"--{boundary}--\r\n".encode("latin-1")) + + content_type = f"multipart/form-data; boundary={boundary}" + + return body.getvalue(), content_type diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py new file mode 100644 index 00000000..133e1d8f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from importlib.metadata import version + +__all__ = [ + "inject_into_urllib3", + "extract_from_urllib3", +] + +import typing + +orig_HTTPSConnection: typing.Any = None + + +def inject_into_urllib3() -> None: + # First check if h2 version is valid + h2_version = version("h2") + if not h2_version.startswith("4."): + raise ImportError( + "urllib3 v2 supports h2 version 4.x.x, currently " + f"the 'h2' module is compiled with {h2_version!r}. " + "See: https://github.com/urllib3/urllib3/issues/3290" + ) + + # Import here to avoid circular dependencies. + from .. import connection as urllib3_connection + from .. import util as urllib3_util + from ..connectionpool import HTTPSConnectionPool + from ..util import ssl_ as urllib3_util_ssl + from .connection import HTTP2Connection + + global orig_HTTPSConnection + orig_HTTPSConnection = urllib3_connection.HTTPSConnection + + HTTPSConnectionPool.ConnectionCls = HTTP2Connection + urllib3_connection.HTTPSConnection = HTTP2Connection # type: ignore[misc] + + # TODO: Offer 'http/1.1' as well, but for testing purposes this is handy. + urllib3_util.ALPN_PROTOCOLS = ["h2"] + urllib3_util_ssl.ALPN_PROTOCOLS = ["h2"] + + +def extract_from_urllib3() -> None: + from .. import connection as urllib3_connection + from .. import util as urllib3_util + from ..connectionpool import HTTPSConnectionPool + from ..util import ssl_ as urllib3_util_ssl + + HTTPSConnectionPool.ConnectionCls = orig_HTTPSConnection + urllib3_connection.HTTPSConnection = orig_HTTPSConnection # type: ignore[misc] + + urllib3_util.ALPN_PROTOCOLS = ["http/1.1"] + urllib3_util_ssl.ALPN_PROTOCOLS = ["http/1.1"] diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f1bf1a528f9a31f11fa102c16111510942c17cb GIT binary patch literal 1751 zcmZ8h&2Jk;6rb6h^~bt)`eA62Qo2y6Yqjw3R%!}TK~WNDx#Ti(JzIN|^{zF$ z4sm273-u2`;!q@nlp_^?3PMUnP@`3YB2fI-rUF(4t0`*?Y?`C3X+oP!ciNn zi;2=i60p`)BAjv(jbs;-rirwpHBwy$SQi8i@oJ>AvEC-dW6PmZFK;XJrR~o~2{ks$hTm#7JsJ2$y=;tFBgo4Ct8kW*uGKq8co}=gz=>v)Q#<{CF8DTT{r4M(DbjHW(};Z z`z6?AjxIZzZQpNMzByO^@X8AX9{iYwdiAJQps`k9J20R6Ul~_D56#T?9sUAKRixnr z?kSH;UCc=aE1~WO6^IHS7iKB*2tOrgx-rrh}2Cis@eapfcmEWptBD{Ul` zXw8l{R z?p$fMZ2ER!%`{;{r3Q(Q>w%>zn;a-+2b`ChZHX-%i3tGyLl8ak{KVvU`ESqmKHbl} z@ib#R$rwBNz08GYxv9QFvsd=7T>tT_KA|@kXci*%r}3B6BPTK^|UwD|*8IA9>n z19qvOAa9kPp1JYl%#B?(d3f=IU3Pkpy}w_)w#(k!V;5lky^A{+dP{rk+OXQ)rwN`NmR!j zhwqTnD5g-H0a0Y~EaJCOL_5y`^0B|MDWrjR?2$-Z0^nZ-(IW?J?kMliFD?wz{HzFB z$21?FpV_%QO7iTEGfc942Tm51Fd?m=CEbuMd#+W~L!I*nEwEUeOZ*YTlXgTV=&(}5 z3M!%kJi`}-NzN;d!+Dq(e#b+$On`O#!-JEk$MDgQNpxov#mm&f@MpOxF%0CkKM$g> xQc8a(@BT@!Ikf40Hr?0MjM7UEbV757=L@?e|IPZZq%cTK(V4%m>2xmg`X7;Ww5R|8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/connection.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb4d2cb150cf664883dae6f2ca588b73915a20d7 GIT binary patch literal 17058 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 Icr(2D|H#^yX8-^I literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/__pycache__/probe.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bc56d6cd9678b0e03f94a9c1726f7ed15a41542 GIT binary patch literal 3702 zcmb6bTWk~A_1<~d9zQmYn%5ALMVRmubO*Y==$fgaw2?$bogGtH%> zBByx&P8k&J1k#3K+G#s$8rEcH`>BSKc>NquA0Qp2u!d5chEu%e)401rO3)#^%;=AJM^tlWX3hz!8A@Oa z%Lz4BH`2L+Ze{Q`<*05vLU{cG)6H(}%{H{&#*3N;E+MtGn?#0}lJk;rAQCh|pl#xzFaCr&1;tgRo<14DXRw-N=CgZ+`j zjBV#nCi2u!@qE$oscP29+NwIgf42$a&8-mVV#xp&(X-Bj53YQ4WwmptEZpT!lQ=hUiOC7swG^OvYSxGnz{MvuLm+rog?%6ldE&hFU6Az*j$ig={3{(u?y<(GY zx6&B2`r3lWZf`15@@#3`v>xHUjqYHuM@N%uYi??c(H+oi!ShqkP29Yn1b|QRyJ1Wt z*ztWwFHR6*5<=^XBVJ%(P7UFB)0yjqEYY3NXxh>zZe{d5tr3ntYh?|~P8%8B@e)0! z!>-~bZS;&VV_LQ&|N(MB((ihud?7z!Ww0`XGhS=XWEL%;sfT337} z7+>j#*MiY%u&)yATMHhn1>3)@dx2@wngAQz7e|NrUq+Hgx!+^Jp7gYhzJZ<`eQWfH z_%y}=<>_He@gqFNhsDtm@6$J=u_OG`GlOFT{2vBHz%#A10Ew+a@Ml;&Xr($N0jzhA zMxsM{va-N0_IyL+Ly4B2Rn*tZtZP_ei0IV zSE?y)swv#${Mj+q@?@f0x-HXQlsG9{g***gdCDZRNwU*fLrzcGI+0lz%QI<9zN+hn z3`gRMu+;<{|9iAMxk*Gzp5kG-KzaZty#Soo8nP{w)pK%y?i>VQQA6*@1dz_MppjR5 zWWp|v5h|t#fMr5Bx^$_WEAx;6JA*jX`2q=2q}Fy|rETcbSatYxW%%@G7c0ZbmErF_ z+b7qe@2&G(SEP=(_Q-|^to0xoJW&>^zMhJ&=ix}j*WbznXdWAFl!c1iv}jTJ)q!L$ z|D;z;#=JY)H1!f|DZd2-B5BVEVsW#lw`W_i0>>Mp>E&^BAK&LPd=_Q6%TTd?4AHWH z7dYCOe!<=I3((vaxCIQY2h*=vJZbC6KnZqtZ@v;KMcj;(`5#`I$y)MM!N}0cCsQ1v z!`3Yu+PR!Bki2Q>mTVfiVqAV#w=LP8(dA5m5Z$n4sFAiVn^TO)dbrFUHIrxS}n=*ujTOGZs`}~>jex)ilc9Otuod>Xpo;S-NmXf$Oq*RCAtPH(b z9eTSm^!Dn|nQF(`k1sv^!7^S-E?xgYUK-S^U;|kQc}Cy1!rStdHWL*jtNs)p bool: + """ + "An implementation that validates fields according to the definitions in Sections + 5.1 and 5.5 of [HTTP] only needs an additional check that field names do not + include uppercase characters." (https://httpwg.org/specs/rfc9113.html#n-field-validity) + + `http.client._is_legal_header_name` does not validate the field name according to the + HTTP 1.1 spec, so we do that here, in addition to checking for uppercase characters. + + This does not allow for the `:` character in the header name, so should not + be used to validate pseudo-headers. + """ + return bool(RE_IS_LEGAL_HEADER_NAME.match(name)) + + +def _is_illegal_header_value(value: bytes) -> bool: + """ + "A field value MUST NOT contain the zero value (ASCII NUL, 0x00), line feed + (ASCII LF, 0x0a), or carriage return (ASCII CR, 0x0d) at any position. A field + value MUST NOT start or end with an ASCII whitespace character (ASCII SP or HTAB, + 0x20 or 0x09)." (https://httpwg.org/specs/rfc9113.html#n-field-validity) + """ + return bool(RE_IS_ILLEGAL_HEADER_VALUE.search(value)) + + +class _LockedObject(typing.Generic[T]): + """ + A wrapper class that hides a specific object behind a lock. + The goal here is to provide a simple way to protect access to an object + that cannot safely be simultaneously accessed from multiple threads. The + intended use of this class is simple: take hold of it with a context + manager, which returns the protected object. + """ + + __slots__ = ( + "lock", + "_obj", + ) + + def __init__(self, obj: T): + self.lock = threading.RLock() + self._obj = obj + + def __enter__(self) -> T: + self.lock.acquire() + return self._obj + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc_val: BaseException | None, + exc_tb: types.TracebackType | None, + ) -> None: + self.lock.release() + + +class HTTP2Connection(HTTPSConnection): + def __init__( + self, host: str, port: int | None = None, **kwargs: typing.Any + ) -> None: + self._h2_conn = self._new_h2_conn() + self._h2_stream: int | None = None + self._headers: list[tuple[bytes, bytes]] = [] + + if "proxy" in kwargs or "proxy_config" in kwargs: # Defensive: + raise NotImplementedError("Proxies aren't supported with HTTP/2") + + super().__init__(host, port, **kwargs) + + if self._tunnel_host is not None: + raise NotImplementedError("Tunneling isn't supported with HTTP/2") + + def _new_h2_conn(self) -> _LockedObject[h2.connection.H2Connection]: + config = h2.config.H2Configuration(client_side=True) + return _LockedObject(h2.connection.H2Connection(config=config)) + + def connect(self) -> None: + super().connect() + with self._h2_conn as conn: + conn.initiate_connection() + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + + def putrequest( # type: ignore[override] + self, + method: str, + url: str, + **kwargs: typing.Any, + ) -> None: + """putrequest + This deviates from the HTTPConnection method signature since we never need to override + sending accept-encoding headers or the host header. + """ + if "skip_host" in kwargs: + raise NotImplementedError("`skip_host` isn't supported") + if "skip_accept_encoding" in kwargs: + raise NotImplementedError("`skip_accept_encoding` isn't supported") + + self._request_url = url or "/" + self._validate_path(url) # type: ignore[attr-defined] + + if ":" in self.host: + authority = f"[{self.host}]:{self.port or 443}" + else: + authority = f"{self.host}:{self.port or 443}" + + self._headers.append((b":scheme", b"https")) + self._headers.append((b":method", method.encode())) + self._headers.append((b":authority", authority.encode())) + self._headers.append((b":path", url.encode())) + + with self._h2_conn as conn: + self._h2_stream = conn.get_next_available_stream_id() + + def putheader(self, header: str | bytes, *values: str | bytes) -> None: # type: ignore[override] + # TODO SKIPPABLE_HEADERS from urllib3 are ignored. + header = header.encode() if isinstance(header, str) else header + header = header.lower() # A lot of upstream code uses capitalized headers. + if not _is_legal_header_name(header): + raise ValueError(f"Illegal header name {str(header)}") + + for value in values: + value = value.encode() if isinstance(value, str) else value + if _is_illegal_header_value(value): + raise ValueError(f"Illegal header value {str(value)}") + self._headers.append((header, value)) + + def endheaders(self, message_body: typing.Any = None) -> None: # type: ignore[override] + if self._h2_stream is None: + raise ConnectionError("Must call `putrequest` first.") + + with self._h2_conn as conn: + conn.send_headers( + stream_id=self._h2_stream, + headers=self._headers, + end_stream=(message_body is None), + ) + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + self._headers = [] # Reset headers for the next request. + + def send(self, data: typing.Any) -> None: + """Send data to the server. + `data` can be: `str`, `bytes`, an iterable, or file-like objects + that support a .read() method. + """ + if self._h2_stream is None: + raise ConnectionError("Must call `putrequest` first.") + + with self._h2_conn as conn: + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + + if hasattr(data, "read"): # file-like objects + while True: + chunk = data.read(self.blocksize) + if not chunk: + break + if isinstance(chunk, str): + chunk = chunk.encode() # pragma: no cover + conn.send_data(self._h2_stream, chunk, end_stream=False) + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + conn.end_stream(self._h2_stream) + return + + if isinstance(data, str): # str -> bytes + data = data.encode() + + try: + if isinstance(data, bytes): + conn.send_data(self._h2_stream, data, end_stream=True) + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + else: + for chunk in data: + conn.send_data(self._h2_stream, chunk, end_stream=False) + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + conn.end_stream(self._h2_stream) + except TypeError: + raise TypeError( + "`data` should be str, bytes, iterable, or file. got %r" + % type(data) + ) + + def set_tunnel( + self, + host: str, + port: int | None = None, + headers: typing.Mapping[str, str] | None = None, + scheme: str = "http", + ) -> None: + raise NotImplementedError( + "HTTP/2 does not support setting up a tunnel through a proxy" + ) + + def getresponse( # type: ignore[override] + self, + ) -> HTTP2Response: + status = None + data = bytearray() + with self._h2_conn as conn: + end_stream = False + while not end_stream: + # TODO: Arbitrary read value. + if received_data := self.sock.recv(65535): + events = conn.receive_data(received_data) + for event in events: + if isinstance(event, h2.events.ResponseReceived): + headers = HTTPHeaderDict() + for header, value in event.headers: + if header == b":status": + status = int(value.decode()) + else: + headers.add( + header.decode("ascii"), value.decode("ascii") + ) + + elif isinstance(event, h2.events.DataReceived): + data += event.data + conn.acknowledge_received_data( + event.flow_controlled_length, event.stream_id + ) + + elif isinstance(event, h2.events.StreamEnded): + end_stream = True + + if data_to_send := conn.data_to_send(): + self.sock.sendall(data_to_send) + + assert status is not None + return HTTP2Response( + status=status, + headers=headers, + request_url=self._request_url, + data=bytes(data), + ) + + def request( # type: ignore[override] + self, + method: str, + url: str, + body: _TYPE_BODY | None = None, + headers: typing.Mapping[str, str] | None = None, + *, + preload_content: bool = True, + decode_content: bool = True, + enforce_content_length: bool = True, + **kwargs: typing.Any, + ) -> None: + """Send an HTTP/2 request""" + if "chunked" in kwargs: + # TODO this is often present from upstream. + # raise NotImplementedError("`chunked` isn't supported with HTTP/2") + pass + + if self.sock is not None: + self.sock.settimeout(self.timeout) + + self.putrequest(method, url) + + headers = headers or {} + for k, v in headers.items(): + if k.lower() == "transfer-encoding" and v == "chunked": + continue + else: + self.putheader(k, v) + + if b"user-agent" not in dict(self._headers): + self.putheader(b"user-agent", _get_default_user_agent()) + + if body: + self.endheaders(message_body=body) + self.send(body) + else: + self.endheaders() + + def close(self) -> None: + with self._h2_conn as conn: + try: + conn.close_connection() + if data := conn.data_to_send(): + self.sock.sendall(data) + except Exception: + pass + + # Reset all our HTTP/2 connection state. + self._h2_conn = self._new_h2_conn() + self._h2_stream = None + self._headers = [] + + super().close() + + +class HTTP2Response(BaseHTTPResponse): + # TODO: This is a woefully incomplete response object, but works for non-streaming. + def __init__( + self, + status: int, + headers: HTTPHeaderDict, + request_url: str, + data: bytes, + decode_content: bool = False, # TODO: support decoding + ) -> None: + super().__init__( + status=status, + headers=headers, + # Following CPython, we map HTTP versions to major * 10 + minor integers + version=20, + version_string="HTTP/2", + # No reason phrase in HTTP/2 + reason=None, + decode_content=decode_content, + request_url=request_url, + ) + self._data = data + self.length_remaining = 0 + + @property + def data(self) -> bytes: + return self._data + + def get_redirect_location(self) -> None: + return None + + def close(self) -> None: + pass diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/http2/probe.py b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/probe.py new file mode 100644 index 00000000..9ea90076 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/http2/probe.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +import threading + + +class _HTTP2ProbeCache: + __slots__ = ( + "_lock", + "_cache_locks", + "_cache_values", + ) + + def __init__(self) -> None: + self._lock = threading.Lock() + self._cache_locks: dict[tuple[str, int], threading.RLock] = {} + self._cache_values: dict[tuple[str, int], bool | None] = {} + + def acquire_and_get(self, host: str, port: int) -> bool | None: + # By the end of this block we know that + # _cache_[values,locks] is available. + value = None + with self._lock: + key = (host, port) + try: + value = self._cache_values[key] + # If it's a known value we return right away. + if value is not None: + return value + except KeyError: + self._cache_locks[key] = threading.RLock() + self._cache_values[key] = None + + # If the value is unknown, we acquire the lock to signal + # to the requesting thread that the probe is in progress + # or that the current thread needs to return their findings. + key_lock = self._cache_locks[key] + key_lock.acquire() + try: + # If the by the time we get the lock the value has been + # updated we want to return the updated value. + value = self._cache_values[key] + + # In case an exception like KeyboardInterrupt is raised here. + except BaseException as e: # Defensive: + assert not isinstance(e, KeyError) # KeyError shouldn't be possible. + key_lock.release() + raise + + return value + + def set_and_release( + self, host: str, port: int, supports_http2: bool | None + ) -> None: + key = (host, port) + key_lock = self._cache_locks[key] + with key_lock: # Uses an RLock, so can be locked again from same thread. + if supports_http2 is None and self._cache_values[key] is not None: + raise ValueError( + "Cannot reset HTTP/2 support for origin after value has been set." + ) # Defensive: not expected in normal usage + + self._cache_values[key] = supports_http2 + key_lock.release() + + def _values(self) -> dict[tuple[str, int], bool | None]: + """This function is for testing purposes only. Gets the current state of the probe cache""" + with self._lock: + return {k: v for k, v in self._cache_values.items()} + + def _reset(self) -> None: + """This function is for testing purposes only. Reset the cache values""" + with self._lock: + self._cache_locks = {} + self._cache_values = {} + + +_HTTP2_PROBE_CACHE = _HTTP2ProbeCache() + +set_and_release = _HTTP2_PROBE_CACHE.set_and_release +acquire_and_get = _HTTP2_PROBE_CACHE.acquire_and_get +_values = _HTTP2_PROBE_CACHE._values +_reset = _HTTP2_PROBE_CACHE._reset + +__all__ = [ + "set_and_release", + "acquire_and_get", +] diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/poolmanager.py b/Backend/venv/lib/python3.12/site-packages/urllib3/poolmanager.py new file mode 100644 index 00000000..5763fea8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/poolmanager.py @@ -0,0 +1,653 @@ +from __future__ import annotations + +import functools +import logging +import typing +import warnings +from types import TracebackType +from urllib.parse import urljoin + +from ._collections import HTTPHeaderDict, RecentlyUsedContainer +from ._request_methods import RequestMethods +from .connection import ProxyConfig +from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, port_by_scheme +from .exceptions import ( + LocationValueError, + MaxRetryError, + ProxySchemeUnknown, + URLSchemeUnknown, +) +from .response import BaseHTTPResponse +from .util.connection import _TYPE_SOCKET_OPTIONS +from .util.proxy import connection_requires_http_tunnel +from .util.retry import Retry +from .util.timeout import Timeout +from .util.url import Url, parse_url + +if typing.TYPE_CHECKING: + import ssl + + from typing_extensions import Self + +__all__ = ["PoolManager", "ProxyManager", "proxy_from_url"] + + +log = logging.getLogger(__name__) + +SSL_KEYWORDS = ( + "key_file", + "cert_file", + "cert_reqs", + "ca_certs", + "ca_cert_data", + "ssl_version", + "ssl_minimum_version", + "ssl_maximum_version", + "ca_cert_dir", + "ssl_context", + "key_password", + "server_hostname", +) +# Default value for `blocksize` - a new parameter introduced to +# http.client.HTTPConnection & http.client.HTTPSConnection in Python 3.7 +_DEFAULT_BLOCKSIZE = 16384 + + +class PoolKey(typing.NamedTuple): + """ + All known keyword arguments that could be provided to the pool manager, its + pools, or the underlying connections. + + All custom key schemes should include the fields in this key at a minimum. + """ + + key_scheme: str + key_host: str + key_port: int | None + key_timeout: Timeout | float | int | None + key_retries: Retry | bool | int | None + key_block: bool | None + key_source_address: tuple[str, int] | None + key_key_file: str | None + key_key_password: str | None + key_cert_file: str | None + key_cert_reqs: str | None + key_ca_certs: str | None + key_ca_cert_data: str | bytes | None + key_ssl_version: int | str | None + key_ssl_minimum_version: ssl.TLSVersion | None + key_ssl_maximum_version: ssl.TLSVersion | None + key_ca_cert_dir: str | None + key_ssl_context: ssl.SSLContext | None + key_maxsize: int | None + key_headers: frozenset[tuple[str, str]] | None + key__proxy: Url | None + key__proxy_headers: frozenset[tuple[str, str]] | None + key__proxy_config: ProxyConfig | None + key_socket_options: _TYPE_SOCKET_OPTIONS | None + key__socks_options: frozenset[tuple[str, str]] | None + key_assert_hostname: bool | str | None + key_assert_fingerprint: str | None + key_server_hostname: str | None + key_blocksize: int | None + + +def _default_key_normalizer( + key_class: type[PoolKey], request_context: dict[str, typing.Any] +) -> PoolKey: + """ + Create a pool key out of a request context dictionary. + + According to RFC 3986, both the scheme and host are case-insensitive. + Therefore, this function normalizes both before constructing the pool + key for an HTTPS request. If you wish to change this behaviour, provide + alternate callables to ``key_fn_by_scheme``. + + :param key_class: + The class to use when constructing the key. This should be a namedtuple + with the ``scheme`` and ``host`` keys at a minimum. + :type key_class: namedtuple + :param request_context: + A dictionary-like object that contain the context for a request. + :type request_context: dict + + :return: A namedtuple that can be used as a connection pool key. + :rtype: PoolKey + """ + # Since we mutate the dictionary, make a copy first + context = request_context.copy() + context["scheme"] = context["scheme"].lower() + context["host"] = context["host"].lower() + + # These are both dictionaries and need to be transformed into frozensets + for key in ("headers", "_proxy_headers", "_socks_options"): + if key in context and context[key] is not None: + context[key] = frozenset(context[key].items()) + + # The socket_options key may be a list and needs to be transformed into a + # tuple. + socket_opts = context.get("socket_options") + if socket_opts is not None: + context["socket_options"] = tuple(socket_opts) + + # Map the kwargs to the names in the namedtuple - this is necessary since + # namedtuples can't have fields starting with '_'. + for key in list(context.keys()): + context["key_" + key] = context.pop(key) + + # Default to ``None`` for keys missing from the context + for field in key_class._fields: + if field not in context: + context[field] = None + + # Default key_blocksize to _DEFAULT_BLOCKSIZE if missing from the context + if context.get("key_blocksize") is None: + context["key_blocksize"] = _DEFAULT_BLOCKSIZE + + return key_class(**context) + + +#: A dictionary that maps a scheme to a callable that creates a pool key. +#: This can be used to alter the way pool keys are constructed, if desired. +#: Each PoolManager makes a copy of this dictionary so they can be configured +#: globally here, or individually on the instance. +key_fn_by_scheme = { + "http": functools.partial(_default_key_normalizer, PoolKey), + "https": functools.partial(_default_key_normalizer, PoolKey), +} + +pool_classes_by_scheme = {"http": HTTPConnectionPool, "https": HTTPSConnectionPool} + + +class PoolManager(RequestMethods): + """ + Allows for arbitrary requests while transparently keeping track of + necessary connection pools for you. + + :param num_pools: + Number of connection pools to cache before discarding the least + recently used pool. + + :param headers: + Headers to include with all requests, unless other headers are given + explicitly. + + :param \\**connection_pool_kw: + Additional parameters are used to create fresh + :class:`urllib3.connectionpool.ConnectionPool` instances. + + Example: + + .. code-block:: python + + import urllib3 + + http = urllib3.PoolManager(num_pools=2) + + resp1 = http.request("GET", "https://google.com/") + resp2 = http.request("GET", "https://google.com/mail") + resp3 = http.request("GET", "https://yahoo.com/") + + print(len(http.pools)) + # 2 + + """ + + proxy: Url | None = None + proxy_config: ProxyConfig | None = None + + def __init__( + self, + num_pools: int = 10, + headers: typing.Mapping[str, str] | None = None, + **connection_pool_kw: typing.Any, + ) -> None: + super().__init__(headers) + if "retries" in connection_pool_kw: + retries = connection_pool_kw["retries"] + if not isinstance(retries, Retry): + # When Retry is initialized, raise_on_redirect is based + # on a redirect boolean value. + # But requests made via a pool manager always set + # redirect to False, and raise_on_redirect always ends + # up being False consequently. + # Here we fix the issue by setting raise_on_redirect to + # a value needed by the pool manager without considering + # the redirect boolean. + raise_on_redirect = retries is not False + retries = Retry.from_int(retries, redirect=False) + retries.raise_on_redirect = raise_on_redirect + connection_pool_kw = connection_pool_kw.copy() + connection_pool_kw["retries"] = retries + self.connection_pool_kw = connection_pool_kw + + self.pools: RecentlyUsedContainer[PoolKey, HTTPConnectionPool] + self.pools = RecentlyUsedContainer(num_pools) + + # Locally set the pool classes and keys so other PoolManagers can + # override them. + self.pool_classes_by_scheme = pool_classes_by_scheme + self.key_fn_by_scheme = key_fn_by_scheme.copy() + + def __enter__(self) -> Self: + return self + + def __exit__( + self, + exc_type: type[BaseException] | None, + exc_val: BaseException | None, + exc_tb: TracebackType | None, + ) -> typing.Literal[False]: + self.clear() + # Return False to re-raise any potential exceptions + return False + + def _new_pool( + self, + scheme: str, + host: str, + port: int, + request_context: dict[str, typing.Any] | None = None, + ) -> HTTPConnectionPool: + """ + Create a new :class:`urllib3.connectionpool.ConnectionPool` based on host, port, scheme, and + any additional pool keyword arguments. + + If ``request_context`` is provided, it is provided as keyword arguments + to the pool class used. This method is used to actually create the + connection pools handed out by :meth:`connection_from_url` and + companion methods. It is intended to be overridden for customization. + """ + pool_cls: type[HTTPConnectionPool] = self.pool_classes_by_scheme[scheme] + if request_context is None: + request_context = self.connection_pool_kw.copy() + + # Default blocksize to _DEFAULT_BLOCKSIZE if missing or explicitly + # set to 'None' in the request_context. + if request_context.get("blocksize") is None: + request_context["blocksize"] = _DEFAULT_BLOCKSIZE + + # Although the context has everything necessary to create the pool, + # this function has historically only used the scheme, host, and port + # in the positional args. When an API change is acceptable these can + # be removed. + for key in ("scheme", "host", "port"): + request_context.pop(key, None) + + if scheme == "http": + for kw in SSL_KEYWORDS: + request_context.pop(kw, None) + + return pool_cls(host, port, **request_context) + + def clear(self) -> None: + """ + Empty our store of pools and direct them all to close. + + This will not affect in-flight connections, but they will not be + re-used after completion. + """ + self.pools.clear() + + def connection_from_host( + self, + host: str | None, + port: int | None = None, + scheme: str | None = "http", + pool_kwargs: dict[str, typing.Any] | None = None, + ) -> HTTPConnectionPool: + """ + Get a :class:`urllib3.connectionpool.ConnectionPool` based on the host, port, and scheme. + + If ``port`` isn't given, it will be derived from the ``scheme`` using + ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is + provided, it is merged with the instance's ``connection_pool_kw`` + variable and used to create the new connection pool, if one is + needed. + """ + + if not host: + raise LocationValueError("No host specified.") + + request_context = self._merge_pool_kwargs(pool_kwargs) + request_context["scheme"] = scheme or "http" + if not port: + port = port_by_scheme.get(request_context["scheme"].lower(), 80) + request_context["port"] = port + request_context["host"] = host + + return self.connection_from_context(request_context) + + def connection_from_context( + self, request_context: dict[str, typing.Any] + ) -> HTTPConnectionPool: + """ + Get a :class:`urllib3.connectionpool.ConnectionPool` based on the request context. + + ``request_context`` must at least contain the ``scheme`` key and its + value must be a key in ``key_fn_by_scheme`` instance variable. + """ + if "strict" in request_context: + warnings.warn( + "The 'strict' parameter is no longer needed on Python 3+. " + "This will raise an error in urllib3 v2.1.0.", + DeprecationWarning, + ) + request_context.pop("strict") + + scheme = request_context["scheme"].lower() + pool_key_constructor = self.key_fn_by_scheme.get(scheme) + if not pool_key_constructor: + raise URLSchemeUnknown(scheme) + pool_key = pool_key_constructor(request_context) + + return self.connection_from_pool_key(pool_key, request_context=request_context) + + def connection_from_pool_key( + self, pool_key: PoolKey, request_context: dict[str, typing.Any] + ) -> HTTPConnectionPool: + """ + Get a :class:`urllib3.connectionpool.ConnectionPool` based on the provided pool key. + + ``pool_key`` should be a namedtuple that only contains immutable + objects. At a minimum it must have the ``scheme``, ``host``, and + ``port`` fields. + """ + with self.pools.lock: + # If the scheme, host, or port doesn't match existing open + # connections, open a new ConnectionPool. + pool = self.pools.get(pool_key) + if pool: + return pool + + # Make a fresh ConnectionPool of the desired type + scheme = request_context["scheme"] + host = request_context["host"] + port = request_context["port"] + pool = self._new_pool(scheme, host, port, request_context=request_context) + self.pools[pool_key] = pool + + return pool + + def connection_from_url( + self, url: str, pool_kwargs: dict[str, typing.Any] | None = None + ) -> HTTPConnectionPool: + """ + Similar to :func:`urllib3.connectionpool.connection_from_url`. + + If ``pool_kwargs`` is not provided and a new pool needs to be + constructed, ``self.connection_pool_kw`` is used to initialize + the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` + is provided, it is used instead. Note that if a new pool does not + need to be created for the request, the provided ``pool_kwargs`` are + not used. + """ + u = parse_url(url) + return self.connection_from_host( + u.host, port=u.port, scheme=u.scheme, pool_kwargs=pool_kwargs + ) + + def _merge_pool_kwargs( + self, override: dict[str, typing.Any] | None + ) -> dict[str, typing.Any]: + """ + Merge a dictionary of override values for self.connection_pool_kw. + + This does not modify self.connection_pool_kw and returns a new dict. + Any keys in the override dictionary with a value of ``None`` are + removed from the merged dictionary. + """ + base_pool_kwargs = self.connection_pool_kw.copy() + if override: + for key, value in override.items(): + if value is None: + try: + del base_pool_kwargs[key] + except KeyError: + pass + else: + base_pool_kwargs[key] = value + return base_pool_kwargs + + def _proxy_requires_url_absolute_form(self, parsed_url: Url) -> bool: + """ + Indicates if the proxy requires the complete destination URL in the + request. Normally this is only needed when not using an HTTP CONNECT + tunnel. + """ + if self.proxy is None: + return False + + return not connection_requires_http_tunnel( + self.proxy, self.proxy_config, parsed_url.scheme + ) + + def urlopen( # type: ignore[override] + self, method: str, url: str, redirect: bool = True, **kw: typing.Any + ) -> BaseHTTPResponse: + """ + Same as :meth:`urllib3.HTTPConnectionPool.urlopen` + with custom cross-host redirect logic and only sends the request-uri + portion of the ``url``. + + The given ``url`` parameter must be absolute, such that an appropriate + :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. + """ + u = parse_url(url) + + if u.scheme is None: + warnings.warn( + "URLs without a scheme (ie 'https://') are deprecated and will raise an error " + "in a future version of urllib3. To avoid this DeprecationWarning ensure all URLs " + "start with 'https://' or 'http://'. Read more in this issue: " + "https://github.com/urllib3/urllib3/issues/2920", + category=DeprecationWarning, + stacklevel=2, + ) + + conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) + + kw["assert_same_host"] = False + kw["redirect"] = False + + if "headers" not in kw: + kw["headers"] = self.headers + + if self._proxy_requires_url_absolute_form(u): + response = conn.urlopen(method, url, **kw) + else: + response = conn.urlopen(method, u.request_uri, **kw) + + redirect_location = redirect and response.get_redirect_location() + if not redirect_location: + return response + + # Support relative URLs for redirecting. + redirect_location = urljoin(url, redirect_location) + + if response.status == 303: + # Change the method according to RFC 9110, Section 15.4.4. + method = "GET" + # And lose the body not to transfer anything sensitive. + kw["body"] = None + kw["headers"] = HTTPHeaderDict(kw["headers"])._prepare_for_method_change() + + retries = kw.get("retries", response.retries) + if not isinstance(retries, Retry): + retries = Retry.from_int(retries, redirect=redirect) + + # Strip headers marked as unsafe to forward to the redirected location. + # Check remove_headers_on_redirect to avoid a potential network call within + # conn.is_same_host() which may use socket.gethostbyname() in the future. + if retries.remove_headers_on_redirect and not conn.is_same_host( + redirect_location + ): + new_headers = kw["headers"].copy() + for header in kw["headers"]: + if header.lower() in retries.remove_headers_on_redirect: + new_headers.pop(header, None) + kw["headers"] = new_headers + + try: + retries = retries.increment(method, url, response=response, _pool=conn) + except MaxRetryError: + if retries.raise_on_redirect: + response.drain_conn() + raise + return response + + kw["retries"] = retries + kw["redirect"] = redirect + + log.info("Redirecting %s -> %s", url, redirect_location) + + response.drain_conn() + return self.urlopen(method, redirect_location, **kw) + + +class ProxyManager(PoolManager): + """ + Behaves just like :class:`PoolManager`, but sends all requests through + the defined proxy, using the CONNECT method for HTTPS URLs. + + :param proxy_url: + The URL of the proxy to be used. + + :param proxy_headers: + A dictionary containing headers that will be sent to the proxy. In case + of HTTP they are being sent with each request, while in the + HTTPS/CONNECT case they are sent only once. Could be used for proxy + authentication. + + :param proxy_ssl_context: + The proxy SSL context is used to establish the TLS connection to the + proxy when using HTTPS proxies. + + :param use_forwarding_for_https: + (Defaults to False) If set to True will forward requests to the HTTPS + proxy to be made on behalf of the client instead of creating a TLS + tunnel via the CONNECT method. **Enabling this flag means that request + and response headers and content will be visible from the HTTPS proxy** + whereas tunneling keeps request and response headers and content + private. IP address, target hostname, SNI, and port are always visible + to an HTTPS proxy even when this flag is disabled. + + :param proxy_assert_hostname: + The hostname of the certificate to verify against. + + :param proxy_assert_fingerprint: + The fingerprint of the certificate to verify against. + + Example: + + .. code-block:: python + + import urllib3 + + proxy = urllib3.ProxyManager("https://localhost:3128/") + + resp1 = proxy.request("GET", "https://google.com/") + resp2 = proxy.request("GET", "https://httpbin.org/") + + print(len(proxy.pools)) + # 1 + + resp3 = proxy.request("GET", "https://httpbin.org/") + resp4 = proxy.request("GET", "https://twitter.com/") + + print(len(proxy.pools)) + # 3 + + """ + + def __init__( + self, + proxy_url: str, + num_pools: int = 10, + headers: typing.Mapping[str, str] | None = None, + proxy_headers: typing.Mapping[str, str] | None = None, + proxy_ssl_context: ssl.SSLContext | None = None, + use_forwarding_for_https: bool = False, + proxy_assert_hostname: None | str | typing.Literal[False] = None, + proxy_assert_fingerprint: str | None = None, + **connection_pool_kw: typing.Any, + ) -> None: + if isinstance(proxy_url, HTTPConnectionPool): + str_proxy_url = f"{proxy_url.scheme}://{proxy_url.host}:{proxy_url.port}" + else: + str_proxy_url = proxy_url + proxy = parse_url(str_proxy_url) + + if proxy.scheme not in ("http", "https"): + raise ProxySchemeUnknown(proxy.scheme) + + if not proxy.port: + port = port_by_scheme.get(proxy.scheme, 80) + proxy = proxy._replace(port=port) + + self.proxy = proxy + self.proxy_headers = proxy_headers or {} + self.proxy_ssl_context = proxy_ssl_context + self.proxy_config = ProxyConfig( + proxy_ssl_context, + use_forwarding_for_https, + proxy_assert_hostname, + proxy_assert_fingerprint, + ) + + connection_pool_kw["_proxy"] = self.proxy + connection_pool_kw["_proxy_headers"] = self.proxy_headers + connection_pool_kw["_proxy_config"] = self.proxy_config + + super().__init__(num_pools, headers, **connection_pool_kw) + + def connection_from_host( + self, + host: str | None, + port: int | None = None, + scheme: str | None = "http", + pool_kwargs: dict[str, typing.Any] | None = None, + ) -> HTTPConnectionPool: + if scheme == "https": + return super().connection_from_host( + host, port, scheme, pool_kwargs=pool_kwargs + ) + + return super().connection_from_host( + self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs # type: ignore[union-attr] + ) + + def _set_proxy_headers( + self, url: str, headers: typing.Mapping[str, str] | None = None + ) -> typing.Mapping[str, str]: + """ + Sets headers needed by proxies: specifically, the Accept and Host + headers. Only sets headers not provided by the user. + """ + headers_ = {"Accept": "*/*"} + + netloc = parse_url(url).netloc + if netloc: + headers_["Host"] = netloc + + if headers: + headers_.update(headers) + return headers_ + + def urlopen( # type: ignore[override] + self, method: str, url: str, redirect: bool = True, **kw: typing.Any + ) -> BaseHTTPResponse: + "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." + u = parse_url(url) + if not connection_requires_http_tunnel(self.proxy, self.proxy_config, u.scheme): + # For connections using HTTP CONNECT, httplib sets the necessary + # headers on the CONNECT to the proxy. If we're not using CONNECT, + # we'll definitely need to set 'Host' at the very least. + headers = kw.get("headers", self.headers) + kw["headers"] = self._set_proxy_headers(url, headers) + + return super().urlopen(method, url, redirect=redirect, **kw) + + +def proxy_from_url(url: str, **kw: typing.Any) -> ProxyManager: + return ProxyManager(proxy_url=url, **kw) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/py.typed b/Backend/venv/lib/python3.12/site-packages/urllib3/py.typed new file mode 100644 index 00000000..5f3ea3d9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/py.typed @@ -0,0 +1,2 @@ +# Instruct type checkers to look for inline type annotations in this package. +# See PEP 561. diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/response.py b/Backend/venv/lib/python3.12/site-packages/urllib3/response.py new file mode 100644 index 00000000..5632dab3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/response.py @@ -0,0 +1,1307 @@ +from __future__ import annotations + +import collections +import io +import json as _json +import logging +import re +import socket +import sys +import typing +import warnings +import zlib +from contextlib import contextmanager +from http.client import HTTPMessage as _HttplibHTTPMessage +from http.client import HTTPResponse as _HttplibHTTPResponse +from socket import timeout as SocketTimeout + +if typing.TYPE_CHECKING: + from ._base_connection import BaseHTTPConnection + +try: + try: + import brotlicffi as brotli # type: ignore[import-not-found] + except ImportError: + import brotli # type: ignore[import-not-found] +except ImportError: + brotli = None + +from . import util +from ._base_connection import _TYPE_BODY +from ._collections import HTTPHeaderDict +from .connection import BaseSSLError, HTTPConnection, HTTPException +from .exceptions import ( + BodyNotHttplibCompatible, + DecodeError, + HTTPError, + IncompleteRead, + InvalidChunkLength, + InvalidHeader, + ProtocolError, + ReadTimeoutError, + ResponseNotChunked, + SSLError, +) +from .util.response import is_fp_closed, is_response_to_head +from .util.retry import Retry + +if typing.TYPE_CHECKING: + from .connectionpool import HTTPConnectionPool + +log = logging.getLogger(__name__) + + +class ContentDecoder: + def decompress(self, data: bytes) -> bytes: + raise NotImplementedError() + + def flush(self) -> bytes: + raise NotImplementedError() + + +class DeflateDecoder(ContentDecoder): + def __init__(self) -> None: + self._first_try = True + self._data = b"" + self._obj = zlib.decompressobj() + + def decompress(self, data: bytes) -> bytes: + if not data: + return data + + if not self._first_try: + return self._obj.decompress(data) + + self._data += data + try: + decompressed = self._obj.decompress(data) + if decompressed: + self._first_try = False + self._data = None # type: ignore[assignment] + return decompressed + except zlib.error: + self._first_try = False + self._obj = zlib.decompressobj(-zlib.MAX_WBITS) + try: + return self.decompress(self._data) + finally: + self._data = None # type: ignore[assignment] + + def flush(self) -> bytes: + return self._obj.flush() + + +class GzipDecoderState: + FIRST_MEMBER = 0 + OTHER_MEMBERS = 1 + SWALLOW_DATA = 2 + + +class GzipDecoder(ContentDecoder): + def __init__(self) -> None: + self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) + self._state = GzipDecoderState.FIRST_MEMBER + + def decompress(self, data: bytes) -> bytes: + ret = bytearray() + if self._state == GzipDecoderState.SWALLOW_DATA or not data: + return bytes(ret) + while True: + try: + ret += self._obj.decompress(data) + except zlib.error: + previous_state = self._state + # Ignore data after the first error + self._state = GzipDecoderState.SWALLOW_DATA + if previous_state == GzipDecoderState.OTHER_MEMBERS: + # Allow trailing garbage acceptable in other gzip clients + return bytes(ret) + raise + data = self._obj.unused_data + if not data: + return bytes(ret) + self._state = GzipDecoderState.OTHER_MEMBERS + self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) + + def flush(self) -> bytes: + return self._obj.flush() + + +if brotli is not None: + + class BrotliDecoder(ContentDecoder): + # Supports both 'brotlipy' and 'Brotli' packages + # since they share an import name. The top branches + # are for 'brotlipy' and bottom branches for 'Brotli' + def __init__(self) -> None: + self._obj = brotli.Decompressor() + if hasattr(self._obj, "decompress"): + setattr(self, "decompress", self._obj.decompress) + else: + setattr(self, "decompress", self._obj.process) + + def flush(self) -> bytes: + if hasattr(self._obj, "flush"): + return self._obj.flush() # type: ignore[no-any-return] + return b"" + + +try: + # Python 3.14+ + from compression import zstd # type: ignore[import-not-found] # noqa: F401 + + HAS_ZSTD = True + + class ZstdDecoder(ContentDecoder): + def __init__(self) -> None: + self._obj = zstd.ZstdDecompressor() + + def decompress(self, data: bytes) -> bytes: + if not data: + return b"" + data_parts = [self._obj.decompress(data)] + while self._obj.eof and self._obj.unused_data: + unused_data = self._obj.unused_data + self._obj = zstd.ZstdDecompressor() + data_parts.append(self._obj.decompress(unused_data)) + return b"".join(data_parts) + + def flush(self) -> bytes: + if not self._obj.eof: + raise DecodeError("Zstandard data is incomplete") + return b"" + +except ImportError: + try: + # Python 3.13 and earlier require the 'zstandard' module. + import zstandard as zstd + + # The package 'zstandard' added the 'eof' property starting + # in v0.18.0 which we require to ensure a complete and + # valid zstd stream was fed into the ZstdDecoder. + # See: https://github.com/urllib3/urllib3/pull/2624 + _zstd_version = tuple( + map(int, re.search(r"^([0-9]+)\.([0-9]+)", zstd.__version__).groups()) # type: ignore[union-attr] + ) + if _zstd_version < (0, 18): # Defensive: + raise ImportError("zstandard module doesn't have eof") + except (AttributeError, ImportError, ValueError): # Defensive: + HAS_ZSTD = False + else: + HAS_ZSTD = True + + class ZstdDecoder(ContentDecoder): # type: ignore[no-redef] + def __init__(self) -> None: + self._obj = zstd.ZstdDecompressor().decompressobj() + + def decompress(self, data: bytes) -> bytes: + if not data: + return b"" + data_parts = [self._obj.decompress(data)] + while self._obj.eof and self._obj.unused_data: + unused_data = self._obj.unused_data + self._obj = zstd.ZstdDecompressor().decompressobj() + data_parts.append(self._obj.decompress(unused_data)) + return b"".join(data_parts) + + def flush(self) -> bytes: + ret = self._obj.flush() # note: this is a no-op + if not self._obj.eof: + raise DecodeError("Zstandard data is incomplete") + return ret # type: ignore[no-any-return] + + +class MultiDecoder(ContentDecoder): + """ + From RFC7231: + If one or more encodings have been applied to a representation, the + sender that applied the encodings MUST generate a Content-Encoding + header field that lists the content codings in the order in which + they were applied. + """ + + def __init__(self, modes: str) -> None: + self._decoders = [_get_decoder(m.strip()) for m in modes.split(",")] + + def flush(self) -> bytes: + return self._decoders[0].flush() + + def decompress(self, data: bytes) -> bytes: + for d in reversed(self._decoders): + data = d.decompress(data) + return data + + +def _get_decoder(mode: str) -> ContentDecoder: + if "," in mode: + return MultiDecoder(mode) + + # According to RFC 9110 section 8.4.1.3, recipients should + # consider x-gzip equivalent to gzip + if mode in ("gzip", "x-gzip"): + return GzipDecoder() + + if brotli is not None and mode == "br": + return BrotliDecoder() + + if HAS_ZSTD and mode == "zstd": + return ZstdDecoder() + + return DeflateDecoder() + + +class BytesQueueBuffer: + """Memory-efficient bytes buffer + + To return decoded data in read() and still follow the BufferedIOBase API, we need a + buffer to always return the correct amount of bytes. + + This buffer should be filled using calls to put() + + Our maximum memory usage is determined by the sum of the size of: + + * self.buffer, which contains the full data + * the largest chunk that we will copy in get() + + The worst case scenario is a single chunk, in which case we'll make a full copy of + the data inside get(). + """ + + def __init__(self) -> None: + self.buffer: typing.Deque[bytes] = collections.deque() + self._size: int = 0 + + def __len__(self) -> int: + return self._size + + def put(self, data: bytes) -> None: + self.buffer.append(data) + self._size += len(data) + + def get(self, n: int) -> bytes: + if n == 0: + return b"" + elif not self.buffer: + raise RuntimeError("buffer is empty") + elif n < 0: + raise ValueError("n should be > 0") + + fetched = 0 + ret = io.BytesIO() + while fetched < n: + remaining = n - fetched + chunk = self.buffer.popleft() + chunk_length = len(chunk) + if remaining < chunk_length: + left_chunk, right_chunk = chunk[:remaining], chunk[remaining:] + ret.write(left_chunk) + self.buffer.appendleft(right_chunk) + self._size -= remaining + break + else: + ret.write(chunk) + self._size -= chunk_length + fetched += chunk_length + + if not self.buffer: + break + + return ret.getvalue() + + def get_all(self) -> bytes: + buffer = self.buffer + if not buffer: + assert self._size == 0 + return b"" + if len(buffer) == 1: + result = buffer.pop() + else: + ret = io.BytesIO() + ret.writelines(buffer.popleft() for _ in range(len(buffer))) + result = ret.getvalue() + self._size = 0 + return result + + +class BaseHTTPResponse(io.IOBase): + CONTENT_DECODERS = ["gzip", "x-gzip", "deflate"] + if brotli is not None: + CONTENT_DECODERS += ["br"] + if HAS_ZSTD: + CONTENT_DECODERS += ["zstd"] + REDIRECT_STATUSES = [301, 302, 303, 307, 308] + + DECODER_ERROR_CLASSES: tuple[type[Exception], ...] = (IOError, zlib.error) + if brotli is not None: + DECODER_ERROR_CLASSES += (brotli.error,) + + if HAS_ZSTD: + DECODER_ERROR_CLASSES += (zstd.ZstdError,) + + def __init__( + self, + *, + headers: typing.Mapping[str, str] | typing.Mapping[bytes, bytes] | None = None, + status: int, + version: int, + version_string: str, + reason: str | None, + decode_content: bool, + request_url: str | None, + retries: Retry | None = None, + ) -> None: + if isinstance(headers, HTTPHeaderDict): + self.headers = headers + else: + self.headers = HTTPHeaderDict(headers) # type: ignore[arg-type] + self.status = status + self.version = version + self.version_string = version_string + self.reason = reason + self.decode_content = decode_content + self._has_decoded_content = False + self._request_url: str | None = request_url + self.retries = retries + + self.chunked = False + tr_enc = self.headers.get("transfer-encoding", "").lower() + # Don't incur the penalty of creating a list and then discarding it + encodings = (enc.strip() for enc in tr_enc.split(",")) + if "chunked" in encodings: + self.chunked = True + + self._decoder: ContentDecoder | None = None + self.length_remaining: int | None + + def get_redirect_location(self) -> str | None | typing.Literal[False]: + """ + Should we redirect and where to? + + :returns: Truthy redirect location string if we got a redirect status + code and valid location. ``None`` if redirect status and no + location. ``False`` if not a redirect status code. + """ + if self.status in self.REDIRECT_STATUSES: + return self.headers.get("location") + return False + + @property + def data(self) -> bytes: + raise NotImplementedError() + + def json(self) -> typing.Any: + """ + Deserializes the body of the HTTP response as a Python object. + + The body of the HTTP response must be encoded using UTF-8, as per + `RFC 8529 Section 8.1 `_. + + To use a custom JSON decoder pass the result of :attr:`HTTPResponse.data` to + your custom decoder instead. + + If the body of the HTTP response is not decodable to UTF-8, a + `UnicodeDecodeError` will be raised. If the body of the HTTP response is not a + valid JSON document, a `json.JSONDecodeError` will be raised. + + Read more :ref:`here `. + + :returns: The body of the HTTP response as a Python object. + """ + data = self.data.decode("utf-8") + return _json.loads(data) + + @property + def url(self) -> str | None: + raise NotImplementedError() + + @url.setter + def url(self, url: str | None) -> None: + raise NotImplementedError() + + @property + def connection(self) -> BaseHTTPConnection | None: + raise NotImplementedError() + + @property + def retries(self) -> Retry | None: + return self._retries + + @retries.setter + def retries(self, retries: Retry | None) -> None: + # Override the request_url if retries has a redirect location. + if retries is not None and retries.history: + self.url = retries.history[-1].redirect_location + self._retries = retries + + def stream( + self, amt: int | None = 2**16, decode_content: bool | None = None + ) -> typing.Iterator[bytes]: + raise NotImplementedError() + + def read( + self, + amt: int | None = None, + decode_content: bool | None = None, + cache_content: bool = False, + ) -> bytes: + raise NotImplementedError() + + def read1( + self, + amt: int | None = None, + decode_content: bool | None = None, + ) -> bytes: + raise NotImplementedError() + + def read_chunked( + self, + amt: int | None = None, + decode_content: bool | None = None, + ) -> typing.Iterator[bytes]: + raise NotImplementedError() + + def release_conn(self) -> None: + raise NotImplementedError() + + def drain_conn(self) -> None: + raise NotImplementedError() + + def shutdown(self) -> None: + raise NotImplementedError() + + def close(self) -> None: + raise NotImplementedError() + + def _init_decoder(self) -> None: + """ + Set-up the _decoder attribute if necessary. + """ + # Note: content-encoding value should be case-insensitive, per RFC 7230 + # Section 3.2 + content_encoding = self.headers.get("content-encoding", "").lower() + if self._decoder is None: + if content_encoding in self.CONTENT_DECODERS: + self._decoder = _get_decoder(content_encoding) + elif "," in content_encoding: + encodings = [ + e.strip() + for e in content_encoding.split(",") + if e.strip() in self.CONTENT_DECODERS + ] + if encodings: + self._decoder = _get_decoder(content_encoding) + + def _decode( + self, data: bytes, decode_content: bool | None, flush_decoder: bool + ) -> bytes: + """ + Decode the data passed in and potentially flush the decoder. + """ + if not decode_content: + if self._has_decoded_content: + raise RuntimeError( + "Calling read(decode_content=False) is not supported after " + "read(decode_content=True) was called." + ) + return data + + try: + if self._decoder: + data = self._decoder.decompress(data) + self._has_decoded_content = True + except self.DECODER_ERROR_CLASSES as e: + content_encoding = self.headers.get("content-encoding", "").lower() + raise DecodeError( + "Received response with content-encoding: %s, but " + "failed to decode it." % content_encoding, + e, + ) from e + if flush_decoder: + data += self._flush_decoder() + + return data + + def _flush_decoder(self) -> bytes: + """ + Flushes the decoder. Should only be called if the decoder is actually + being used. + """ + if self._decoder: + return self._decoder.decompress(b"") + self._decoder.flush() + return b"" + + # Compatibility methods for `io` module + def readinto(self, b: bytearray) -> int: + temp = self.read(len(b)) + if len(temp) == 0: + return 0 + else: + b[: len(temp)] = temp + return len(temp) + + # Compatibility methods for http.client.HTTPResponse + def getheaders(self) -> HTTPHeaderDict: + warnings.warn( + "HTTPResponse.getheaders() is deprecated and will be removed " + "in urllib3 v2.6.0. Instead access HTTPResponse.headers directly.", + category=DeprecationWarning, + stacklevel=2, + ) + return self.headers + + def getheader(self, name: str, default: str | None = None) -> str | None: + warnings.warn( + "HTTPResponse.getheader() is deprecated and will be removed " + "in urllib3 v2.6.0. Instead use HTTPResponse.headers.get(name, default).", + category=DeprecationWarning, + stacklevel=2, + ) + return self.headers.get(name, default) + + # Compatibility method for http.cookiejar + def info(self) -> HTTPHeaderDict: + return self.headers + + def geturl(self) -> str | None: + return self.url + + +class HTTPResponse(BaseHTTPResponse): + """ + HTTP Response container. + + Backwards-compatible with :class:`http.client.HTTPResponse` but the response ``body`` is + loaded and decoded on-demand when the ``data`` property is accessed. This + class is also compatible with the Python standard library's :mod:`io` + module, and can hence be treated as a readable object in the context of that + framework. + + Extra parameters for behaviour not present in :class:`http.client.HTTPResponse`: + + :param preload_content: + If True, the response's body will be preloaded during construction. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + + :param original_response: + When this HTTPResponse wrapper is generated from an :class:`http.client.HTTPResponse` + object, it's convenient to include the original for debug purposes. It's + otherwise unused. + + :param retries: + The retries contains the last :class:`~urllib3.util.retry.Retry` that + was used during the request. + + :param enforce_content_length: + Enforce content length checking. Body returned by server must match + value of Content-Length header, if present. Otherwise, raise error. + """ + + def __init__( + self, + body: _TYPE_BODY = "", + headers: typing.Mapping[str, str] | typing.Mapping[bytes, bytes] | None = None, + status: int = 0, + version: int = 0, + version_string: str = "HTTP/?", + reason: str | None = None, + preload_content: bool = True, + decode_content: bool = True, + original_response: _HttplibHTTPResponse | None = None, + pool: HTTPConnectionPool | None = None, + connection: HTTPConnection | None = None, + msg: _HttplibHTTPMessage | None = None, + retries: Retry | None = None, + enforce_content_length: bool = True, + request_method: str | None = None, + request_url: str | None = None, + auto_close: bool = True, + sock_shutdown: typing.Callable[[int], None] | None = None, + ) -> None: + super().__init__( + headers=headers, + status=status, + version=version, + version_string=version_string, + reason=reason, + decode_content=decode_content, + request_url=request_url, + retries=retries, + ) + + self.enforce_content_length = enforce_content_length + self.auto_close = auto_close + + self._body = None + self._fp: _HttplibHTTPResponse | None = None + self._original_response = original_response + self._fp_bytes_read = 0 + self.msg = msg + + if body and isinstance(body, (str, bytes)): + self._body = body + + self._pool = pool + self._connection = connection + + if hasattr(body, "read"): + self._fp = body # type: ignore[assignment] + self._sock_shutdown = sock_shutdown + + # Are we using the chunked-style of transfer encoding? + self.chunk_left: int | None = None + + # Determine length of response + self.length_remaining = self._init_length(request_method) + + # Used to return the correct amount of bytes for partial read()s + self._decoded_buffer = BytesQueueBuffer() + + # If requested, preload the body. + if preload_content and not self._body: + self._body = self.read(decode_content=decode_content) + + def release_conn(self) -> None: + if not self._pool or not self._connection: + return None + + self._pool._put_conn(self._connection) + self._connection = None + + def drain_conn(self) -> None: + """ + Read and discard any remaining HTTP response data in the response connection. + + Unread data in the HTTPResponse connection blocks the connection from being released back to the pool. + """ + try: + self.read() + except (HTTPError, OSError, BaseSSLError, HTTPException): + pass + + @property + def data(self) -> bytes: + # For backwards-compat with earlier urllib3 0.4 and earlier. + if self._body: + return self._body # type: ignore[return-value] + + if self._fp: + return self.read(cache_content=True) + + return None # type: ignore[return-value] + + @property + def connection(self) -> HTTPConnection | None: + return self._connection + + def isclosed(self) -> bool: + return is_fp_closed(self._fp) + + def tell(self) -> int: + """ + Obtain the number of bytes pulled over the wire so far. May differ from + the amount of content returned by :meth:``urllib3.response.HTTPResponse.read`` + if bytes are encoded on the wire (e.g, compressed). + """ + return self._fp_bytes_read + + def _init_length(self, request_method: str | None) -> int | None: + """ + Set initial length value for Response content if available. + """ + length: int | None + content_length: str | None = self.headers.get("content-length") + + if content_length is not None: + if self.chunked: + # This Response will fail with an IncompleteRead if it can't be + # received as chunked. This method falls back to attempt reading + # the response before raising an exception. + log.warning( + "Received response with both Content-Length and " + "Transfer-Encoding set. This is expressly forbidden " + "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " + "attempting to process response as Transfer-Encoding: " + "chunked." + ) + return None + + try: + # RFC 7230 section 3.3.2 specifies multiple content lengths can + # be sent in a single Content-Length header + # (e.g. Content-Length: 42, 42). This line ensures the values + # are all valid ints and that as long as the `set` length is 1, + # all values are the same. Otherwise, the header is invalid. + lengths = {int(val) for val in content_length.split(",")} + if len(lengths) > 1: + raise InvalidHeader( + "Content-Length contained multiple " + "unmatching values (%s)" % content_length + ) + length = lengths.pop() + except ValueError: + length = None + else: + if length < 0: + length = None + + else: # if content_length is None + length = None + + # Convert status to int for comparison + # In some cases, httplib returns a status of "_UNKNOWN" + try: + status = int(self.status) + except ValueError: + status = 0 + + # Check for responses that shouldn't include a body + if status in (204, 304) or 100 <= status < 200 or request_method == "HEAD": + length = 0 + + return length + + @contextmanager + def _error_catcher(self) -> typing.Generator[None]: + """ + Catch low-level python exceptions, instead re-raising urllib3 + variants, so that low-level exceptions are not leaked in the + high-level api. + + On exit, release the connection back to the pool. + """ + clean_exit = False + + try: + try: + yield + + except SocketTimeout as e: + # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but + # there is yet no clean way to get at it from this context. + raise ReadTimeoutError(self._pool, None, "Read timed out.") from e # type: ignore[arg-type] + + except BaseSSLError as e: + # FIXME: Is there a better way to differentiate between SSLErrors? + if "read operation timed out" not in str(e): + # SSL errors related to framing/MAC get wrapped and reraised here + raise SSLError(e) from e + + raise ReadTimeoutError(self._pool, None, "Read timed out.") from e # type: ignore[arg-type] + + except IncompleteRead as e: + if ( + e.expected is not None + and e.partial is not None + and e.expected == -e.partial + ): + arg = "Response may not contain content." + else: + arg = f"Connection broken: {e!r}" + raise ProtocolError(arg, e) from e + + except (HTTPException, OSError) as e: + raise ProtocolError(f"Connection broken: {e!r}", e) from e + + # If no exception is thrown, we should avoid cleaning up + # unnecessarily. + clean_exit = True + finally: + # If we didn't terminate cleanly, we need to throw away our + # connection. + if not clean_exit: + # The response may not be closed but we're not going to use it + # anymore so close it now to ensure that the connection is + # released back to the pool. + if self._original_response: + self._original_response.close() + + # Closing the response may not actually be sufficient to close + # everything, so if we have a hold of the connection close that + # too. + if self._connection: + self._connection.close() + + # If we hold the original response but it's closed now, we should + # return the connection back to the pool. + if self._original_response and self._original_response.isclosed(): + self.release_conn() + + def _fp_read( + self, + amt: int | None = None, + *, + read1: bool = False, + ) -> bytes: + """ + Read a response with the thought that reading the number of bytes + larger than can fit in a 32-bit int at a time via SSL in some + known cases leads to an overflow error that has to be prevented + if `amt` or `self.length_remaining` indicate that a problem may + happen. + + The known cases: + * CPython < 3.9.7 because of a bug + https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900. + * urllib3 injected with pyOpenSSL-backed SSL-support. + * CPython < 3.10 only when `amt` does not fit 32-bit int. + """ + assert self._fp + c_int_max = 2**31 - 1 + if ( + (amt and amt > c_int_max) + or ( + amt is None + and self.length_remaining + and self.length_remaining > c_int_max + ) + ) and (util.IS_PYOPENSSL or sys.version_info < (3, 10)): + if read1: + return self._fp.read1(c_int_max) + buffer = io.BytesIO() + # Besides `max_chunk_amt` being a maximum chunk size, it + # affects memory overhead of reading a response by this + # method in CPython. + # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum + # chunk size that does not lead to an overflow error, but + # 256 MiB is a compromise. + max_chunk_amt = 2**28 + while amt is None or amt != 0: + if amt is not None: + chunk_amt = min(amt, max_chunk_amt) + amt -= chunk_amt + else: + chunk_amt = max_chunk_amt + data = self._fp.read(chunk_amt) + if not data: + break + buffer.write(data) + del data # to reduce peak memory usage by `max_chunk_amt`. + return buffer.getvalue() + elif read1: + return self._fp.read1(amt) if amt is not None else self._fp.read1() + else: + # StringIO doesn't like amt=None + return self._fp.read(amt) if amt is not None else self._fp.read() + + def _raw_read( + self, + amt: int | None = None, + *, + read1: bool = False, + ) -> bytes: + """ + Reads `amt` of bytes from the socket. + """ + if self._fp is None: + return None # type: ignore[return-value] + + fp_closed = getattr(self._fp, "closed", False) + + with self._error_catcher(): + data = self._fp_read(amt, read1=read1) if not fp_closed else b"" + if amt is not None and amt != 0 and not data: + # Platform-specific: Buggy versions of Python. + # Close the connection when no data is returned + # + # This is redundant to what httplib/http.client _should_ + # already do. However, versions of python released before + # December 15, 2012 (http://bugs.python.org/issue16298) do + # not properly close the connection in all cases. There is + # no harm in redundantly calling close. + self._fp.close() + if ( + self.enforce_content_length + and self.length_remaining is not None + and self.length_remaining != 0 + ): + # This is an edge case that httplib failed to cover due + # to concerns of backward compatibility. We're + # addressing it here to make sure IncompleteRead is + # raised during streaming, so all calls with incorrect + # Content-Length are caught. + raise IncompleteRead(self._fp_bytes_read, self.length_remaining) + elif read1 and ( + (amt != 0 and not data) or self.length_remaining == len(data) + ): + # All data has been read, but `self._fp.read1` in + # CPython 3.12 and older doesn't always close + # `http.client.HTTPResponse`, so we close it here. + # See https://github.com/python/cpython/issues/113199 + self._fp.close() + + if data: + self._fp_bytes_read += len(data) + if self.length_remaining is not None: + self.length_remaining -= len(data) + return data + + def read( + self, + amt: int | None = None, + decode_content: bool | None = None, + cache_content: bool = False, + ) -> bytes: + """ + Similar to :meth:`http.client.HTTPResponse.read`, but with two additional + parameters: ``decode_content`` and ``cache_content``. + + :param amt: + How much of the content to read. If specified, caching is skipped + because it doesn't make sense to cache partial content as the full + response. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + + :param cache_content: + If True, will save the returned data such that the same result is + returned despite of the state of the underlying file object. This + is useful if you want the ``.data`` property to continue working + after having ``.read()`` the file object. (Overridden if ``amt`` is + set.) + """ + self._init_decoder() + if decode_content is None: + decode_content = self.decode_content + + if amt and amt < 0: + # Negative numbers and `None` should be treated the same. + amt = None + elif amt is not None: + cache_content = False + + if len(self._decoded_buffer) >= amt: + return self._decoded_buffer.get(amt) + + data = self._raw_read(amt) + + flush_decoder = amt is None or (amt != 0 and not data) + + if not data and len(self._decoded_buffer) == 0: + return data + + if amt is None: + data = self._decode(data, decode_content, flush_decoder) + if cache_content: + self._body = data + else: + # do not waste memory on buffer when not decoding + if not decode_content: + if self._has_decoded_content: + raise RuntimeError( + "Calling read(decode_content=False) is not supported after " + "read(decode_content=True) was called." + ) + return data + + decoded_data = self._decode(data, decode_content, flush_decoder) + self._decoded_buffer.put(decoded_data) + + while len(self._decoded_buffer) < amt and data: + # TODO make sure to initially read enough data to get past the headers + # For example, the GZ file header takes 10 bytes, we don't want to read + # it one byte at a time + data = self._raw_read(amt) + decoded_data = self._decode(data, decode_content, flush_decoder) + self._decoded_buffer.put(decoded_data) + data = self._decoded_buffer.get(amt) + + return data + + def read1( + self, + amt: int | None = None, + decode_content: bool | None = None, + ) -> bytes: + """ + Similar to ``http.client.HTTPResponse.read1`` and documented + in :meth:`io.BufferedReader.read1`, but with an additional parameter: + ``decode_content``. + + :param amt: + How much of the content to read. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + """ + if decode_content is None: + decode_content = self.decode_content + if amt and amt < 0: + # Negative numbers and `None` should be treated the same. + amt = None + # try and respond without going to the network + if self._has_decoded_content: + if not decode_content: + raise RuntimeError( + "Calling read1(decode_content=False) is not supported after " + "read1(decode_content=True) was called." + ) + if len(self._decoded_buffer) > 0: + if amt is None: + return self._decoded_buffer.get_all() + return self._decoded_buffer.get(amt) + if amt == 0: + return b"" + + # FIXME, this method's type doesn't say returning None is possible + data = self._raw_read(amt, read1=True) + if not decode_content or data is None: + return data + + self._init_decoder() + while True: + flush_decoder = not data + decoded_data = self._decode(data, decode_content, flush_decoder) + self._decoded_buffer.put(decoded_data) + if decoded_data or flush_decoder: + break + data = self._raw_read(8192, read1=True) + + if amt is None: + return self._decoded_buffer.get_all() + return self._decoded_buffer.get(amt) + + def stream( + self, amt: int | None = 2**16, decode_content: bool | None = None + ) -> typing.Generator[bytes]: + """ + A generator wrapper for the read() method. A call will block until + ``amt`` bytes have been read from the connection or until the + connection is closed. + + :param amt: + How much of the content to read. The generator will return up to + much data per iteration, but may return less. This is particularly + likely when using compressed data. However, the empty string will + never be returned. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + """ + if self.chunked and self.supports_chunked_reads(): + yield from self.read_chunked(amt, decode_content=decode_content) + else: + while not is_fp_closed(self._fp) or len(self._decoded_buffer) > 0: + data = self.read(amt=amt, decode_content=decode_content) + + if data: + yield data + + # Overrides from io.IOBase + def readable(self) -> bool: + return True + + def shutdown(self) -> None: + if not self._sock_shutdown: + raise ValueError("Cannot shutdown socket as self._sock_shutdown is not set") + if self._connection is None: + raise RuntimeError( + "Cannot shutdown as connection has already been released to the pool" + ) + self._sock_shutdown(socket.SHUT_RD) + + def close(self) -> None: + self._sock_shutdown = None + + if not self.closed and self._fp: + self._fp.close() + + if self._connection: + self._connection.close() + + if not self.auto_close: + io.IOBase.close(self) + + @property + def closed(self) -> bool: + if not self.auto_close: + return io.IOBase.closed.__get__(self) # type: ignore[no-any-return] + elif self._fp is None: + return True + elif hasattr(self._fp, "isclosed"): + return self._fp.isclosed() + elif hasattr(self._fp, "closed"): + return self._fp.closed + else: + return True + + def fileno(self) -> int: + if self._fp is None: + raise OSError("HTTPResponse has no file to get a fileno from") + elif hasattr(self._fp, "fileno"): + return self._fp.fileno() + else: + raise OSError( + "The file-like object this HTTPResponse is wrapped " + "around has no file descriptor" + ) + + def flush(self) -> None: + if ( + self._fp is not None + and hasattr(self._fp, "flush") + and not getattr(self._fp, "closed", False) + ): + return self._fp.flush() + + def supports_chunked_reads(self) -> bool: + """ + Checks if the underlying file-like object looks like a + :class:`http.client.HTTPResponse` object. We do this by testing for + the fp attribute. If it is present we assume it returns raw chunks as + processed by read_chunked(). + """ + return hasattr(self._fp, "fp") + + def _update_chunk_length(self) -> None: + # First, we'll figure out length of a chunk and then + # we'll try to read it from socket. + if self.chunk_left is not None: + return None + line = self._fp.fp.readline() # type: ignore[union-attr] + line = line.split(b";", 1)[0] + try: + self.chunk_left = int(line, 16) + except ValueError: + self.close() + if line: + # Invalid chunked protocol response, abort. + raise InvalidChunkLength(self, line) from None + else: + # Truncated at start of next chunk + raise ProtocolError("Response ended prematurely") from None + + def _handle_chunk(self, amt: int | None) -> bytes: + returned_chunk = None + if amt is None: + chunk = self._fp._safe_read(self.chunk_left) # type: ignore[union-attr] + returned_chunk = chunk + self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. + self.chunk_left = None + elif self.chunk_left is not None and amt < self.chunk_left: + value = self._fp._safe_read(amt) # type: ignore[union-attr] + self.chunk_left = self.chunk_left - amt + returned_chunk = value + elif amt == self.chunk_left: + value = self._fp._safe_read(amt) # type: ignore[union-attr] + self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. + self.chunk_left = None + returned_chunk = value + else: # amt > self.chunk_left + returned_chunk = self._fp._safe_read(self.chunk_left) # type: ignore[union-attr] + self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk. + self.chunk_left = None + return returned_chunk # type: ignore[no-any-return] + + def read_chunked( + self, amt: int | None = None, decode_content: bool | None = None + ) -> typing.Generator[bytes]: + """ + Similar to :meth:`HTTPResponse.read`, but with an additional + parameter: ``decode_content``. + + :param amt: + How much of the content to read. If specified, caching is skipped + because it doesn't make sense to cache partial content as the full + response. + + :param decode_content: + If True, will attempt to decode the body based on the + 'content-encoding' header. + """ + self._init_decoder() + # FIXME: Rewrite this method and make it a class with a better structured logic. + if not self.chunked: + raise ResponseNotChunked( + "Response is not chunked. " + "Header 'transfer-encoding: chunked' is missing." + ) + if not self.supports_chunked_reads(): + raise BodyNotHttplibCompatible( + "Body should be http.client.HTTPResponse like. " + "It should have have an fp attribute which returns raw chunks." + ) + + with self._error_catcher(): + # Don't bother reading the body of a HEAD request. + if self._original_response and is_response_to_head(self._original_response): + self._original_response.close() + return None + + # If a response is already read and closed + # then return immediately. + if self._fp.fp is None: # type: ignore[union-attr] + return None + + if amt and amt < 0: + # Negative numbers and `None` should be treated the same, + # but httplib handles only `None` correctly. + amt = None + + while True: + self._update_chunk_length() + if self.chunk_left == 0: + break + chunk = self._handle_chunk(amt) + decoded = self._decode( + chunk, decode_content=decode_content, flush_decoder=False + ) + if decoded: + yield decoded + + if decode_content: + # On CPython and PyPy, we should never need to flush the + # decoder. However, on Jython we *might* need to, so + # lets defensively do it anyway. + decoded = self._flush_decoder() + if decoded: # Platform-specific: Jython. + yield decoded + + # Chunk content ends with \r\n: discard it. + while self._fp is not None: + line = self._fp.fp.readline() + if not line: + # Some sites may not end with '\r\n'. + break + if line == b"\r\n": + break + + # We read everything; close the "file". + if self._original_response: + self._original_response.close() + + @property + def url(self) -> str | None: + """ + Returns the URL that was the source of this response. + If the request that generated this response redirected, this method + will return the final redirect location. + """ + return self._request_url + + @url.setter + def url(self, url: str) -> None: + self._request_url = url + + def __iter__(self) -> typing.Iterator[bytes]: + buffer: list[bytes] = [] + for chunk in self.stream(decode_content=True): + if b"\n" in chunk: + chunks = chunk.split(b"\n") + yield b"".join(buffer) + chunks[0] + b"\n" + for x in chunks[1:-1]: + yield x + b"\n" + if chunks[-1]: + buffer = [chunks[-1]] + else: + buffer = [] + else: + buffer.append(chunk) + if buffer: + yield b"".join(buffer) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__init__.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__init__.py new file mode 100644 index 00000000..53412603 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__init__.py @@ -0,0 +1,42 @@ +# For backwards compatibility, provide imports that used to be here. +from __future__ import annotations + +from .connection import is_connection_dropped +from .request import SKIP_HEADER, SKIPPABLE_HEADERS, make_headers +from .response import is_fp_closed +from .retry import Retry +from .ssl_ import ( + ALPN_PROTOCOLS, + IS_PYOPENSSL, + SSLContext, + assert_fingerprint, + create_urllib3_context, + resolve_cert_reqs, + resolve_ssl_version, + ssl_wrap_socket, +) +from .timeout import Timeout +from .url import Url, parse_url +from .wait import wait_for_read, wait_for_write + +__all__ = ( + "IS_PYOPENSSL", + "SSLContext", + "ALPN_PROTOCOLS", + "Retry", + "Timeout", + "Url", + "assert_fingerprint", + "create_urllib3_context", + "is_connection_dropped", + "is_fp_closed", + "parse_url", + "make_headers", + "resolve_cert_reqs", + "resolve_ssl_version", + "ssl_wrap_socket", + "wait_for_read", + "wait_for_write", + "SKIP_HEADER", + "SKIPPABLE_HEADERS", +) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0332381a513e445dc9fae20c784a1eaf857ff37 GIT binary patch literal 1011 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 L18q0FRJi{F&a|O^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/proxy.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f7d326c146019ac90e79123173aae7f37556aec GIT binary patch literal 1223 zcmZ8g&2G~`5Z<-(sc;90mpFAbKEDj^QNMJnRJiP?2RD>lmR?94ZR->g4Zt7Qah@cV*0$|3YaTxLtn z1bo~D;RAAzgFWQqHpW6$Jf*ETs+03nKiAG-M3r3`Yv!Jvyx`=Wf>-d1?IK1c`E#`F zob67@DZbCQwV|SykA$0!(=&Duu-J}W7DVO|&Xnp7_l}e)V2iW8VUq=2x7V4LDtwW! z!yO-QgYW^3&^tWDBgIh$%Ls8Hqg{dfZ#k;8&y6szj_|IC^4}7^!2l_ikTK7< z1G`6gBOIPCB#Jq4XcW7Fgj-RkPknk4vIYHSx>;eT&<(QeHYn-GaTu-0V};PTqss&j z)0{A*d1-FxN?OPQrS&ADR+sTNHh0{hCqzqvbTuvgVJqeY-QDfn&U;!E3{FUmD>s?z7-_W9^m^xiMW0 z0RZeo28;vjw~ZurJwp}%gr%2HMsCeUE=#uJ1m1$j&p{<;;2+(E?H!sBq@DXxtdHjw zCIzHj`1pLkxFjwbD%B3O`d6*~@zK7v^sQ1KSLz3qwf)N4p~P0^k0AomRns(ejaNZ_ zTZV6fjEKns%FhZ#O%A##=R7maNu(HOhD-}wKHW6;5{9pr(z0cB6L`$jvbZ2FEyTkR z$VpY`ndgP3+Iq3IVKp~5nok~^kJ9o<*SrXJ+2tq1YeJrf?T>cHXHMeLyZjT>i_@% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/request.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d581052bcee7a065f07619c819cb1a14478defd GIT binary patch literal 8323 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/response.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f7c5ef9324172bb9920a8497ef69bb873ed39b5 GIT binary patch literal 2879 zcma)8O>7&-6`t8${w^uWlw@1}kyddMnTSQEb`OPG7?El>wgD?ft)z&8f>?2fnrBaW4wc1SoH=%=^B_e`T|21Y_~rBX%K+&=+D84JBCM-7B!zKo+vFgX(x5W3g5orLN9v za;-YCdVD@!Ps}G^uURoCSx?QUV4bq!ztiT^R@zFytXsO3ggMhv@|mxN`#kn_({(*= za@%v+Y+mulFE<@-H%!Vex=SXtO_#r6dyZ5%M=GSu{i9boh-bW}Ynik)>+xTRWgz@o zqz!I!7l>&Qdc~y7cB|(p^=KK3km1l^RuRIx|AfT`N})Eo)+-Oy?u7GIbOQ14L=bu& zQ5B;%k*h7E74=QDjHSKsxo`YmcJX~iu(fa#J!6{{F?lM|wv;X3 zYoxr$jO7~PH9`&3sM<@!H7d44CLMc`7~aA)I7`E3M%nQgu?lHvHw7ne)`fIR?uD

    8db4?#8uP z_CbH{*6PjGPIBaj6rOlly1Df3(2b}3>?AW^riVJiuiQ&dceLqlLil8Ph=095hyIuv zRo};>>IZrOeVm$7|Bk2Be`KdK=x!!8{hWGt9K-Xeicf;2toRBX;s)YRs=eJ)+1Gxc zhVO)R&kpkh_>jZGdv(}GcS2u(0$zAujds_urLJMXl^$8`%@MBHNst5c>>rVQP3g%~ z;eC-F7Z)N&MTzpGN?Vcfa*=FrK8J3pWu=PB%CCSq9Pg6!f ztV{rXiBP-JitMRrGs27zQ3bM6CJjmJg=e{Vk6bS9B^!Q@Nr7$zqX*QoI!aa=KvnR) zA~!&5APo z_xlcYj{M}ap--xx9{;5O^S3*PFW&3B)Ja}?Fm!nRayN-GgWLMprarc%kMHD0wsS9R z=3cm$o4AqqQXhV&`eE!t_HKJiKeco0#Er|{QFLf@!@KQ$8;keHA7pa(`$u*%xvk-s zw@zQ}49z`Km4Wob7)tebRZv)ewToc-W&kDoZ%^LuGyZbu^XyjNY$rL}RnegF-NOSQ zW}>;>{pr|DL3@gg1gA(gdIc66qWi+Ue*l{CHPG5WB6hIwA{@_Elvh?e5@h?jUVw?W zn}kVFm;xY@-~n+g0Gw%DI6r-Ek`k#Em2%Jo_e0^Ak#*!|uZo|DqPA$*6$wd?+Ev?y ze=h*WFo?`l+}Fus0iM<3qSk8bKm@9D??d~j2r z=x7tWpoa1q6{PFOgZ~SDoD$xouCFb4o&&;B5UvhJ!0Z7PeMy*Uvz|*p?M0zB)TW$Ttm zk_YftL`4gguzQ^RS>3am4mnGI4DUn}lV=0%8{_|==e|P6|BHV06?$nmehkmx-Lo&_ N*YKkXPUDl($@gO#>>dCB literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/retry.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea11a617f652b4b4429da69dc5b5f3907b5b282c GIT binary patch literal 20292 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 D){lEX literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b0022dd43764d78a18dfc34808b9151a437c736 GIT binary patch literal 5563 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/ssltransport.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45e6762f71eaf9b75332582ea8c9079d1f3733ba GIT binary patch literal 13330 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 K8G|Y1*M9?2evO_0 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/timeout.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fab88edaadeabe0e3bfa9e7464f197fe23c98bc3 GIT binary patch literal 11695 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/url.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2710625817796d220b473e4843a3308b03ad2d9f GIT binary patch literal 16232 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/urllib3/util/__pycache__/wait.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e529c1518984a242c77af34a7c05ae05c7046938 GIT binary patch literal 3446 zcmc&$&2JmW6`x)17r$j&k{!vi*RB(ki7cj$k)(-aG=?iDMIgJ5gCKHKV#QrbE3LTf z?9loM39y0DO6|cC;zBB#gN`Pxg%)FVM`OWXWnZG8JF#=`gKYjMqBZPd3l~#!ahOql*FxH4kOu-?u!nh!yEjr@3 z$aQ2q0y^SIv+}qMeUd3pisMR@;GdZYbf+|vrgBFfSHIIk1rNfWV~!5k%}}Og4yy! zT_G)RfmB5BlE2T3$*u7W*TTzm+iJDI%u+?J$eZEXtBOb}N+r_z+Am-&Rkf;Bqb%AQ zQ&HyyPl0u4pheKpmiId(BaZD~m@Ruu_exgYE-dH<(;drz2DfPGZb3)nMsCuwHK=pc zxSf&x#Eo*1*|XM9DRrr@7^RX`G$}62S3JwH^30beT-V9Oe93e3Grq*nK<1P9Dh_qa z%vWfB%7R{HF3@732yN)P0Bxb3=h{O$>+Q1t%j}dpYh@>k^VutwH^bag_Dz>r&iTu( zJ7X6ovzLwh3@j>p+bZ79I`%}iw7{m^;!8t6x{&pN0Ow2KU`$$GwoD!9e<@pLwv$Dc z43!rA-e4QKHfwMj7NaL%8E4?<&4Z|seyPqIs;}OEZ7X%Xu3c{=)3s499;@+& zmb#l(7DM7~P7$P?uiVg>RE57>xYk4Bi9dx61c%*c7W0@b_3nVj|9kWx6vW zf+n)q4UCe2!%uo1!py*vwWDEL3#aH%o1y(XWm%bycXWhi1^B%gt_Rc2l2Q=N$el!0 zX33T}FkU`jd$q>taNE?3uozLh>**G|)Cz$qiq0Z{vig5yG@ zR`f9lQwSJ~m1%LY$FV(jigA7oUDxqu?vzH;LD;)&W79x91@%35+Y`A8dBl6bISLuxhkNISJ8?WB9|ez^SM@2j;p8&cx$QqLo) zXT@B@v4adh-HwB{ zH)-*;3UoLugCE=q0$C7$Kv+A14zhSbJV$6mAn%if$Q+rEyiewYj5Nk+dUF&`6b~ji zhtwO4QG24y!nCShdxz)Oj1WMMG}QyJkLIR~+g5JQrI_nDTvcw|XyXk9!L8Qa>4rbfEDzui+wvj3B-_4v7e6G85IobGN$K<|4qf<1m=L!L8x(&1H;RL zsFA&1qV;X7{X2a_%junH*S+5L6Wh_VJAE%MrFY_e>lZh=H_G=Xx8g6?rI!P;b&{x^ zk}+O7fx_HV5k3_+0Y)sawaDUc-h+$B)8Vm+c72_xQ~mvp-3B`+c0p%TR@krG9-jEKSJ(qN7D3ZUq933!A709(vP{~<8=diZ|=)6Rwz z2|{1QUGwB0;(?(-QQ+I)DLmN2_qO9Bb!jBX6cR_#)m{KRH;Bov*3QSIN=i4fsE)H={kmU?Xu! bool: # Platform-specific + """ + Returns True if the connection is dropped and should be closed. + :param conn: :class:`urllib3.connection.HTTPConnection` object. + """ + return not conn.is_connected + + +# This function is copied from socket.py in the Python 2.7 standard +# library test suite. Added to its signature is only `socket_options`. +# One additional modification is that we avoid binding to IPv6 servers +# discovered in DNS if the system doesn't have IPv6 functionality. +def create_connection( + address: tuple[str, int], + timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + source_address: tuple[str, int] | None = None, + socket_options: _TYPE_SOCKET_OPTIONS | None = None, +) -> socket.socket: + """Connect to *address* and return the socket object. + + Convenience function. Connect to *address* (a 2-tuple ``(host, + port)``) and return the socket object. Passing the optional + *timeout* parameter will set the timeout on the socket instance + before attempting to connect. If no *timeout* is supplied, the + global default timeout setting returned by :func:`socket.getdefaulttimeout` + is used. If *source_address* is set it must be a tuple of (host, port) + for the socket to bind as a source address before making the connection. + An host of '' or port 0 tells the OS to use the default. + """ + + host, port = address + if host.startswith("["): + host = host.strip("[]") + err = None + + # Using the value from allowed_gai_family() in the context of getaddrinfo lets + # us select whether to work with IPv4 DNS records, IPv6 records, or both. + # The original create_connection function always returns all records. + family = allowed_gai_family() + + try: + host.encode("idna") + except UnicodeError: + raise LocationParseError(f"'{host}', label empty or too long") from None + + for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): + af, socktype, proto, canonname, sa = res + sock = None + try: + sock = socket.socket(af, socktype, proto) + + # If provided, set socket level options before connecting. + _set_socket_options(sock, socket_options) + + if timeout is not _DEFAULT_TIMEOUT: + sock.settimeout(timeout) + if source_address: + sock.bind(source_address) + sock.connect(sa) + # Break explicitly a reference cycle + err = None + return sock + + except OSError as _: + err = _ + if sock is not None: + sock.close() + + if err is not None: + try: + raise err + finally: + # Break explicitly a reference cycle + err = None + else: + raise OSError("getaddrinfo returns an empty list") + + +def _set_socket_options( + sock: socket.socket, options: _TYPE_SOCKET_OPTIONS | None +) -> None: + if options is None: + return + + for opt in options: + sock.setsockopt(*opt) + + +def allowed_gai_family() -> socket.AddressFamily: + """This function is designed to work in the context of + getaddrinfo, where family=socket.AF_UNSPEC is the default and + will perform a DNS search for both IPv6 and IPv4 records.""" + + family = socket.AF_INET + if HAS_IPV6: + family = socket.AF_UNSPEC + return family + + +def _has_ipv6(host: str) -> bool: + """Returns True if the system can bind an IPv6 address.""" + sock = None + has_ipv6 = False + + if socket.has_ipv6: + # has_ipv6 returns true if cPython was compiled with IPv6 support. + # It does not tell us if the system has IPv6 support enabled. To + # determine that we must bind to an IPv6 address. + # https://github.com/urllib3/urllib3/pull/611 + # https://bugs.python.org/issue658327 + try: + sock = socket.socket(socket.AF_INET6) + sock.bind((host, 0)) + has_ipv6 = True + except Exception: + pass + + if sock: + sock.close() + return has_ipv6 + + +HAS_IPV6 = _has_ipv6("::1") diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/proxy.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/proxy.py new file mode 100644 index 00000000..908fc662 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/proxy.py @@ -0,0 +1,43 @@ +from __future__ import annotations + +import typing + +from .url import Url + +if typing.TYPE_CHECKING: + from ..connection import ProxyConfig + + +def connection_requires_http_tunnel( + proxy_url: Url | None = None, + proxy_config: ProxyConfig | None = None, + destination_scheme: str | None = None, +) -> bool: + """ + Returns True if the connection requires an HTTP CONNECT through the proxy. + + :param URL proxy_url: + URL of the proxy. + :param ProxyConfig proxy_config: + Proxy configuration from poolmanager.py + :param str destination_scheme: + The scheme of the destination. (i.e https, http, etc) + """ + # If we're not using a proxy, no way to use a tunnel. + if proxy_url is None: + return False + + # HTTP destinations never require tunneling, we always forward. + if destination_scheme == "http": + return False + + # Support for forwarding with HTTPS proxies and HTTPS destinations. + if ( + proxy_url.scheme == "https" + and proxy_config + and proxy_config.use_forwarding_for_https + ): + return False + + # Otherwise always use a tunnel. + return True diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/request.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/request.py new file mode 100644 index 00000000..23605c52 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/request.py @@ -0,0 +1,266 @@ +from __future__ import annotations + +import io +import typing +from base64 import b64encode +from enum import Enum + +from ..exceptions import UnrewindableBodyError +from .util import to_bytes + +if typing.TYPE_CHECKING: + from typing import Final + +# Pass as a value within ``headers`` to skip +# emitting some HTTP headers that are added automatically. +# The only headers that are supported are ``Accept-Encoding``, +# ``Host``, and ``User-Agent``. +SKIP_HEADER = "@@@SKIP_HEADER@@@" +SKIPPABLE_HEADERS = frozenset(["accept-encoding", "host", "user-agent"]) + +ACCEPT_ENCODING = "gzip,deflate" +try: + try: + import brotlicffi as _unused_module_brotli # type: ignore[import-not-found] # noqa: F401 + except ImportError: + import brotli as _unused_module_brotli # type: ignore[import-not-found] # noqa: F401 +except ImportError: + pass +else: + ACCEPT_ENCODING += ",br" + +try: + from compression import ( # type: ignore[import-not-found] # noqa: F401 + zstd as _unused_module_zstd, + ) + + ACCEPT_ENCODING += ",zstd" +except ImportError: + try: + import zstandard as _unused_module_zstd # noqa: F401 + + ACCEPT_ENCODING += ",zstd" + except ImportError: + pass + + +class _TYPE_FAILEDTELL(Enum): + token = 0 + + +_FAILEDTELL: Final[_TYPE_FAILEDTELL] = _TYPE_FAILEDTELL.token + +_TYPE_BODY_POSITION = typing.Union[int, _TYPE_FAILEDTELL] + +# When sending a request with these methods we aren't expecting +# a body so don't need to set an explicit 'Content-Length: 0' +# The reason we do this in the negative instead of tracking methods +# which 'should' have a body is because unknown methods should be +# treated as if they were 'POST' which *does* expect a body. +_METHODS_NOT_EXPECTING_BODY = {"GET", "HEAD", "DELETE", "TRACE", "OPTIONS", "CONNECT"} + + +def make_headers( + keep_alive: bool | None = None, + accept_encoding: bool | list[str] | str | None = None, + user_agent: str | None = None, + basic_auth: str | None = None, + proxy_basic_auth: str | None = None, + disable_cache: bool | None = None, +) -> dict[str, str]: + """ + Shortcuts for generating request headers. + + :param keep_alive: + If ``True``, adds 'connection: keep-alive' header. + + :param accept_encoding: + Can be a boolean, list, or string. + ``True`` translates to 'gzip,deflate'. If the dependencies for + Brotli (either the ``brotli`` or ``brotlicffi`` package) and/or Zstandard + (the ``zstandard`` package) algorithms are installed, then their encodings are + included in the string ('br' and 'zstd', respectively). + List will get joined by comma. + String will be used as provided. + + :param user_agent: + String representing the user-agent you want, such as + "python-urllib3/0.6" + + :param basic_auth: + Colon-separated username:password string for 'authorization: basic ...' + auth header. + + :param proxy_basic_auth: + Colon-separated username:password string for 'proxy-authorization: basic ...' + auth header. + + :param disable_cache: + If ``True``, adds 'cache-control: no-cache' header. + + Example: + + .. code-block:: python + + import urllib3 + + print(urllib3.util.make_headers(keep_alive=True, user_agent="Batman/1.0")) + # {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} + print(urllib3.util.make_headers(accept_encoding=True)) + # {'accept-encoding': 'gzip,deflate'} + """ + headers: dict[str, str] = {} + if accept_encoding: + if isinstance(accept_encoding, str): + pass + elif isinstance(accept_encoding, list): + accept_encoding = ",".join(accept_encoding) + else: + accept_encoding = ACCEPT_ENCODING + headers["accept-encoding"] = accept_encoding + + if user_agent: + headers["user-agent"] = user_agent + + if keep_alive: + headers["connection"] = "keep-alive" + + if basic_auth: + headers["authorization"] = ( + f"Basic {b64encode(basic_auth.encode('latin-1')).decode()}" + ) + + if proxy_basic_auth: + headers["proxy-authorization"] = ( + f"Basic {b64encode(proxy_basic_auth.encode('latin-1')).decode()}" + ) + + if disable_cache: + headers["cache-control"] = "no-cache" + + return headers + + +def set_file_position( + body: typing.Any, pos: _TYPE_BODY_POSITION | None +) -> _TYPE_BODY_POSITION | None: + """ + If a position is provided, move file to that point. + Otherwise, we'll attempt to record a position for future use. + """ + if pos is not None: + rewind_body(body, pos) + elif getattr(body, "tell", None) is not None: + try: + pos = body.tell() + except OSError: + # This differentiates from None, allowing us to catch + # a failed `tell()` later when trying to rewind the body. + pos = _FAILEDTELL + + return pos + + +def rewind_body(body: typing.IO[typing.AnyStr], body_pos: _TYPE_BODY_POSITION) -> None: + """ + Attempt to rewind body to a certain position. + Primarily used for request redirects and retries. + + :param body: + File-like object that supports seek. + + :param int pos: + Position to seek to in file. + """ + body_seek = getattr(body, "seek", None) + if body_seek is not None and isinstance(body_pos, int): + try: + body_seek(body_pos) + except OSError as e: + raise UnrewindableBodyError( + "An error occurred when rewinding request body for redirect/retry." + ) from e + elif body_pos is _FAILEDTELL: + raise UnrewindableBodyError( + "Unable to record file position for rewinding " + "request body during a redirect/retry." + ) + else: + raise ValueError( + f"body_pos must be of type integer, instead it was {type(body_pos)}." + ) + + +class ChunksAndContentLength(typing.NamedTuple): + chunks: typing.Iterable[bytes] | None + content_length: int | None + + +def body_to_chunks( + body: typing.Any | None, method: str, blocksize: int +) -> ChunksAndContentLength: + """Takes the HTTP request method, body, and blocksize and + transforms them into an iterable of chunks to pass to + socket.sendall() and an optional 'Content-Length' header. + + A 'Content-Length' of 'None' indicates the length of the body + can't be determined so should use 'Transfer-Encoding: chunked' + for framing instead. + """ + + chunks: typing.Iterable[bytes] | None + content_length: int | None + + # No body, we need to make a recommendation on 'Content-Length' + # based on whether that request method is expected to have + # a body or not. + if body is None: + chunks = None + if method.upper() not in _METHODS_NOT_EXPECTING_BODY: + content_length = 0 + else: + content_length = None + + # Bytes or strings become bytes + elif isinstance(body, (str, bytes)): + chunks = (to_bytes(body),) + content_length = len(chunks[0]) + + # File-like object, TODO: use seek() and tell() for length? + elif hasattr(body, "read"): + + def chunk_readable() -> typing.Iterable[bytes]: + nonlocal body, blocksize + encode = isinstance(body, io.TextIOBase) + while True: + datablock = body.read(blocksize) + if not datablock: + break + if encode: + datablock = datablock.encode("utf-8") + yield datablock + + chunks = chunk_readable() + content_length = None + + # Otherwise we need to start checking via duck-typing. + else: + try: + # Check if the body implements the buffer API. + mv = memoryview(body) + except TypeError: + try: + # Check if the body is an iterable + chunks = iter(body) + content_length = None + except TypeError: + raise TypeError( + f"'body' must be a bytes-like object, file-like " + f"object, or iterable. Instead was {body!r}" + ) from None + else: + # Since it implements the buffer API can be passed directly to socket.sendall() + chunks = (body,) + content_length = mv.nbytes + + return ChunksAndContentLength(chunks=chunks, content_length=content_length) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/response.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/response.py new file mode 100644 index 00000000..0f457869 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/response.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import http.client as httplib +from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect + +from ..exceptions import HeaderParsingError + + +def is_fp_closed(obj: object) -> bool: + """ + Checks whether a given file-like object is closed. + + :param obj: + The file-like object to check. + """ + + try: + # Check `isclosed()` first, in case Python3 doesn't set `closed`. + # GH Issue #928 + return obj.isclosed() # type: ignore[no-any-return, attr-defined] + except AttributeError: + pass + + try: + # Check via the official file-like-object way. + return obj.closed # type: ignore[no-any-return, attr-defined] + except AttributeError: + pass + + try: + # Check if the object is a container for another file-like object that + # gets released on exhaustion (e.g. HTTPResponse). + return obj.fp is None # type: ignore[attr-defined] + except AttributeError: + pass + + raise ValueError("Unable to determine whether fp is closed.") + + +def assert_header_parsing(headers: httplib.HTTPMessage) -> None: + """ + Asserts whether all headers have been successfully parsed. + Extracts encountered errors from the result of parsing headers. + + Only works on Python 3. + + :param http.client.HTTPMessage headers: Headers to verify. + + :raises urllib3.exceptions.HeaderParsingError: + If parsing errors are found. + """ + + # This will fail silently if we pass in the wrong kind of parameter. + # To make debugging easier add an explicit check. + if not isinstance(headers, httplib.HTTPMessage): + raise TypeError(f"expected httplib.Message, got {type(headers)}.") + + unparsed_data = None + + # get_payload is actually email.message.Message.get_payload; + # we're only interested in the result if it's not a multipart message + if not headers.is_multipart(): + payload = headers.get_payload() + + if isinstance(payload, (bytes, str)): + unparsed_data = payload + + # httplib is assuming a response body is available + # when parsing headers even when httplib only sends + # header data to parse_headers() This results in + # defects on multipart responses in particular. + # See: https://github.com/urllib3/urllib3/issues/800 + + # So we ignore the following defects: + # - StartBoundaryNotFoundDefect: + # The claimed start boundary was never found. + # - MultipartInvariantViolationDefect: + # A message claimed to be a multipart but no subparts were found. + defects = [ + defect + for defect in headers.defects + if not isinstance( + defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect) + ) + ] + + if defects or unparsed_data: + raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) + + +def is_response_to_head(response: httplib.HTTPResponse) -> bool: + """ + Checks whether the request of a response has been a HEAD-request. + + :param http.client.HTTPResponse response: + Response to check if the originating request + used 'HEAD' as a method. + """ + # FIXME: Can we do this somehow without accessing private httplib _method? + method_str = response._method # type: str # type: ignore[attr-defined] + return method_str.upper() == "HEAD" diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/retry.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/retry.py new file mode 100644 index 00000000..0456cceb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/retry.py @@ -0,0 +1,533 @@ +from __future__ import annotations + +import email +import logging +import random +import re +import time +import typing +from itertools import takewhile +from types import TracebackType + +from ..exceptions import ( + ConnectTimeoutError, + InvalidHeader, + MaxRetryError, + ProtocolError, + ProxyError, + ReadTimeoutError, + ResponseError, +) +from .util import reraise + +if typing.TYPE_CHECKING: + from typing_extensions import Self + + from ..connectionpool import ConnectionPool + from ..response import BaseHTTPResponse + +log = logging.getLogger(__name__) + + +# Data structure for representing the metadata of requests that result in a retry. +class RequestHistory(typing.NamedTuple): + method: str | None + url: str | None + error: Exception | None + status: int | None + redirect_location: str | None + + +class Retry: + """Retry configuration. + + Each retry attempt will create a new Retry object with updated values, so + they can be safely reused. + + Retries can be defined as a default for a pool: + + .. code-block:: python + + retries = Retry(connect=5, read=2, redirect=5) + http = PoolManager(retries=retries) + response = http.request("GET", "https://example.com/") + + Or per-request (which overrides the default for the pool): + + .. code-block:: python + + response = http.request("GET", "https://example.com/", retries=Retry(10)) + + Retries can be disabled by passing ``False``: + + .. code-block:: python + + response = http.request("GET", "https://example.com/", retries=False) + + Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless + retries are disabled, in which case the causing exception will be raised. + + :param int total: + Total number of retries to allow. Takes precedence over other counts. + + Set to ``None`` to remove this constraint and fall back on other + counts. + + Set to ``0`` to fail on the first retry. + + Set to ``False`` to disable and imply ``raise_on_redirect=False``. + + :param int connect: + How many connection-related errors to retry on. + + These are errors raised before the request is sent to the remote server, + which we assume has not triggered the server to process the request. + + Set to ``0`` to fail on the first retry of this type. + + :param int read: + How many times to retry on read errors. + + These errors are raised after the request was sent to the server, so the + request may have side-effects. + + Set to ``0`` to fail on the first retry of this type. + + :param int redirect: + How many redirects to perform. Limit this to avoid infinite redirect + loops. + + A redirect is a HTTP response with a status code 301, 302, 303, 307 or + 308. + + Set to ``0`` to fail on the first retry of this type. + + Set to ``False`` to disable and imply ``raise_on_redirect=False``. + + :param int status: + How many times to retry on bad status codes. + + These are retries made on responses, where status code matches + ``status_forcelist``. + + Set to ``0`` to fail on the first retry of this type. + + :param int other: + How many times to retry on other errors. + + Other errors are errors that are not connect, read, redirect or status errors. + These errors might be raised after the request was sent to the server, so the + request might have side-effects. + + Set to ``0`` to fail on the first retry of this type. + + If ``total`` is not set, it's a good idea to set this to 0 to account + for unexpected edge cases and avoid infinite retry loops. + + :param Collection allowed_methods: + Set of uppercased HTTP method verbs that we should retry on. + + By default, we only retry on methods which are considered to be + idempotent (multiple requests with the same parameters end with the + same state). See :attr:`Retry.DEFAULT_ALLOWED_METHODS`. + + Set to a ``None`` value to retry on any verb. + + :param Collection status_forcelist: + A set of integer HTTP status codes that we should force a retry on. + A retry is initiated if the request method is in ``allowed_methods`` + and the response status code is in ``status_forcelist``. + + By default, this is disabled with ``None``. + + :param float backoff_factor: + A backoff factor to apply between attempts after the second try + (most errors are resolved immediately by a second try without a + delay). urllib3 will sleep for:: + + {backoff factor} * (2 ** ({number of previous retries})) + + seconds. If `backoff_jitter` is non-zero, this sleep is extended by:: + + random.uniform(0, {backoff jitter}) + + seconds. For example, if the backoff_factor is 0.1, then :func:`Retry.sleep` will + sleep for [0.0s, 0.2s, 0.4s, 0.8s, ...] between retries. No backoff will ever + be longer than `backoff_max`. + + By default, backoff is disabled (factor set to 0). + + :param bool raise_on_redirect: Whether, if the number of redirects is + exhausted, to raise a MaxRetryError, or to return a response with a + response code in the 3xx range. + + :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: + whether we should raise an exception, or return a response, + if status falls in ``status_forcelist`` range and retries have + been exhausted. + + :param tuple history: The history of the request encountered during + each call to :meth:`~Retry.increment`. The list is in the order + the requests occurred. Each list item is of class :class:`RequestHistory`. + + :param bool respect_retry_after_header: + Whether to respect Retry-After header on status codes defined as + :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. + + :param Collection remove_headers_on_redirect: + Sequence of headers to remove from the request when a response + indicating a redirect is returned before firing off the redirected + request. + """ + + #: Default methods to be used for ``allowed_methods`` + DEFAULT_ALLOWED_METHODS = frozenset( + ["HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"] + ) + + #: Default status codes to be used for ``status_forcelist`` + RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) + + #: Default headers to be used for ``remove_headers_on_redirect`` + DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset( + ["Cookie", "Authorization", "Proxy-Authorization"] + ) + + #: Default maximum backoff time. + DEFAULT_BACKOFF_MAX = 120 + + # Backward compatibility; assigned outside of the class. + DEFAULT: typing.ClassVar[Retry] + + def __init__( + self, + total: bool | int | None = 10, + connect: int | None = None, + read: int | None = None, + redirect: bool | int | None = None, + status: int | None = None, + other: int | None = None, + allowed_methods: typing.Collection[str] | None = DEFAULT_ALLOWED_METHODS, + status_forcelist: typing.Collection[int] | None = None, + backoff_factor: float = 0, + backoff_max: float = DEFAULT_BACKOFF_MAX, + raise_on_redirect: bool = True, + raise_on_status: bool = True, + history: tuple[RequestHistory, ...] | None = None, + respect_retry_after_header: bool = True, + remove_headers_on_redirect: typing.Collection[ + str + ] = DEFAULT_REMOVE_HEADERS_ON_REDIRECT, + backoff_jitter: float = 0.0, + ) -> None: + self.total = total + self.connect = connect + self.read = read + self.status = status + self.other = other + + if redirect is False or total is False: + redirect = 0 + raise_on_redirect = False + + self.redirect = redirect + self.status_forcelist = status_forcelist or set() + self.allowed_methods = allowed_methods + self.backoff_factor = backoff_factor + self.backoff_max = backoff_max + self.raise_on_redirect = raise_on_redirect + self.raise_on_status = raise_on_status + self.history = history or () + self.respect_retry_after_header = respect_retry_after_header + self.remove_headers_on_redirect = frozenset( + h.lower() for h in remove_headers_on_redirect + ) + self.backoff_jitter = backoff_jitter + + def new(self, **kw: typing.Any) -> Self: + params = dict( + total=self.total, + connect=self.connect, + read=self.read, + redirect=self.redirect, + status=self.status, + other=self.other, + allowed_methods=self.allowed_methods, + status_forcelist=self.status_forcelist, + backoff_factor=self.backoff_factor, + backoff_max=self.backoff_max, + raise_on_redirect=self.raise_on_redirect, + raise_on_status=self.raise_on_status, + history=self.history, + remove_headers_on_redirect=self.remove_headers_on_redirect, + respect_retry_after_header=self.respect_retry_after_header, + backoff_jitter=self.backoff_jitter, + ) + + params.update(kw) + return type(self)(**params) # type: ignore[arg-type] + + @classmethod + def from_int( + cls, + retries: Retry | bool | int | None, + redirect: bool | int | None = True, + default: Retry | bool | int | None = None, + ) -> Retry: + """Backwards-compatibility for the old retries format.""" + if retries is None: + retries = default if default is not None else cls.DEFAULT + + if isinstance(retries, Retry): + return retries + + redirect = bool(redirect) and None + new_retries = cls(retries, redirect=redirect) + log.debug("Converted retries value: %r -> %r", retries, new_retries) + return new_retries + + def get_backoff_time(self) -> float: + """Formula for computing the current backoff + + :rtype: float + """ + # We want to consider only the last consecutive errors sequence (Ignore redirects). + consecutive_errors_len = len( + list( + takewhile(lambda x: x.redirect_location is None, reversed(self.history)) + ) + ) + if consecutive_errors_len <= 1: + return 0 + + backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) + if self.backoff_jitter != 0.0: + backoff_value += random.random() * self.backoff_jitter + return float(max(0, min(self.backoff_max, backoff_value))) + + def parse_retry_after(self, retry_after: str) -> float: + seconds: float + # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 + if re.match(r"^\s*[0-9]+\s*$", retry_after): + seconds = int(retry_after) + else: + retry_date_tuple = email.utils.parsedate_tz(retry_after) + if retry_date_tuple is None: + raise InvalidHeader(f"Invalid Retry-After header: {retry_after}") + + retry_date = email.utils.mktime_tz(retry_date_tuple) + seconds = retry_date - time.time() + + seconds = max(seconds, 0) + + return seconds + + def get_retry_after(self, response: BaseHTTPResponse) -> float | None: + """Get the value of Retry-After in seconds.""" + + retry_after = response.headers.get("Retry-After") + + if retry_after is None: + return None + + return self.parse_retry_after(retry_after) + + def sleep_for_retry(self, response: BaseHTTPResponse) -> bool: + retry_after = self.get_retry_after(response) + if retry_after: + time.sleep(retry_after) + return True + + return False + + def _sleep_backoff(self) -> None: + backoff = self.get_backoff_time() + if backoff <= 0: + return + time.sleep(backoff) + + def sleep(self, response: BaseHTTPResponse | None = None) -> None: + """Sleep between retry attempts. + + This method will respect a server's ``Retry-After`` response header + and sleep the duration of the time requested. If that is not present, it + will use an exponential backoff. By default, the backoff factor is 0 and + this method will return immediately. + """ + + if self.respect_retry_after_header and response: + slept = self.sleep_for_retry(response) + if slept: + return + + self._sleep_backoff() + + def _is_connection_error(self, err: Exception) -> bool: + """Errors when we're fairly sure that the server did not receive the + request, so it should be safe to retry. + """ + if isinstance(err, ProxyError): + err = err.original_error + return isinstance(err, ConnectTimeoutError) + + def _is_read_error(self, err: Exception) -> bool: + """Errors that occur after the request has been started, so we should + assume that the server began processing it. + """ + return isinstance(err, (ReadTimeoutError, ProtocolError)) + + def _is_method_retryable(self, method: str) -> bool: + """Checks if a given HTTP method should be retried upon, depending if + it is included in the allowed_methods + """ + if self.allowed_methods and method.upper() not in self.allowed_methods: + return False + return True + + def is_retry( + self, method: str, status_code: int, has_retry_after: bool = False + ) -> bool: + """Is this method/status code retryable? (Based on allowlists and control + variables such as the number of total retries to allow, whether to + respect the Retry-After header, whether this header is present, and + whether the returned status code is on the list of status codes to + be retried upon on the presence of the aforementioned header) + """ + if not self._is_method_retryable(method): + return False + + if self.status_forcelist and status_code in self.status_forcelist: + return True + + return bool( + self.total + and self.respect_retry_after_header + and has_retry_after + and (status_code in self.RETRY_AFTER_STATUS_CODES) + ) + + def is_exhausted(self) -> bool: + """Are we out of retries?""" + retry_counts = [ + x + for x in ( + self.total, + self.connect, + self.read, + self.redirect, + self.status, + self.other, + ) + if x + ] + if not retry_counts: + return False + + return min(retry_counts) < 0 + + def increment( + self, + method: str | None = None, + url: str | None = None, + response: BaseHTTPResponse | None = None, + error: Exception | None = None, + _pool: ConnectionPool | None = None, + _stacktrace: TracebackType | None = None, + ) -> Self: + """Return a new Retry object with incremented retry counters. + + :param response: A response object, or None, if the server did not + return a response. + :type response: :class:`~urllib3.response.BaseHTTPResponse` + :param Exception error: An error encountered during the request, or + None if the response was received successfully. + + :return: A new ``Retry`` object. + """ + if self.total is False and error: + # Disabled, indicate to re-raise the error. + raise reraise(type(error), error, _stacktrace) + + total = self.total + if total is not None: + total -= 1 + + connect = self.connect + read = self.read + redirect = self.redirect + status_count = self.status + other = self.other + cause = "unknown" + status = None + redirect_location = None + + if error and self._is_connection_error(error): + # Connect retry? + if connect is False: + raise reraise(type(error), error, _stacktrace) + elif connect is not None: + connect -= 1 + + elif error and self._is_read_error(error): + # Read retry? + if read is False or method is None or not self._is_method_retryable(method): + raise reraise(type(error), error, _stacktrace) + elif read is not None: + read -= 1 + + elif error: + # Other retry? + if other is not None: + other -= 1 + + elif response and response.get_redirect_location(): + # Redirect retry? + if redirect is not None: + redirect -= 1 + cause = "too many redirects" + response_redirect_location = response.get_redirect_location() + if response_redirect_location: + redirect_location = response_redirect_location + status = response.status + + else: + # Incrementing because of a server error like a 500 in + # status_forcelist and the given method is in the allowed_methods + cause = ResponseError.GENERIC_ERROR + if response and response.status: + if status_count is not None: + status_count -= 1 + cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) + status = response.status + + history = self.history + ( + RequestHistory(method, url, error, status, redirect_location), + ) + + new_retry = self.new( + total=total, + connect=connect, + read=read, + redirect=redirect, + status=status_count, + other=other, + history=history, + ) + + if new_retry.is_exhausted(): + reason = error or ResponseError(cause) + raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] + + log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) + + return new_retry + + def __repr__(self) -> str: + return ( + f"{type(self).__name__}(total={self.total}, connect={self.connect}, " + f"read={self.read}, redirect={self.redirect}, status={self.status})" + ) + + +# For backwards compatibility (equivalent to pre-v1.9): +Retry.DEFAULT = Retry(3) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py new file mode 100644 index 00000000..b2cc1aa7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py @@ -0,0 +1,524 @@ +from __future__ import annotations + +import hashlib +import hmac +import os +import socket +import sys +import typing +import warnings +from binascii import unhexlify + +from ..exceptions import ProxySchemeUnsupported, SSLError +from .url import _BRACELESS_IPV6_ADDRZ_RE, _IPV4_RE + +SSLContext = None +SSLTransport = None +HAS_NEVER_CHECK_COMMON_NAME = False +IS_PYOPENSSL = False +ALPN_PROTOCOLS = ["http/1.1"] + +_TYPE_VERSION_INFO = tuple[int, int, int, str, int] + +# Maps the length of a digest to a possible hash function producing this digest +HASHFUNC_MAP = { + length: getattr(hashlib, algorithm, None) + for length, algorithm in ((32, "md5"), (40, "sha1"), (64, "sha256")) +} + + +def _is_bpo_43522_fixed( + implementation_name: str, + version_info: _TYPE_VERSION_INFO, + pypy_version_info: _TYPE_VERSION_INFO | None, +) -> bool: + """Return True for CPython 3.9.3+ or 3.10+ and PyPy 7.3.8+ where + setting SSLContext.hostname_checks_common_name to False works. + + Outside of CPython and PyPy we don't know which implementations work + or not so we conservatively use our hostname matching as we know that works + on all implementations. + + https://github.com/urllib3/urllib3/issues/2192#issuecomment-821832963 + https://foss.heptapod.net/pypy/pypy/-/issues/3539 + """ + if implementation_name == "pypy": + # https://foss.heptapod.net/pypy/pypy/-/issues/3129 + return pypy_version_info >= (7, 3, 8) # type: ignore[operator] + elif implementation_name == "cpython": + major_minor = version_info[:2] + micro = version_info[2] + return (major_minor == (3, 9) and micro >= 3) or major_minor >= (3, 10) + else: # Defensive: + return False + + +def _is_has_never_check_common_name_reliable( + openssl_version: str, + openssl_version_number: int, + implementation_name: str, + version_info: _TYPE_VERSION_INFO, + pypy_version_info: _TYPE_VERSION_INFO | None, +) -> bool: + # As of May 2023, all released versions of LibreSSL fail to reject certificates with + # only common names, see https://github.com/urllib3/urllib3/pull/3024 + is_openssl = openssl_version.startswith("OpenSSL ") + # Before fixing OpenSSL issue #14579, the SSL_new() API was not copying hostflags + # like X509_CHECK_FLAG_NEVER_CHECK_SUBJECT, which tripped up CPython. + # https://github.com/openssl/openssl/issues/14579 + # This was released in OpenSSL 1.1.1l+ (>=0x101010cf) + is_openssl_issue_14579_fixed = openssl_version_number >= 0x101010CF + + return is_openssl and ( + is_openssl_issue_14579_fixed + or _is_bpo_43522_fixed(implementation_name, version_info, pypy_version_info) + ) + + +if typing.TYPE_CHECKING: + from ssl import VerifyMode + from typing import TypedDict + + from .ssltransport import SSLTransport as SSLTransportType + + class _TYPE_PEER_CERT_RET_DICT(TypedDict, total=False): + subjectAltName: tuple[tuple[str, str], ...] + subject: tuple[tuple[tuple[str, str], ...], ...] + serialNumber: str + + +# Mapping from 'ssl.PROTOCOL_TLSX' to 'TLSVersion.X' +_SSL_VERSION_TO_TLS_VERSION: dict[int, int] = {} + +try: # Do we have ssl at all? + import ssl + from ssl import ( # type: ignore[assignment] + CERT_REQUIRED, + HAS_NEVER_CHECK_COMMON_NAME, + OP_NO_COMPRESSION, + OP_NO_TICKET, + OPENSSL_VERSION, + OPENSSL_VERSION_NUMBER, + PROTOCOL_TLS, + PROTOCOL_TLS_CLIENT, + VERIFY_X509_STRICT, + OP_NO_SSLv2, + OP_NO_SSLv3, + SSLContext, + TLSVersion, + ) + + PROTOCOL_SSLv23 = PROTOCOL_TLS + + # Needed for Python 3.9 which does not define this + VERIFY_X509_PARTIAL_CHAIN = getattr(ssl, "VERIFY_X509_PARTIAL_CHAIN", 0x80000) + + # Setting SSLContext.hostname_checks_common_name = False didn't work before CPython + # 3.9.3, and 3.10 (but OK on PyPy) or OpenSSL 1.1.1l+ + if HAS_NEVER_CHECK_COMMON_NAME and not _is_has_never_check_common_name_reliable( + OPENSSL_VERSION, + OPENSSL_VERSION_NUMBER, + sys.implementation.name, + sys.version_info, + sys.pypy_version_info if sys.implementation.name == "pypy" else None, # type: ignore[attr-defined] + ): # Defensive: for Python < 3.9.3 + HAS_NEVER_CHECK_COMMON_NAME = False + + # Need to be careful here in case old TLS versions get + # removed in future 'ssl' module implementations. + for attr in ("TLSv1", "TLSv1_1", "TLSv1_2"): + try: + _SSL_VERSION_TO_TLS_VERSION[getattr(ssl, f"PROTOCOL_{attr}")] = getattr( + TLSVersion, attr + ) + except AttributeError: # Defensive: + continue + + from .ssltransport import SSLTransport # type: ignore[assignment] +except ImportError: + OP_NO_COMPRESSION = 0x20000 # type: ignore[assignment] + OP_NO_TICKET = 0x4000 # type: ignore[assignment] + OP_NO_SSLv2 = 0x1000000 # type: ignore[assignment] + OP_NO_SSLv3 = 0x2000000 # type: ignore[assignment] + PROTOCOL_SSLv23 = PROTOCOL_TLS = 2 # type: ignore[assignment] + PROTOCOL_TLS_CLIENT = 16 # type: ignore[assignment] + VERIFY_X509_PARTIAL_CHAIN = 0x80000 + VERIFY_X509_STRICT = 0x20 # type: ignore[assignment] + + +_TYPE_PEER_CERT_RET = typing.Union["_TYPE_PEER_CERT_RET_DICT", bytes, None] + + +def assert_fingerprint(cert: bytes | None, fingerprint: str) -> None: + """ + Checks if given fingerprint matches the supplied certificate. + + :param cert: + Certificate as bytes object. + :param fingerprint: + Fingerprint as string of hexdigits, can be interspersed by colons. + """ + + if cert is None: + raise SSLError("No certificate for the peer.") + + fingerprint = fingerprint.replace(":", "").lower() + digest_length = len(fingerprint) + if digest_length not in HASHFUNC_MAP: + raise SSLError(f"Fingerprint of invalid length: {fingerprint}") + hashfunc = HASHFUNC_MAP.get(digest_length) + if hashfunc is None: + raise SSLError( + f"Hash function implementation unavailable for fingerprint length: {digest_length}" + ) + + # We need encode() here for py32; works on py2 and p33. + fingerprint_bytes = unhexlify(fingerprint.encode()) + + cert_digest = hashfunc(cert).digest() + + if not hmac.compare_digest(cert_digest, fingerprint_bytes): + raise SSLError( + f'Fingerprints did not match. Expected "{fingerprint}", got "{cert_digest.hex()}"' + ) + + +def resolve_cert_reqs(candidate: None | int | str) -> VerifyMode: + """ + Resolves the argument to a numeric constant, which can be passed to + the wrap_socket function/method from the ssl module. + Defaults to :data:`ssl.CERT_REQUIRED`. + If given a string it is assumed to be the name of the constant in the + :mod:`ssl` module or its abbreviation. + (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. + If it's neither `None` nor a string we assume it is already the numeric + constant which can directly be passed to wrap_socket. + """ + if candidate is None: + return CERT_REQUIRED + + if isinstance(candidate, str): + res = getattr(ssl, candidate, None) + if res is None: + res = getattr(ssl, "CERT_" + candidate) + return res # type: ignore[no-any-return] + + return candidate # type: ignore[return-value] + + +def resolve_ssl_version(candidate: None | int | str) -> int: + """ + like resolve_cert_reqs + """ + if candidate is None: + return PROTOCOL_TLS + + if isinstance(candidate, str): + res = getattr(ssl, candidate, None) + if res is None: + res = getattr(ssl, "PROTOCOL_" + candidate) + return typing.cast(int, res) + + return candidate + + +def create_urllib3_context( + ssl_version: int | None = None, + cert_reqs: int | None = None, + options: int | None = None, + ciphers: str | None = None, + ssl_minimum_version: int | None = None, + ssl_maximum_version: int | None = None, + verify_flags: int | None = None, +) -> ssl.SSLContext: + """Creates and configures an :class:`ssl.SSLContext` instance for use with urllib3. + + :param ssl_version: + The desired protocol version to use. This will default to + PROTOCOL_SSLv23 which will negotiate the highest protocol that both + the server and your installation of OpenSSL support. + + This parameter is deprecated instead use 'ssl_minimum_version'. + :param ssl_minimum_version: + The minimum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value. + :param ssl_maximum_version: + The maximum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value. + Not recommended to set to anything other than 'ssl.TLSVersion.MAXIMUM_SUPPORTED' which is the + default value. + :param cert_reqs: + Whether to require the certificate verification. This defaults to + ``ssl.CERT_REQUIRED``. + :param options: + Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, + ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``. + :param ciphers: + Which cipher suites to allow the server to select. Defaults to either system configured + ciphers if OpenSSL 1.1.1+, otherwise uses a secure default set of ciphers. + :param verify_flags: + The flags for certificate verification operations. These default to + ``ssl.VERIFY_X509_PARTIAL_CHAIN`` and ``ssl.VERIFY_X509_STRICT`` for Python 3.13+. + :returns: + Constructed SSLContext object with specified options + :rtype: SSLContext + """ + if SSLContext is None: + raise TypeError("Can't create an SSLContext object without an ssl module") + + # This means 'ssl_version' was specified as an exact value. + if ssl_version not in (None, PROTOCOL_TLS, PROTOCOL_TLS_CLIENT): + # Disallow setting 'ssl_version' and 'ssl_minimum|maximum_version' + # to avoid conflicts. + if ssl_minimum_version is not None or ssl_maximum_version is not None: + raise ValueError( + "Can't specify both 'ssl_version' and either " + "'ssl_minimum_version' or 'ssl_maximum_version'" + ) + + # 'ssl_version' is deprecated and will be removed in the future. + else: + # Use 'ssl_minimum_version' and 'ssl_maximum_version' instead. + ssl_minimum_version = _SSL_VERSION_TO_TLS_VERSION.get( + ssl_version, TLSVersion.MINIMUM_SUPPORTED + ) + ssl_maximum_version = _SSL_VERSION_TO_TLS_VERSION.get( + ssl_version, TLSVersion.MAXIMUM_SUPPORTED + ) + + # This warning message is pushing users to use 'ssl_minimum_version' + # instead of both min/max. Best practice is to only set the minimum version and + # keep the maximum version to be it's default value: 'TLSVersion.MAXIMUM_SUPPORTED' + warnings.warn( + "'ssl_version' option is deprecated and will be " + "removed in urllib3 v2.6.0. Instead use 'ssl_minimum_version'", + category=DeprecationWarning, + stacklevel=2, + ) + + # PROTOCOL_TLS is deprecated in Python 3.10 so we always use PROTOCOL_TLS_CLIENT + context = SSLContext(PROTOCOL_TLS_CLIENT) + + if ssl_minimum_version is not None: + context.minimum_version = ssl_minimum_version + else: # Python <3.10 defaults to 'MINIMUM_SUPPORTED' so explicitly set TLSv1.2 here + context.minimum_version = TLSVersion.TLSv1_2 + + if ssl_maximum_version is not None: + context.maximum_version = ssl_maximum_version + + # Unless we're given ciphers defer to either system ciphers in + # the case of OpenSSL 1.1.1+ or use our own secure default ciphers. + if ciphers: + context.set_ciphers(ciphers) + + # Setting the default here, as we may have no ssl module on import + cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs + + if options is None: + options = 0 + # SSLv2 is easily broken and is considered harmful and dangerous + options |= OP_NO_SSLv2 + # SSLv3 has several problems and is now dangerous + options |= OP_NO_SSLv3 + # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ + # (issue #309) + options |= OP_NO_COMPRESSION + # TLSv1.2 only. Unless set explicitly, do not request tickets. + # This may save some bandwidth on wire, and although the ticket is encrypted, + # there is a risk associated with it being on wire, + # if the server is not rotating its ticketing keys properly. + options |= OP_NO_TICKET + + context.options |= options + + if verify_flags is None: + verify_flags = 0 + # In Python 3.13+ ssl.create_default_context() sets VERIFY_X509_PARTIAL_CHAIN + # and VERIFY_X509_STRICT so we do the same + if sys.version_info >= (3, 13): + verify_flags |= VERIFY_X509_PARTIAL_CHAIN + verify_flags |= VERIFY_X509_STRICT + + context.verify_flags |= verify_flags + + # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is + # necessary for conditional client cert authentication with TLS 1.3. + # The attribute is None for OpenSSL <= 1.1.0 or does not exist when using + # an SSLContext created by pyOpenSSL. + if getattr(context, "post_handshake_auth", None) is not None: + context.post_handshake_auth = True + + # The order of the below lines setting verify_mode and check_hostname + # matter due to safe-guards SSLContext has to prevent an SSLContext with + # check_hostname=True, verify_mode=NONE/OPTIONAL. + # We always set 'check_hostname=False' for pyOpenSSL so we rely on our own + # 'ssl.match_hostname()' implementation. + if cert_reqs == ssl.CERT_REQUIRED and not IS_PYOPENSSL: + context.verify_mode = cert_reqs + context.check_hostname = True + else: + context.check_hostname = False + context.verify_mode = cert_reqs + + try: + context.hostname_checks_common_name = False + except AttributeError: # Defensive: for CPython < 3.9.3; for PyPy < 7.3.8 + pass + + sslkeylogfile = os.environ.get("SSLKEYLOGFILE") + if sslkeylogfile: + context.keylog_filename = sslkeylogfile + + return context + + +@typing.overload +def ssl_wrap_socket( + sock: socket.socket, + keyfile: str | None = ..., + certfile: str | None = ..., + cert_reqs: int | None = ..., + ca_certs: str | None = ..., + server_hostname: str | None = ..., + ssl_version: int | None = ..., + ciphers: str | None = ..., + ssl_context: ssl.SSLContext | None = ..., + ca_cert_dir: str | None = ..., + key_password: str | None = ..., + ca_cert_data: None | str | bytes = ..., + tls_in_tls: typing.Literal[False] = ..., +) -> ssl.SSLSocket: ... + + +@typing.overload +def ssl_wrap_socket( + sock: socket.socket, + keyfile: str | None = ..., + certfile: str | None = ..., + cert_reqs: int | None = ..., + ca_certs: str | None = ..., + server_hostname: str | None = ..., + ssl_version: int | None = ..., + ciphers: str | None = ..., + ssl_context: ssl.SSLContext | None = ..., + ca_cert_dir: str | None = ..., + key_password: str | None = ..., + ca_cert_data: None | str | bytes = ..., + tls_in_tls: bool = ..., +) -> ssl.SSLSocket | SSLTransportType: ... + + +def ssl_wrap_socket( + sock: socket.socket, + keyfile: str | None = None, + certfile: str | None = None, + cert_reqs: int | None = None, + ca_certs: str | None = None, + server_hostname: str | None = None, + ssl_version: int | None = None, + ciphers: str | None = None, + ssl_context: ssl.SSLContext | None = None, + ca_cert_dir: str | None = None, + key_password: str | None = None, + ca_cert_data: None | str | bytes = None, + tls_in_tls: bool = False, +) -> ssl.SSLSocket | SSLTransportType: + """ + All arguments except for server_hostname, ssl_context, tls_in_tls, ca_cert_data and + ca_cert_dir have the same meaning as they do when using + :func:`ssl.create_default_context`, :meth:`ssl.SSLContext.load_cert_chain`, + :meth:`ssl.SSLContext.set_ciphers` and :meth:`ssl.SSLContext.wrap_socket`. + + :param server_hostname: + When SNI is supported, the expected hostname of the certificate + :param ssl_context: + A pre-made :class:`SSLContext` object. If none is provided, one will + be created using :func:`create_urllib3_context`. + :param ciphers: + A string of ciphers we wish the client to support. + :param ca_cert_dir: + A directory containing CA certificates in multiple separate files, as + supported by OpenSSL's -CApath flag or the capath argument to + SSLContext.load_verify_locations(). + :param key_password: + Optional password if the keyfile is encrypted. + :param ca_cert_data: + Optional string containing CA certificates in PEM format suitable for + passing as the cadata parameter to SSLContext.load_verify_locations() + :param tls_in_tls: + Use SSLTransport to wrap the existing socket. + """ + context = ssl_context + if context is None: + # Note: This branch of code and all the variables in it are only used in tests. + # We should consider deprecating and removing this code. + context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers) + + if ca_certs or ca_cert_dir or ca_cert_data: + try: + context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data) + except OSError as e: + raise SSLError(e) from e + + elif ssl_context is None and hasattr(context, "load_default_certs"): + # try to load OS default certs; works well on Windows. + context.load_default_certs() + + # Attempt to detect if we get the goofy behavior of the + # keyfile being encrypted and OpenSSL asking for the + # passphrase via the terminal and instead error out. + if keyfile and key_password is None and _is_key_file_encrypted(keyfile): + raise SSLError("Client private key is encrypted, password is required") + + if certfile: + if key_password is None: + context.load_cert_chain(certfile, keyfile) + else: + context.load_cert_chain(certfile, keyfile, key_password) + + context.set_alpn_protocols(ALPN_PROTOCOLS) + + ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) + return ssl_sock + + +def is_ipaddress(hostname: str | bytes) -> bool: + """Detects whether the hostname given is an IPv4 or IPv6 address. + Also detects IPv6 addresses with Zone IDs. + + :param str hostname: Hostname to examine. + :return: True if the hostname is an IP address, False otherwise. + """ + if isinstance(hostname, bytes): + # IDN A-label bytes are ASCII compatible. + hostname = hostname.decode("ascii") + return bool(_IPV4_RE.match(hostname) or _BRACELESS_IPV6_ADDRZ_RE.match(hostname)) + + +def _is_key_file_encrypted(key_file: str) -> bool: + """Detects if a key file is encrypted or not.""" + with open(key_file) as f: + for line in f: + # Look for Proc-Type: 4,ENCRYPTED + if "ENCRYPTED" in line: + return True + + return False + + +def _ssl_wrap_socket_impl( + sock: socket.socket, + ssl_context: ssl.SSLContext, + tls_in_tls: bool, + server_hostname: str | None = None, +) -> ssl.SSLSocket | SSLTransportType: + if tls_in_tls: + if not SSLTransport: + # Import error, ssl is not available. + raise ProxySchemeUnsupported( + "TLS in TLS requires support for the 'ssl' module" + ) + + SSLTransport._validate_ssl_context_for_tls_in_tls(ssl_context) + return SSLTransport(sock, ssl_context, server_hostname) + + return ssl_context.wrap_socket(sock, server_hostname=server_hostname) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py new file mode 100644 index 00000000..25d91000 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py @@ -0,0 +1,159 @@ +"""The match_hostname() function from Python 3.5, essential when using SSL.""" + +# Note: This file is under the PSF license as the code comes from the python +# stdlib. http://docs.python.org/3/license.html +# It is modified to remove commonName support. + +from __future__ import annotations + +import ipaddress +import re +import typing +from ipaddress import IPv4Address, IPv6Address + +if typing.TYPE_CHECKING: + from .ssl_ import _TYPE_PEER_CERT_RET_DICT + +__version__ = "3.5.0.1" + + +class CertificateError(ValueError): + pass + + +def _dnsname_match( + dn: typing.Any, hostname: str, max_wildcards: int = 1 +) -> typing.Match[str] | None | bool: + """Matching according to RFC 6125, section 6.4.3 + + http://tools.ietf.org/html/rfc6125#section-6.4.3 + """ + pats = [] + if not dn: + return False + + # Ported from python3-syntax: + # leftmost, *remainder = dn.split(r'.') + parts = dn.split(r".") + leftmost = parts[0] + remainder = parts[1:] + + wildcards = leftmost.count("*") + if wildcards > max_wildcards: + # Issue #17980: avoid denials of service by refusing more + # than one wildcard per fragment. A survey of established + # policy among SSL implementations showed it to be a + # reasonable choice. + raise CertificateError( + "too many wildcards in certificate DNS name: " + repr(dn) + ) + + # speed up common case w/o wildcards + if not wildcards: + return bool(dn.lower() == hostname.lower()) + + # RFC 6125, section 6.4.3, subitem 1. + # The client SHOULD NOT attempt to match a presented identifier in which + # the wildcard character comprises a label other than the left-most label. + if leftmost == "*": + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. + pats.append("[^.]+") + elif leftmost.startswith("xn--") or hostname.startswith("xn--"): + # RFC 6125, section 6.4.3, subitem 3. + # The client SHOULD NOT attempt to match a presented identifier + # where the wildcard character is embedded within an A-label or + # U-label of an internationalized domain name. + pats.append(re.escape(leftmost)) + else: + # Otherwise, '*' matches any dotless string, e.g. www* + pats.append(re.escape(leftmost).replace(r"\*", "[^.]*")) + + # add the remaining fragments, ignore any wildcards + for frag in remainder: + pats.append(re.escape(frag)) + + pat = re.compile(r"\A" + r"\.".join(pats) + r"\Z", re.IGNORECASE) + return pat.match(hostname) + + +def _ipaddress_match(ipname: str, host_ip: IPv4Address | IPv6Address) -> bool: + """Exact matching of IP addresses. + + RFC 9110 section 4.3.5: "A reference identity of IP-ID contains the decoded + bytes of the IP address. An IP version 4 address is 4 octets, and an IP + version 6 address is 16 octets. [...] A reference identity of type IP-ID + matches if the address is identical to an iPAddress value of the + subjectAltName extension of the certificate." + """ + # OpenSSL may add a trailing newline to a subjectAltName's IP address + # Divergence from upstream: ipaddress can't handle byte str + ip = ipaddress.ip_address(ipname.rstrip()) + return bool(ip.packed == host_ip.packed) + + +def match_hostname( + cert: _TYPE_PEER_CERT_RET_DICT | None, + hostname: str, + hostname_checks_common_name: bool = False, +) -> None: + """Verify that *cert* (in decoded format as returned by + SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 + rules are followed, but IP addresses are not accepted for *hostname*. + + CertificateError is raised on failure. On success, the function + returns nothing. + """ + if not cert: + raise ValueError( + "empty or no certificate, match_hostname needs a " + "SSL socket or SSL context with either " + "CERT_OPTIONAL or CERT_REQUIRED" + ) + try: + # Divergence from upstream: ipaddress can't handle byte str + # + # The ipaddress module shipped with Python < 3.9 does not support + # scoped IPv6 addresses so we unconditionally strip the Zone IDs for + # now. Once we drop support for Python 3.9 we can remove this branch. + if "%" in hostname: + host_ip = ipaddress.ip_address(hostname[: hostname.rfind("%")]) + else: + host_ip = ipaddress.ip_address(hostname) + + except ValueError: + # Not an IP address (common case) + host_ip = None + dnsnames = [] + san: tuple[tuple[str, str], ...] = cert.get("subjectAltName", ()) + key: str + value: str + for key, value in san: + if key == "DNS": + if host_ip is None and _dnsname_match(value, hostname): + return + dnsnames.append(value) + elif key == "IP Address": + if host_ip is not None and _ipaddress_match(value, host_ip): + return + dnsnames.append(value) + + # We only check 'commonName' if it's enabled and we're not verifying + # an IP address. IP addresses aren't valid within 'commonName'. + if hostname_checks_common_name and host_ip is None and not dnsnames: + for sub in cert.get("subject", ()): + for key, value in sub: + if key == "commonName": + if _dnsname_match(value, hostname): + return + dnsnames.append(value) # Defensive: for Python < 3.9.3 + + if len(dnsnames) > 1: + raise CertificateError( + "hostname %r " + "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames))) + ) + elif len(dnsnames) == 1: + raise CertificateError(f"hostname {hostname!r} doesn't match {dnsnames[0]!r}") + else: + raise CertificateError("no appropriate subjectAltName fields were found") diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py new file mode 100644 index 00000000..6d59bc3b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py @@ -0,0 +1,271 @@ +from __future__ import annotations + +import io +import socket +import ssl +import typing + +from ..exceptions import ProxySchemeUnsupported + +if typing.TYPE_CHECKING: + from typing_extensions import Self + + from .ssl_ import _TYPE_PEER_CERT_RET, _TYPE_PEER_CERT_RET_DICT + + +_WriteBuffer = typing.Union[bytearray, memoryview] +_ReturnValue = typing.TypeVar("_ReturnValue") + +SSL_BLOCKSIZE = 16384 + + +class SSLTransport: + """ + The SSLTransport wraps an existing socket and establishes an SSL connection. + + Contrary to Python's implementation of SSLSocket, it allows you to chain + multiple TLS connections together. It's particularly useful if you need to + implement TLS within TLS. + + The class supports most of the socket API operations. + """ + + @staticmethod + def _validate_ssl_context_for_tls_in_tls(ssl_context: ssl.SSLContext) -> None: + """ + Raises a ProxySchemeUnsupported if the provided ssl_context can't be used + for TLS in TLS. + + The only requirement is that the ssl_context provides the 'wrap_bio' + methods. + """ + + if not hasattr(ssl_context, "wrap_bio"): + raise ProxySchemeUnsupported( + "TLS in TLS requires SSLContext.wrap_bio() which isn't " + "available on non-native SSLContext" + ) + + def __init__( + self, + socket: socket.socket, + ssl_context: ssl.SSLContext, + server_hostname: str | None = None, + suppress_ragged_eofs: bool = True, + ) -> None: + """ + Create an SSLTransport around socket using the provided ssl_context. + """ + self.incoming = ssl.MemoryBIO() + self.outgoing = ssl.MemoryBIO() + + self.suppress_ragged_eofs = suppress_ragged_eofs + self.socket = socket + + self.sslobj = ssl_context.wrap_bio( + self.incoming, self.outgoing, server_hostname=server_hostname + ) + + # Perform initial handshake. + self._ssl_io_loop(self.sslobj.do_handshake) + + def __enter__(self) -> Self: + return self + + def __exit__(self, *_: typing.Any) -> None: + self.close() + + def fileno(self) -> int: + return self.socket.fileno() + + def read(self, len: int = 1024, buffer: typing.Any | None = None) -> int | bytes: + return self._wrap_ssl_read(len, buffer) + + def recv(self, buflen: int = 1024, flags: int = 0) -> int | bytes: + if flags != 0: + raise ValueError("non-zero flags not allowed in calls to recv") + return self._wrap_ssl_read(buflen) + + def recv_into( + self, + buffer: _WriteBuffer, + nbytes: int | None = None, + flags: int = 0, + ) -> None | int | bytes: + if flags != 0: + raise ValueError("non-zero flags not allowed in calls to recv_into") + if nbytes is None: + nbytes = len(buffer) + return self.read(nbytes, buffer) + + def sendall(self, data: bytes, flags: int = 0) -> None: + if flags != 0: + raise ValueError("non-zero flags not allowed in calls to sendall") + count = 0 + with memoryview(data) as view, view.cast("B") as byte_view: + amount = len(byte_view) + while count < amount: + v = self.send(byte_view[count:]) + count += v + + def send(self, data: bytes, flags: int = 0) -> int: + if flags != 0: + raise ValueError("non-zero flags not allowed in calls to send") + return self._ssl_io_loop(self.sslobj.write, data) + + def makefile( + self, + mode: str, + buffering: int | None = None, + *, + encoding: str | None = None, + errors: str | None = None, + newline: str | None = None, + ) -> typing.BinaryIO | typing.TextIO | socket.SocketIO: + """ + Python's httpclient uses makefile and buffered io when reading HTTP + messages and we need to support it. + + This is unfortunately a copy and paste of socket.py makefile with small + changes to point to the socket directly. + """ + if not set(mode) <= {"r", "w", "b"}: + raise ValueError(f"invalid mode {mode!r} (only r, w, b allowed)") + + writing = "w" in mode + reading = "r" in mode or not writing + assert reading or writing + binary = "b" in mode + rawmode = "" + if reading: + rawmode += "r" + if writing: + rawmode += "w" + raw = socket.SocketIO(self, rawmode) # type: ignore[arg-type] + self.socket._io_refs += 1 # type: ignore[attr-defined] + if buffering is None: + buffering = -1 + if buffering < 0: + buffering = io.DEFAULT_BUFFER_SIZE + if buffering == 0: + if not binary: + raise ValueError("unbuffered streams must be binary") + return raw + buffer: typing.BinaryIO + if reading and writing: + buffer = io.BufferedRWPair(raw, raw, buffering) # type: ignore[assignment] + elif reading: + buffer = io.BufferedReader(raw, buffering) + else: + assert writing + buffer = io.BufferedWriter(raw, buffering) + if binary: + return buffer + text = io.TextIOWrapper(buffer, encoding, errors, newline) + text.mode = mode # type: ignore[misc] + return text + + def unwrap(self) -> None: + self._ssl_io_loop(self.sslobj.unwrap) + + def close(self) -> None: + self.socket.close() + + @typing.overload + def getpeercert( + self, binary_form: typing.Literal[False] = ... + ) -> _TYPE_PEER_CERT_RET_DICT | None: ... + + @typing.overload + def getpeercert(self, binary_form: typing.Literal[True]) -> bytes | None: ... + + def getpeercert(self, binary_form: bool = False) -> _TYPE_PEER_CERT_RET: + return self.sslobj.getpeercert(binary_form) # type: ignore[return-value] + + def version(self) -> str | None: + return self.sslobj.version() + + def cipher(self) -> tuple[str, str, int] | None: + return self.sslobj.cipher() + + def selected_alpn_protocol(self) -> str | None: + return self.sslobj.selected_alpn_protocol() + + def shared_ciphers(self) -> list[tuple[str, str, int]] | None: + return self.sslobj.shared_ciphers() + + def compression(self) -> str | None: + return self.sslobj.compression() + + def settimeout(self, value: float | None) -> None: + self.socket.settimeout(value) + + def gettimeout(self) -> float | None: + return self.socket.gettimeout() + + def _decref_socketios(self) -> None: + self.socket._decref_socketios() # type: ignore[attr-defined] + + def _wrap_ssl_read(self, len: int, buffer: bytearray | None = None) -> int | bytes: + try: + return self._ssl_io_loop(self.sslobj.read, len, buffer) + except ssl.SSLError as e: + if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs: + return 0 # eof, return 0. + else: + raise + + # func is sslobj.do_handshake or sslobj.unwrap + @typing.overload + def _ssl_io_loop(self, func: typing.Callable[[], None]) -> None: ... + + # func is sslobj.write, arg1 is data + @typing.overload + def _ssl_io_loop(self, func: typing.Callable[[bytes], int], arg1: bytes) -> int: ... + + # func is sslobj.read, arg1 is len, arg2 is buffer + @typing.overload + def _ssl_io_loop( + self, + func: typing.Callable[[int, bytearray | None], bytes], + arg1: int, + arg2: bytearray | None, + ) -> bytes: ... + + def _ssl_io_loop( + self, + func: typing.Callable[..., _ReturnValue], + arg1: None | bytes | int = None, + arg2: bytearray | None = None, + ) -> _ReturnValue: + """Performs an I/O loop between incoming/outgoing and the socket.""" + should_loop = True + ret = None + + while should_loop: + errno = None + try: + if arg1 is None and arg2 is None: + ret = func() + elif arg2 is None: + ret = func(arg1) + else: + ret = func(arg1, arg2) + except ssl.SSLError as e: + if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE): + # WANT_READ, and WANT_WRITE are expected, others are not. + raise e + errno = e.errno + + buf = self.outgoing.read() + self.socket.sendall(buf) + + if errno is None: + should_loop = False + elif errno == ssl.SSL_ERROR_WANT_READ: + buf = self.socket.recv(SSL_BLOCKSIZE) + if buf: + self.incoming.write(buf) + else: + self.incoming.write_eof() + return typing.cast(_ReturnValue, ret) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/timeout.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/timeout.py new file mode 100644 index 00000000..4bb1be11 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/timeout.py @@ -0,0 +1,275 @@ +from __future__ import annotations + +import time +import typing +from enum import Enum +from socket import getdefaulttimeout + +from ..exceptions import TimeoutStateError + +if typing.TYPE_CHECKING: + from typing import Final + + +class _TYPE_DEFAULT(Enum): + # This value should never be passed to socket.settimeout() so for safety we use a -1. + # socket.settimout() raises a ValueError for negative values. + token = -1 + + +_DEFAULT_TIMEOUT: Final[_TYPE_DEFAULT] = _TYPE_DEFAULT.token + +_TYPE_TIMEOUT = typing.Optional[typing.Union[float, _TYPE_DEFAULT]] + + +class Timeout: + """Timeout configuration. + + Timeouts can be defined as a default for a pool: + + .. code-block:: python + + import urllib3 + + timeout = urllib3.util.Timeout(connect=2.0, read=7.0) + + http = urllib3.PoolManager(timeout=timeout) + + resp = http.request("GET", "https://example.com/") + + print(resp.status) + + Or per-request (which overrides the default for the pool): + + .. code-block:: python + + response = http.request("GET", "https://example.com/", timeout=Timeout(10)) + + Timeouts can be disabled by setting all the parameters to ``None``: + + .. code-block:: python + + no_timeout = Timeout(connect=None, read=None) + response = http.request("GET", "https://example.com/", timeout=no_timeout) + + + :param total: + This combines the connect and read timeouts into one; the read timeout + will be set to the time leftover from the connect attempt. In the + event that both a connect timeout and a total are specified, or a read + timeout and a total are specified, the shorter timeout will be applied. + + Defaults to None. + + :type total: int, float, or None + + :param connect: + The maximum amount of time (in seconds) to wait for a connection + attempt to a server to succeed. Omitting the parameter will default the + connect timeout to the system default, probably `the global default + timeout in socket.py + `_. + None will set an infinite timeout for connection attempts. + + :type connect: int, float, or None + + :param read: + The maximum amount of time (in seconds) to wait between consecutive + read operations for a response from the server. Omitting the parameter + will default the read timeout to the system default, probably `the + global default timeout in socket.py + `_. + None will set an infinite timeout. + + :type read: int, float, or None + + .. note:: + + Many factors can affect the total amount of time for urllib3 to return + an HTTP response. + + For example, Python's DNS resolver does not obey the timeout specified + on the socket. Other factors that can affect total request time include + high CPU load, high swap, the program running at a low priority level, + or other behaviors. + + In addition, the read and total timeouts only measure the time between + read operations on the socket connecting the client and the server, + not the total amount of time for the request to return a complete + response. For most requests, the timeout is raised because the server + has not sent the first byte in the specified time. This is not always + the case; if a server streams one byte every fifteen seconds, a timeout + of 20 seconds will not trigger, even though the request will take + several minutes to complete. + """ + + #: A sentinel object representing the default timeout value + DEFAULT_TIMEOUT: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT + + def __init__( + self, + total: _TYPE_TIMEOUT = None, + connect: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + read: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, + ) -> None: + self._connect = self._validate_timeout(connect, "connect") + self._read = self._validate_timeout(read, "read") + self.total = self._validate_timeout(total, "total") + self._start_connect: float | None = None + + def __repr__(self) -> str: + return f"{type(self).__name__}(connect={self._connect!r}, read={self._read!r}, total={self.total!r})" + + # __str__ provided for backwards compatibility + __str__ = __repr__ + + @staticmethod + def resolve_default_timeout(timeout: _TYPE_TIMEOUT) -> float | None: + return getdefaulttimeout() if timeout is _DEFAULT_TIMEOUT else timeout + + @classmethod + def _validate_timeout(cls, value: _TYPE_TIMEOUT, name: str) -> _TYPE_TIMEOUT: + """Check that a timeout attribute is valid. + + :param value: The timeout value to validate + :param name: The name of the timeout attribute to validate. This is + used to specify in error messages. + :return: The validated and casted version of the given value. + :raises ValueError: If it is a numeric value less than or equal to + zero, or the type is not an integer, float, or None. + """ + if value is None or value is _DEFAULT_TIMEOUT: + return value + + if isinstance(value, bool): + raise ValueError( + "Timeout cannot be a boolean value. It must " + "be an int, float or None." + ) + try: + float(value) + except (TypeError, ValueError): + raise ValueError( + "Timeout value %s was %s, but it must be an " + "int, float or None." % (name, value) + ) from None + + try: + if value <= 0: + raise ValueError( + "Attempted to set %s timeout to %s, but the " + "timeout cannot be set to a value less " + "than or equal to 0." % (name, value) + ) + except TypeError: + raise ValueError( + "Timeout value %s was %s, but it must be an " + "int, float or None." % (name, value) + ) from None + + return value + + @classmethod + def from_float(cls, timeout: _TYPE_TIMEOUT) -> Timeout: + """Create a new Timeout from a legacy timeout value. + + The timeout value used by httplib.py sets the same timeout on the + connect(), and recv() socket requests. This creates a :class:`Timeout` + object that sets the individual timeouts to the ``timeout`` value + passed to this function. + + :param timeout: The legacy timeout value. + :type timeout: integer, float, :attr:`urllib3.util.Timeout.DEFAULT_TIMEOUT`, or None + :return: Timeout object + :rtype: :class:`Timeout` + """ + return Timeout(read=timeout, connect=timeout) + + def clone(self) -> Timeout: + """Create a copy of the timeout object + + Timeout properties are stored per-pool but each request needs a fresh + Timeout object to ensure each one has its own start/stop configured. + + :return: a copy of the timeout object + :rtype: :class:`Timeout` + """ + # We can't use copy.deepcopy because that will also create a new object + # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to + # detect the user default. + return Timeout(connect=self._connect, read=self._read, total=self.total) + + def start_connect(self) -> float: + """Start the timeout clock, used during a connect() attempt + + :raises urllib3.exceptions.TimeoutStateError: if you attempt + to start a timer that has been started already. + """ + if self._start_connect is not None: + raise TimeoutStateError("Timeout timer has already been started.") + self._start_connect = time.monotonic() + return self._start_connect + + def get_connect_duration(self) -> float: + """Gets the time elapsed since the call to :meth:`start_connect`. + + :return: Elapsed time in seconds. + :rtype: float + :raises urllib3.exceptions.TimeoutStateError: if you attempt + to get duration for a timer that hasn't been started. + """ + if self._start_connect is None: + raise TimeoutStateError( + "Can't get connect duration for timer that has not started." + ) + return time.monotonic() - self._start_connect + + @property + def connect_timeout(self) -> _TYPE_TIMEOUT: + """Get the value to use when setting a connection timeout. + + This will be a positive float or integer, the value None + (never timeout), or the default system timeout. + + :return: Connect timeout. + :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None + """ + if self.total is None: + return self._connect + + if self._connect is None or self._connect is _DEFAULT_TIMEOUT: + return self.total + + return min(self._connect, self.total) # type: ignore[type-var] + + @property + def read_timeout(self) -> float | None: + """Get the value for the read timeout. + + This assumes some time has elapsed in the connection timeout and + computes the read timeout appropriately. + + If self.total is set, the read timeout is dependent on the amount of + time taken by the connect timeout. If the connection time has not been + established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be + raised. + + :return: Value to use for the read timeout. + :rtype: int, float or None + :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` + has not yet been called on this object. + """ + if ( + self.total is not None + and self.total is not _DEFAULT_TIMEOUT + and self._read is not None + and self._read is not _DEFAULT_TIMEOUT + ): + # In case the connect timeout has not yet been established. + if self._start_connect is None: + return self._read + return max(0, min(self.total - self.get_connect_duration(), self._read)) + elif self.total is not None and self.total is not _DEFAULT_TIMEOUT: + return max(0, self.total - self.get_connect_duration()) + else: + return self.resolve_default_timeout(self._read) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/url.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/url.py new file mode 100644 index 00000000..db057f17 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/url.py @@ -0,0 +1,469 @@ +from __future__ import annotations + +import re +import typing + +from ..exceptions import LocationParseError +from .util import to_str + +# We only want to normalize urls with an HTTP(S) scheme. +# urllib3 infers URLs without a scheme (None) to be http. +_NORMALIZABLE_SCHEMES = ("http", "https", None) + +# Almost all of these patterns were derived from the +# 'rfc3986' module: https://github.com/python-hyper/rfc3986 +_PERCENT_RE = re.compile(r"%[a-fA-F0-9]{2}") +_SCHEME_RE = re.compile(r"^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)") +_URI_RE = re.compile( + r"^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?" + r"(?://([^\\/?#]*))?" + r"([^?#]*)" + r"(?:\?([^#]*))?" + r"(?:#(.*))?$", + re.UNICODE | re.DOTALL, +) + +_IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}" +_HEX_PAT = "[0-9A-Fa-f]{1,4}" +_LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=_HEX_PAT, ipv4=_IPV4_PAT) +_subs = {"hex": _HEX_PAT, "ls32": _LS32_PAT} +_variations = [ + # 6( h16 ":" ) ls32 + "(?:%(hex)s:){6}%(ls32)s", + # "::" 5( h16 ":" ) ls32 + "::(?:%(hex)s:){5}%(ls32)s", + # [ h16 ] "::" 4( h16 ":" ) ls32 + "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s", + # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s", + # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s", + # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s", + # [ *4( h16 ":" ) h16 ] "::" ls32 + "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s", + # [ *5( h16 ":" ) h16 ] "::" h16 + "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s", + # [ *6( h16 ":" ) h16 ] "::" + "(?:(?:%(hex)s:){0,6}%(hex)s)?::", +] + +_UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~" +_IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" +_ZONE_ID_PAT = "(?:%25|%)(?:[" + _UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" +_IPV6_ADDRZ_PAT = r"\[" + _IPV6_PAT + r"(?:" + _ZONE_ID_PAT + r")?\]" +_REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*" +_TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$") + +_IPV4_RE = re.compile("^" + _IPV4_PAT + "$") +_IPV6_RE = re.compile("^" + _IPV6_PAT + "$") +_IPV6_ADDRZ_RE = re.compile("^" + _IPV6_ADDRZ_PAT + "$") +_BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + _IPV6_ADDRZ_PAT[2:-2] + "$") +_ZONE_ID_RE = re.compile("(" + _ZONE_ID_PAT + r")\]$") + +_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % ( + _REG_NAME_PAT, + _IPV4_PAT, + _IPV6_ADDRZ_PAT, +) +_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL) + +_UNRESERVED_CHARS = set( + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~" +) +_SUB_DELIM_CHARS = set("!$&'()*+,;=") +_USERINFO_CHARS = _UNRESERVED_CHARS | _SUB_DELIM_CHARS | {":"} +_PATH_CHARS = _USERINFO_CHARS | {"@", "/"} +_QUERY_CHARS = _FRAGMENT_CHARS = _PATH_CHARS | {"?"} + + +class Url( + typing.NamedTuple( + "Url", + [ + ("scheme", typing.Optional[str]), + ("auth", typing.Optional[str]), + ("host", typing.Optional[str]), + ("port", typing.Optional[int]), + ("path", typing.Optional[str]), + ("query", typing.Optional[str]), + ("fragment", typing.Optional[str]), + ], + ) +): + """ + Data structure for representing an HTTP URL. Used as a return value for + :func:`parse_url`. Both the scheme and host are normalized as they are + both case-insensitive according to RFC 3986. + """ + + def __new__( # type: ignore[no-untyped-def] + cls, + scheme: str | None = None, + auth: str | None = None, + host: str | None = None, + port: int | None = None, + path: str | None = None, + query: str | None = None, + fragment: str | None = None, + ): + if path and not path.startswith("/"): + path = "/" + path + if scheme is not None: + scheme = scheme.lower() + return super().__new__(cls, scheme, auth, host, port, path, query, fragment) + + @property + def hostname(self) -> str | None: + """For backwards-compatibility with urlparse. We're nice like that.""" + return self.host + + @property + def request_uri(self) -> str: + """Absolute path including the query string.""" + uri = self.path or "/" + + if self.query is not None: + uri += "?" + self.query + + return uri + + @property + def authority(self) -> str | None: + """ + Authority component as defined in RFC 3986 3.2. + This includes userinfo (auth), host and port. + + i.e. + userinfo@host:port + """ + userinfo = self.auth + netloc = self.netloc + if netloc is None or userinfo is None: + return netloc + else: + return f"{userinfo}@{netloc}" + + @property + def netloc(self) -> str | None: + """ + Network location including host and port. + + If you need the equivalent of urllib.parse's ``netloc``, + use the ``authority`` property instead. + """ + if self.host is None: + return None + if self.port: + return f"{self.host}:{self.port}" + return self.host + + @property + def url(self) -> str: + """ + Convert self into a url + + This function should more or less round-trip with :func:`.parse_url`. The + returned url may not be exactly the same as the url inputted to + :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls + with a blank port will have : removed). + + Example: + + .. code-block:: python + + import urllib3 + + U = urllib3.util.parse_url("https://google.com/mail/") + + print(U.url) + # "https://google.com/mail/" + + print( urllib3.util.Url("https", "username:password", + "host.com", 80, "/path", "query", "fragment" + ).url + ) + # "https://username:password@host.com:80/path?query#fragment" + """ + scheme, auth, host, port, path, query, fragment = self + url = "" + + # We use "is not None" we want things to happen with empty strings (or 0 port) + if scheme is not None: + url += scheme + "://" + if auth is not None: + url += auth + "@" + if host is not None: + url += host + if port is not None: + url += ":" + str(port) + if path is not None: + url += path + if query is not None: + url += "?" + query + if fragment is not None: + url += "#" + fragment + + return url + + def __str__(self) -> str: + return self.url + + +@typing.overload +def _encode_invalid_chars( + component: str, allowed_chars: typing.Container[str] +) -> str: # Abstract + ... + + +@typing.overload +def _encode_invalid_chars( + component: None, allowed_chars: typing.Container[str] +) -> None: # Abstract + ... + + +def _encode_invalid_chars( + component: str | None, allowed_chars: typing.Container[str] +) -> str | None: + """Percent-encodes a URI component without reapplying + onto an already percent-encoded component. + """ + if component is None: + return component + + component = to_str(component) + + # Normalize existing percent-encoded bytes. + # Try to see if the component we're encoding is already percent-encoded + # so we can skip all '%' characters but still encode all others. + component, percent_encodings = _PERCENT_RE.subn( + lambda match: match.group(0).upper(), component + ) + + uri_bytes = component.encode("utf-8", "surrogatepass") + is_percent_encoded = percent_encodings == uri_bytes.count(b"%") + encoded_component = bytearray() + + for i in range(0, len(uri_bytes)): + # Will return a single character bytestring + byte = uri_bytes[i : i + 1] + byte_ord = ord(byte) + if (is_percent_encoded and byte == b"%") or ( + byte_ord < 128 and byte.decode() in allowed_chars + ): + encoded_component += byte + continue + encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper())) + + return encoded_component.decode() + + +def _remove_path_dot_segments(path: str) -> str: + # See http://tools.ietf.org/html/rfc3986#section-5.2.4 for pseudo-code + segments = path.split("/") # Turn the path into a list of segments + output = [] # Initialize the variable to use to store output + + for segment in segments: + # '.' is the current directory, so ignore it, it is superfluous + if segment == ".": + continue + # Anything other than '..', should be appended to the output + if segment != "..": + output.append(segment) + # In this case segment == '..', if we can, we should pop the last + # element + elif output: + output.pop() + + # If the path starts with '/' and the output is empty or the first string + # is non-empty + if path.startswith("/") and (not output or output[0]): + output.insert(0, "") + + # If the path starts with '/.' or '/..' ensure we add one more empty + # string to add a trailing '/' + if path.endswith(("/.", "/..")): + output.append("") + + return "/".join(output) + + +@typing.overload +def _normalize_host(host: None, scheme: str | None) -> None: ... + + +@typing.overload +def _normalize_host(host: str, scheme: str | None) -> str: ... + + +def _normalize_host(host: str | None, scheme: str | None) -> str | None: + if host: + if scheme in _NORMALIZABLE_SCHEMES: + is_ipv6 = _IPV6_ADDRZ_RE.match(host) + if is_ipv6: + # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as + # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID + # separator as necessary to return a valid RFC 4007 scoped IP. + match = _ZONE_ID_RE.search(host) + if match: + start, end = match.span(1) + zone_id = host[start:end] + + if zone_id.startswith("%25") and zone_id != "%25": + zone_id = zone_id[3:] + else: + zone_id = zone_id[1:] + zone_id = _encode_invalid_chars(zone_id, _UNRESERVED_CHARS) + return f"{host[:start].lower()}%{zone_id}{host[end:]}" + else: + return host.lower() + elif not _IPV4_RE.match(host): + return to_str( + b".".join([_idna_encode(label) for label in host.split(".")]), + "ascii", + ) + return host + + +def _idna_encode(name: str) -> bytes: + if not name.isascii(): + try: + import idna + except ImportError: + raise LocationParseError( + "Unable to parse URL without the 'idna' module" + ) from None + + try: + return idna.encode(name.lower(), strict=True, std3_rules=True) + except idna.IDNAError: + raise LocationParseError( + f"Name '{name}' is not a valid IDNA label" + ) from None + + return name.lower().encode("ascii") + + +def _encode_target(target: str) -> str: + """Percent-encodes a request target so that there are no invalid characters + + Pre-condition for this function is that 'target' must start with '/'. + If that is the case then _TARGET_RE will always produce a match. + """ + match = _TARGET_RE.match(target) + if not match: # Defensive: + raise LocationParseError(f"{target!r} is not a valid request URI") + + path, query = match.groups() + encoded_target = _encode_invalid_chars(path, _PATH_CHARS) + if query is not None: + query = _encode_invalid_chars(query, _QUERY_CHARS) + encoded_target += "?" + query + return encoded_target + + +def parse_url(url: str) -> Url: + """ + Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is + performed to parse incomplete urls. Fields not provided will be None. + This parser is RFC 3986 and RFC 6874 compliant. + + The parser logic and helper functions are based heavily on + work done in the ``rfc3986`` module. + + :param str url: URL to parse into a :class:`.Url` namedtuple. + + Partly backwards-compatible with :mod:`urllib.parse`. + + Example: + + .. code-block:: python + + import urllib3 + + print( urllib3.util.parse_url('http://google.com/mail/')) + # Url(scheme='http', host='google.com', port=None, path='/mail/', ...) + + print( urllib3.util.parse_url('google.com:80')) + # Url(scheme=None, host='google.com', port=80, path=None, ...) + + print( urllib3.util.parse_url('/foo?bar')) + # Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) + """ + if not url: + # Empty + return Url() + + source_url = url + if not _SCHEME_RE.search(url): + url = "//" + url + + scheme: str | None + authority: str | None + auth: str | None + host: str | None + port: str | None + port_int: int | None + path: str | None + query: str | None + fragment: str | None + + try: + scheme, authority, path, query, fragment = _URI_RE.match(url).groups() # type: ignore[union-attr] + normalize_uri = scheme is None or scheme.lower() in _NORMALIZABLE_SCHEMES + + if scheme: + scheme = scheme.lower() + + if authority: + auth, _, host_port = authority.rpartition("@") + auth = auth or None + host, port = _HOST_PORT_RE.match(host_port).groups() # type: ignore[union-attr] + if auth and normalize_uri: + auth = _encode_invalid_chars(auth, _USERINFO_CHARS) + if port == "": + port = None + else: + auth, host, port = None, None, None + + if port is not None: + port_int = int(port) + if not (0 <= port_int <= 65535): + raise LocationParseError(url) + else: + port_int = None + + host = _normalize_host(host, scheme) + + if normalize_uri and path: + path = _remove_path_dot_segments(path) + path = _encode_invalid_chars(path, _PATH_CHARS) + if normalize_uri and query: + query = _encode_invalid_chars(query, _QUERY_CHARS) + if normalize_uri and fragment: + fragment = _encode_invalid_chars(fragment, _FRAGMENT_CHARS) + + except (ValueError, AttributeError) as e: + raise LocationParseError(source_url) from e + + # For the sake of backwards compatibility we put empty + # string values for path if there are any defined values + # beyond the path in the URL. + # TODO: Remove this when we break backwards compatibility. + if not path: + if query is not None or fragment is not None: + path = "" + else: + path = None + + return Url( + scheme=scheme, + auth=auth, + host=host, + port=port_int, + path=path, + query=query, + fragment=fragment, + ) diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/util.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/util.py new file mode 100644 index 00000000..35c77e40 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/util.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +import typing +from types import TracebackType + + +def to_bytes( + x: str | bytes, encoding: str | None = None, errors: str | None = None +) -> bytes: + if isinstance(x, bytes): + return x + elif not isinstance(x, str): + raise TypeError(f"not expecting type {type(x).__name__}") + if encoding or errors: + return x.encode(encoding or "utf-8", errors=errors or "strict") + return x.encode() + + +def to_str( + x: str | bytes, encoding: str | None = None, errors: str | None = None +) -> str: + if isinstance(x, str): + return x + elif not isinstance(x, bytes): + raise TypeError(f"not expecting type {type(x).__name__}") + if encoding or errors: + return x.decode(encoding or "utf-8", errors=errors or "strict") + return x.decode() + + +def reraise( + tp: type[BaseException] | None, + value: BaseException, + tb: TracebackType | None = None, +) -> typing.NoReturn: + try: + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + finally: + value = None # type: ignore[assignment] + tb = None diff --git a/Backend/venv/lib/python3.12/site-packages/urllib3/util/wait.py b/Backend/venv/lib/python3.12/site-packages/urllib3/util/wait.py new file mode 100644 index 00000000..aeca0c7a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/urllib3/util/wait.py @@ -0,0 +1,124 @@ +from __future__ import annotations + +import select +import socket +from functools import partial + +__all__ = ["wait_for_read", "wait_for_write"] + + +# How should we wait on sockets? +# +# There are two types of APIs you can use for waiting on sockets: the fancy +# modern stateful APIs like epoll/kqueue, and the older stateless APIs like +# select/poll. The stateful APIs are more efficient when you have a lots of +# sockets to keep track of, because you can set them up once and then use them +# lots of times. But we only ever want to wait on a single socket at a time +# and don't want to keep track of state, so the stateless APIs are actually +# more efficient. So we want to use select() or poll(). +# +# Now, how do we choose between select() and poll()? On traditional Unixes, +# select() has a strange calling convention that makes it slow, or fail +# altogether, for high-numbered file descriptors. The point of poll() is to fix +# that, so on Unixes, we prefer poll(). +# +# On Windows, there is no poll() (or at least Python doesn't provide a wrapper +# for it), but that's OK, because on Windows, select() doesn't have this +# strange calling convention; plain select() works fine. +# +# So: on Windows we use select(), and everywhere else we use poll(). We also +# fall back to select() in case poll() is somehow broken or missing. + + +def select_wait_for_socket( + sock: socket.socket, + read: bool = False, + write: bool = False, + timeout: float | None = None, +) -> bool: + if not read and not write: + raise RuntimeError("must specify at least one of read=True, write=True") + rcheck = [] + wcheck = [] + if read: + rcheck.append(sock) + if write: + wcheck.append(sock) + # When doing a non-blocking connect, most systems signal success by + # marking the socket writable. Windows, though, signals success by marked + # it as "exceptional". We paper over the difference by checking the write + # sockets for both conditions. (The stdlib selectors module does the same + # thing.) + fn = partial(select.select, rcheck, wcheck, wcheck) + rready, wready, xready = fn(timeout) + return bool(rready or wready or xready) + + +def poll_wait_for_socket( + sock: socket.socket, + read: bool = False, + write: bool = False, + timeout: float | None = None, +) -> bool: + if not read and not write: + raise RuntimeError("must specify at least one of read=True, write=True") + mask = 0 + if read: + mask |= select.POLLIN + if write: + mask |= select.POLLOUT + poll_obj = select.poll() + poll_obj.register(sock, mask) + + # For some reason, poll() takes timeout in milliseconds + def do_poll(t: float | None) -> list[tuple[int, int]]: + if t is not None: + t *= 1000 + return poll_obj.poll(t) + + return bool(do_poll(timeout)) + + +def _have_working_poll() -> bool: + # Apparently some systems have a select.poll that fails as soon as you try + # to use it, either due to strange configuration or broken monkeypatching + # from libraries like eventlet/greenlet. + try: + poll_obj = select.poll() + poll_obj.poll(0) + except (AttributeError, OSError): + return False + else: + return True + + +def wait_for_socket( + sock: socket.socket, + read: bool = False, + write: bool = False, + timeout: float | None = None, +) -> bool: + # We delay choosing which implementation to use until the first time we're + # called. We could do it at import time, but then we might make the wrong + # decision if someone goes wild with monkeypatching select.poll after + # we're imported. + global wait_for_socket + if _have_working_poll(): + wait_for_socket = poll_wait_for_socket + elif hasattr(select, "select"): + wait_for_socket = select_wait_for_socket + return wait_for_socket(sock, read, write, timeout) + + +def wait_for_read(sock: socket.socket, timeout: float | None = None) -> bool: + """Waits for reading to be available on a given socket. + Returns True if the socket is readable, or False if the timeout expired. + """ + return wait_for_socket(sock, read=True, timeout=timeout) + + +def wait_for_write(sock: socket.socket, timeout: float | None = None) -> bool: + """Waits for writing to be available on a given socket. + Returns True if the socket is readable, or False if the timeout expired. + """ + return wait_for_socket(sock, write=True, timeout=timeout) diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json index 12a377d2..53b9c52f 100644 --- a/Frontend/package-lock.json +++ b/Frontend/package-lock.json @@ -9,6 +9,8 @@ "version": "1.0.0", "dependencies": { "@hookform/resolvers": "^3.3.2", + "@stripe/react-stripe-js": "^2.9.0", + "@stripe/stripe-js": "^2.4.0", "@types/react-datepicker": "^6.2.0", "axios": "^1.6.2", "date-fns": "^2.30.0", @@ -1436,6 +1438,27 @@ "win32" ] }, + "node_modules/@stripe/react-stripe-js": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@stripe/react-stripe-js/-/react-stripe-js-2.9.0.tgz", + "integrity": "sha512-+/j2g6qKAKuWSurhgRMfdlIdKM+nVVJCy/wl0US2Ccodlqx0WqfIIBhUkeONkCG+V/b+bZzcj4QVa3E/rXtT4Q==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@stripe/stripe-js": "^1.44.1 || ^2.0.0 || ^3.0.0 || ^4.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@stripe/stripe-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.4.0.tgz", + "integrity": "sha512-WFkQx1mbs2b5+7looI9IV1BLa3bIApuN3ehp9FP58xGg7KL9hCHDECgW3BwO9l9L+xBPVAD7Yjn1EhGe6EDTeA==", + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3609,7 +3632,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3990,6 +4012,17 @@ "node": ">= 0.8.0" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/property-expr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", @@ -4126,6 +4159,12 @@ "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", diff --git a/Frontend/package.json b/Frontend/package.json index 10eecba0..a2d8b81e 100644 --- a/Frontend/package.json +++ b/Frontend/package.json @@ -11,6 +11,8 @@ }, "dependencies": { "@hookform/resolvers": "^3.3.2", + "@stripe/react-stripe-js": "^2.9.0", + "@stripe/stripe-js": "^2.4.0", "@types/react-datepicker": "^6.2.0", "axios": "^1.6.2", "date-fns": "^2.30.0", diff --git a/Frontend/src/App.tsx b/Frontend/src/App.tsx index 7852c35f..57be6cef 100644 --- a/Frontend/src/App.tsx +++ b/Frontend/src/App.tsx @@ -9,6 +9,7 @@ import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { GlobalLoadingProvider } from './contexts/GlobalLoadingContext'; import { CookieConsentProvider } from './contexts/CookieConsentContext'; +import { CurrencyProvider } from './contexts/CurrencyContext'; import OfflineIndicator from './components/common/OfflineIndicator'; import CookieConsentBanner from './components/common/CookieConsentBanner'; import AnalyticsLoader from './components/common/AnalyticsLoader'; @@ -40,8 +41,10 @@ const BookingPage = lazy(() => import('./pages/customer/BookingPage')); const BookingSuccessPage = lazy(() => import('./pages/customer/BookingSuccessPage')); const BookingDetailPage = lazy(() => import('./pages/customer/BookingDetailPage')); const DepositPaymentPage = lazy(() => import('./pages/customer/DepositPaymentPage')); +const FullPaymentPage = lazy(() => import('./pages/customer/FullPaymentPage')); const PaymentConfirmationPage = lazy(() => import('./pages/customer/PaymentConfirmationPage')); const PaymentResultPage = lazy(() => import('./pages/customer/PaymentResultPage')); +const InvoicePage = lazy(() => import('./pages/customer/InvoicePage')); const ProfilePage = lazy(() => import('./pages/customer/ProfilePage')); const AboutPage = lazy(() => import('./pages/AboutPage')); const LoginPage = lazy(() => import('./pages/auth/LoginPage')); @@ -55,12 +58,15 @@ const RoomManagementPage = lazy(() => import('./pages/admin/RoomManagementPage') const UserManagementPage = lazy(() => import('./pages/admin/UserManagementPage')); const BookingManagementPage = lazy(() => import('./pages/admin/BookingManagementPage')); const PaymentManagementPage = lazy(() => import('./pages/admin/PaymentManagementPage')); +const InvoiceManagementPage = lazy(() => import('./pages/admin/InvoiceManagementPage')); const ServiceManagementPage = lazy(() => import('./pages/admin/ServiceManagementPage')); const ReviewManagementPage = lazy(() => import('./pages/admin/ReviewManagementPage')); const PromotionManagementPage = lazy(() => import('./pages/admin/PromotionManagementPage')); const BannerManagementPage = lazy(() => import('./pages/admin/BannerManagementPage')); const ReportsPage = lazy(() => import('./pages/admin/ReportsPage')); const CookieSettingsPage = lazy(() => import('./pages/admin/CookieSettingsPage')); +const CurrencySettingsPage = lazy(() => import('./pages/admin/CurrencySettingsPage')); +const StripeSettingsPage = lazy(() => import('./pages/admin/StripeSettingsPage')); const AuditLogsPage = lazy(() => import('./pages/admin/AuditLogsPage')); const CheckInPage = lazy(() => import('./pages/admin/CheckInPage')); const CheckOutPage = lazy(() => import('./pages/admin/CheckOutPage')); @@ -123,6 +129,7 @@ function App() { return ( + } /> } /> } /> + + + + } + /> } @@ -218,7 +233,15 @@ function App() { } /> + + + } + /> + @@ -283,6 +306,10 @@ function App() { path="payments" element={} /> + } + /> } @@ -319,6 +346,14 @@ function App() { path="settings" element={} /> + } + /> + } + /> {/* 404 Route */} @@ -347,6 +382,7 @@ function App() { + ); diff --git a/Frontend/src/components/common/CurrencyIcon.tsx b/Frontend/src/components/common/CurrencyIcon.tsx new file mode 100644 index 00000000..2b38de3c --- /dev/null +++ b/Frontend/src/components/common/CurrencyIcon.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import { useCurrency } from '../../contexts/CurrencyContext'; +import { getCurrencySymbol } from '../../utils/format'; + +interface CurrencyIconProps { + className?: string; + size?: number; + currency?: string; // Optional: if not provided, uses currency from context +} + +/** + * Dynamic currency icon component that displays the currency symbol + * instead of a hardcoded dollar sign icon + */ +const CurrencyIcon: React.FC = ({ + className = '', + size = 24, + currency +}) => { + const { currency: contextCurrency } = useCurrency(); + const currencyToUse = currency || contextCurrency || 'VND'; + const symbol = getCurrencySymbol(currencyToUse); + + return ( +

    + {symbol} +
    + ); +}; + +export default CurrencyIcon; + diff --git a/Frontend/src/components/common/CurrencySelector.tsx b/Frontend/src/components/common/CurrencySelector.tsx new file mode 100644 index 00000000..cb94b412 --- /dev/null +++ b/Frontend/src/components/common/CurrencySelector.tsx @@ -0,0 +1,126 @@ +import React, { useState } from 'react'; +import { useCurrency } from '../../contexts/CurrencyContext'; +import { Globe, Save } from 'lucide-react'; +import { toast } from 'react-toastify'; +import systemSettingsService from '../../services/api/systemSettingsService'; +import useAuthStore from '../../store/useAuthStore'; +import { getCurrencySymbol } from '../../utils/format'; + +interface CurrencySelectorProps { + className?: string; + showLabel?: boolean; + variant?: 'dropdown' | 'select'; + adminMode?: boolean; // If true, allows updating platform currency +} + +const CurrencySelector: React.FC = ({ + className = '', + showLabel = true, + variant = 'select', + adminMode = false, +}) => { + const { currency, supportedCurrencies, isLoading, refreshCurrency } = useCurrency(); + const { userInfo } = useAuthStore(); + const [saving, setSaving] = useState(false); + const isAdmin = userInfo?.role === 'admin'; + + const currencyNames: Record = { + VND: 'Vietnamese Dong', + USD: 'US Dollar', + EUR: 'Euro', + GBP: 'British Pound', + JPY: 'Japanese Yen', + CNY: 'Chinese Yuan', + KRW: 'South Korean Won', + SGD: 'Singapore Dollar', + THB: 'Thai Baht', + AUD: 'Australian Dollar', + CAD: 'Canadian Dollar', + }; + + const getCurrencyDisplayName = (code: string): string => { + const name = currencyNames[code] || code; + const symbol = getCurrencySymbol(code); + return `${name} (${symbol})`; + }; + + const handleChange = async (e: React.ChangeEvent) => { + const newCurrency = e.target.value; + + // If admin mode, update platform currency + if (adminMode && isAdmin) { + try { + setSaving(true); + await systemSettingsService.updatePlatformCurrency(newCurrency); + await refreshCurrency(); + toast.success('Platform currency updated successfully'); + } catch (error: any) { + toast.error(error.message || 'Failed to update platform currency'); + } finally { + setSaving(false); + } + } + }; + + if (isLoading) { + return ( +
    + {showLabel && Currency:} +
    +
    + ); + } + + if (variant === 'dropdown') { + return ( +
    + {showLabel && ( + + )} +
    + +
    + +
    +
    +
    + ); + } + + return ( +
    + {showLabel && ( + + + Currency: + + )} + +
    + ); +}; + +export default CurrencySelector; + diff --git a/Frontend/src/components/common/PaymentMethodSelector.tsx b/Frontend/src/components/common/PaymentMethodSelector.tsx index f82a0504..9dcffa4d 100644 --- a/Frontend/src/components/common/PaymentMethodSelector.tsx +++ b/Frontend/src/components/common/PaymentMethodSelector.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { CreditCard, Building2 } from 'lucide-react'; +import { CreditCard } from 'lucide-react'; interface PaymentMethodSelectorProps { - value: 'cash' | 'bank_transfer'; - onChange: (value: 'cash' | 'bank_transfer') => void; + value: 'cash' | 'stripe'; + onChange: (value: 'cash' | 'stripe') => void; error?: string; disabled?: boolean; } @@ -62,12 +62,12 @@ const PaymentMethodSelector: React.FC< - {/* Bank Transfer */} + {/* Stripe Payment */} @@ -123,11 +123,10 @@ const PaymentMethodSelector: React.FC< border-blue-200 rounded-lg" >

    - 💡 Note: You will not be - charged immediately. {' '} + 💡 Note: {' '} {value === 'cash' - ? 'Payment when checking in.' - : 'Transfer after booking confirmation.'} + ? 'You will pay when checking in. Cash and card accepted at the hotel.' + : 'Your payment will be processed securely through Stripe.'}

    diff --git a/Frontend/src/components/layout/Header.tsx b/Frontend/src/components/layout/Header.tsx index 2504563c..db1df150 100644 --- a/Frontend/src/components/layout/Header.tsx +++ b/Frontend/src/components/layout/Header.tsx @@ -11,6 +11,7 @@ import { Heart, Phone, Mail, + Calendar, } from 'lucide-react'; import { useClickOutside } from '../../hooks/useClickOutside'; @@ -121,25 +122,6 @@ const Header: React.FC = ({ Rooms - - Bookings - - - - - Favorites - - Profile + setIsUserMenuOpen(false)} + className="flex items-center space-x-3 + px-4 py-2.5 text-white/90 + hover:bg-[#d4af37]/10 hover:text-[#d4af37] + transition-all duration-300 border-l-2 border-transparent + hover:border-[#d4af37]" + > + + Favorites + + setIsUserMenuOpen(false)} + className="flex items-center space-x-3 + px-4 py-2.5 text-white/90 + hover:bg-[#d4af37]/10 hover:text-[#d4af37] + transition-all duration-300 border-l-2 border-transparent + hover:border-[#d4af37]" + > + + My Bookings + {userInfo?.role === 'admin' && ( = ({ > Rooms - setIsMobileMenuOpen(false)} - className="px-4 py-3 text-white/90 - hover:bg-[#d4af37]/10 hover:text-[#d4af37] - rounded-sm transition-all duration-300 - border-l-2 border-transparent - hover:border-[#d4af37] font-light tracking-wide" - > - Bookings - - setIsMobileMenuOpen(false)} - className="px-4 py-3 text-white/90 - hover:bg-[#d4af37]/10 hover:text-[#d4af37] - rounded-sm transition-all duration-300 - border-l-2 border-transparent - hover:border-[#d4af37] font-light tracking-wide - flex items-center gap-2" - > - - Favorites - setIsMobileMenuOpen(false)} @@ -408,6 +390,36 @@ const Header: React.FC = ({ Profile + + setIsMobileMenuOpen(false) + } + className="flex items-center + space-x-2 px-4 py-3 text-white/90 + hover:bg-[#d4af37]/10 hover:text-[#d4af37] + rounded-sm transition-all duration-300 + border-l-2 border-transparent + hover:border-[#d4af37] font-light tracking-wide" + > + + Favorites + + + setIsMobileMenuOpen(false) + } + className="flex items-center + space-x-2 px-4 py-3 text-white/90 + hover:bg-[#d4af37]/10 hover:text-[#d4af37] + rounded-sm transition-all duration-300 + border-l-2 border-transparent + hover:border-[#d4af37] font-light tracking-wide" + > + + My Bookings + {userInfo?.role === 'admin' && ( = ({ isCollapsed: controlledCollapsed, onToggle }) => { - const [internalCollapsed, setInternalCollapsed] = - useState(false); + const [internalCollapsed, setInternalCollapsed] = useState(false); + const [isMobile, setIsMobile] = useState(false); + const [isMobileOpen, setIsMobileOpen] = useState(false); const location = useLocation(); + // Check if mobile on mount and resize + useEffect(() => { + const checkMobile = () => { + setIsMobile(window.innerWidth < 1024); // lg breakpoint + if (window.innerWidth >= 1024) { + setIsMobileOpen(false); + } + }; + + checkMobile(); + window.addEventListener('resize', checkMobile); + return () => window.removeEventListener('resize', checkMobile); + }, []); + const isCollapsed = controlledCollapsed !== undefined ? controlledCollapsed @@ -45,6 +63,16 @@ const SidebarAdmin: React.FC = ({ } }; + const handleMobileToggle = () => { + setIsMobileOpen(!isMobileOpen); + }; + + const handleLinkClick = () => { + if (isMobile) { + setIsMobileOpen(false); + } + }; + const menuItems = [ { path: '/admin/dashboard', @@ -71,6 +99,11 @@ const SidebarAdmin: React.FC = ({ icon: CreditCard, label: 'Payments' }, + { + path: '/admin/invoices', + icon: FileText, + label: 'Invoices' + }, { path: '/admin/services', icon: Settings, @@ -114,97 +147,171 @@ const SidebarAdmin: React.FC = ({ { path: '/admin/settings', icon: FileText, - label: 'Settings' + label: 'Cookie Settings' + }, + { + path: '/admin/settings/currency', + icon: DollarSign, + label: 'Currency Settings' + }, + { + path: '/admin/settings/stripe', + icon: CreditCard, + label: 'Stripe Settings' }, ]; const isActive = (path: string) => { - return location.pathname === path || - location.pathname.startsWith(`${path}/`); + // Exact match + if (location.pathname === path) return true; + // For settings paths, only match if it's an exact match or a direct child + if (path === '/admin/settings') { + return location.pathname === '/admin/settings'; + } + // For other paths, check if it starts with the path followed by / + return location.pathname.startsWith(`${path}/`); }; return ( - + {/* Sidebar */} + + ); }; diff --git a/Frontend/src/components/payments/StripePaymentForm.tsx b/Frontend/src/components/payments/StripePaymentForm.tsx new file mode 100644 index 00000000..c5db54f8 --- /dev/null +++ b/Frontend/src/components/payments/StripePaymentForm.tsx @@ -0,0 +1,174 @@ +import React, { useState, useEffect } from 'react'; +import { + PaymentElement, + useStripe, + useElements, +} from '@stripe/react-stripe-js'; +import { CreditCard, Loader2, AlertCircle, CheckCircle } from 'lucide-react'; +import { toast } from 'react-toastify'; + +interface StripePaymentFormProps { + clientSecret: string; + amount: number; + onSuccess: (paymentIntentId: string) => void; + onError: (error: string) => void; +} + +const StripePaymentForm: React.FC = ({ + clientSecret, + amount, + onSuccess, + onError, +}) => { + const stripe = useStripe(); + const elements = useElements(); + + const [isProcessing, setIsProcessing] = useState(false); + const [message, setMessage] = useState(null); + + useEffect(() => { + if (!stripe || !clientSecret) { + return; + } + }, [stripe, clientSecret]); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!stripe || !elements) { + return; + } + + setIsProcessing(true); + setMessage(null); + + try { + const { error, paymentIntent } = await stripe.confirmPayment({ + elements, + confirmParams: { + return_url: window.location.origin + '/payment-success', + }, + redirect: 'if_required', + }); + + if (error) { + setMessage(error.message || 'An error occurred during payment'); + onError(error.message || 'Payment failed'); + toast.error(error.message || 'Payment failed'); + } else if (paymentIntent && paymentIntent.status === 'succeeded') { + setMessage('Payment succeeded!'); + toast.success('Payment successful!'); + onSuccess(paymentIntent.id); + } else { + setMessage('Payment processing...'); + } + } catch (err: any) { + const errorMessage = err.message || 'An unexpected error occurred'; + setMessage(errorMessage); + onError(errorMessage); + toast.error(errorMessage); + } finally { + setIsProcessing(false); + } + }; + + if (!stripe || !elements) { + return ( +
    + + Loading payment form... +
    + ); + } + + return ( +
    +
    +
    + +

    + Payment Details +

    +
    + +
    +
    + + Amount to Pay + + + ${amount.toFixed(2)} + +
    +
    + +
    + +
    + + {message && ( +
    + {message.includes('succeeded') ? ( + + ) : message.includes('error') || message.includes('failed') ? ( + + ) : ( + + )} +

    + {message} +

    +
    + )} + + + +

    + Your payment is secure and encrypted +

    +
    +
    + ); +}; + +export default StripePaymentForm; + diff --git a/Frontend/src/components/payments/StripePaymentWrapper.tsx b/Frontend/src/components/payments/StripePaymentWrapper.tsx new file mode 100644 index 00000000..997e1a29 --- /dev/null +++ b/Frontend/src/components/payments/StripePaymentWrapper.tsx @@ -0,0 +1,197 @@ +import React, { useState, useEffect } from 'react'; +import { loadStripe, StripeElementsOptions } from '@stripe/stripe-js'; +import { Elements } from '@stripe/react-stripe-js'; +import StripePaymentForm from './StripePaymentForm'; +import { createStripePaymentIntent, confirmStripePayment } from '../../services/api/paymentService'; +import { Loader2, AlertCircle } from 'lucide-react'; +import Loading from '../common/Loading'; + +interface StripePaymentWrapperProps { + bookingId: number; + amount: number; + currency?: string; + onSuccess: () => void; + onError?: (error: string) => void; +} + +const StripePaymentWrapper: React.FC = ({ + bookingId, + amount, + currency = 'usd', + onSuccess, + onError, +}) => { + const [stripePromise, setStripePromise] = useState | null>(null); + const [clientSecret, setClientSecret] = useState(null); + const [publishableKey, setPublishableKey] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [paymentCompleted, setPaymentCompleted] = useState(false); + + // Initialize Stripe payment intent + useEffect(() => { + // Don't initialize if payment is already completed + if (paymentCompleted) { + return; + } + + // First, create payment intent to get publishable key + const initializeStripe = async () => { + try { + setLoading(true); + setError(null); + + const response = await createStripePaymentIntent( + bookingId, + amount, + currency + ); + + if (response.success && response.data) { + const { publishable_key, client_secret } = response.data; + + console.log('Payment intent response:', { publishable_key: publishable_key ? 'present' : 'missing', client_secret: client_secret ? 'present' : 'missing' }); + + if (!client_secret) { + throw new Error('Client secret not received from server'); + } + + if (!publishable_key) { + throw new Error('Publishable key not configured. Please configure Stripe settings in Admin Panel.'); + } + + setPublishableKey(publishable_key); + setClientSecret(client_secret); + + // Initialize Stripe with publishable key + // loadStripe returns a Promise, so we don't need to wrap it + const stripePromise = loadStripe(publishable_key); + setStripePromise(stripePromise); + + // Wait for Stripe to load before proceeding + const stripe = await stripePromise; + if (!stripe) { + throw new Error('Failed to load Stripe'); + } + } else { + throw new Error(response.message || 'Failed to initialize payment'); + } + } catch (err: any) { + console.error('Error initializing Stripe:', err); + const errorMessage = err.response?.data?.message || err.message || 'Failed to initialize payment'; + setError(errorMessage); + if (onError) { + onError(errorMessage); + } + } finally { + setLoading(false); + } + }; + + initializeStripe(); + }, [bookingId, amount, currency, onError, paymentCompleted]); + + // Debug logging - must be before any conditional returns + useEffect(() => { + if (clientSecret && stripePromise) { + console.log('Stripe initialized successfully', { hasClientSecret: !!clientSecret, hasStripePromise: !!stripePromise }); + } else { + console.log('Stripe not ready', { hasClientSecret: !!clientSecret, hasStripePromise: !!stripePromise, error }); + } + }, [clientSecret, stripePromise, error]); + + const handlePaymentSuccess = async (paymentIntentId: string) => { + try { + // Mark payment as completed to prevent re-initialization + setPaymentCompleted(true); + + const response = await confirmStripePayment(paymentIntentId, bookingId); + + if (response.success) { + onSuccess(); + } else { + // Reset payment completed flag if confirmation failed + setPaymentCompleted(false); + throw new Error(response.message || 'Payment confirmation failed'); + } + } catch (err: any) { + console.error('Error confirming payment:', err); + // Reset payment completed flag on error + setPaymentCompleted(false); + const errorMessage = err.response?.data?.message || err.message || 'Payment confirmation failed'; + setError(errorMessage); + if (onError) { + onError(errorMessage); + } + } + }; + + const handlePaymentError = (errorMessage: string) => { + setError(errorMessage); + if (onError) { + onError(errorMessage); + } + }; + + // Don't show error if payment is completed + if (paymentCompleted) { + return null; // Component will be unmounted by parent + } + + if (loading) { + return ( +
    + + Initializing payment... +
    + ); + } + + if (error) { + return ( +
    +
    + +
    +

    + Payment Initialization Failed +

    +

    + {error || 'Unable to initialize payment. Please try again.'} +

    +
    +
    +
    + ); + } + + if (!clientSecret || !stripePromise) { + return ( +
    + + Loading payment form... +
    + ); + } + + const options: StripeElementsOptions = { + clientSecret, + appearance: { + theme: 'stripe', + }, + }; + + return ( + + + + ); +}; + +export default StripePaymentWrapper; + diff --git a/Frontend/src/components/rooms/Pagination.tsx b/Frontend/src/components/rooms/Pagination.tsx index 828f2ad1..f4c1e96d 100644 --- a/Frontend/src/components/rooms/Pagination.tsx +++ b/Frontend/src/components/rooms/Pagination.tsx @@ -77,10 +77,11 @@ const Pagination: React.FC = ({ + )} + +
    +
    setCheckOutDate(date)} selectsEnd startDate={checkInDate} endDate={checkOutDate} - minDate={checkInDate || new Date()} + minDate={ + checkInDate + ? new Date(checkInDate.getTime() + 24 * 60 * 60 * 1000) // Next day after check-in + : new Date() + } + disabled={!checkInDate} dateFormat="dd/MM/yyyy" - placeholderText="" - className="luxury-input" - /> + placeholderText={checkInDate ? "Select check-out" : "Select check-in first"} + className="w-full px-4 py-3.5 pl-11 bg-[#1a1a1a] border-2 + border-[#d4af37]/30 rounded-lg text-white text-base + placeholder-gray-400 focus:ring-2 + focus:ring-[#d4af37]/60 focus:border-[#d4af37] + transition-all duration-300 font-normal tracking-wide + hover:border-[#d4af37]/50 + disabled:opacity-50 disabled:cursor-not-allowed" + wrapperClassName="w-full" + /> + {checkOutDate && ( + + )} + +
    + {checkInDate && !checkOutDate && ( +

    + Select check-out date (minimum 1 night stay) +

    + )}
    {/* Price Range */} +
    +
    +
    + = ({ onFilterChange }) => { placeholder="0" inputMode="numeric" pattern="[0-9.]*" - className="luxury-input" + className="w-full px-4 py-3.5 pl-10 bg-[#1a1a1a] border-2 + border-[#d4af37]/30 rounded-lg text-white text-base + placeholder-gray-400 focus:ring-2 + focus:ring-[#d4af37]/60 focus:border-[#d4af37] + transition-all duration-300 font-normal tracking-wide + hover:border-[#d4af37]/50" /> +
    +
    + = ({ onFilterChange }) => { : '' } onChange={handleInputChange} - placeholder="10.000.000" + placeholder="No limit" inputMode="numeric" pattern="[0-9.]*" - className="luxury-input" + className="w-full px-4 py-3.5 pl-10 bg-[#1a1a1a] border-2 + border-[#d4af37]/30 rounded-lg text-white text-base + placeholder-gray-400 focus:ring-2 + focus:ring-[#d4af37]/60 focus:border-[#d4af37] + transition-all duration-300 font-normal tracking-wide + hover:border-[#d4af37]/50" /> +
    +
    @@ -367,10 +497,14 @@ const RoomFilter: React.FC = ({ onFilterChange }) => { +
    + = ({ onFilterChange }) => { placeholder="1" min="1" max="10" - className="luxury-input" + className="w-full px-4 py-3.5 pl-11 bg-[#1a1a1a] border-2 + border-[#d4af37]/30 rounded-lg text-white text-base + placeholder-gray-400 focus:ring-2 + focus:ring-[#d4af37]/60 focus:border-[#d4af37] + transition-all duration-300 font-normal tracking-wide + hover:border-[#d4af37]/50 + [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none + [&::-webkit-inner-spin-button]:appearance-none" /> +
    {/* Amenities */}
    -
    + ); +}; + +export default CurrencySettingsPage; + diff --git a/Frontend/src/pages/admin/DashboardPage.tsx b/Frontend/src/pages/admin/DashboardPage.tsx index 201d043a..aeac6fca 100644 --- a/Frontend/src/pages/admin/DashboardPage.tsx +++ b/Frontend/src/pages/admin/DashboardPage.tsx @@ -3,23 +3,30 @@ import { BarChart3, Users, Hotel, - DollarSign, Calendar, TrendingUp, RefreshCw, - TrendingDown + TrendingDown, + CreditCard } from 'lucide-react'; -import { reportService, ReportData } from '../../services/api'; +import { reportService, ReportData, paymentService, Payment } from '../../services/api'; import { toast } from 'react-toastify'; import { Loading, EmptyState } from '../../components/common'; -import { formatCurrency, formatDate } from '../../utils/format'; +import CurrencyIcon from '../../components/common/CurrencyIcon'; +import { formatDate } from '../../utils/format'; +import { useFormatCurrency } from '../../hooks/useFormatCurrency'; import { useAsync } from '../../hooks/useAsync'; +import { useNavigate } from 'react-router-dom'; const DashboardPage: React.FC = () => { + const { formatCurrency } = useFormatCurrency(); + const navigate = useNavigate(); const [dateRange, setDateRange] = useState({ from: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], to: new Date().toISOString().split('T')[0], }); + const [recentPayments, setRecentPayments] = useState([]); + const [loadingPayments, setLoadingPayments] = useState(false); const fetchDashboardData = async () => { const response = await reportService.getReports({ @@ -43,10 +50,56 @@ const DashboardPage: React.FC = () => { execute(); }, [dateRange]); // eslint-disable-line react-hooks/exhaustive-deps + useEffect(() => { + const fetchPayments = async () => { + try { + setLoadingPayments(true); + const response = await paymentService.getPayments({ page: 1, limit: 5 }); + if (response.success && response.data?.payments) { + setRecentPayments(response.data.payments); + } + } catch (err: any) { + console.error('Error fetching payments:', err); + } finally { + setLoadingPayments(false); + } + }; + fetchPayments(); + }, []); + const handleRefresh = () => { execute(); }; + const getPaymentStatusColor = (status: string) => { + switch (status) { + case 'completed': + return 'bg-gradient-to-r from-emerald-50 to-green-50 text-emerald-800 border-emerald-200'; + case 'pending': + return 'bg-gradient-to-r from-amber-50 to-yellow-50 text-amber-800 border-amber-200'; + case 'failed': + return 'bg-gradient-to-r from-rose-50 to-red-50 text-rose-800 border-rose-200'; + case 'refunded': + return 'bg-gradient-to-r from-slate-50 to-gray-50 text-slate-700 border-slate-200'; + default: + return 'bg-gradient-to-r from-slate-50 to-gray-50 text-slate-700 border-slate-200'; + } + }; + + const getPaymentMethodLabel = (method: string) => { + switch (method) { + case 'stripe': + case 'credit_card': + return 'Card'; + case 'bank_transfer': + return 'Bank Transfer'; + case 'cash': + return 'Cash'; + default: + return method; + } + }; + if (loading) { return ; } @@ -67,12 +120,17 @@ const DashboardPage: React.FC = () => { } return ( -
    - {/* Header */} +
    + {/* Luxury Header */}
    -

    Dashboard

    -

    Hotel operations overview and analytics

    +
    +
    +

    + Dashboard +

    +
    +

    Hotel operations overview and analytics

    {/* Date Range Filter */} @@ -82,20 +140,20 @@ const DashboardPage: React.FC = () => { type="date" value={dateRange.from} onChange={(e) => setDateRange({ ...dateRange, from: e.target.value })} - className="enterprise-input text-sm" + className="px-4 py-2.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md" /> - to + to setDateRange({ ...dateRange, to: e.target.value })} - className="enterprise-input text-sm" + className="px-4 py-2.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md" />
    - {/* Stats Cards */} + {/* Luxury Stats Cards */}
    {/* Total Revenue */} -
    +
    -

    Total Revenue

    -

    +

    Total Revenue

    +

    {formatCurrency(stats?.total_revenue || 0)}

    -
    - +
    +
    - {/* Trend indicator - can be enhanced with actual comparison data */} -
    - - Active - All time revenue +
    + + Active + All time revenue
    {/* Total Bookings */} -
    +
    -

    Total Bookings

    -

    +

    Total Bookings

    +

    {stats?.total_bookings || 0}

    -
    - +
    +
    -
    - +
    + {stats.total_bookings > 0 ? 'Total bookings recorded' : 'No bookings yet'}
    {/* Available Rooms */} -
    +
    -

    Available Rooms

    -

    +

    Available Rooms

    +

    {stats?.available_rooms || 0}

    -
    - +
    +
    -
    - +
    + {stats?.occupied_rooms || 0} rooms in use
    {/* Total Customers */} -
    +
    -

    Customers

    -

    +

    Customers

    +

    {stats?.total_customers || 0}

    -
    - +
    +
    -
    - +
    + Unique customers with bookings
    @@ -190,10 +247,10 @@ const DashboardPage: React.FC = () => { {/* Charts Section */}
    {/* Revenue Chart */} -
    -
    -

    Daily Revenue

    -
    +
    +
    +

    Daily Revenue

    +
    @@ -202,22 +259,22 @@ const DashboardPage: React.FC = () => { {stats.revenue_by_date.slice(0, 7).map((item, index) => { const maxRevenue = Math.max(...stats.revenue_by_date!.map(r => r.revenue)); return ( -
    - +
    + {formatDate(item.date, 'short')} -
    -
    +
    +
    - - {formatCurrency(item.revenue, 'VND')} + + {formatCurrency(item.revenue)}
    ); @@ -232,9 +289,9 @@ const DashboardPage: React.FC = () => {
    {/* Bookings by Status */} -
    -
    -

    Booking Status

    +
    +
    +

    Booking Status

    {stats?.bookings_by_status && Object.keys(stats.bookings_by_status).length > 0 ? (
    @@ -242,11 +299,11 @@ const DashboardPage: React.FC = () => { .filter(([_, count]) => count > 0) .map(([status, count]) => { const statusColors: Record = { - pending: 'bg-yellow-500', + pending: 'bg-amber-500', confirmed: 'bg-blue-500', - checked_in: 'bg-green-500', - checked_out: 'bg-gray-500', - cancelled: 'bg-red-500', + checked_in: 'bg-emerald-500', + checked_out: 'bg-slate-500', + cancelled: 'bg-rose-500', }; const statusLabels: Record = { pending: 'Pending confirmation', @@ -256,12 +313,12 @@ const DashboardPage: React.FC = () => { cancelled: 'Cancelled', }; return ( -
    +
    -
    - {statusLabels[status] || status} +
    + {statusLabels[status] || status}
    - {count} + {count}
    ); })} @@ -275,26 +332,31 @@ const DashboardPage: React.FC = () => {
    - {/* Top Rooms and Services */} -
    + {/* Top Rooms, Services & Recent Payments */} +
    {/* Top Rooms */} -
    -

    Top Booked Rooms

    +
    +
    +

    Top Booked Rooms

    +
    + +
    +
    {stats?.top_rooms && stats.top_rooms.length > 0 ? (
    {stats.top_rooms.map((room, index) => ( -
    +
    - + {index + 1}
    -

    Room {room.room_number}

    -

    {room.bookings} booking{room.bookings !== 1 ? 's' : ''}

    +

    Room {room.room_number}

    +

    {room.bookings} booking{room.bookings !== 1 ? 's' : ''}

    - - {formatCurrency(room.revenue, 'VND')} + + {formatCurrency(room.revenue)}
    ))} @@ -308,18 +370,23 @@ const DashboardPage: React.FC = () => {
    {/* Service Usage */} -
    -

    Services Used

    +
    +
    +

    Services Used

    +
    + +
    +
    {stats?.service_usage && stats.service_usage.length > 0 ? (
    {stats.service_usage.map((service) => ( -
    +
    -

    {service.service_name}

    -

    {service.usage_count} time{service.usage_count !== 1 ? 's' : ''} used

    +

    {service.service_name}

    +

    {service.usage_count} time{service.usage_count !== 1 ? 's' : ''} used

    - - {formatCurrency(service.total_revenue, 'VND')} + + {formatCurrency(service.total_revenue)}
    ))} @@ -331,6 +398,67 @@ const DashboardPage: React.FC = () => { /> )}
    + + {/* Recent Payments */} +
    +
    +

    Recent Payments

    + +
    + {loadingPayments ? ( +
    + +
    + ) : recentPayments && recentPayments.length > 0 ? ( +
    + {recentPayments.map((payment) => ( +
    navigate(`/admin/payments`)} + > +
    +
    + +
    +
    +

    + {formatCurrency(payment.amount)} +

    +
    +

    + {getPaymentMethodLabel(payment.payment_method)} +

    + {payment.payment_date && ( + + • {formatDate(payment.payment_date, 'short')} + + )} +
    +
    +
    + + {payment.payment_status.charAt(0).toUpperCase() + payment.payment_status.slice(1)} + +
    + ))} +
    + ) : ( + navigate('/admin/payments') + }} + /> + )} +
    ); diff --git a/Frontend/src/pages/admin/InvoiceManagementPage.tsx b/Frontend/src/pages/admin/InvoiceManagementPage.tsx new file mode 100644 index 00000000..3d897a7a --- /dev/null +++ b/Frontend/src/pages/admin/InvoiceManagementPage.tsx @@ -0,0 +1,306 @@ +import React, { useEffect, useState } from 'react'; +import { Search, Plus, Edit, Trash2, Eye, Download, FileText, Filter } from 'lucide-react'; +import { invoiceService, Invoice } from '../../services/api'; +import { toast } from 'react-toastify'; +import Loading from '../../components/common/Loading'; +import Pagination from '../../components/common/Pagination'; +import { useFormatCurrency } from '../../hooks/useFormatCurrency'; +import { useNavigate } from 'react-router-dom'; +import { formatDate } from '../../utils/format'; + +const InvoiceManagementPage: React.FC = () => { + const { formatCurrency } = useFormatCurrency(); + const navigate = useNavigate(); + const [invoices, setInvoices] = useState([]); + const [loading, setLoading] = useState(true); + const [filters, setFilters] = useState({ + search: '', + status: '', + }); + const [currentPage, setCurrentPage] = useState(1); + const [totalPages, setTotalPages] = useState(1); + const [totalItems, setTotalItems] = useState(0); + const itemsPerPage = 10; + + useEffect(() => { + setCurrentPage(1); + }, [filters]); + + useEffect(() => { + fetchInvoices(); + }, [filters, currentPage]); + + const fetchInvoices = async () => { + try { + setLoading(true); + const response = await invoiceService.getInvoices({ + status: filters.status || undefined, + page: currentPage, + limit: itemsPerPage, + }); + + if (response.status === 'success' && response.data) { + let invoiceList = response.data.invoices || []; + + // Apply search filter + if (filters.search) { + invoiceList = invoiceList.filter((inv) => + inv.invoice_number.toLowerCase().includes(filters.search.toLowerCase()) || + inv.customer_name.toLowerCase().includes(filters.search.toLowerCase()) || + inv.customer_email.toLowerCase().includes(filters.search.toLowerCase()) + ); + } + + setInvoices(invoiceList); + setTotalPages(response.data.total_pages || 1); + setTotalItems(response.data.total || 0); + } + } catch (error: any) { + toast.error(error.response?.data?.message || 'Unable to load invoices'); + } finally { + setLoading(false); + } + }; + + const getStatusBadge = (status: string) => { + const badges: Record = { + draft: { + bg: 'bg-gradient-to-r from-slate-50 to-gray-50', + text: 'text-slate-700', + label: 'Draft', + border: 'border-slate-200' + }, + sent: { + bg: 'bg-gradient-to-r from-blue-50 to-indigo-50', + text: 'text-blue-800', + label: 'Sent', + border: 'border-blue-200' + }, + paid: { + bg: 'bg-gradient-to-r from-emerald-50 to-green-50', + text: 'text-emerald-800', + label: 'Paid', + border: 'border-emerald-200' + }, + overdue: { + bg: 'bg-gradient-to-r from-rose-50 to-red-50', + text: 'text-rose-800', + label: 'Overdue', + border: 'border-rose-200' + }, + cancelled: { + bg: 'bg-gradient-to-r from-slate-50 to-gray-50', + text: 'text-slate-700', + label: 'Cancelled', + border: 'border-slate-200' + }, + }; + return badges[status] || badges.draft; + }; + + const handleDelete = async (id: number) => { + if (!window.confirm('Are you sure you want to delete this invoice?')) { + return; + } + + try { + await invoiceService.deleteInvoice(id); + toast.success('Invoice deleted successfully'); + fetchInvoices(); + } catch (error: any) { + toast.error(error.response?.data?.message || 'Unable to delete invoice'); + } + }; + + if (loading && invoices.length === 0) { + return ; + } + + return ( +
    + {/* Luxury Header */} +
    +
    +
    +
    +

    + Invoice Management +

    +
    +

    Manage and track all invoices

    +
    + +
    + + {/* Luxury Filters */} +
    +
    +
    + + setFilters({ ...filters, search: e.target.value })} + className="w-full pl-12 pr-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 placeholder-slate-400 font-medium shadow-sm hover:shadow-md" + /> +
    + +
    + + + {totalItems} invoice{totalItems !== 1 ? 's' : ''} + +
    +
    +
    + + {/* Luxury Invoices Table */} +
    +
    + + + + + + + + + + + + + + {invoices.length > 0 ? ( + invoices.map((invoice, index) => { + const statusBadge = getStatusBadge(invoice.status); + return ( + + + + + + + + + + ); + }) + ) : ( + + + + )} + +
    + Invoice # + + Customer + + Booking + + Amount + + Status + + Due Date + + Actions +
    +
    + + + {invoice.invoice_number} + +
    +
    +
    {invoice.customer_name}
    +
    {invoice.customer_email}
    +
    + #{invoice.booking_id} + +
    + {formatCurrency(invoice.total_amount)} +
    + {invoice.balance_due > 0 && ( +
    + Due: {formatCurrency(invoice.balance_due)} +
    + )} +
    + + {statusBadge.label} + + + {formatDate(invoice.due_date, 'short')} + +
    + + + +
    +
    +
    + +

    No invoices found

    +

    Create your first invoice to get started

    +
    +
    +
    + + {/* Pagination */} + {totalPages > 1 && ( +
    + +
    + )} +
    +
    + ); +}; + +export default InvoiceManagementPage; + diff --git a/Frontend/src/pages/admin/PaymentManagementPage.tsx b/Frontend/src/pages/admin/PaymentManagementPage.tsx index 96a342ba..b4f7cea7 100644 --- a/Frontend/src/pages/admin/PaymentManagementPage.tsx +++ b/Frontend/src/pages/admin/PaymentManagementPage.tsx @@ -4,8 +4,10 @@ import { paymentService, Payment } from '../../services/api'; import { toast } from 'react-toastify'; import Loading from '../../components/common/Loading'; import Pagination from '../../components/common/Pagination'; +import { useFormatCurrency } from '../../hooks/useFormatCurrency'; const PaymentManagementPage: React.FC = () => { + const { formatCurrency } = useFormatCurrency(); const [payments, setPayments] = useState([]); const [loading, setLoading] = useState(true); const [filters, setFilters] = useState({ @@ -47,22 +49,37 @@ const PaymentManagementPage: React.FC = () => { } }; - const formatCurrency = (amount: number) => { - return new Intl.NumberFormat('de-DE', { - style: 'currency', - currency: 'EUR', - }).format(amount); - }; const getMethodBadge = (method: string) => { - const badges: Record = { - cash: { bg: 'bg-green-100', text: 'text-green-800', label: 'Cash' }, - bank_transfer: { bg: 'bg-blue-100', text: 'text-blue-800', label: 'Bank transfer' }, - credit_card: { bg: 'bg-purple-100', text: 'text-purple-800', label: 'Credit card' }, + const badges: Record = { + cash: { + bg: 'bg-gradient-to-r from-emerald-50 to-green-50', + text: 'text-emerald-800', + label: 'Cash', + border: 'border-emerald-200' + }, + bank_transfer: { + bg: 'bg-gradient-to-r from-blue-50 to-indigo-50', + text: 'text-blue-800', + label: 'Bank transfer', + border: 'border-blue-200' + }, + stripe: { + bg: 'bg-gradient-to-r from-indigo-50 to-purple-50', + text: 'text-indigo-800', + label: 'Stripe', + border: 'border-indigo-200' + }, + credit_card: { + bg: 'bg-gradient-to-r from-purple-50 to-pink-50', + text: 'text-purple-800', + label: 'Credit card', + border: 'border-purple-200' + }, }; const badge = badges[method] || badges.cash; return ( - + {badge.label} ); @@ -73,104 +90,106 @@ const PaymentManagementPage: React.FC = () => { } return ( -
    -
    -

    Payment Management

    -

    Track payment transactions

    +
    + {/* Luxury Header */} +
    +
    +
    +

    + Payment Management +

    +
    +

    Track payment transactions

    -
    -
    -
    - + {/* Luxury Filter Card */} +
    +
    +
    + setFilters({ ...filters, search: e.target.value })} - className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" + className="w-full pl-12 pr-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 placeholder-slate-400 font-medium shadow-sm hover:shadow-md" />
    setFilters({ ...filters, from: e.target.value })} - className="px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" + className="px-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md" placeholder="From date" /> setFilters({ ...filters, to: e.target.value })} - className="px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" + className="px-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md" placeholder="To date" />
    -
    - - - - - - - - - - - - - {payments.map((payment) => ( - - - - - - - + {/* Luxury Table Card */} +
    +
    +
    - Transaction ID - - Booking Number - - Customer - - Method - - Amount - - Payment Date -
    -
    {payment.transaction_id || `PAY-${payment.id}`}
    -
    -
    {payment.booking?.booking_number}
    -
    -
    {payment.booking?.user?.name}
    -
    - {getMethodBadge(payment.payment_method)} - -
    - {formatCurrency(payment.amount)} -
    -
    -
    - {new Date(payment.payment_date || payment.createdAt).toLocaleDateString('en-US')} -
    -
    + + + + + + + + - ))} - -
    Transaction IDBooking NumberCustomerMethodAmountPayment Date
    + + + {payments.map((payment, index) => ( + + +
    {payment.transaction_id || `PAY-${payment.id}`}
    + + +
    {payment.booking?.booking_number}
    + + +
    {payment.booking?.user?.name}
    + + + {getMethodBadge(payment.payment_method)} + + +
    + {formatCurrency(payment.amount)} +
    + + +
    + {new Date(payment.payment_date || payment.createdAt).toLocaleDateString('en-US')} +
    + + + ))} + + +
    { />
    - {/* Summary Card */} -
    -

    Total Revenue

    -

    - {formatCurrency(payments.reduce((sum, p) => sum + p.amount, 0))} -

    -

    Total {payments.length} transactions

    + {/* Luxury Summary Card */} +
    +
    +
    +

    Total Revenue

    +

    + {formatCurrency(payments.reduce((sum, p) => sum + p.amount, 0))} +

    +

    Total {payments.length} transaction{payments.length !== 1 ? 's' : ''}

    +
    +
    +
    {payments.length}
    +
    +
    ); diff --git a/Frontend/src/pages/admin/PromotionManagementPage.tsx b/Frontend/src/pages/admin/PromotionManagementPage.tsx index 15278fb0..eb665886 100644 --- a/Frontend/src/pages/admin/PromotionManagementPage.tsx +++ b/Frontend/src/pages/admin/PromotionManagementPage.tsx @@ -4,8 +4,12 @@ import { promotionService, Promotion } from '../../services/api'; import { toast } from 'react-toastify'; import Loading from '../../components/common/Loading'; import Pagination from '../../components/common/Pagination'; +import { useFormatCurrency } from '../../hooks/useFormatCurrency'; +import { useCurrency } from '../../contexts/CurrencyContext'; const PromotionManagementPage: React.FC = () => { + const { currency } = useCurrency(); + const { formatCurrency } = useFormatCurrency(); const [promotions, setPromotions] = useState([]); const [loading, setLoading] = useState(true); const [showModal, setShowModal] = useState(false); @@ -127,18 +131,31 @@ const PromotionManagementPage: React.FC = () => { }); }; - const formatCurrency = (amount: number) => { - return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(amount); - }; const getStatusBadge = (status: string) => { - const badges: Record = { - active: { bg: 'bg-green-100', text: 'text-green-800', label: 'Active' }, - inactive: { bg: 'bg-gray-100', text: 'text-gray-800', label: 'Inactive' }, + const badges: Record = { + active: { + bg: 'bg-gradient-to-r from-emerald-50 to-green-50', + text: 'text-emerald-800', + label: 'Active', + border: 'border-emerald-200' + }, + inactive: { + bg: 'bg-gradient-to-r from-slate-50 to-gray-50', + text: 'text-slate-700', + label: 'Inactive', + border: 'border-slate-200' + }, + expired: { + bg: 'bg-gradient-to-r from-rose-50 to-red-50', + text: 'text-rose-800', + label: 'Expired', + border: 'border-rose-200' + }, }; const badge = badges[status] || badges.active; return ( - + {badge.label} ); @@ -149,43 +166,47 @@ const PromotionManagementPage: React.FC = () => { } return ( -
    -
    +
    + {/* Luxury Header */} +
    -

    Promotion Management

    -

    Manage discount codes and promotion programs

    +
    +
    +

    + Promotion Management +

    +
    +

    Manage discount codes and promotion programs

    - {/* Filters */} -
    -
    -
    -
    - - setFilters({ ...filters, search: e.target.value })} - className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" - /> -
    + {/* Luxury Filters */} +
    +
    +
    + + setFilters({ ...filters, search: e.target.value })} + className="w-full pl-12 pr-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 placeholder-slate-400 font-medium shadow-sm hover:shadow-md" + />
    setFilters({ ...filters, status: e.target.value })} - className="px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" + className="px-4 py-3.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md cursor-pointer" > @@ -203,281 +224,294 @@ const PromotionManagementPage: React.FC = () => {
    - {/* Table */} -
    - - - - - - - - - - - - - - {promotions.map((promotion) => ( - - - - - - - - + {/* Luxury Table */} +
    +
    +
    - Code - - Program Name - - Value - - Period - - Used - - Status - - Actions -
    -
    - - {promotion.code} -
    -
    -
    {promotion.name}
    -
    {promotion.description}
    -
    -
    - {promotion.discount_type === 'percentage' - ? `${promotion.discount_value}%` - : formatCurrency(promotion.discount_value)} -
    -
    -
    - {promotion.start_date ? new Date(promotion.start_date).toLocaleDateString('en-US') : 'N/A'} - {' → '} - {promotion.end_date ? new Date(promotion.end_date).toLocaleDateString('en-US') : 'N/A'} -
    -
    -
    - {promotion.used_count || 0} / {promotion.usage_limit || '∞'} -
    -
    - {getStatusBadge(promotion.status)} - - - -
    + + + + + + + + + - ))} - -
    CodeProgram NameValuePeriodUsedStatusActions
    + + + {promotions.map((promotion, index) => ( + + +
    +
    + +
    + {promotion.code} +
    + + +
    {promotion.name}
    +
    {promotion.description}
    + + +
    + {promotion.discount_type === 'percentage' + ? `${promotion.discount_value}%` + : formatCurrency(promotion.discount_value)} +
    + + +
    + {promotion.start_date ? new Date(promotion.start_date).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) : 'N/A'} + + {promotion.end_date ? new Date(promotion.end_date).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) : 'N/A'} +
    + + +
    + {promotion.used_count || 0} + / + {promotion.usage_limit || '∞'} +
    + + + {getStatusBadge(promotion.status)} + + +
    + + +
    + + + ))} + + +
    +
    - {/* Pagination */} - - - {/* Modal */} + {/* Luxury Modal */} {showModal && ( -
    -
    -
    -

    - {editingPromotion ? 'Update Promotion' : 'Add New Promotion'} -

    - -
    -
    -
    +
    +
    + {/* Modal Header */} +
    +
    - - setFormData({ ...formData, code: e.target.value.toUpperCase() })} - className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" - placeholder="e.g: SUMMER2024" - required - /> +

    + {editingPromotion ? 'Update Promotion' : 'Add New Promotion'} +

    +

    + {editingPromotion ? 'Modify promotion details' : 'Create a new promotion program'} +

    -
    - - setFormData({ ...formData, name: e.target.value })} - className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" - placeholder="e.g: Summer Sale" - required - /> -
    -
    - -
    - -
  • z*Aspz%v>m36W8P{>~Co!^SiUXNy9?<=oo4g~hjw*}6cJrFsz zfTIu}3ydK2EOcnNtfZToOGBV=&?!FK8ho4rbrR}vTGlCip;#!`*7Oz%0OcL-CxYFW zw)BLy5^8EK9I&;cSvzf@yILD-i`JfYpu>2rdkLOQ)Pjjz{~o*m#@_)NBm;FgEgHH8 z^H+fE!k6D(5VB$5ec)S0$~vu-4fa_H1l|Y1k^$OUFs88wi!eFmi!c(c4F}%CA`Lg5 z)9~OK`_bh2Anp(GG6+E_)6=K{lo%RqgHmKSmLq{?;5-BZCMaJaZOwyg2tF6^obI*~ zN)qbwv5R~AT8pyM9@RXn1+>kFD8mP@>)-cT$+Ba4%S8jgb3AVGo)3m&NN`(#@crC} zD+x6JezLOty?BND6lOuZ8*h)DY@2PxmI2CF>F5bH6N=-(vYh?onZ_1z4mG-iC1Xe1 zp|DDz7Fq~sfU9(q`CX6qDd}BnXt4l@x<_6Y??6H?C^fPlCT@o zb}~adQKcPd1jlK2;+3|O69AN(4ss_&Cpbu)shjlgCP%9qpByEGYfk!OIFC6YP1=r0kBX9uYst7)A2iz@fd*{n~=Bx-sw`lQXT>Enj*fm*g%ed$6&R_>quTU@v49) zz&Ks3;#;oF@tFCI`ciyz^9ubth``N<6#O2VM+I4yzb;AgE%J`wk)q6 zy)uxH4(y>hS$)tLNI(WJ6oIz}5|F`INmf4v9>`!~3V4tKGFVq-_0R7PBp`#CimZMP mIFP}@2=u)=kbn$UU@(;DV}jrjjKk&c%OLdb*Ah~mwf+O%$Z!$> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_source_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_create_source_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c3fb0e93f76f93bedfe1d05c61e9abec6cb3205 GIT binary patch literal 814 zcmYjPzi-qq6t)v5&6QqT1gPQ!6jdx4dJ%N3749*e+tv749F5WCV~j0!GADOqHzzTv?r!Gge(Yo9peHCHA5h`}{%m4ei5EtGxbVxu5bNdF za5Mm^UY085g$x}{cGI5Hm3q-TBRLT2FNtpO(pP>d54J8uxUK)}0g zw041?;B9j@tbPGJ@ZLH9an6kMjGg<>E|_@|s~LHruUnmgR6GaK5x^Ae@qy^UD<)Vj zwGYFR6^RaVP%L4JX6G7P4+p@KA{VP(bXtAFwctm#W30hd8l|9J>?3r%^l7U)1n{k zu-+jQNpuXwag?R|Q8`ivyx3|#d=$x4!DeX;SRZ6$GNvU&WmQ!~d$WpZuPT|=HPM=G zmm?9F{MBZGd}g+f=-blTn2h&M8syW2D4?QYv^yJx3| z10cw6Al$ejehMeV1+|1YaN;&-35T30Ka!T(UzJ_1`l@W#FSl+T68y}6Z}QU@eIlZsSHL)v7KBu*YRqjtO)dwJYU+H{e&*&<8Gh`dLt$#gMk^57A~LYr=?z%!u#G4^PN{~n?gADxViB=| z!Z|FKz?U833OZgQu3933Z7JD5xc(iH>@YX-NU&A0n)bg|)H60m=&H zqI@m3#cR>jLxu)dXqc6lEk~c_8c9?hJ&7`AUADN6Buf!umJ)ThPe*+d_E!vy#iS|; zx^;;Lo#Wpj`Ru$gExmhPB2hZhjYzr-{eb@K6~<&$6Wv ztBB4Y(rW9d>rjz)3wntaXnR;{WQoXKg%FKnDPnvf{l2L~$#8>EfOipb7t)b!aI9D; zsfvVkxF4A|fq?FS3*3iTD-38NQL_qu5IctJhWmtP#+6qviZdFPt|Z1CCQ`HUCfdtT z8XFJWUI!+27qE*Fx|m95fH^;1ADDLW1t9v;Z7>6O2{!RE?c)Ajd|JEkawfJ{Y)Ch> z>DbfxY?uKE+A@IQ5TKP+*EsnY;HsldSkW0iay`Le7#pjH+W=GuX{ql!0NS;nS ghy6H7k{20C9{fSh{v`MR&Av>M*^ehLh(o{se~bl1k^lez literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_discount_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_discount_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fae35cf03a67d12bd531307af02e4d0c8e06678 GIT binary patch literal 484 zcmXv~u};G<5Ve!GYD>!q5@JTm&|1(Hbtsi!0>s$G3h}9pn%JrBR8*||LswSB#CPxm zC@T{iQYk|x>^R(T_n!Uke17lUZX20Uzen+#sh^hoN4)}@69d+WA%+u_;t9scLzjqo zPl)+|Uwx;Wc&l1a|FR^&#r_>Ea!~pv)3M+xavGO$MK&D+)(Fr9Gi2Iv;1$OgxzZv9 zIfeu@jAIpvoa@_AhN-#^{Gv%I4^yDDXj7UBmM0c>C|%@X;%;8h#=fw7Br`LKO!)&D zgPLoRkt?Ag>5YV#$9zggVKfKM$P)OHB=J4TR(dA*pnrNsRIH(w89_J&MU<9t1|%!j zAT+9$q^#VMvT9B01pRC!t$Sr^7@#bBLLarJw0@W8_A`fWZl6l$78TAeX+3o#S{9W} mdj{>A=kCu#*)`NUsSZr~_A$oW2Ev1%2F9)D;TD-v_Wc2(bbyKg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a452a0b67ebafcae4b0d66cb40303dfd9832c424 GIT binary patch literal 467 zcmXv~u}%U(5S_gP0ti+{6FH%yo3|IpPPGU&Nh!F7L7Pz+p z?jw2gUEj!CR)Xr6B>^dppKzX|(hr%AM5@NF$3=1=+m-=qKo}7YW}F0GadML@EfSPN zj8WrbD8oeE2Yyj!EDaN6tY|Wp2%g6lw-}q}VeEc3u(is2NvB4EPSO`TL^abQqjy4M z+!+Wli_!@lgyR{eoGvh3&^UUg*-}qM+Us6kQ59+IWTqjUprT64C_|c+Yfv^mEXR1c z9dq?=wv^VaGSm!EmaX8UQkT}=vTkoUb8=lKojFW6ccit@Ni-}fhmH)|*RS2Fec3kD a8mCT8`1T1QyBd(*PmPeqYkvnOm2-azYk61z literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_source_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_source_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..910faaec8699539cb2f605d16628c39d1dec150d GIT binary patch literal 651 zcmXw1J8u**5FYRAmT*ZxLY#;YMMQH&&Vsa2iVz736c7>3Hr8?;T~@biZ)|UL+rw{2 z=x7l?g$mK2l~PgBMLI%}3VVIA4;#O~!*iP8gGJ;~kzhsLh+&6jEsW z61^_8vHb3lG)`G4Jw!b>vZk-3!E)z7%6TDX^dO(kQE+;O;*6HX z2U@r0M2g+Xv*%P726t*}kk3$4o2ICd)_u8@O;@cj-uJ?E-wgBWN!_Y}tI(0uUj5LL zPw;Cvx`-~0Ki~N=-2NGDUj;#&s?A$N*Zat)nK0!y!lYk`a`WyI)7G|X-}rqmFkBcE z+U?CxrBA%!g7%T`S#*=``8n>Z2UfIy3iM-3u0le{bpmAf5=NIW{+mQ3{qp1*EbG1h E0}F_+S^xk5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_tax_id_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_delete_tax_id_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78260a5d186ca7cb8480884dbb79f3afe12510bb GIT binary patch literal 479 zcmXv~u};G<5Ve!GYD?P@1RsEup|zkZVkk(!0thj6u}pnxqb6}`J5{syAG)$4Bz}Y+ zKv|jCkV+XkVaLV8-Fv>fr@QywZa0y6>h~yoGx^h!|5x3C^|1jf#1Y34it!L*H~gMS7OUI9FY1&gECx!8CZ)09S!8jG(pknLS9w8eE5FUj#K@3wvLKhB zrdp)rT4;#610kkiGA08ynnJ?K9FjSS!Y7jEdLoj3@8p!IP(wF04QvdGC@sSjNLsEz z=xDbg<>iW0vjq(~b>&`~OKV&iY6d9Fmgu8Wm)7d?-=1>dRC`o9qo{CBNo%K*XjoJZ m?HRPKpSg?AW!q3|qS`m%+s7DhY6$m#Y8W@3I~!zDIrj%7lYR35 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_fund_cash_balance_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aa1e9d5bd1d41ad849a9398a44e853d757b511b GIT binary patch literal 776 zcmX|9Jx>)u6uq-wZ$a=Ont)#+p?d{vkd_bwMorYG(b&9ZGVER+8+K=xnOVXstkB;8 zcDBYpVQ)of%qCP;b|i=em3MX@PBM4SJu`E1&z<=(Jv|9D^xu2wcMsr~O|FMO1{doD zjv#@AWstK0V-`D^le+`A!EWZ|{=jG8z%xj^kC6DtzPauFK`;t>o!>U;vHIp)+^bNV z*QH4dsfqDkrrOYYqhA=inJP@;_G%l)I&jga{0I;REP;XZ9?(TEVQa)r0Q!WTF%GbU z{$1kjB;NhcH!LxpWk!B4s2^@t+7vmer%V zP=D{FyETOVG?VG@C(7suloyC0=5$fdX*-V5-LBj7+FlR0anEo24sy|Fh3hPnTX zSNXPyMSVcY3|g~j4bWf)4f^$P=`Z6LIvO9Ost7$@J4g#Ipg=ep(8aiq7Xk6|zi6EWLm3No#HDT= z!i*NvX^@msa*^~k;U{@4m|i)m!qNhAZ-s#lC>3#!Q>vFJ?PaX&8hwS*$7S4|tgKNQ z3y~GEJtZuAaAs*bD^0N^2Jtf*fkdyrj~+pGQAeCa_qaMPvOL<)3f{f8mu1J0Z?qRD z$6T=J2^UYIZh9Ey{o+w3Zd`x=gGfP}uH|45cesimNSgB~xAll?B}^?0WF2{3_95cr@&<#Dg1~v>q z*cd_l70gUg7Iac4CbmeS44rsBCl!|N`Fr2q7cU@!2!k^Td|ecfn8ubb`m#mF|yDL6gnSJ=ra7xHu-@!^ctn#+G*f?^$k1i zGpSx>DoVKo#yO0nf_qJ@V{VA|VPDdW zXSg|U-SDM3W8W}~Tt_oQx8dcFpY^3m6DG8z7L6(Iuy=xTNjrtw*Hq9%=2gbShB6PQN zTPl&S5kfgn6)o;0M8Ly9DB|iXngK-D=l%((^t*iEKWDP1(#(IEDi-gy(zFLR`z_k( zfk^+1@iRY;j{Iz>PEx+teDc(nkz%_U9H3n$eYh~nn4cAY=9A960VIYFkR#IqqW+-&Njsvj)E{0D&05i2Q##bJ~dzYwwi5h>rTe$qCeT85vvi|{x CPT@`f literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_cash_balance_transactions_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_cash_balance_transactions_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae058f00928ca88b87a8a193d8a068303a1c9926 GIT binary patch literal 834 zcmYjPy>HYo6u0wr>BqG|i>^?FP}?O#FM_UBhbs~c)q(g}vRH27wowx&wSCpy4hs`o z%f^aW_$Qc{PPd>)otW58DrM-zb9`4}DbK(6dw$O^KffQ%<}89G|K3l(I|%*K&UCpG zaJd8E3?(SR8Om{lvBp+r<#uG(*v_2Xja-Z@^b94=JCwK#f3;11;x~cpLT^ z&3J~J@YW6Am@xJYGtG50GjId13U+%^6*&{SrClnIIy9p^W^V-LlE!t%FR7rpteT7` zDL*9p?4S^=@>sv5JgM9)%~Mq^NJWLxaeAPb=mvh}6T)fE2&rZX$%~|yX*^HJNsneG zBDCU_EtRMi389=9iq>}$BH(c#lydb2T>?bcAHpN(G(6<}@F|nWswl(fg<{!erzno$ z=CDKKV`wrwW&AYE(*3X;sH1{!wI4qTWvbX_2?yvQlObG~mMkpmKMP4b5rJf&0*OHe zvTt-C>OUcfIo~b^q5%!n#s?txz`RF4mmZ$W;nMoZSsz=L>yJIuTse2nUw@hz&aaJ} zwJAH_`Y4BUt0QN1%G`bQ*&Z%$jGT>{5lhqZ-JnsmOt)&nZ3uKjKECOcvUTnwLl0A_4sjITU|w=PiY0tJ7(TiE}$ KaD`y2v;P6eq~xFg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4302460ef03e798ee5c53f9af9592c7101236fb8 GIT binary patch literal 1318 zcmai!&rcIU6vt=wS9c3Veo70d1W2?8*eD((Asm224hD^2VtSb@-Jxu{znGa4YP_j; zZqyrBS{;)NGn%>z52ELq6~l?>8`I&tv9AAr(Y>=22Ewc;9Bk^Vx&>sNWI5%U1Ib|mMwRK zn36QDa-I*bH7JV$Oyr(kIK&C)n>#nz8o>_3?prTpJXcL8T*raq`MiKb*9&WC2k%A% za|0j7PUv#o_X3ac0m>Z0QC-IsrzA=Mf4bx8X~_AEEt* zjG zqPnQUUUjN#x_M⁣o&2jdJNCUBEYF(YK#0{jO{pSijAt>Mj>Bx z3Z--*ZW19+kQnLEcfx!C-wMUAr6=veQb$`lRTSMkH9-IP5pDNPcC^WijNWU}_Q-5U zo6Sg}*wR{CAFX!(Oh=o^=*@qQO`oXk(YcN`m&FWCwbt5$(;aO(A!IzO>hEgY7R%Sw zh_ysNx(j=1$;g#HGjgTRj3oMO>ScqM{;3|W)EHN540FX7j?eIB*&u_m(jjSvrICkC z#-tgM=C(A+W{T3A$jp7=&<$Zkv(1sCwYFL8XvM4>`LUy|wpHqArHojk|A|RoBJ*#S zEk2$e{sJQD6!z@=*k89mNw#XE9BSyy0lt6(PF( z5&UO}qH$25aqDYDLmCyq+kpCy#zpHf^j(i9DwNrb~Cd9#mw3b54l{!>eGvj|eXbEGo&V6xbsJQo&~VnxmHi;ffDzkxOAo4%`{z zoKY8LoK3-#oLcFkoan-}b7GE(QZC8$LIIrQbzIyVO;0t>2nR0eLaK}lCu;86M@&mE zpnarC=8c#Y6zZTmB~v16ZON1qEr@GRrO23IU}#)#8F3~+MwwvOUT|rX(NXHNhx%5&DC|ak+NXVykv6(S*>|#4(AYxdV|EucF zXnsr@*6@@m7ukiP2cxd*U@S;UF?KzSOIcLh+Zz}^tq5;MbOLp${S|gYjENA^f)u!I zFflY%>&OpT!H$4*b^b=~PR;u(fX(@lOE9DfbEZrsf6bdpuq2eUv zEKAh_s$1-AJ={(WRPzG`6UY%YDeyBzQ&pFJimwvS;b!=__^W}-=5B!RFUOWz=nlxJ z8*i8&p!puXxOM0G=I^5?%lG$|xAxDY{fkyB?p!43=6h#mdE?%BbZ?Ce-a3oUzWTYl z+_-xl-Cd&_n?IRl|Mq!wdyN2NxV(A)Ji5O|`ftAI3@=&_2RB}ZJKf&P@KHaxM33U+ zf(NjhezF#JFzUF?=5$+dPwT%Jmd$TW`(KkwAV(0aCcM`h2h+Kw!uaUd8EJA;pZ0Ul yT+{D?^}6%8$>vA;5ZnMh^DZldi{T*C)&>d literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_sources_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_list_sources_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d0eb10c4cad5526a59f6f4544ecb79df7088407 GIT binary patch literal 844 zcmZWny-yTD6rb6zTi_034uZ(V7@)a=+bAueKoczt8i~ynPL|sTEVsL}%*>IyUVA&R zqc#31R+nqcCRA2-mmn5YzS+5@aguo-zxUp}k9j{Djd_Ac{(T&`Tta?nr8=mW=Vlk# z1&K&R6Oz&{rCPQUE490JDcgyYx?PtNi@YL{^NB<*(C@Yh?|LJzUHh$-HZ2z4!`T3& zdYh}5XA%+TO)M4ig?+BHF%}T@OsJu=cgRhG`UL^fr4i{`9|+jstRe<(M0b$SX~Z+w z47cv_+6=Mpkt){t4{I2wmg>ABY~vccBPVSu`Mv;_R3m!VwoxcreVv zEGpb2PGePg{O}Zds#ugN6iWMrM+(G#+b?{^vM>e4ih0IT9t{#L*BLt-go&{TJ^R9z zN)!(m3$u)?u$&iT!YNI0roNFI6v^E%IKc{o<7^nb1ld}&$c_yo(D2ku$7}jcnmVYgmDf*UUnF;-mH0+VE0U#_L;GE@{y=v z`jYr4$d5=qlb_8emvY?Pm^d3#%X0mxM;ebVoy&u-bL0B@#96P<`pOqMURawrYZZci z_PE}fIIRj5#_8iRi z0bHOEg*ZkD4lq{Oh>gSy%nF;amDquek%6A0(E5l%o8j-Kjt`uno5`$^h!6A${BGM9_vso=Xua90Q&+l6yOjA#(Ts}X59mh*&*Hoy`&gN zb93If;cIioykQoxmSTps=alWI10l17aaGbgTD%O!YszUN$_7irDD9CWc9L;cI;_ZP z8kTk(C6O#wg``|6KRuC*cRjas2}xns5Dsqvt|*n?&l&4v`+j;!N7m;K;Is8C-O!#nNlrulCI`hf#yk``@ z1t1PVd_upP4@Y9$+?rThQ^T;`se>Brku`ezWocaBoLHL+w%+eMf$E+D_gp@4&i!BNT%0>s~spEIn1F|J)GOxAgquq6>68NdFpcSsH9cq rbwJndo_>LS-UbuHCmw*9ni%6N2jSgI)Vf68U*{HfM<1>bs4DtDYc1UuSmXOXl@^U;8>=zxMm+=n#TXf1AlC7olIa7(}fP zE*=9oMhr2Wq6|kETkNDx=0$mE^ zEo@;k_JSXDxYExGo#aBb9OJDeu{PdDqBKNDFC1zK>C1wPE4I_^(LlIz3Fqu zsRidg8l61xPPRTbdLuKZ-pqg*0#2PSD4q6bD)7@k3gC}n*+j{89H#6IUA{fY%cb>eNJb9nw%lP;Rf+l{=#iu4h-}T33 zvxmXpH3Ww!LJ>|-iUW*wY$Qf%24)$XiIv)cojQS&)`A*F26~Jl>n)0GhCjo9bqm~* zb%3q0+7(;xx?cT^bE$70O`;1bdx*d{KRUz8{G zNjNNl76>&UArygZRaGEW(o)gob*)o_3te~s@6hSk%#n4p`M%y8n?JGU`-Wk=eFrt> zj_1~U6U`H=SyFuZa_zq@T!87nEsXG$g?40=hMAtlM|D(MJ;bc%~YjcBD}iuB(E+#*SA+WvRi<2 zmHAWE2Vn=2WkSCUUTP}U)gZkxpp^5c#0z(&x>}F8mWQE>I{a*!_^5AsEhXIN1FdpCcGb)xQCRA`@N! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45595bb8532e2dbd36efac29f8f978b601f3614a GIT binary patch literal 4947 zcmc&&NpIZ96(*b2Y)Y+Ov`ekkOQLC5QrptRhLc%5Ug8BFIk25WWC#S^EL)7(WKWST zsD%It;N*}?;M*uS=jOp&a-4sVLoQ7)2cs?nB&XaIs3!-X@~X(9D2anOrwHJy>aSic zZ>jfQ>93{Ipag&3ziZaZvy$`=_Cx&T7TQGo zw_@j8>ZaN%Y!+JDrY1`{>9%B|-%4g4%U>(eTAKqLRRJwvEkOr4ssTEXLW>+71hkk! zhd4R}Xeou3I9dj@l0wTItpYlnLMt2{0dzElRyjHb=y(bp=I8{VlPPqhJ5`_lCljeI z)AB?7MF)HSgSKzEj#tl7bkl136y3Kxzpl{2eapwhuxW9_^%<{4ut^6VciY%xjLlfh zyovQB9lqi^$I_;3N}IW#OIR`GX<)&~%zXsy03bLYBZ@#w6eIZrQDdYa5G)Yw6f$rM z8BCBuG%sGQDDY&*A%P_8mjq&#<5`sism92#K$2M_2_mE$O%QSNu>?7Os&Rpv6Y=_! z0!h}NVhCt+I_9Ve4s#|(W(9(^7@1>8cfP(r$8K~y-)&*?xocX_x<50B(en0|ViP}E zTH5+m7RP6%NwDY9f+0Fj4cl;<_+2GE)$<80J?(gw1I)T(v@l)BTJDD7ZC{TTphHdg zp~uV7vWcG=9oyGEw?mqk7ESCmiN#%$=5fogY^vhjw&9qxVmYR@W0@Vpj`k{B&W>v} zvEC;5nYByLW$k@8;(3I9-*TRNv??ZfF|t=ni^M$q3COj)2xN+45Lz)b?J(0qH_bub-f2f+mHi*CD3!^Ym;2kFJL&i82BYPaEJRP#hnjg>K(#sApY zrHXIt?p;i;ob>T7ZngcT<;5ijPQ+S*cQEnr(iRWiMv(vDxr;T>k2R*K@URrB- z5QJ9Rz+gPbUIR9;+PKl??%U9tu~W0Nf>-MizS`~*mK`|JpyT}-g3|A#x237x^!1>0 zBSbe2a=E;Api1TG{n4N_7os_Vj4kvQE(W8QLUc($qw~G_PlJ(bA-X1@@x|9lFm^sf z=MQo!tW=gp=Jp>2!)HQtM(_+xzVd?NOo(O#QkvRF`;Y!O5Dc9S(OH2`oavoe3&z(& zv@W3Z^3g#j&-TvV4kqq|=#F5j)OxkcLHSCEt_Y|&@v0dN)_l|A#ch_TocGqCJ{)INs?LU)T|`8 zBs?mQkA=EMXR@xCh<>PP`CVFQx*f+SU7EKc&RvR{HCk-Do)3|z>6&o=p$k{(E0vsQ z;{JeCvAD!Sx?*YH1b~^Gdc)6L$+z= zVdS`Jj;HjlQb(i$Omrzri>aWW1Yb=A-Hm!aQ&m}7Vq5Tin6G%FKtN07>0a$dP`(+W zn+G{1uSLQz)@)&zU5*O_l?ks0f1x|wdkHYAMv20m{N2naZR{;gK&Rj&rxkN>6Q zYU-hs%c}<}M1@FH#-AT$bemtskAmRulH6g0_oA(OE5-nAszK=r_i#wS_k zKaqDMmY-VKHn(W0$pg6ljQ#ZJgeU^qMz@7QyO4CZU6ZQMT*wz>@6+^#@3GfINGg~> zhKWmDI!pwjyHVBqeOHzHAHT0Bt}2t9i~oD*cn^VqjYj9+YWKi8V=3!Ea+&+!jS|c* zhiF;E!=nHykg0QTwYxBNDm67SEZZsDu-QI*6z`6Fn6AEuno=eqHQ1Eqp(f~n`<}X* z-y6Vg!!*LkYxuk=AS{5DUfvaA4pm;>8vr3HBa2P4d_$t6bC7+GiJLq>iCWP>pCozw}R$H-sU z;1x!A#lWC!K~FkC_S@T3reOv4LFP-GfGh$)N zHX+SnyGw_~>w&*>*kd5W^xWXw{yg)YFg@Rwk-x(yOkbVp&8`I1)ex-;2Y@2=O7Ft` z;N0iI@2os*~tH8zRUP1sJI6ciH=jAovlzQidZ0oPyh{tE#NMfj%_- zkum544>bK%P1gSWi@pR+e_~M9z5yJXer*WmUhPZJ^ygtQ#?RLT#(nEM#?SrgKjlHE A-2eap literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_source_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_modify_source_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b01470346ea4af4fe37d1e8f4c0535846e43159 GIT binary patch literal 2249 zcmb7_&u`pB6vxNAvtIA7Y?5u8?1ua%tt^pPO$2RGi)bhXq>>_1gxIRGj6Eb){HwM% z#1%)l_r`L|5yYRuC6+lU6dDphZJ~3$NQRESW1?t%bGTYk?I=LjUlM&Pw4Ajnj zg-D*@Cd80}A>4+x#E59*80+zTpYupOLJA{993jOKB8`yJ2q}+{N}m+7z4!K6<=m+C z$QUR6GuAmV#(Oanj6{=igSI~E1fgpa|8v(czl*lrj<1t1G+(m=+R${}?Kq*j>ski! zRY$W4+(=P(ZBKI|S~eZS+&7I5+{fA25N?E4HN)^p5U9EtMzr4Vu}S@i);O?Chg=`- zt`E9FsD*@9cAkL4dYH0tFT{J)(H&wJECJyHd7GxKlMq zFICNk*SyGQVvrgMoFEUc<0tf@`S#&<+>{e6ALnuf=~zUqmBX)(R`10tAIHu63BJ#H zW3H>mlS>I+;^fNWVI#i0lHe6iF3op?xUrnz<^Mw_XS>_+#A1RM`M<_zx*KtQKEd;x z)LY%~|7nqr6W|5inpv%l-3#aBoaDvakKq1to zkD7Pm+Gc_`2Wfg9#Fd!@&v0^HDu-gSRoDXOr}F?thSS;CtAQqS?HweTlR<(x86=pK z3-mcE%96hV%Tt`{66jf`M}(q^4jJQtM5QgzoLw2+F>Mfpury8ttu%`aOeU1}Sg zzybsLEnhxcg=5WbBd*ORc$TNPIyIC`c#NZD^s$_Y$*zFyVN0&ksZ1r-R6qN~s&4j; z_1R~ViXhk^IzEO@DpPbKBPuxvi4!mt%QP&lC?*`4jHD%$o^!aiUQ4$#k^I2lfMC!V z6x;-JoEHS)m579mmuU7Sx)Y;2r{cT9`-gL<2%1w*7#E~N^AtgIdUaZme*NYZf+ju8 EzsY4Q^8f$< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_method_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_method_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89c1654cb6556ea4390c4099fb6e244ef31783e9 GIT binary patch literal 1440 zcmY*Yy^kC<6!+|W?AI+vl!OE#5lGT(k&JR7O_WfCNFZ`|M0_;cSe_a0t+gK8u|2oD z*Q5aoD!Lq9TEw41!|IyI4Fwh5Mn@>F;(2EGBu2Y_@BQre{PX+xeK6=D_{_f_u(Liw ze|cl`#cSpC0Vpp~fr@~mG8hGc*IT?*hNG~IMo}4$;sCYK=cow3M@2;A-@?Xslq}+5 z^0zmJfs1yTvBS`{cbTP{aM$0L_G|jQVwx7N`|U!};t9)b-Z(ewIubhl3GA1MqES$w zQR_QILmCyq`+)jCjf>VpkX?@_Ya~2J+6}hGqjS8oM&fg1>jlfS@<_TBbt;3UYZa-BMal&oR#qA!u2a*6wTR~fw4_Emop5H zXGU?da04m|CJt~$$5K<5(77U_aB=PJ-Z7SF>-WhR@;BUZJ(3%P3z{(tSB=L^m+nHn zsmKE7oDvO+XTiLT2rmgZmE=eY?2!Sf;Ie!ZqnAOzbv)2TE`=pI#LgJ!jJhb}Yzmg- z)JhlSL>I1|6Eh)7xg^&M1#ptrX>sp1l4_h04zZ{UsWL7ctGR0*FfBcS_JJmuS7KIB z=!ou=Oo^8fZ zZE*w~#1xY}mzA(ClJmKAq1ySx_2B@{;0OCI1|x?TfDm$4O9iAt#pbT7v@DhN@%ow` zN?zGIc;7&&D=3QJ=@??6mY#|MMw`+Y3H7utHZx`>F19lUB(^K_e^$L2%_pRZ8Xhs_ zA`26-KkT{=#)6a-W7osDltsn8zJ>AgituJf`)Sn?EN&ZPB80R+MG6B4Lu0k}bL2v} z_*ZlaDmr_SPM~?y12IpZP&2hsrC&%(`R&J2PNB=v$0VOZL#BsR9HyLQsaimTi+gwO z?xY5~`L==s&qX#y7I^H>GI><<>kGTXm8bO#hq1xE?qx1%ZoQpqMI9JaP>Gk{^pnNa_h!PbYp{V zUHRE8``1pQYa0Y2hRaL0PNG{Ir2pRQ&i1NxcX07dc(2=g6W;G9r|5p1tat#o>8BfF z`@^Vws*Bt1K*JF z2OvI$3elixD5&TnEulz-z1~>z^*Ofh^*Oe`t*@_vYv$j5u}c7cdvev%C7ACza0(na zsh}nWAs$CnRL4bJCq+Uag6F{F55N;lzQ!T1NZT~e{&$0#|S zqMXu7yrZgh;^gD)ok!FNi(ATVC`V|hJ4Ps^Y9W`h;nEXR!4#_(u9#lha`WETwrcf? z*Xo1s=C%tT;b;HOS#tLJ)9UyB=8t6aJc`nu-niO0$g?i9t#S&3$(w;NoLQ8{dki<= z|3RpK-J?Z;8xCFe_QJ(I)wdjV-v^9;m-Cnqa*+YK`wO1@%@Wf4oL_(&7ODRM>N%(h literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cb73a9015aabda14ec47fb0838c93354c01524b GIT binary patch literal 786 zcmYjOJ#P~+7`E>#my)y~KtKly70V6HiH`|Y3{Ay{Kv6|uxdF?~y-iQKJ6~-lN=5|y zhNc@Mh@Zj~l>vESU}CEjKBP|AcM0N^Y(MX({XG8MY%U>f;`eIu&_?LHaTeyz!R)>U zM<_-yPEm#2r)oIS?Uk7%YbI(r=+=+}k4d=zej=u1|FkC}vYV~eqVlJ~+b+U-Lg zheODRVVdlP#aJG&{BG;^olqnaHVR!pdmuu6V^Tm^l&nJ1of9WT#hg^6NVnv!qlSE| z7;|60qugp5h$nh`hrTwhOq|K?aedlYKXKMiEz9*!J+!hqxit~*+mq38Yq}hqIKd** zJpbnD0-LJo^4b??jbB>K?gTaE$#J16l`2#!U8o`iMiO#iM5-k87H#~ZLFJUo8lCx@ mmGTexRqbNEg!%GQ8)N*(L-_hPbnmCv#5X?Fe<6L8t$zV0vCqN) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b62f1432b647ca8d4355a72f5d9a1dc386b2baeb GIT binary patch literal 623 zcmXw1J#W-77=E2N>0P-}5E5S-6-$QJ0xG78p_~K*I#m>wES5RHx<;4SY3x*&5ea@n z%Rd0|Q!lK77&32Eu8%-AGouT8XljmLFX zp=^h5niAzWo7!m~)7w=7SUz<86cAD(Ar0OFhDb5G=e&MmEXkf*n;;3>2hVF`b%E7^ zXbM#JP}kKI$C#tV15t^>v@tG9q2wf4YX_VwQ6T5-I_HI!b?)(q^W$3N{Z2()>dLp$ zhQ?OyCg(yaZH3LWGMs;brQ3tc_w2}(Wiz#4V>ENCOZHM*%(wToo@Z*t_QiCLO0pAF zCoIq2v9hs8T0Pl$^q85<;&$l{h#4B@%48+7vTK*|=}HkVdr91Mnz-ylIj>i>Q#RF_ z@6;PV&248s!q3s2GkSLTY50A#^@DDm2SGHbHm?p&lDLg+Q@Z|oi8p(~abZyzudvte z|3IJrx<_4t8xCC#_WEmkR^4*ceH}3VP0m9?$VCj~?l0K=8&fj)JiGw6bfNzNgngzR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..471d703657856abc5fc0062aec0b734df6af7c95 GIT binary patch literal 814 zcmZXSzi$&U6vyp5-!*L$5Nay|tpK%MGPEath^b;Im0&y$#vHOu{k_Y^1fgFpn6_Xd zMo+D{KnY54iZa~B*l92IGQaI-q)jmL&6T~a zcZGfpr(Gr?F|%)q9FiT@(VZ%%>L&}JQEKB01gMP@)b`#Y@PXX141xr2*>Tp9uwoPL zUGtd<@vq4=m;6TpM~bjDW9~oiDlIaQdvTEg*ZZO?JK&1ni)EZC(*T|@enb!8P)IN# zoaZr5OpvmSX%mWr_t4SihSIUrZeDz-LGHF{rba1`GoaMWQJRUQn>t;m^t2nN)gNiE z02yCtX>L*)b1rnOnc#|2=}a*`>yY2Vky literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0480bd397f99174d2d75226aa1b17cdfc443663d GIT binary patch literal 627 zcmXw1yKWRQ6uq8THeo|RNW98GGeu$rP^yR`M1lgXq6C_0tYLh$8SRWcu|2Du8u*5U zKLGJ5REP#mLqSCsX$eIt?DfWyug|f4ALrWN*4Nj-4*l<8xk~_kJ90hZC7AD8a0VPW zsh}nqAr1#sP={GqM_EK5fS16-55OagzJ}f}i@P{Y{y377K6+hhlLq~bku*nm+Lj7= zzxt+YkROzVDZG!j%K$KcZ21`=WQ0Q&yafy~!uWyRbrTa#_UzgPY1lt{(P|@WREK$2 zqcF#^RRtcQQ6*0CFjsl4`vhlAF8C;2=?9F7yhg_QHO6Ym+sfe~W2bFi`4bh{;K~)# zhuWxqgRxu)X>wCap&9!Eb9)9?@9Bw6OvhqI4^U5xZ0IX#u-e*}a#D&h-Oq~&3Qnge zrnD;G(WWyeQas(>c|vt*aI3Kw@-b>^)07R;W>GF>#ZnV%yeOs@s+d~JvinZgcGIa9 zSF1B_>bur_grCEE=h6A`r`7Mn%^%U`MG(XTwQ+rMlqP**y2e)MMc(#=;mn}WPNVOD z`v*S$O@|f%Zdr6S*z=8huI^ZBzYl2lE*BvoWMe@&TclF3Ro#`#veb=n|bfeH@}q2 z1q46;ue$kj5urcW1OJKL$?+F3`3@P#5L(C*nu3*SW(4+}X=N?k#Fp3;EvYF9D1$ym zM)n(IU?TmPO}}sE5-I|fPEk3bIiT_>nh*1h!fWEQ ziF0L~=t!9wPZ6QWzq|9?7M9@9wk2xl!(t5l(t%tZ-tCc74Ve3C9~% zI{#tY4;+hl54F%DcCh8NJ)Jyp4J{xKHBYmATGe#jY1@IiJjRA+7YD*rHxY%N(>!o2(2zuJ#}O0JcPn-1&v+ z(mdIBRm-u19V)YFNHmX1Fw<<~MZMc9Pp@8m_7&@mr+(nQI|t?&l`Rrza72w_b{cx+ zU$gMZmp1XJ=&)h4AyZjR@}R1;pu!f6c8kEgq^i#$4Qx$S^(06#%|bw0QB}>h9XNsM z*gm{s*UH0Sen7`y(VMT89jJn`ZSO1V#NQ1ZSGn&5q_uq4adu66Te++0yTmq>J!0=E zE%S554TBxWzJ6_GRq^3cEW6;KZ4+OCfTl|nH>sYY>fHjXZdzg0PfDz|lNtkMMZV^S zUY_lVnH>E2S-3ObqTgzl54NIOBgT!ROh%NCBvfBI`1EjjJzDxGs@;q6J%c?<__m zGclgwq&(TdovrWlQR(!aD)qzq`_af+jMunh@zP5@D%4|K=cF`oIB_c~-u@Ne_U3t3 z&X<*vRl}N5n4aiwY-wQQ;&Jl~8KrJoXV?{%@UmC%s`b*S#K8B$j5j zyh*l(=t85A&4%PnvBSK>%rrBsLA_aKW|)~{COPi{o3Z$bxdjt{0}S*-dGfG!KPqp; zc%z@Kmwr^7it!XD=Vf%jCyl}aoS)Twcr%#Qo|yFon+tP4&z$u0%t=4boV-Q6!(2o5 zE<<>V6SV@BOI1ot)hQWPY0-5+k6Nnk7=((6G`%gqNotcM&%v^%^2?$mp&r4+Z-IgQ z7A~G`#*td58kMJGJk8TvnixnX+{s}wd}q%1q#I#-*lZN21VRlea!CB!^xFNLH=puPXt4<@IPmWBAoyL literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_verify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_payment_source_verify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59187b7b1c2bf2b8d7eefcd646ef2e5f0e2b8875 GIT binary patch literal 683 zcmYjPzi-qq6n@UH%axv>2&9&cc8Wx66%bR!P%6QIP89`)ELKP!*XR;Ejh)kFM1sGe z*Z%;-pTbnSpezhbY$qLM=!BhIB`o>*d!OHXexL1cgTV^uA^+Y>zY~C8#LNz-f!asq;X!RQUz9XV<^-s zJgL$WlcxW=E-*PrV-`)TZXUg zz-jJ3tE3V+mWNTDBUeYFDr0<$W%|B8jLImNO)ttt#g%M4oE8yJhJoMsjPWQ(#+ntz za*eFNDHudtZog%13lRipR(kIzc|6S^AC^wK^93(a!EeDpQ5qg${^DD5 zdCKCYK2~%BnQRrZNh?vaM&nLVmp#+2F=omK+I)f^gZ0^+S$wu}KG?c&w&s@Q`g0F7 z>&%YM`sb^g7tUtOmTTAP!@z4iRTsMJPW@WvFq|sn(unV_#{8e|)LRC%1#W9} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_balance_transaction_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_balance_transaction_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c6f5e096bb629fa40cec8b84fa37e68e819de05 GIT binary patch literal 680 zcmYLHKW`H;6o0;d2_)6$2R>t8}e81SA+xK?RmuEI0R*oN{MhZ6`_=CMxj_ zTD}2@kHUml&`F(`*eZoGbizKT!jj(~`@Q$`?>&E8Uta^e^xp^hm;n58&drKf#`3@# zXOKZg3MffRh_iztD8n>t?68Q+IE@Je@Eo$}17tChuc6ORlSR^N{dP`|)Eh^5GDU4( zRVJ50+mq;Ju8q~V52bOJxx#GdQ@vc(f#oCXp8-NjGDw4WfFVX0-?yi3W0H}5s~15p ztRFv}Y9mWjM`%=zGaT@Oiy^*MTxdRY*srP^PD5Yq654P#$mY470rBOP0GIudjG4E4mwioTEri=Ba# zlU$7GfDb1qGCD&sqeXs9tA!a$vDe>yLUnF%r?LTjgqm8Iyh2(v&!ud*BF5B;89VmW znEB6*`RIPNP%ZahC)#%Fdsdvn&rbI|I)C%&*7wf#k7)Zc2;#Qdya{xz=z7$?MQO&x zq@R~^!>ALps4NNJhb`|goEsF{4b?ZP0p4&$o62{rb=}_gZ9PzTt!qCV=!aHZhJ=u- X1jyb6bT6RyCy7Y=^ZP5Xs>%Kb9pt;n literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a0f888ae6491365c00e1fb266ecc20a8a303952 GIT binary patch literal 666 zcmXw1KW`H;6o0;d2_;Rbgor>aR4f@9t8}e8q)0HJf{IvfvE1BKa>|{3wVfy#k?3b= z`34|93KL>MCv{?Cs}#!63HzK{@_WDM_y0YA-`v~)d-T62IVS+Wop5*JHCP>5Z~+-) zq=1s7gg6`&K^dlDgTo>!<1{7^z$?h2Pmsk(zJ=aDO_oW&^~VW)Qg=`AY=+vrtxPV3 zwlC3}TpP>pA4}tuxx#GZT|HgLfz@*>UjRZ%GDw3DfFVX0Ken&#Vv>;q%a=hvte+jt zw2>vM6ErHvIUaF68S;XQ5x(P!m%2`HQE`zS_gi(FF~Lh@tlnU(l-aCsxWm}lj2B*` z+%!~VNgZmV>Mh2&5Yq6b4aUC0%Ie_uBc0f^bSxJ1CF-e>6@4uY7P~_!r@0u@As(0>4py$&KZ1`qDO!^HeH~u;? z%gR>o2e9o0h6{s2yEXdhG>N+|XcPH?MYrt(KhHz;(2DkpfqrVqbw~)gNr3EMLGKFs Pf0Kx`zjSZFvc~&AWp=eS literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_transaction_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_cash_balance_transaction_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8567b8565a85abe2eceb69a212d5c55904db515b GIT binary patch literal 689 zcmYLHy>AmS6o0<293^c*LPQ{@iX{?_Rk~IgQY08qK?RmuEcfmyIpxlGwVf#0VPtOk z6A%mk2NPmJCv{?Cs}#!63HzK1OMdV7Y`>4+d;Ye$xdCRWzYp_*0Q|DX%?j6GH8kK1 zGRQ~)B}oXe*ekr!Py819MNo!GNWg>VkOl7{3z2;BoqrN7qkiYNHTtC4I>yr(D*dX~ zc_oxN30~$(8-4qz()Kc!n5E9u$#oo9JvR0kAS5J%#Cr$mV}RiUb80t6896X|>Gl2Q z$>B`tsziB=TIM*%L#`$xUT~4(Tgipusm=eIOJ1rb!bQzRcGT}QF=K+4$XK(%SXpJW z!s0Gtr!!u-8)+LO10xz=Y1wQu#)YUfZy7Q68CK>Fu0PU=seq2ff<8kv)m2SjR2qxj zQB_TIF{UG)PEllZj$%%W{Djs^J*mY0VDBkaxyIevJm6zg)TGI4q;*>^W$Bt6lWTS? zHT2ktZR=1s;!94R`-qg06)9E^Wgl=r(55HlXfaiq?ff};+k>S84MR1g|gFiooW+r*`RIYI|g0H2d=k6dC!>U=Ye`; c#HCLNxr%`7UqJ5y`hTK;#9xP3U{ve<58eE~8UO$Q literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f4df9eb3f069bd929d3b1514bc82d96bafbbf1d GIT binary patch literal 642 zcmXw1y>1gh5T3n1o8TlMp;#cQh{i>{B59)(0SO8eP!JSXusVDr=j6NH%kJ8;dw7PJ zM?gFZ6{0~WrJ|yXWI~aO*;{9&o%v?xe`ddLZf*b_^Y2mdo&o%J!tIIIV0A>`0&>V% z2^C8jb2uo2Don!`hhiXgH-QYUFiWE*GP98$z%95MDE^7rNt$bEHex>=5}3zk2;; zw0!&J&X3;i&uI552;#2ZzBP1h_kD&TMQj%#l;4DQV{Q_=sHtGz^L;M}oLiK}t;-Lj yO}yoTwvq1y{}Kj&lZbVfAFhE|>-`_sN303} literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_payment_method_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_payment_method_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38fc8a4ea878d3e44999469044d5161e9745ebed GIT binary patch literal 670 zcmXw1y>1jS5FYQ}E#Z=YggAky0?idUE2NE51SBXRL_sv$Sj+9`vbtS+WBX3GHSi1x zZvf&^s1OZWDHRo6q$3om81G&zd1gM_^YhL4`}+DC&@%rX=3@r%+ku-Eu8ieA8E23| z#tJA|!kDwY!Ylp6Z*9K_$}kBTc<=(U;3H%qvTuIppG0*u?EP_I$eN8~Je{GjZz`KB zY3L+)l^aX?_Mx)wGS`@mJJ(LG;=u9=;WI!;SO$sr4$#K{!v}QgHbxoSBVBt#zj^#@ zW~?evAEVVd&haR%OO*CC+7p!>r8+H56XBvtWp+61HL(yfEm4SOO^8xuv%=YZAx>v$ z(cNg*4;_$bd}DR9DMTuzvS~|1h_A4uJGlP9Pbe{;$OV6nW@=T%Un+~m_JLBQ07#3%UGADjp0Z$IDq(ck(RY+ZU@80*cOhpr2QF5!q0v_lfAo04`T zXd+uzRDaikyB!d?uqcfiW!IlJ@rDc9M!rMVb-dSgbYI^iNZ$<1BNCTBW9%vdwtE4C R3mE>50v3N6T>+`q`#+f;w~qh- literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_source_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_retrieve_source_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25786caabbc8302646c6c3c0fd5620f957392be5 GIT binary patch literal 655 zcmXw1y=xRf6o0c{cg9PiAOu(={Pn6%-FC}<&35^NS>SZ^Pf<#uN_Gjqosw)!_D zcDCZ5VkI`Rkjly~aK<8)Z+0#N^FHQ%{@$DK>+5Sk$NYO-ykh{ropO8Pm9QL=a1J@- ztb~fCj5#?dgDOnJRu0Rkiqn`u052eqK0+QN`xg56G+8A5&L5}rS+jABXHzuxb!`hJ z4ZTFK3S)`iJyO;g3yt~6hkClo1Is6*p94b5a!7->fFVX0KcZK6G0E8h@kP)No9$;) zV^xLv7_BaFh9_#ONBAbwS!J38=XECYqkgC93L&!!g=p4$Y7kMk_Evuh0n7!V%tKP%m`H_2@{K zu6ao06a4CJT|^frpYQzW?fi^(u7V)$>djk6hknZ!8c^bPD?<6TXgBjFv5T7e_R#Np zMc~|`G;Vi(E^Xlrm$c1%kEEOKfuH11KOmL<6_{-zS0Q8UIsvwS30s%Y|C>at`(=0y H#MAmS6o0<2gp#%(AtFAeiX}s1LD#B7K>{RHP=VzbEE7Mar`*|B+ldmf!r#!c zu_FEyCd7hH>cqrWDU_iT_BplW_kPds`#pbOUta@v%)h(EI|A_A3s)yyf#se9Cm=wO z5-O4t;&D_)Rh-8yj?1J<^OQgYPeCLfL8M5&#lb(%7TKWl#|s0}Y#ie86pejZ+d@g> zUXmAuv5sFqP}VC8jbapB16{>|l2^!Bv&LAZ#I*Fd$Jp_dmqDZb9CYGH z6C10WO~$yC%JQ}W#=gSR>EQAMJ#q=@SkCDaG!v_8`b=3YxA&Er6mm@W`DlVt&>6}Z zEsOWGUf3fgcZLriQBzpluAKoNqoFQMQ6sI}aw!|FdSQCi46}UB3c-TGuwLknuhEmP zyXLkdpWs)of0~@W{(S96Z|i5Wbsj}&S8rY!`tJK7(a;5Mm%>!oiuNOKGP|f<-J$iH zL0~wyD2-oTm`j^@!v}36-*D)%yBj9Cr*ApYeJe2c9XXE)Ar~2toipg4!QgL}knWe^ J1vu7v{|AKL^ZbXUZykT!A=5FmsMBG9;59ln))^4;ELcOCg^pidX` z6A(Xz%5sBNiiAW(XUT*j6|;9XBhAdW-_Fg=W4~{2*Aa;P+m3(Q2>mjLjks&D>H@e# z5sGkvQrySbU@NgwyKk4+PMp;3yBJyMIf|T5C~_J82KkKiy}}D>zYPqqzV()!O_)@# za}{S?0^_`jr2^mRWy)N}f<*%py^(buw0Z~3C1R+LBh^0*8b__1uz|*@=CQ@Z76Q?W`gVCE%gsIdXo8}>pw420fthAGdL#AD* zUlhH-*FL2@Oc|xRPHCD&lf>XArDu~cscwWBqHw@yTPmSoRPfjgV4dcJ1WceXvKH(Lexxs#`vJ}8JN%LN3%6^W~X1a=FRQwarn&R+Wr@YTP2yfq)2*tW4i(k*X;!UYnB8hm z6*;t5jp Pf4tk+pLMShxbo|NeDcUV literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_session_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_session_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89e34e64a57c157871b44748a1201e41201de5a4 GIT binary patch literal 4183 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60d795073303f8bbf407134bc2cf789ab18b392d GIT binary patch literal 754 zcmX|9zi$&U6t?et*Q8A-kfIbSA=Gxs(4P1qri!6d0;DQJP?lRPH+EAicfPCblw=2H zwuX%r@ux6FS&$b7CbmeS44ts=l3Kdw?|tvykMG_6sMnW)J?h^*{s{r_+c}F9%)#ub z1s8w<3KNjR7($1=#7q6yPf?5@@W2Z|{SSa5hQ9k{UK|XAR`|y`EojgoSGwhym3F4z zu(LjwjGF4vFlY3DcXX%BDeb%fn8nt=01U*Cg4lZpn9tB%%dvpMJ$qLj6PDbZ_pbS+ zIpbe5i(KRwH=Joc?<<|9OdgTJE9ypkO(aQ`sWU;j=;C8`l1XMlHpq#fCP;Y7wYi}* zk=n({iDt6hs+bDKf}{*%vy5??(SG7^4db&uNy><{3kJqlTAEdii4d74nrA{`ES+TI zbD_V1nT6o$eROK)in?MD9Wd3?SsuO2G)s2&v#e)3NBgAHvqMJbOq@pvKaTRDKF!4A z-G`4N#WmZ>?F*#KRAd|SoJDz|EW(|+WUR>mbBYtI8kfP{d?=S}_rf@!4z2kJem3rp z)VQ%VL0ePL3o6qP)YnI7^!7`2T-%(W%>`R)epcg^jS1RVFn1n&^~Y=56SQ40vau-N zw(Ae|Ft=Jt^|wj~vw>zpxxEw%lkPVxr@HM>QDDuYtIA%v=V!8MU1%TWKKay#5MG7= TuKxm0{)RVUWyCLmy^7TTSZ2l~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_tax_id_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9068284fadeacb8ae0d58cb67fd0a50c9177782 GIT binary patch literal 611 zcmXw1J#Q2-5FPLCZ7$(LKuCOc5zQ7kiw{vn6d@8Ip%V(B*~T*G(Z#x5dt>`fyP}2P zkkHX0ehL+$LEBJJ(M38!kqZ0vV#(w8?3wXAkH2khZh#;5-(5K*0KWsd9K97-Jn`TJ z1PD?KLLcC2*{(ifH5Z6yW@Am#8i-7zcx`8xA&gStkWf$ zLteiW2k4B%IlktGm$pr@uDBATY_07xrg({rwHu6;TFi=o2aFxhc+s7h#3wbOh&Hy) zv|EgErL^NtYGoPw0t9{>OV literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_customer_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b9230b767f5d252a49a7420e685562e36d5f00f GIT binary patch literal 4884 zcmcgv&2Jn@74Mm@Y4?1OzwPl?VjG+xwkNiigupHvVrMs5vJOhJ5;$0`&U7Vi($hWZ z?lChK(jFEhBrdtFIT3DIxNw8NfD4ytH3zFM2yx1vD2!a}3P`T8N=} zh86)W#n1vn%Yas5Xpy0VfDXmb5<`ap9f_f3hK>R{7DFrD@!G`SsYtanL0fvmCFrj1 zxHXXs+|^xds|Lw$Tkd`Qysg_tJLyjZENZDq zV8KXBzYA>^5S$4Sks}%kkxYb0Au_-b%n|tz0@|DmIjWpPn+lO>j$k=N zW+>8~t<8~<&9>uOO>BSC(o`3JPqo#ibFdVe_|ekR?oX09zN2Y2b{sOG^3G$`P|XH@ zQ;tt{T$>ahw;kOCX2n#Sn9LDeO+s-MzB{&H}@^Qft8kxpXeR3khJ%mfad{rUEO@@ zkP4sVgvdcPE)wsnLhlsA)Ik*yEIqKsMZnoT|QBv1eG5C!T&q>TZMoQ3 zxoKI?K;rsMwebv_T74gz`*lNqTyJ$<(BsDH+IroAAhgl~2K6a+>ac;{!u1w&-@4KW zomy!#uT}zlwbiw=urVV8&~ZM6p!750s5sG^yy+D;eYAO;PG{s}NhnPo4tvEJAI)%N zWUe=N#T#Dp(He(_XM3~ndqX#Tbb~{q7ha0q$fA!HkJA#YR1$_}4j*`f7kzY*^AyHk zI9`6rM^hXrP8_1c2fxgEg?S&%b9C%t@8Y^Qy5XY@4#k%b4mv*HoBz-oyX~XfoT*&x zRj+!bYd*Thq5Rm3hL@}QsLGM)rI(I3b=gOkIdcA36ALfjc_se(x;MV!qZQ6am*4VA zw|sPqLvVi4D@^-n`Y1cn8(sCXbsyFF=-_m3dfThq^U*yHm8*w~UTN;nXwJUOEs~r! zIxzgX5YHPp$O#!O6~#4yf@YoMTbAQOBx+b1+<)l8Rr*4*7pS<4lzfE}dTZ=Ulzf$vuTjD@vP^rc zocs_vuMHsJt+~;&wmk2w=WTf&`LB){9E6@B*)+2-a@sVfQ+ijdA-e=jWGP9Dv7jFX zUzrEp?OG;LRY_W+Td;k83>{|}2xzG^*{g1Pr7a(A9jC>N90)^MlZBxsIV}uSCagkX zIWrSfDNLkq04vl%S+xzB6Cz!MNKMs*NJuJ>NE>^q=_+B`BEvRrSY|^vbQTh6@Pvq( z>;|*~O>_ggp-suB@ONf_fPj;WM{>DWx$eo|{D+vXO0R`fZ{$x=f!pLb+ zPunfI6pMTP*OTkltr%42To**+}@)I?7zq^^5M5dFJ7uBPQ)ifUs zQ>0Db+st|FDd;6czLN_jQPwlJ>SKyg@_YC@G%MGdf}ODET8Dqy`QIrBJe< zXPqGV?X8LQl7}zE$O-H@x}X6eD6W}Lp1#n8A3CA(2%^|Y+?=495%XSkiQ<- zJBL075=_qw&g{=J-x)F4zLfkG{@nDHsowO8S6TJZDt7=VQm^$c-}M$g_Qtn;v>m$^ zboO>_kVtNqzMyOozJqtjV1U45$Hk^Y-zqjc13MCZ8Uzo8RoW|2LbE9g?<|_J%gX#R zup&F_>GQvl-whs0-?qOGbK#*OIKKdLET&Sae@jAY_AkPFp735@x}Qp2IK18$Xxsl$ zdLkvitn~$G`d2g1*ZTrA{fd;5UqK(5{?G{Yfd`uYs+^L4_k+FwO@AzxlK%iWH2rD; Z=EADb^k-o)%FosW#zXy|l%KiHe*nEekzoJ; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_close_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_close_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3b6c56ae102765524f15ad60120a917e390982d GIT binary patch literal 634 zcmXw1J8u**5FYRAmT*Y`AxuX?-{`aIjCIG*kaC_n#u-doa95`@N zK}~W(91g0W4)d_bVHMSJ9uo-Q74Ya2@EFOr(8uRVn`DDOPRK~Nag3*P)aI=+r4-s~ zqBo^Bmft;+#u>{7`NW5MdXooM&#in82sz=92Oj`Kj4*y|weDiV$)4qHkcHiY!&0lc z!IzcP_^xP*T6YO9R3Z3LHt15uL{TGS-5O)HY+=!vY6PQ`*AqMjM4=xb@P+CGqSR*ES-C?+!$oSvaLqgDBls@9xH zu{+**L3L?xTUm!5t@tjGN)DkB~x0Os68e-J;M0Ilm|)7fS3;g##_3WTu-=c3@GtM`AL=%e=X?nj_O;* z(Lm^659;p_L2b=PZT%@C1~Hq!h~;Z{p)3RO^${@&GR`r_#8zySX^nYlMC>ss`Y#Y`?reFqOJ2?%Yg(nmKH_7va z5@D0w)Qf##g+UZ>QA@onA~DDC4HTlrxJS9n_nvb?*ISNoFpj;5U@RsujuO8YN?pNt zr{{&Lg~~G*2IEwm!PtxAgnRjEU`)-t3A+D?4nU%##NA3F;&$U*ca5-Zo}}*mgp+W7 zB}uknWOv2uY{R787bJe+hQX$rW_&A&7Z+~ca#_I1d@|e9=xe3kHwKm2p*g#+>z1=`qgwMz^Uk2UG&GkAG<~_x2IsF1 z&8r2eHu`3N<9&HhnH!pO1+CQg*kJO~(7aTTnJXWR!SuDEdF=#3>&2}8@5d+5e3~D} z?$eJs=mdvmR?8NRlZ+$uE*D0Z6QPG7LQd9OHa#mRIwiw78RSvZ85yQ!xFAEmmWEUp zi*OwTyAJ{O+Bv_sI&d08vr%lu#LV8tpxhjq&4QGtPsve($o|(`Wl>j0zksQ_{WwwA zpUMj@Y@VgyB;~y+Rl#Hz9M0rFLao7uOy!My(*G{x$hoVmzD(yJPlK1;fUs|9n)cg9 f+TwRq|AB5F+OwL|uN@*N4wuh@&VC~(^4b0cb^AvY literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_dispute_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24b2cb3aa9725e1c91daf2bb6b3987da7b6c2ba5 GIT binary patch literal 5919 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 wmJ8ZNeq_;Idf+E`s2*F!wZ8gSQKU=1gp^DN-3y zZWQ#^Zm+#H?xircmju0R|AXH5B7zrVE5t`?80O(+Z7C0ROIvk<>oECwOMCd?sv{L#Tn|vin<=eXEPBDS1TZY4>=AAQ?uQJ(Vmi-q!7U!@&>hNOkZ%m8dnFPIiHJ_H=|z4bvJdnc}*Zz(aleL@-!!;BnIfN8FI2yGqAtk zX_N@}TadP{2oh>Z*h-GIYU_6uMv)Gs&0g17sC3?#OX+wtv86aquN-}>vTAzw!Uqu4jX?4 zHR>=?@J|ZVBimR(me#0Y)AtK>Dpn4T$xxv+cnw;NmFno}+Hsc^bAiI!-7$CAf+3No zLpUHx=mv{*0xnE*6ohRJoChDZhhPmunidFt)G(1)>+xgR=qi_k685lFLy5ja-o|84 z*Wkrr5$I@`JGKmi_Kse!M|ZnTG?fq?6IuxC@SaNT?6I!KL+%i8jI2+yQQLwJh8rf^ zh;57LPcc#+=?3m(4t@e&K0^kW0~=&whzaJb>+~Mev6knvVxr2GPwB*T4qE(#4M~^RUd_M7I>ma^nFs0~z`kjN4cg000 z6+}DyWNW4?8G8CHflbWRZ~h0Bf2!N+Evr@s*9yiWyv0RY-h%?>AA^$6YbY1#)o;+h zp)+?x2f}WBu<;_@)!e#S+GS>GO#BA^_9_SnTuz=o%&vp}%^ugk((GaO7T{6@`&+|0 z=)N_q^;2!}x58TRK zcY58E*G1JX!;Z}zW=&Atv4~RpTFa*1U2C5}$^S}gL+#{Opk}s`Bj1PN$xRSc)*u9@ zJzVujlcwQRz~}wP1=?4)YzUy?SU{MjA?e@^@?F-pBPiniF>wh0R}KiiM}4JMY1!?K zMjdeRoH*qcq9IOxtTndc_C=$oE@*hVHNEN%RXw>X_M)?vzvyfl-5340P;z|H;p>FB zgQih3Fj?Uw+C(^sHW5yuO@xzZ6LI5g6X7t@C>M;y@0ZQKN}k++$3e3x?3i1%)}JjRLGB6*oeW+Zescw~w$9yM=hH8{XGdn4QgP zK!^udrv$j8GHexUenkgF+QCO(_vO8h$ep8whJeZszQ!Yn2G*C1Y|5{bk=Gg4yaFVb~a zx_*=yOl0>fM-n`amPjIzJ%9{*9(|I^C$gVI4jxA{P<|*Ej#9kdLXd&y(MF;i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42a41e78ab9dc0866572af00a361bd46ffe42e53 GIT binary patch literal 801 zcmZWnJ8#rL5Z<-d&Ruc|B8im8NhyMabdeH^ho~Zo5CjtFgm^SASQ&egtj=CLyL%z- zp@uF;M~nC=RHtjuHWXBJCmo?k#jY<#NEyj9-+VKkm-gHI{46pe|E#kQE|lF@GKHhCUqn3OO>0D_TjXMc%oZO%0A$}~J)ZLz^zsP^cEI9Dv7A#0QX1Pel^c}uC<99METvhV^izvllpgn^bQ%%FjGxiFSzS-qS38|^(W0urvOyP( m-RaTqixuNy^GW+=#xBPA+(&rz2fF*)U&f6=d5(;!e*Fuj;L;KR literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_ephemeral_key_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80347eefc1ef4bc2044d80bffc691abf980e5408 GIT binary patch literal 647 zcmXw1y>1jS5FYQ}E#Z=Ygg8J{5zQ4jE2NE5L_r{d0sDC!5MJi zq=brOgg6|OK^10Uhr=?e;w&Z*z*FGSC*U!XZ=v_kk|r7U{y1Ss+KtzEGDB@%)~1j` z+n4A?p^fD?kEC(RLLoo)uAW}Uf#oABp8-NfIApeXT^QW1twBCUO>LT@Mp}2}QiiKW*c2PayH=Q2j_OABTz!tD_UgNq ze1>2B!6I6``Euh&f9q$obrA${sy0`KuJeIUGGfYagGs**%LK^oISkHW_&142y7+hrmUZ6$ E0WEB;o&W#< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a481f096ce68238406ce3539b64cc6fb4668458 GIT binary patch literal 1371 zcmai!&u`pB6vt=mv19LM`zvX7vqhp!BUP)av7n`=ibGSN2NV!366|HE}|<`;R2#ib-suvb2hw zfvX(O6F&ydRg3dD4fZ1)FLVB6-;e5oPBBS<#{`kaxALYUydI zcGB0;dyQPjK-@>c{yQtv?ZWAmtk<-ob#eNjaMw$=-Vk^7e{$-V==HT(yR{j%cwQeE zJgrZRT%Q5TMpL7=YB!#*2OJJ1Btjo6^&V`@to>3IeR?BroICYj;NyG~^C*|0 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_event_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60f816b04470143086241ffc351aeeff89ce0572 GIT binary patch literal 636 zcmXw1KW`H;6o0;d2_iX}s1m9ABX3Iqcxh>GPF>*zhDr`*{W+li7LK10)w zfcPj(hy|V0iHWUJC_^WnK9zkWaeo}a&OZf*cA^Y3YK$^d>l=WfMoV|7Hv1>}&k z5-OH5=Io#hsxS>(J1nCrPGbfEyoNmb40(*~Tj=Z4WRVOyf1ER5&DIB;OwrhPwJnr1 z6p7vz#*)5&qO4068uK$>>g5^-R?o@50ECp~kOm(CLyRzfLQ%Id$=M<4MKB1Php%QR z3C`*QXZSwTS!J38=XECYlR>BH3L&!!g=jW}s8l{Jo!t{+GR;b#(XM|Tk!V6=b+au* zCZ)1jOI(Pru%aB?PWZX1kdNe?zeF>(s^)K$#d7ahsc|7k{5U%sqs%!mn(?yu#OsAU zSMp%E|AL#s;$BS$vJo0i*AzAKx~0nnF_%{8brZsehxI~t95W}nw9R7@U*K1-zl@fr zm-l}3c7H~@*Fg|>_4eIC*K^;)4+*gyflz)1+C6ZS*hNijeZxE65jeLfjT@AIjrQU# v2ihV(AnUe!=-=;1KO&bt5twHru0zJyO#M!QCdPlG+Gce7@IAe47ZQF&F#)EGjoLNwYTH! zY>j`4)#Vzq36+%{$%zG(Z+7l@$-a-@+xI!|XR|p^kkr4&N#GOm+ZZ!KyQ0Y+iVG5x zn5HD75v4|VQYUjGx6<9z%lycv#38Rq?0q7!5A=s?!=qpjv}%8h(W2$z5uElx>9>VW za-k6M4icqNE*$3CI1>qR+lE>`%|j*;+7|>!L}L;;9|*YMJwgopnC_ySGe}^uDem0j zwJGA>BC}Y}AOpV@ln-B>x4T?);D~E5ZN1}?XR2(1h!fFa$8eHMC<8bzxQI(XO|nFn zi%N5;jh~-rkcX{$S!Yb}3>Yit8O!pxpBlZv*lC}q)+5b&OIK-G-eHUjk!xP9gfZz= zu0-hXWP&QW>4)7sgRmpc!@)eb^mM33 zOB-Wvg7b4B`mw_G>IH%prJ!@d^8iX=uR4voCd*39jGB2ZcQ{T1g-;=9o hQvB2tWLGYw^g1AP=aQ^klGfkgF0BtgUK12m^nccR({ca+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_exchange_rate_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_exchange_rate_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a99f30582161f662e36af9839cee4498b6f902 GIT binary patch literal 651 zcmXw1y>AmS6o0<2gp#&YLPS)Ep<>CX zQ!XYr;s!@(RE`UL#}zMili;%AB0C*)nl594m&jPN!B{D?dEs!6v9mcZyhgb(sK}Bg z)J8SijBz2P;cfkleT9|P!EH^avP3!&OZo!!%*cwqmIjOc6Deo8n9vhGo}tL-0>y$B z`A1sSW-7(u@ZdSsxxxL)8t@5fYSZKu(yA?&GF-R9l1W{zY{0{_@_B-rmn>?>Y$LuG+pcbiMa|nxT!@ZiGp{66NOIB&M!x)xPl^FW5>9 z3hnmhr_v_gazWe34=lRv9{D*QtA|#!e+u*yORhsg$V~#|@Cy1@F!-B9r2FOR4OrHC F{|B}+uNVLT literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a0602aa7947f14811f2e3d72b77cb6c84239bbf GIT binary patch literal 1485 zcmZuxOK%)S5boJ|?5w@s*pSG?vdqeW!b-%W5QzvW58+sVgk=zf%SKVFJzZY6JTpD% z?yX}`mM2s{wRbSUsbya`Wzb!1x5q$JN zE8_QT6#2e1lXoP4RI_K#8I39HVaxMeU_P&IN6=?H$X@o5Fz_kC^!@;*d_Nh!i*`GX;tT2 z6rs6-}%OyJONtIJPom^A7M>VKJfsx-Z?C9K)RtVFo z%p~LXqVpB59M>)>IA!I5T|Gy!soZTFW9xmLDuBYa%Sx3}!_FYKF{K5|fl@n1X)bw% zU8J^4>BEX;&5A;P6BW6W@U>C)0>xZ~GkBq^;2ikT|WudPg|`pK8?uy;-k-I`lbGp z{_V-dJ14=N8PvOU+Uj=R{oC*LqBGJ9qti9~PrW@$@c&ccIQ;5V%q9UsXt*Bm)|CAr z_iOeCJgC_p4kFdV5H@NmvvWv%97j!=`DSH0r}wX1dGM_p%=_4q_xdOv*fOX5S7gpq}&B!BQq}X^y_(6?tX0e zwA8>9jtmsq-B>l58pd^;TYbLuW?wGgMSQbi>ur^wpNFq@%Bk;p-t&lf*PoL030Z$i fZcWIoXVID$|M=ZAf}dxbUe}9%{_r`$PhG>m(;lN# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_create_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_create_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b1a4515a0ae762ae966582521ece2b9f34e9d1a GIT binary patch literal 830 zcmXw1OHUgy5VrS~O$aZE7B!+0;({U-Rt2eC5C=feN>N(%aan{cH)~*(UGHK$h*Z6` z{SBl)q3TcRr6`xm7Y;r37KzdWr;c|MOP-nUoAG!&o*&cGH3UokYs7UIq2C5f7T{vt z9)P++5sGkvQXFDzY%8%+JG4_LbP8-IZt8_zS_vx{S?CZ&&Sw<441c%FG@;-3nw38W zG_js}&CYvFs+YNnGcKE!cJ||r(oQRu3Q(mLD<){7r`nk^v9VxLr_5B!aawfy7Vs5f zD8vy8t#^po%wg^$V9jP;gttLg4PO~E)|hd@Yfrq9GxoZMF~#bIgE(QWn0NOCql&$v zf~Hb?>@uf3(lyXfmLwGFK7q&&jd9gStEJ*v9BV&iibhn?cGK5BA)Ka+ z5M3iA&7xjn>^dRmJ(`prQGqIi`2=l40zFFzF<0NvEd-!@8JuM)3r_iE zu+L;yWqI&CQ!H8A&9ZLHPlH|B=`tP#7mQy7N&G&@`|2#?o9jK zan6Fgcxyn+yGQ~pAf2KIq;#z3eNi<98sWp1hakS7U-iX-GkEj0dR<=`Ix8c~a{ZBq z=9dP0*K^B5XL-U*&3t+>v1c1U8_%w1wua7DL5T;G%{2l<&2$ORIE#K3H7^)g-0={sdw;w9fgRBRh+)em5F;C7eCHv& Vd4nF`ppC!Y9QFr0cL-E*`aed5-RS@T literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_list_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_list_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf39eac43fcddf535d6c99fdb9217eb60e951341 GIT binary patch literal 1321 zcmai!&2Q8=7{=|y$t2TG`Dmdt?QTIW63l@{d>lYR8~_0a)Lktgp}AP;#2upMtG0_e zh#PR98^aB8TkW61g(w$fX|)GV+$yzj;Iyxk$sn|gh%}F1|NM^q+J2IEtyUAkBfcz! zZyN}G)SddVCc(iY2wtH81vo-6?qRHBBQj#MXO^)Uk=W{4vE8#VGSD3qkQXSh82-zw z=IAv_Y6ERBdrF<5({(@TlrC0tf3TfhCgg9K4AVpaA@@QdyM~(CNTnVOISZ8gV3@Js zR@j&QYVJxW3!#G%^j{%{dN@Em;~`>ZfIGk#35;vdx&!tZHwzB(3mzHslVhTZ#_EbC8$lL#zG1b0u$GEy&e_$VyFSPLBF{bEzOpHJM!;iF{_cAj>s5ar%v! zFPtgJnUe5!UDf{^@&OEgZ%9T;!&m{H8m1=SELxLq7OhEX&Y{({Rp*BWQpP|kb0C>A zA_yYMHo7)Hsw+LF<+v7o=lrCWc`b`t%FXEV_;M|0ArN;#;IN(f(aqdx7o=UEM)Snz ze(rV((y58N@ROWs5k0?l=VEpH>y%gTKTWF-0N1ayvgI%XGgT%$R&^-blPnSXD^cyi zhRn(wWzpYnH%Q4(~6#&98<2ooWZ3veI=IUpL1mm#F7+XBtbv_o5vB_8!R zfIq?bQ@lX9n7MH98-nilsqm33={=B(p353Ju7U9SUjf;dVr zLy7kRai0gg_83s-JY;wg<_6%*>m&Xh67-RpLma_kd`+Z$L&)xH#l%kUE!8wLMaYkG zD%tVVKCi9m>Fv*Vu~eTR719<%unwpiLhW(ut`0?ayDek&^Jg$@7g5G7Wz^D5I5Hwc z(u@;Q3=xtkc96QbNyz>IO{*G+ zkMmN1nCyToBn4d@LlA~kh1tBP8;+YBB5>oB{EB`xCr*RY_um@l&8drE>dNzK(N&1X zCeJ1p&+ji?1WN;Gv~|{cc|Njm5iFFDemH2i*=`gQ6^&VDRKTC5ab){h{?;ARqrD<5Ng6Cyl+iJn}d QxxZl(N2kj-2&QuPe>DT))&Kwi literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_link_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d5ea80a558cd9716b069a105477e1cc6fe564a1 GIT binary patch literal 643 zcmXw1y>1gh5T3n1o8TlMp;#cQh{i>{B59)(5dw-Rpdcu&V0GjM=j6NH%kJ8;dw7PJ zM?gFZ6{0~WrJ|yXWI~aO*;{9&o%v?xe`de0ude|e^Y2mdjsg63!tIGyV0l2`0&>V% z2^C8jb2uo2Don!`hhBWts$Mbtd!UL8s{oA+rjFXx4bhvN@cUQb|JpPl5}u0;b*EsK9V#349(c8n!i*Q%bi1|#)Ta5!|Zg7GUrp2Q(hJy zcs;jgO70Dx?s8LD+^NYR8=>Kprl^tEZMj^0q&7rJeF(j3M0nM(p6iaQ&XF!%vqj`H z{Oa`=(c;aQJ3o5cKcnrdAc(tq^VZPy-S;Vm6tUfeP<|EK&ACbJyrznM)Azj~aAr{& zw=X}DHt~iF+D5)d=%%~xXLz6=kVt7@j02Nf(r(nBfQLkXhxvZV}TXWA~=o!#zCYEs0L z{tbTfOj;3D+X7E|*l z$!HUj3&at}F-mZV6DM@At)19SywFSh&`*Lez{o)_5O+T!?upQ~~l6Xk-N%9~y$xZQYYPfcwy4~=#Jxj+Jin4{3y zL&6oF@b3d^T?8CAV66booeARJAl?M=Ez%3>CA086ip6du+j|*jTD)XAOOy#jH)E2Y zFHb1$udW`vzsY6#4$4SsGXwj8wW3U)*KYdIwEXv#&L2L2aA3-b&CfUjOyy%AmS3^j5AM$1h(6XnyH( zsWG_I9D2A>v6ra7_+uL<~PU4T)ha*6-K^(+hL2wZ%p-3VKQsf{KniFEQ-g$Q(dB2#M zH9kZ^5qftq9WCNdq2Y8*G!mkqqH|=2A{B3TZ_lz4iIeW_o8P>7U-O&yd%HbD@F)L$ zgWp8$Z?mX>&53gIH7ZXDBg~3PV)ZP`=#99M*gd<{?bu10y=LO}+@#fOS)@TeBg}b1 zSQD(@?8;BiD^VBG7PO|QKlHl(KgOhM>A5fA+XAF|m@A&85)tPCm#S;))&s6Ugt5M` zohf6*1u*SD9_GOA@km8gkV;M>l9MO6eoBD!EJk{buL#)8>L3OVYuv)Gj|em;h&@Hz z3Y*~06mLzC<`nUmYp@C4n&P!j&mcp;JEP}5E)0yZrT^dbRPuo^C&b+ z-QFoAPeDq`qjSqR8)SMuDx}I15LEI(8ma;VUSeG4g#rruoIx6aUSnBQm@qUKnE?eg zJBq6zt+(`ipQj;OV_JD8FuNkvs};sEsXA$?u;Mc1%dh%)^A!mFf0xEt$ikf%^i?ip zVR|EAP{g6i#BdT0K|PyC{4AeNjt1Dlgd&9!NwYqcAoe-d<4TD89P|rjF@KFJM%)&#+FJ5 z$86b19${YXujB+Jc^L=0c%#7}JqYfB+*4T|+|Lxm8+Wp755os{!e|dU7VJa1AH;ko z$cJh-OK)s`_)#G7!ENMd5Dq{F7=-5#}(x38cpxmC5vwz$3bwnhSTk9!8}W`2 z=9-ooMCk+(8-R_a#GEFC@?`JJ)TsS$tie{8BC z#{V|XtL5s(H_O?ABbjE^OcrLiYF7<&Bv8e>%hiIyfr3;TT9z!V3TdHvMU67^^VPic zZdF|WL~Nm*g@1V+#j$N!)(e+dH~u8cf05fGa{JWXw7kP_P6>WacdSd6cl7xSf}b+& F{{VJt_22*i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_file_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cfc7fffd6db45298d6546a9fa50acbbf9ca7de9 GIT binary patch literal 634 zcmXw1J8u&~5T3o4O>h!G2n&QLA{rO*Dx{54LDh@)+5-(8s6AA{li4IAOq=tr4D0(bzY&EtE8* ziC!1R62E<{tTPrG^AjKH={gUro|1eH2r0`U4c-HW7-9U7wC-Y(vjgIbU=TLo?g?==%}Q_4u6-R5X+mRlvn@m> zrLtLDw-8@pMK-vu`KhXqkL8>{M>Dai=C72+a`#B7Ng>DlC_9;;%=rxEjF-g+UN7va zlKaEGXWSGPcWZLU#%MS_Q`E@owp=bgQVT+_dk|hbtQWfD3Uj1O*E}Hd8GiNp%V_!T z%dH>1ouARpWe~(&y?x{8TJHPoL(14LKq$Wf?Z(?Ac2QHYzTdlE5IDCeja!o+M*HxV vOWJ0>L+HAD;Kz5U?~_Ph2+U(5mmy>9Dgm~C0sRXY{7oX(T|T)2Vr}$)&19$= literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_add_lines_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_add_lines_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..548d37139485b5a41ea251bc723d217611580745 GIT binary patch literal 5069 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 l3uo648!xbysWdl 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 HLY@B)bt3r# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_create_preview_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_create_preview_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b824383d853b9e578bc0595fd994ad3a13535f9a GIT binary patch literal 20947 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_delete_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_delete_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aac132c6908b312f1c293c8ee8f044f79c79fbf1 GIT binary patch literal 465 zcmXv~y-or_5S~4L0thxHn)m=FS8yApH5P=cfsI?do6(6%k&fjf9iW~XmC-9@ zFzNP{nhH6l{dhD*$>{>+f+pgDW=k_svKO76Q7sI1Gusf4QB!Slks-~>Gbj`OHpa{2 zm`_L9GIvsyu5N*LYz6PtM()Hd^X`Qszb#_9mxd{?P3{ErE1C|KLwgqO8t4Agi@am0 blT9C5_f;W;Z0kUJ-*rNoPtg`^DCd3wpi+1{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_finalize_invoice_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_finalize_invoice_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..833f6a69f6db23e173455d981d2d057b1a38bccc GIT binary patch literal 711 zcmX|8J#Q015Z%2mUxE$91pySAq`^gef=E=6iwN-{A%j3P*Q_?)!CCok_j0?oY-oYM z5Yy2jehO8T2A!0Oiq4V=MJjf09ag%T_ulNx?acgWwbqe2>hE3t*+b};C08e0fo0Et z6T}e18Om{rvBh5I<$mhd*w2DIOhb%3^c1n+BVr-o@4m}Vqgm8x{I;ZntLv}fcnnIv zEHsxw86|kZl{WrbUuqlVC9r`@b#_$;Egu zO82Zj^E*Mc^;}FOAHWkXXvW{eioT*H%~jQ;V=W0~6DkH!MKCR>VEs;9#e@i&10mHq zA-QDZ%;F{?$77ngNNERE1&2~*)eSHF^3rLE( zg@ka|AbGdy@W0?LbcwUu!0#gk_*`3$(a!AVMqE6m2)&X;|U?V0InF zs5j`nx0+kj8|t6ZOICZS=2EFW^@fD$fm7ei?ie>DrI!5W?Qh<`dGp@9-|VmD@`wb# z@b6jYk2y*DlRb!EK2u)*49ZWEE!lEga^Z8 zV#u^|4?pSPFuD^&j_-v=j-qv^6;X7{2_r+Hgx+9h3)QL{^tTJfxb7Bg?iTi!L0p#$8Mt-==Dij!TD`5lFx~b2Jh#)#OeW z|HInxwrGLbGDUmRvAoEMx>OH4n}fu>RA>?JwA!7}*~YZ!ctS08yfDBm=Q{^lK#!~) za}z(ZwjG~5tqyM&Hc2%$-STa4z%&B&3F&ypb0RaXk74<5% zzTIgvT{le#u$|730u-Jq4ivU(nwIDJk;OX}3>CH@+VuT4VLU`s5HF?IAf>n4^+!5a$bg#;}Kq&mAddoHe=PtbV*m8bWn&&T?O1YHo&*!BTKtVJaIfh$A@ynyd9h)7S#S64c$@5=6UHV1|kz+N)_l8nhzt3L=7Xqe@`dD zt)7Dt)%5uFy!UpyiR{zAr~J+4Pe=Y=^#HbK7Hkkh3@0eXV~kONt`Q5? zh=qV(L$4bLt4dV;awNjV@dGTDpv_%oxD%BCZW_Vr7D f?v-j=>ip9uHhhN|<6RBm{!b0##Hw$7{*D7(n+?@`S7{EbH0q&%OQw`G+l}q9g?6;fWj@B1PE>+N4#6Y- zS&c&Kf_>)cAL)E?M%ZYLyl22Sb@T#PLA4T{LmC~_En zWt%kyt(v+(Tg;tNZ|wE`zqO=~)#4BA$sQB(yF$i!CV-G{VQMEnBbDf+$L{jGPSY;RR$ z>&UVk@5n``RwwJ_;>C(wY)I$QM3hVG6dR}-?Xt5`k&RlzwM*(cKWyduF#Nui8L5rsM0jSbhP*R( zL*ALYA+@>3PTy7MKjt!Jjij7c#9KhvS3Lsy6TJgYi8 z--IiWh&vGA3wTS1w@R;Dk#6&f=9Uldm42@xy@vRmPiV|0dVTHM72}Fc%FX3Lb8~xe zeIF=SjtelEG3Oc6q3l4iOz11doWTX9aZFwG`v-aJZJGbVS9}9>7=EG;;mF1qzi|=1 h{s&t56Mb>wu3>MoeS)Al`5K?b-t#ZtAZY4x{{^@(Sh)ZI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98607ff530681f1b3d3c3b0d1c7210dea95f38c6 GIT binary patch literal 2719 zcmai$&2Q936u|BEtk?TZzQ`vb5Gb{PtRNCl#D_#96)IQ|&_fqRuCpG3#rlJ>cNIsy z(cXLO_J*onQ2&%(V);_dg+ouhA!X@-Q{Rj|%QkF^4{x4-^E~tBy_q-uqgpLV@C5%X z*uTw6(qHUFJo!x7{}q&rfEGt+nbQ)`@(8VPS^-)eq1C9S*Z*dd=rXN6 z#4oxy2=Du$?YV)TqiDl!hZNnlgHTs!;jSHGVs>b`>4nVJCfK6I$B~aMX4p=hO=ae} zv_CDgC}622TT(0cjf549=D`N%E%_R>MMl(&5k(M7e3cgjYw35Hr7E~3zSV}L znAwzuq@0n;kW@2L6J+RTeMpMd5oVQHP6%#IW@KterZX}l$Z(BE8Hr}~IXZjC?Rj<^ z-wCmE&$H~O(F2p1PC!-D@w#qE%N7pW#OC>+70V9V44YdWyn7)_#*;H=Hos>HdUD8M z8`)Qzv?vCE3Gj|@y4LQ(=qN0QPlAw~TLH02H3x^LWrij_cF52VFtI(0s(#w89A-vf zjT>yBlFw9w54!w6*0#G%3(S@&+KaB~hISaeR%j9Lv^(9v?qOQAU7?n{Zs6m#{nUp2 zSP9J?V+%hsd$vb*>!S;VWl@cFw>=B*&Wv{P2=ZkYnE^3F9MGw*YllXf3&Vm59JABZ zOH?xq*L1L9(2`*|p4IIzy+1q9zWz%h*L~eC;`6bQcWCYTJwqL zcx-d=ecgPmk`?Cd2_{Z5!S*6K&BQ4t&M?6jq%-ZT5MP24TmmsR^&dxgX62Ojcw8byM`Qv_sRG-a=7Z2AVN=f^T+=F;j9m`p`d0V8mQh)jNh{Mc&yu;r?&!-)R`zw!COBvn^$U<4o&*StaLYBC*@|fFUWbxZ7 zD(D)Sf@!GM?h=CCcEsu)RFrl|nCoPTbwYg`)**5nNE1F=Vcj2c{2{$O+pMM#9-{-< zX0!1rH$e#=gMjeVCSKkX;Q{@w&<{I9AD4l#=Y`ERKD5iwb1<~og~@*kqMWXf88D)G zeq}UC16~g9TxP(nLQsN95U`f=(Vv32yqKWHkt8$Are347X;EA=NcyW|cH(k{zf|XM!FtL*9YnqS?jw437SDquE^RedmuqGSk^$lGmxMe9GwO| S8c5I#))465zLTKg=lWlyo0U%h literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_retrieve_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_retrieve_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c4e13bac4e31c0c9229f50d2a93b9aacb9f1aa0 GIT binary patch literal 649 zcmXw1y>AmS6o0<293@RbLPSMO6-$Q3g05AE3JEHqf{GZp#X53Nsg*nXYCBPGhrgj^ zV@3QaOo#=Y)QO3$QYb?w>~m_#@BN3>q)A4-KTa5tc5s4cbJXT_ZMYQL zzC^FMHkRK#mc}W$!eZiGJzd9v)e|e9142d$$bxr(Ax0Q)+gEonDagL%O)v`E?IW>} ze1b;?s}nSe;{xC0Dz9{#;Ihs|aXjj^DPtn9kg;}yu}T*6(&0X1XY;)D8s(;-B1_s( z8`W+xmJ1HrNMIdP|6t>Q+k+BW+)1}K(U}D z|3K@;oJz4be)^1RZg97@2Kf{bwC>8KjQdWQwW*j|_rkn(TsNxc3Unm3S3k7m z6a4BAFQSXLpYQzW@BEB*u7V&=)z+<{YklamjBUhjA58j%C^zjkF->iY_I=;?0>h<2 zq21Q}P`bne7qp9f&!U@j-;eP?J+PwvQJ^1NaupInt`i`8moU79(cdH@>6gJZSk`&} E2R_BFUjP6A literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_update_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_item_update_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ecabe8dc1f30ec0109c28c2e9532a15d7e4f59fe GIT binary patch literal 2656 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_list_lines_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_list_lines_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f92047965f97e58eafcffc6eb4cda0066b243dcb GIT binary patch literal 794 zcmX|9J8u**5VrSqm&b)i0to~ml%%;Lw}P}$iU{eTn{~6 zj*b@5@i(YW*PxYBQPD*Tp-9DeeHTkR^UXIqQHiZBT&@yH931s_Qk0{!m0_$2B_?ZzK#v}rZ>7LI$M z&Fj)|DKs*{4%Y_t%&s)n$rWV#F4W0!9&(wWeMW#JG$V=ko`4U*1LPpg=qBnZ%S4VF z^WF{L7&HD2Gl>l>(+}HGb^nz(k$fL)MLS%8ev_)S&{YdW#>FAqg9E9cir}t1{$3y2TJY5W{?*T^z{DGlW7+fsJ%=6E~Z?_!bh35b(8=X-J4 zH%C%zbe=woH8-$c;t%N|=ol~LCB$XjSK;uHBb z|9GH>^Q)s^^}_SQ=0!wWOM_tW?#tA0c4ZW-OxW4Q&w4nsJPMX4%)KXH{o%seC|Ii* zH9twe+ip~guCNYMZb6uI8=~yX{MGSn zltmmkz&*DvH?9?b3E~oKFVRSd11D}l*>dQKH}-m=U*gJ2etz?tH*em1Gtc`=vspv% zOaEH&zpW$myBw51eX5)>P#zRCF5= z{2d}XResV6KRq+22G9zv%xE>ICeZ4?Xl+=t>VL?EmLghT(nkZD^3N0Q$59Fd-}O^& zX`*u1=ajjDsCQ#7t$ap_sNNqYldo4p8|} zov7F0T?J0GDZwS7#+2wKAtk9u0=~+zSz6Fa!KN##Gj2{vZAQwq^%=pWA+4sC%^5E( zTapatta-8US#%Kl9+kEE!ewrlTB=y`_FUGdjyvFS=yKn4gJ38cDUFEZ7xrSoi-UlA zvbau2`Cd%EKL3)hTa3D#l5hNoi;7nagy{`Z@Jrb%7VHe@4y?!*m}Ed50wd9cjs2+a z?9zuZqr#wvi5n522Y%>t(Mq|?xSV$%!oga)&A)MI{rRk~JHn2r;qe}c|HMbBb;53;uV(V@LV(|sN%_MMp1VDn}i??d?ZP1oCpOzi_2 z9oT`tYbQgfYjkDn@&|SbcXl%Y1Gi688~pnTwUhk7?D9;U01nY9;8rqZRoFEbCMfC8 zAihT@%j+lR-0}QJnR)e3O>G-zNY#x~L)Fbw1GPHGovT@MdyKbF)dJ0}j5e~?+8D3> zLylLrv(~jSzIL*>HcGR_jWOORXPfO29^Lz)nl;wPc)g^J<)bvKua5C*NzPsPQOlMt zj`78kG~0P(pJe8z5Lxs2$Y3Kcdt>I3t(UpIx?AtV^o!j(?FMDm4R}gsol8riy=0U3 z@=&)7(SF@67iymitq=EA4L}Jv?LINsstokJ6mLqA-ktoZ0Vaq-n>^7AbWK1`s$ijG_;1`a*sG)iT| z=1p82OhtOm+a^DWeB0+kd1hWOz6T$(%V4a)lWv1J)f7c}Y9QsxuW0!VPW`Tg>Q0|*Sbw`-sGa(OM7jfF_G8ESi8blEz4=;@PM)7X)n`4}~|X?TOQ>B^;y`*v7u`(e}n8)DvM)GSob zRq06IUVYb+kMMIaJdIA@eY){|u<;|>I1hrjuhy>(UH?O$YQ&V^43mB}%FVq^%%ZWC z`{r+Zf#KYs&~ATzGF{>|7qp9f%c9Hvwx8vWx?@HAw?IFz3>7OJb M{m%y%U|Hw=50P`Sv;Y7A literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_modify_params.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/_invoice_modify_params.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2126c99408b83b42b50cb503b6c1f966a0923f6 GIT binary patch literal 14804 zcmcIrTWlOhcAeq$%=C~me7`A56iJI3Nf!08WXYDT2Sr)7L_cJ&VHw(SbGj+^a$c^U zku^ku{jj~*BtYO`u^T!G7RuLJ2m)lYK(IkRVgv#9W0Qc5`3O-!ut4$=FH_tAt?i}y86_k@4Z#G>ej8xUuQDi5&W$Go;25uNaR20MgHP$=D|!X68YnZ z9?_$PNHKaN8l`+!p{p3X5i2S;6!9J_#EXd=iDL3bvZ&rrqmi!2<%q6)6w%{G^e@l@ z{cfZLngE(KR1fVIs0uXYLwf|;4YbFHrUjY?n(?6-f%XFJ^P#;0?FTyGL;D0e2z1DY z_6u|v=!g#;5a=k-F&{c8&~cy>K6FT+lR&3@=&(R{0iE`tBLdwGbdL`m73d7my*_kI zptC^deCW79=Yc-uLnj2f59opqofPPPpjjU}CC~#v5Bktu0zCxuX&*W*(8E9%edun1 z9szpPhwc&RF`&nN=!`&50DZ=X?iJ`spr?H3tU#XydfJE13G@um=X~hAK%WPC)`vbN z&=-Kd=tK7j^c>LhK6F8#7l2;$q5B281oV;*%?flG=w%;zp#DYboshZ`ImF?onl9{h^<*I2_voW5$YE})V6?o4|xk`0SX6QWiX1!wQR54He$e*h> zkq7@9B^@*(H==svM%P;rBc?|uP|HyCuIKSg0Wsn(67!IRizpJ&Wu1gXyjDpMN$M)K zbK9mQu6Mggk3_t-X%7)CK~+W~dav86&qE~T{Sq-`s{x7VgKn!KiFn@{mWV#$))|$E zf%Sth7a#L*+5fmi^a;1lq=!to$Sx0&luvgcyFFx&+iJ!`_PWTdhs?RiyoWsHBKsub zNnk-D`hK@gmXP{^>_I+srF6S&=8bD*-CV1`rZKH(ZH~C}>D`5eo4-SI>|LwMZt^}Y zpD))+)m&A(lQVUTk7|`l!OUwkD|2gxk<*G)&eK}0TFzjO8&aZ3i7Ct50P$izWjFO%+9bWiAzFa66 zc|lgusIHgw%_AKwg-~^|W`U4p(=Nhjfk12~#{b zC;e2>nnF|J(2STDDp=R>U5zJ7wc;vTr7<5?jdiWCmMgFE*^usEbEJ0Ns8-F=EsOU{ zF>29&Bd}+^(@0c3j3 zbr%`7s*t#t0df?}>}zRylW8Su&0tF;wM^B0qruZwvfW(G|q;wF2eS zx!n6Tt>BcfBvhF9<#Jl7R0avOF`!P2Mq61emkTUG6=E16MrPN&$OEL2FW+BWFBgr) zTctaTONO;kEmsy_!Xzj>eW6_5fRq+5X!#AucJa1Ry1iI1R~IXFXi(|+;iJbEE$lN- zS5QH_Wmt>o+N>Ch6|rb6O6?*>7Ux3dfD!KrJ=kcp}xtjIlFgv zL)k5nq21fN7wthmADQtjW$XH_A=~4}?evL;aza9VliQOg z?cP%j<&=ana z_5$O!1QHk}Kf<3ijs%=_XFj|lc}n+v__A-nsA@Pf7f=#pCNN-N$wgZBwM4uj!EM_lI?i`X8cAl~UK14-I{*nr5G#rWu3a6-Z#5&JEddyv2 z9&*~LC$lQsM;{wQ!uzCcSA=;5vw)ur8O(s`v1(SG7t8X!t*x1?DDa}T39Aj?6>l}zZ+TzE zRjvK4lrNX6T3&RyS}qvXGBwLTTEMZv!-rn1uFhtC5+DvZ9^+d4mJuJD``}Dqg+}wOQy)OoFuVemNp0~ z!iG0jL4{zTq}>Kt?&nIIAh5KNbC*-9T{(6_JhZw~A2mzm4_v6?5Jw7Gsk(hI<94}F z6Q=~KWf>JMjC6r}V`P=r%1nsX`oOf-sbS6PpydMtMYC|KIl7#|4Q}RpvS+vk$As{R5m_2g5p&XYh;`II<^&Iy3>EJ$pzble@PesX;uf$P8 z>NZ>ne;+07%jUONLUL5-Nmo%-@35P4k!}y^aS_k8pl4j9R~(4@viI>bRP;dG+x-zCd$T=pOGD^H$_Hmmk09i_l)Kkb-Q!{sek+mHdLE zg zy%Rg?b-=ytwW;rrPmb>0QQtxBQD1FG<%#fcl_wkH>r~!=QA?`ns;Ag}>+x)YzxcS? zcI7sFoEqOHjFSJspKG~c7SNEq9T*b8lTV2=@hMvz(k45`i#iG)uX&WTj~AW4 zywSl4Oe~%-(^(Ex;iFSmYnE9uEV!g92D8d=;PHN8k-%agU!ijp3Aa=QtAgpk21T8V zFQlU2cM@+ON5I(F?A?X!1Ly47^Y-Y4hH}AYty7D~<%yqrvN(S3_o|wOTdHc`>d;X$5zSK~bd^}U- zaGoDa@6J4$6vURY{OE13kp2`3WY}0dEwssf!?j0DE7jR5_~j{BLh$&OZox0hoV$`- zb)CT@t>-KwUt-YQ{~Op$o$l!(=JaN1cfhop`u@J@BZJ0%oo(N>Q@yZqLV zv*1xT;e!7LN1s^8S-wWZokp_xoyXsMXdwK;d=2xCD;1<6z7Am{wj3S-p$WPuIYdG` zh>Xy~-ifVYJL7n?Vvv{`p^fJ~$jZO*II^PF;j(%OCBel;YyvI6N6c_NA1*GhrV_e5 zOvlB7l*lIe%TH$N32DWJ$DPNEu)fy03P-EK;Bdf1jIWkUHMsHD%sbF%ry3m8u>5bs zqv{-5v*C`HW8nAUju-MKF-o2%QPT-nh&ny?iDmapHIyl7l;e25aCZTIHoNy=LpgZA z%N+rDWS+6RPd1d3z9oV>43~cAOzpJBy-Tx}%i_`_N;zO5zWzkIAsb7&*LemO@`iU9 z=IOOsNym_Ul1X(xRq(tVX2`L54&7RRu@^<%RLz(nVQ0gLF zO5~vnE)R~&u-=u8u|GgDPYMNO^%ZuRNC}WfRYbi4kw*?#XZ0HR@T!jjs?|mTDvRHP zG#)Jq>QR_GXCF=c?%8GKUM%RY43PW@KFKJl5y^36K8oxpsxzYq|HhO)qV?>Zh*sDi z5iJ4w$al&psS|y)d3;2MSv=)XNF{9)#sJXo!DCq@7avXP?T4_ppFk(exS%fOO|5XT zTq-%Y&K4h`YiogGKk#6tfo*0W3AaanOvRLZpCsuxVr8s; zs7>$+0Qx<+fuuEw9~Sz7ebzgKiM>|QJvXQkN2v(>pc1!K1b_&a=uZIh@BTjtciAjp z>$P}t&B?&PR$Wh`#Z%=EN+`rFFI?koE-{|=9YL^L<7iUE?Y4-hiLpNg#q7^0`6sxHi&`x{iSi9InaYOz)(Jwui6T=@pcx zy1$4igBWcE_m9(mr*oVC>#P_5559~@nyPlgY9*ex1P+1@!$3?U3F z?=1Hzx}vjOe%;8^#V}7=8ksYg+cFNss;wgU!?;yuCVY(#5mZY?VTU^U3Zvv63Cg)R z6Eps9^|Q;{C$89sUbYurv8S#!6#x26E!z0>)|59<@^w?Y)2r_pHNtch4n-N~Bx0EA zYBt68qwCG*{I! zR@FoVnuyMFkR0MI9VqQ;stC#9VU7^lYuFc-=}dUujf-;*h|VIw=0GsH3&q+&iv&-3 z>jm$rm8^=9hm#N?3~34#qj;*@W|?6rz#HB5vUBKR1s9NkP=zF5=S(S1F*Jmsn-ob* zi0$8Kw$Rpr*+O>u70iu5)XdOmLm82$&7s{p>JsXB9um1jZOw04cQ0<;`Sh^en{6oB zR)eiu+xxEByI1VNR~yQ!67O7Ka2~j|RkBB)w!05El*2xgoTzP^nlS+Md(f%29aA&b zzT}fDnf(pg@-W}jR}E)y!d%ntn8jL=CyQ?8u{*?7rPHC43BMK~+64oMiH}$$0MEW4 zSAW31AfJ8^cJ!V42^VUoz0e_4Pv1q<%|D>4dvTtYzF#a;bsnQcSx4j}`##FK@_}J& zaHUo_tW}PN65~>~4QpSRitP+B_jn|B-0; z6(#>fiQt3%Gi3wBii(sVsy)K~g=(CngrGKB6ae&la1KfPDoeh0vdLhRki2E&NWw_c z9ZB12>fMsCzeNL{aHDZm_&*UXnXmIJ-*V&etz8%0KIFXzZu6W@<;6$HI@I!QiFHUU zOT=kVOhm09`5?q(ox>Z}Aq-zDSZ=TtNJZ-tY~{Y4^xOAi(aby1FJdt=m*eDEh{Ie? zV=;2XO#QZrIR=1!AuC3knEn1mcS{pfyn(jNrsVG^`FkWGR&R@K!LgXnfr%kHqU1&5 zcpoxi7H9ffJY(1HTrwTLs9`u?G`sxMM~~uWTuvDUdAU8u-R(K%Y|nM_m4=1s%B4`o zzh=K;2Dx?4>pG*WpQPqw*d-95lkA_J@>>BQV7{>O79&kP4$kD~Ro$$3>{|N~q;W-7retB^ecvfsDFG z+MH`J^5LWp1nqVDk~@*kh}J+IN5=H|a2a=QCLJ<{ao9S1hMLsUsY@oY&_WS6kMMC3 z{2Zc)Lj79WDCSpSYW+Kjjgs3WHs|;m68$zf(olwdwg|OY!GBMTIU&%8bMn&3jniVZ z((nYXIbpOjvF6b+m=8Ee&bU)GO2YHt7-oV}6*Zh#Y4S>ncuNtQD5CQiZFNqh+3S>} z>soOcDsBhG9Tuw*Caw%VrrZxG5$?`UDEA{ueoV6l-)e`rAY#di*z$>EA@o+L5!( z1dB%1t;5X-J)7T)sZsT=*^J=P97Xb3y_LWFj+;-TPPQ4rqq&>vr(C=r^(UGUJevCs zMAcuSJ|4{*(cY-Kqhy*fJe#u#_XW@9VA~6dKSz5}E92I}vpLh}zTnxM$7e-n;`41U zZJkAApY2+jUKM~

    L%pQ~z5ZKJO+52k7>T!>! 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_reversal_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_reversal_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6de9fbe1272dd6e52988af8494344061d59fb078 GIT binary patch literal 6672 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 Nmi)1OpWs(^@lR+~g!upf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_transfer_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0c82b22d7325443329e6f92df63516174bdc5e4 GIT binary patch literal 6639 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 WE*JN#hxhMt!(8?o^#H*SyZOJPM)N2D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_updateable_api_resource.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_updateable_api_resource.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6544856f8014bbb30bc8df3228e7aa700249283f GIT binary patch literal 1989 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 UReIg^w(xbCyg#Z8m literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v1_services.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v1_services.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4337ce0a11187c4f6d0c9601d4c1ab93f7f4645 GIT binary patch literal 14059 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v2_services.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_v2_services.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7dcf1be3475f6246aa6a1b62ed71c6b6d62e971 GIT binary patch literal 1660 zcmah}-D@0G6u);q_H$;l`DnJS29|CJtePE~s-TqCB!*UsL5K<+gzIMKCLJ?7v%PmV z&4vwx5;1)ce33*D^wE+R{{>%s@g-pq;*dOuPrgNymXIgUosXvVK`*;!&OPVcbI$#p zbM7y?o@+1wLh^7bPoWWr60tmCT%kZXqkbfh>*U9XX0-<~w?|@Tb^RaiGun z%x=*+%9ia06#~22@|aJWp4E0j!H0K0m?6`*XQuDGH+u^#3RAY@*zV%_nf$cJ5*MqN zdFZjWJW(U_ktN}gdzONrtEJ}*8gTHLHZ4+;f^>W;P=vN25=~Zo1$6v2NWK8bC^E5y zOz9(lj>?vF9psh_oFceQw16#jBV#I7Y6F?-CR)K}Y7SM?LGI&;IDZ~y#WG;eL0b3zQ=+rAq}U_IU!s`D3{mIJ~i%nO=>KjeB7}-NH0>q?)!|v@S-5iqg{|A=S9rip`97V zpqzzCu(apfJ`ML(l?gNh#jQ7KkdG&8fq6~gD4e)JkC~_sxWK3^78?{N^Mu6l30WO} zp=8hG7r~IbK-STbq-QG!72`)`ukyy8R^Gg`T{?KVa!?%EUg{NJ*)NukRe7Ya`Tj`; z=|lTP@%s&w)_2}FUawd?Nh^BcB!`Ax+J61}q2A!wt~Pdh&{z5!VemUp?hRbo)vg@L zush=#gnT%eoz&1z+R$WK2I!#I#Z?IbeBu`bc#V+z?Ya|d`Ut7Jt_Psno(qj1wj(Qp zvp|ohp+Ox7<^{6>ka96t?}Tu$Jg_0@7Yfm4r=O#JeWa(1?B_~7rF5cTb@XYfpjOyW zVmn*ag5mhhA<;J(2PT>`$VP>MQHqM(?{``-XoRl#)a4>eCdv~0-^&*K=gY>1lY}0l zC^=E#v&{AArM_0bh>L|oBkN9dO~_g zKp_V`Ii8ZESJ8w2$6k~iHWVzouPBB?|eO_}VV< zb*8;nix~A%ZZ*JKV&*sNSY}#d|DcPdNcC2nN$pPHr52Uu1D>RbmxQ2Ctfo9@vR~Go zGB5RtfCZX^N$(mcdxViX^+{dvDN`GYuk1o@zRFZzgHLBVQ<>3FPJ=Ialp3aQfQOlt zEK`m<4;c>{fx8wmX>gXdcus>uw>Me5X@|j@-OSP_Nqo6>@scfqlr1;G!Chy< z7WtiRXA{%PoG91|;#xD46G1FeH};s*;$eGXDDB$t3RXra053=nkVqq9aFQ=o*d~pp z%iTzLc$Z-rxgZ~hB|ZUQX?zm(X@nVsSpb2%mq2(06lpq~J!>(MwoeWxb!0`Fi4wqb z(k+vPMScSG6>ALkIk6it$B|{ni4wmRqCVj`&suIcSW%%GdhaEqaR`&3h{_ z_P4GY#rF2h&^2m>E$6@maDGk>D>J`U&U~(%IjEd{d+&2)`K5X|HT!z!)z1FIx2qrL zU+x@CUHN2Q88ltz^LW}R1T0_CvY${p*2_h-At37n@@$uM6-B?=dE6&36wN`06{{?b zG;6{uEBJv-k<*36VOuGSMUcdTW69-Q@w{qIF*-^9Zz(v1t(L~Xk|!{l)ED!5LDQT3 r9Jpe`L=~W`QcC|IKmJatf0J6@FzI6Fe4oJ3pI7PCPW3+mL!R+hBTqJ@ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_version.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_version.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc62981839c28cc0c3b92d40022b827cd88ba9ff GIT binary patch literal 212 zcmX@j%ge<81jXN^GKGQkV-N=h7@>^M96-i&h7^Vek&P1gB1UY(a*@wP1R4&tI&5zEzT~HiGML`23hFw%a`k=?8PX+oST1F&XExZAx{eUC_s>?wlv>vHCc*Dc78Cw%WYv&H2(ktL;+#xj;HV zAsP)K*?j@Y9wm5(#YL^n&{TgkzaZ3q}JE|Q9sAc+Ejei;$tTQl9WIj+z zs6>_M5_7G_MIpoEu#8)=;C$J22^n6e=Q`u8W12GpPVacoX>Hae&S-VM#@n3MW?f>> zQF;(`hn>FhPN%h5UuT_N$=r3`iG^vt#2-g7*RaXUiloWP1~*}h?s)`5(`=3v@&JV@AStQlRqn};7`+o9lx4x!jS_>F`wzmh`MMP82exyX0Yb3 zdX$*Hvm{QYgp49Wu$k<*uH{Wm)kImx#4(uo)C@p~<#hv3z+y(RmczuxW}7gkYNte1 zn9Ld(K`W3@(;-d`oGmDrm@(!uT?KK9h%=k??3km5hrq>(VR{TrRj` zg~Yc`ydAO2#(Rm3mQxaA`E!XuML%t5g~VaaP}DsGB>M7Wi2+eMt>ond%siV=v!@b; zDI=rhpNscDo6xg{vZnwH;+Uc*?BykdNjr4og()+zxjRdBv7=_E_yYqWSdu;k4KsHBgRXyy+H%yqHr2!E6$UuP0Q}_6ow82~n+$v<#+RO}_p5h%oZT z>#4Vr!-rC)S2q9=q?`iAk#Qf$x{7cVD%?v5K&DN|Y0$R;xqy~CA6sDCZ*wiT69@m^ zcb945+SeGwhwjkOvgeX%68!7MInrwb(Dfji$n*uYi6aUNxU%`pD=wLrxdxfzulUMTO>|+9BrYEDE zv-x5Segb+haRmqvC7tXS4u$0}Gh{*kgrNv>l zi{FTYY;Er42$JbqKpsCEPHlbkarRj^)zx(xq`$^03 z_c@~u_)QkzgE{Mv4~lAK)7*pT5-rhVNTS~dK%FLr+=?G=9S5YZ&>w|aG|f!Yh7(_? z#5BkO#36EIwhOe$-07!blhj9E=;28Z%nz}kZ@R|eIDVS_X(=UYYbnzlXkts;D196x zQkK-oEn5KW8`SO%>g69uOkzSz%J_lo6=H(Z3u@LdnQY#GL(SJvnAfF@l2c47Yc{D_ z-4Fo4ascs0HV3gI<_Z>=+Wyvc5|=hi+ClMzFs2wnomUX^@@9DG#rVVV@hJZ1K)PNA zavt4IJpY%{)zbW-#l*qy+LK@QToz}>u8dWr+5S(oh4y5*3COLsj@jaOoypmrxi{y| zd^IwE{OgmImP-F0+ir9wzv-!V4lcH(%AV!EIEbj6nd_NLe$_X>{pb{26aQEvhv3MusF68dF z%6L8Zae6kfs>Bu{Upfuiaj-!mU*aC#%ap6PAusDg*blkSrcFpj*0A$QbdEWJCaIWv zxVZQ2ym(4gB8C=G&KX#gj7U9FBM_;PI*{oRl4(TjBT?Kntlc-HO#m;+J3veUawG+2 zT8AbQ)r(wIjz@K=5l;xTlTcpU3*-~(HAKOMQ9|z%%%C=t(~D%`H3xi3%}^8~m@$R^ z%uG^OsbNf_36d^4{)|cKrq|I;&Q}eY&s&FZ!?S-($-^){Q0#x`z}=T~#rLb4B&zy> zczw#7phYJMmBBYKtDcxeidtTYJROx|BXA9;K(84{{qk7q z&`4@fIDY7G>S)UJq|Ql-mHuHjFkoV1lM(Y%CQFh?|c3Sl7E8IBNgh>$@b z@R))1DKaFxR=$W|gHD~C5gXegk%N|HaR+o2pM11Ue@^E94+vOqmGyZ1%Y8eR`cl=t z)N(LfVU{{~RXcaBF?7^l_4bsHTrS>eL&5G_q1~%A)zZG)(Y@5Mv)Zxq4nwu zK$>smOPJgUrq537hCD~k;B_> zFgrE2_I|G`q>If btn=+udwFynLACzOi&Wd?v;RR*S;qK3b;S-W literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56ceaefdeaa14e0e523635699c08da8ba5c47ee1 GIT binary patch literal 9919 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 N^SZu>A|}(`{{by>ke&bl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_webhook_endpoint_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a55b5781ff049e2a853e96a42976a74a77de65e GIT binary patch literal 6902 zcmd@ZTW=KS^_#uSUc6qfFBsd@VF(b|81HgP2$$S!Llc_DpwJ3sBf5-tKI4J8Y`&Q_ zF>$2|P^Czbny1p|^vQ+3RO(av11j|es}HfZwc4mJ?b}uhZRMw)^L;b3_IQ_tqP9pK z$!EWrbH3ZTpX1;5_NECu&fmxMeR~M`Grssw+#5810fW0lBbsCoQz}Ukjw43IjFzH& z95rHQyc9R(lFZ*@M#4;%k`kdwb{J^mM#@Z=(i|rnJ!Ynq;p2qSYi3JXK292aX0DXu z@MdrM`Ub zulSOe>b)0TrdR1j$`zVqRQv*nq0 z&(6GeZuTAckp8yrxaa4t(F&roAJC6$6h82I4t(jmMCTT4`}$c+tJ=DSM7u(tW*Ajn zdO>BXi8I3JGt{7)(4(Q*xPLHrJcRs!!UgGK=f%HU)q=e%f<*$RyqD$|63Up8lBAJR zBt=q08_^;(szqr`i;V)A7Kf3{M+q%CpVU%!K;}Bs8jh`K+#VF~nu>o-M_JTW#a*DvM`4s=s+M|{n$&VHA6#(V zs&lGX)Kq6-&Q_ULaJUmFRBW@TRw{PQa*N&yPF|_PM8%%x3kz?dv}Ohe$2>d>;PX^c7!8w3m+0#jDmQ#WU2o?%LJjyS7V>$!Ty)x^=ZU ztyZoB7mJJ3S}Yp+T(P?3F4)$w!jYpzM|bID6$pS0PEl~GSPoyL>I5Da<&NSq4*en1`$klfH(W_&G^`_cQKy}yV-*!rrx=<7*?k8-1jAtVxo+*=D>amu`@rRJsXkZr9`6@Ui&?fcJ>> zU)1H>L`!@Mmh$7s-RKYFanjQ5*U0C|pGR*<`6Sy3$KuMv`Nq(#urUO?5PSo`tS|no zFaEOXELjz%AO%X9L3}2GyxCrOt7inK1?kPbm$n9>t>O?wuizqA0Q`mgbCX;KhQAuv zzdEr0=_E7w5=dq+`;V>SX~aNU8_ho0 zX~(k|6WiBLCeO1mO&~Kdl(9ny+VFdpy@Z%H29x#q>6y&_E^HTMS75cr8qL#4;BiL7 z@_25voafF;ZUwq7lF9ZqQcy66o9dE6HQnXLQe(y;J}@AK#TZL1b3EhTnY3d3b{kL8vg&Xup_92+`^9H zs12_>TUbVLvr96_@==XKOA?QO%`w*PQl&Y#*VhxXDgvtiSTri z?S>gEQT8HE4025euLN16$Rc96{mpPe>Sqs#{1V6=OdTL)$njJzAEa{N`wpy)zv!iF zJv?2LFuPnq|GG-We~1j#RP{uuy5m3>yVva2w&P+eurptf+V5rfx_CRTE{lu7AJ zX(Ij8)TG3)T>H;z=hyvEngt3vwXOV8%o;fH1$B{v)`Dl}&by_*TU~oA7>H_AHH;<2 zsnUu*zr;O0lqLp+g0Es*7Iapi3WMedbU|1_IXAC36at8?xU5Eb0D;0#neiyYHUi73 zu437)KCe>|n#4vr)xKqK2&jVzAcG2#mJZ(#CPuhJ?I!RJ5UUIpVpN50ImH`_BN zBW~U$I&LQVJu)fmQpVR>E+x#V$GH^tHmsJ9%+BVe*?b?g8p;+JT)A9Nm&>ND)eIbG z%H@x1s^MXxkZdvR+lbQjAdV&x6cHRl@G64W5xj+92EkbXD}=j#9%NWQenl`2f6m+B zX6}$ilAL~Pt#I^jsiAoKPh;baIQ&BK-#_|b^!RG-wMGKplVo7*!Pv{I{SytOYotkf zSF;C4N1t{28>?N6-cPIlk^S?B*RZ-1Dad;>3^=m*~CMjnj5vYLCf5r;RBK)`Xt zf&|hBnkgK;{O?RUM2g3}Z6-TzuuE+4WV8?QFhaRdrDm~HD!NvMviS9TRV)hldd5fA zT;1T^l)CILRl!{f)#i=2e(|MDKXIw$fJbx~b~WpR{$!pC*!-UWEQy$%KE~_VmA7j}94vB$Q^3|n%Ta73Ul*R}O?C+o*h_Z437`>`Bi_@% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/oauth_error.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/oauth_error.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f118a01200c545097f73d759510d8bd48fd9598 GIT binary patch literal 2236 zcma)7O>7%Q6rR~#JKl9t=RZvfG$k#nE1D%V1PM??3stC)T+|c}zKopRNn&Tc>&~vD zx-wD@kq8n9IH2U%YZVTh5J&D@8gZz#Qcu8vTO>PG)f4Z{`e#!`kg@dk&G%;BH*em1 zjwb{A1O}`lMs})#KSmVCw z%T$$<2ZTK&XqZAyudp zSs4-f2d~Go({mqRGXf6$_d#rtMmqD|;@69h(-#^e6Mv`P z{VQ|+Nya?Lm@wU4{9&;%KJ#RJ{$PCmkMV`Z*kr3u8#E4yrW*pCWVIZOY!WNnEtEN9 zp~3J9st)S?jNPjioX8?;N4$z>A841a#T^Hlf{GzL5SGM;GC0{aQebKL=RiE)CWi(Y znP`ljZ48e$21k!F>4foY%1A^fk*klr51k5Y_QUqx>rkUvB^YM;KwLtBw;C~C zMh%5DzR@)zbZWAZHd(uRqexGryMhELByW!np;Oa!Vq3Pn_A{P4k?c(*Lm`zO8BR}4 zHu<>=Z*0XA0k`F4-mU#7DgI9g6mOx@BSq-cq_4zC?{L2Y?aTj%SJI)FKhBF#E}ISq zItu5b-s5fTNmCTgPo4iIDpCmh8NiR|#L>;*(uE93!3!i~FR4JuT u$)%@cu9ZAXjqlI32z*)#l "Account": + """ + With [Connect](https://docs.stripe.com/docs/connect), you can create Stripe accounts for your users. + To do this, you'll first need to [register your platform](https://dashboard.stripe.com/account/applications/settings). + + If you've already collected information for your connected accounts, you [can prefill that information](https://docs.stripe.com/docs/connect/best-practices#onboarding) when + creating the account. Connect Onboarding won't ask for the prefilled information during account onboarding. + You can prefill any information on the account. + """ + return cast( + "Account", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["AccountCreateParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/docs/connect), you can create Stripe accounts for your users. + To do this, you'll first need to [register your platform](https://dashboard.stripe.com/account/applications/settings). + + If you've already collected information for your connected accounts, you [can prefill that information](https://docs.stripe.com/docs/connect/best-practices#onboarding) when + creating the account. Connect Onboarding won't ask for the prefilled information during account onboarding. + You can prefill any information on the account. + """ + return cast( + "Account", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Account", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["AccountDeleteParams"]) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + ... + + @overload + def delete(self, **params: Unpack["AccountDeleteParams"]) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Account", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountDeleteParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["AccountListParams"] + ) -> ListObject["Account"]: + """ + Returns a list of accounts connected to your platform via [Connect](https://docs.stripe.com/docs/connect). If you're not a platform, the list is empty. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["AccountListParams"] + ) -> ListObject["Account"]: + """ + Returns a list of accounts connected to your platform via [Connect](https://docs.stripe.com/docs/connect). If you're not a platform, the list is empty. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_persons( + cls, account: str, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + cls._static_request( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def persons( + account: str, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + ... + + @overload + def persons( + self, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + ... + + @class_method_variant("_cls_persons") + def persons( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + self._request( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_persons_async( + cls, account: str, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + await cls._static_request_async( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def persons_async( + account: str, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + ... + + @overload + async def persons_async( + self, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + ... + + @class_method_variant("_cls_persons_async") + async def persons_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + await self._request_async( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_reject( + cls, account: str, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + cls._static_request( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def reject( + account: str, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + ... + + @overload + def reject(self, **params: Unpack["AccountRejectParams"]) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + ... + + @class_method_variant("_cls_reject") + def reject( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + self._request( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_reject_async( + cls, account: str, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + await cls._static_request_async( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def reject_async( + account: str, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + ... + + @overload + async def reject_async( + self, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + ... + + @class_method_variant("_cls_reject_async") + async def reject_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountRejectParams"] + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve(cls, id=None, **params) -> "Account": + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async(cls, id=None, **params) -> "Account": + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def modify(cls, id=None, **params) -> "Account": + url = cls._build_instance_url(id) + return cast("Account", cls._static_request("post", url, params=params)) + + @classmethod + async def modify_async(cls, id=None, **params) -> "Account": + url = cls._build_instance_url(id) + return cast( + "Account", + await cls._static_request_async("post", url, params=params), + ) + + @classmethod + def _build_instance_url(cls, sid): + if not sid: + return "/v1/account" + base = cls.class_url() + extn = sanitize_id(sid) + return "%s/%s" % (base, extn) + + def instance_url(self): + return self._build_instance_url(self.get("id")) + + def deauthorize(self, **params): + params["stripe_user_id"] = self.id + return OAuth.deauthorize(**params) + + def serialize(self, previous): + params = super(Account, self).serialize(previous) + previous = previous or self._previous or {} + + for k, v in iter(self.items()): + if k == "individual" and isinstance(v, Person) and k not in params: + params[k] = v.serialize(previous.get(k, None)) + + return params + + @classmethod + def list_capabilities( + cls, account: str, **params: Unpack["AccountListCapabilitiesParams"] + ) -> ListObject["Capability"]: + """ + Returns a list of capabilities associated with the account. The capabilities are returned sorted by creation date, with the most recent capability appearing first. + """ + return cast( + ListObject["Capability"], + cls._static_request( + "get", + "/v1/accounts/{account}/capabilities".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def list_capabilities_async( + cls, account: str, **params: Unpack["AccountListCapabilitiesParams"] + ) -> ListObject["Capability"]: + """ + Returns a list of capabilities associated with the account. The capabilities are returned sorted by creation date, with the most recent capability appearing first. + """ + return cast( + ListObject["Capability"], + await cls._static_request_async( + "get", + "/v1/accounts/{account}/capabilities".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + def retrieve_capability( + cls, + account: str, + capability: str, + **params: Unpack["AccountRetrieveCapabilityParams"], + ) -> "Capability": + """ + Retrieves information about the specified Account Capability. + """ + return cast( + "Capability", + cls._static_request( + "get", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + params=params, + ), + ) + + @classmethod + async def retrieve_capability_async( + cls, + account: str, + capability: str, + **params: Unpack["AccountRetrieveCapabilityParams"], + ) -> "Capability": + """ + Retrieves information about the specified Account Capability. + """ + return cast( + "Capability", + await cls._static_request_async( + "get", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + params=params, + ), + ) + + @classmethod + def modify_capability( + cls, + account: str, + capability: str, + **params: Unpack["AccountModifyCapabilityParams"], + ) -> "Capability": + """ + Updates an existing Account Capability. Request or remove a capability by updating its requested parameter. + """ + return cast( + "Capability", + cls._static_request( + "post", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + params=params, + ), + ) + + @classmethod + async def modify_capability_async( + cls, + account: str, + capability: str, + **params: Unpack["AccountModifyCapabilityParams"], + ) -> "Capability": + """ + Updates an existing Account Capability. Request or remove a capability by updating its requested parameter. + """ + return cast( + "Capability", + await cls._static_request_async( + "post", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + params=params, + ), + ) + + @classmethod + def delete_external_account( + cls, + account: str, + id: str, + **params: Unpack["AccountDeleteExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "delete", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def delete_external_account_async( + cls, + account: str, + id: str, + **params: Unpack["AccountDeleteExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "delete", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def retrieve_external_account( + cls, + account: str, + id: str, + **params: Unpack["AccountRetrieveExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Retrieve a specified external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "get", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_external_account_async( + cls, + account: str, + id: str, + **params: Unpack["AccountRetrieveExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Retrieve a specified external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "get", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def modify_external_account( + cls, + account: str, + id: str, + **params: Unpack["AccountModifyExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Updates the metadata, account holder name, account holder type of a bank account belonging to + a connected account and optionally sets it as the default for its currency. Other bank account + details are not editable by design. + + You can only update bank accounts when [account.controller.requirement_collection is application, which includes Custom accounts](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection). + + You can re-enable a disabled bank account by performing an update call without providing any + arguments or changes. + """ + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "post", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def modify_external_account_async( + cls, + account: str, + id: str, + **params: Unpack["AccountModifyExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Updates the metadata, account holder name, account holder type of a bank account belonging to + a connected account and optionally sets it as the default for its currency. Other bank account + details are not editable by design. + + You can only update bank accounts when [account.controller.requirement_collection is application, which includes Custom accounts](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection). + + You can re-enable a disabled bank account by performing an update call without providing any + arguments or changes. + """ + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "post", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def list_external_accounts( + cls, + account: str, + **params: Unpack["AccountListExternalAccountsParams"], + ) -> ListObject[Union["BankAccount", "Card"]]: + """ + List external accounts for an account. + """ + return cast( + ListObject[Union["BankAccount", "Card"]], + cls._static_request( + "get", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def list_external_accounts_async( + cls, + account: str, + **params: Unpack["AccountListExternalAccountsParams"], + ) -> ListObject[Union["BankAccount", "Card"]]: + """ + List external accounts for an account. + """ + return cast( + ListObject[Union["BankAccount", "Card"]], + await cls._static_request_async( + "get", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + def create_external_account( + cls, + account: str, + **params: Unpack["AccountCreateExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Create an external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "post", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def create_external_account_async( + cls, + account: str, + **params: Unpack["AccountCreateExternalAccountParams"], + ) -> Union["BankAccount", "Card"]: + """ + Create an external account for a given account. + """ + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "post", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + def create_login_link( + cls, account: str, **params: Unpack["AccountCreateLoginLinkParams"] + ) -> "LoginLink": + """ + Creates a login link for a connected account to access the Express Dashboard. + + You can only create login links for accounts that use the [Express Dashboard](https://docs.stripe.com/connect/express-dashboard) and are connected to your platform. + """ + return cast( + "LoginLink", + cls._static_request( + "post", + "/v1/accounts/{account}/login_links".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def create_login_link_async( + cls, account: str, **params: Unpack["AccountCreateLoginLinkParams"] + ) -> "LoginLink": + """ + Creates a login link for a connected account to access the Express Dashboard. + + You can only create login links for accounts that use the [Express Dashboard](https://docs.stripe.com/connect/express-dashboard) and are connected to your platform. + """ + return cast( + "LoginLink", + await cls._static_request_async( + "post", + "/v1/accounts/{account}/login_links".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + def delete_person( + cls, + account: str, + person: str, + **params: Unpack["AccountDeletePersonParams"], + ) -> "Person": + """ + Deletes an existing person's relationship to the account's legal entity. Any person with a relationship for an account can be deleted through the API, except if the person is the account_opener. If your integration is using the executive parameter, you cannot delete the only verified executive on file. + """ + return cast( + "Person", + cls._static_request( + "delete", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + async def delete_person_async( + cls, + account: str, + person: str, + **params: Unpack["AccountDeletePersonParams"], + ) -> "Person": + """ + Deletes an existing person's relationship to the account's legal entity. Any person with a relationship for an account can be deleted through the API, except if the person is the account_opener. If your integration is using the executive parameter, you cannot delete the only verified executive on file. + """ + return cast( + "Person", + await cls._static_request_async( + "delete", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + def retrieve_person( + cls, + account: str, + person: str, + **params: Unpack["AccountRetrievePersonParams"], + ) -> "Person": + """ + Retrieves an existing person. + """ + return cast( + "Person", + cls._static_request( + "get", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_person_async( + cls, + account: str, + person: str, + **params: Unpack["AccountRetrievePersonParams"], + ) -> "Person": + """ + Retrieves an existing person. + """ + return cast( + "Person", + await cls._static_request_async( + "get", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + def modify_person( + cls, + account: str, + person: str, + **params: Unpack["AccountModifyPersonParams"], + ) -> "Person": + """ + Updates an existing person. + """ + return cast( + "Person", + cls._static_request( + "post", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + async def modify_person_async( + cls, + account: str, + person: str, + **params: Unpack["AccountModifyPersonParams"], + ) -> "Person": + """ + Updates an existing person. + """ + return cast( + "Person", + await cls._static_request_async( + "post", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), person=sanitize_id(person) + ), + params=params, + ), + ) + + @classmethod + def list_persons( + cls, account: str, **params: Unpack["AccountListPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + cls._static_request( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def list_persons_async( + cls, account: str, **params: Unpack["AccountListPersonsParams"] + ) -> ListObject["Person"]: + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + ListObject["Person"], + await cls._static_request_async( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + def create_person( + cls, account: str, **params: Unpack["AccountCreatePersonParams"] + ) -> "Person": + """ + Creates a new person. + """ + return cast( + "Person", + cls._static_request( + "post", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @classmethod + async def create_person_async( + cls, account: str, **params: Unpack["AccountCreatePersonParams"] + ) -> "Person": + """ + Creates a new person. + """ + return cast( + "Person", + await cls._static_request_async( + "post", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + _inner_class_types = { + "business_profile": BusinessProfile, + "capabilities": Capabilities, + "company": Company, + "controller": Controller, + "future_requirements": FutureRequirements, + "groups": Groups, + "requirements": Requirements, + "settings": Settings, + "tos_acceptance": TosAcceptance, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_capability_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_capability_service.py new file mode 100644 index 00000000..afe33c8c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_capability_service.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._capability import Capability + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._account_capability_list_params import ( + AccountCapabilityListParams, + ) + from stripe.params._account_capability_retrieve_params import ( + AccountCapabilityRetrieveParams, + ) + from stripe.params._account_capability_update_params import ( + AccountCapabilityUpdateParams, + ) + + +class AccountCapabilityService(StripeService): + def list( + self, + account: str, + params: Optional["AccountCapabilityListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Capability]": + """ + Returns a list of capabilities associated with the account. The capabilities are returned sorted by creation date, with the most recent capability appearing first. + """ + return cast( + "ListObject[Capability]", + self._request( + "get", + "/v1/accounts/{account}/capabilities".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + account: str, + params: Optional["AccountCapabilityListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Capability]": + """ + Returns a list of capabilities associated with the account. The capabilities are returned sorted by creation date, with the most recent capability appearing first. + """ + return cast( + "ListObject[Capability]", + await self._request_async( + "get", + "/v1/accounts/{account}/capabilities".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + account: str, + capability: str, + params: Optional["AccountCapabilityRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Capability": + """ + Retrieves information about the specified Account Capability. + """ + return cast( + "Capability", + self._request( + "get", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + account: str, + capability: str, + params: Optional["AccountCapabilityRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Capability": + """ + Retrieves information about the specified Account Capability. + """ + return cast( + "Capability", + await self._request_async( + "get", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + account: str, + capability: str, + params: Optional["AccountCapabilityUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Capability": + """ + Updates an existing Account Capability. Request or remove a capability by updating its requested parameter. + """ + return cast( + "Capability", + self._request( + "post", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + account: str, + capability: str, + params: Optional["AccountCapabilityUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Capability": + """ + Updates an existing Account Capability. Request or remove a capability by updating its requested parameter. + """ + return cast( + "Capability", + await self._request_async( + "post", + "/v1/accounts/{account}/capabilities/{capability}".format( + account=sanitize_id(account), + capability=sanitize_id(capability), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_external_account_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_external_account_service.py new file mode 100644 index 00000000..c599096f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_external_account_service.py @@ -0,0 +1,276 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._account_external_account_create_params import ( + AccountExternalAccountCreateParams, + ) + from stripe.params._account_external_account_delete_params import ( + AccountExternalAccountDeleteParams, + ) + from stripe.params._account_external_account_list_params import ( + AccountExternalAccountListParams, + ) + from stripe.params._account_external_account_retrieve_params import ( + AccountExternalAccountRetrieveParams, + ) + from stripe.params._account_external_account_update_params import ( + AccountExternalAccountUpdateParams, + ) + from typing import Union + + +class AccountExternalAccountService(StripeService): + def delete( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Delete a specified external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + self._request( + "delete", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Delete a specified external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + await self._request_async( + "delete", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Retrieve a specified external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + self._request( + "get", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Retrieve a specified external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + await self._request_async( + "get", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Updates the metadata, account holder name, account holder type of a bank account belonging to + a connected account and optionally sets it as the default for its currency. Other bank account + details are not editable by design. + + You can only update bank accounts when [account.controller.requirement_collection is application, which includes Custom accounts](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection). + + You can re-enable a disabled bank account by performing an update call without providing any + arguments or changes. + """ + return cast( + "Union[BankAccount, Card]", + self._request( + "post", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + account: str, + id: str, + params: Optional["AccountExternalAccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Updates the metadata, account holder name, account holder type of a bank account belonging to + a connected account and optionally sets it as the default for its currency. Other bank account + details are not editable by design. + + You can only update bank accounts when [account.controller.requirement_collection is application, which includes Custom accounts](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection). + + You can re-enable a disabled bank account by performing an update call without providing any + arguments or changes. + """ + return cast( + "Union[BankAccount, Card]", + await self._request_async( + "post", + "/v1/accounts/{account}/external_accounts/{id}".format( + account=sanitize_id(account), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + account: str, + params: Optional["AccountExternalAccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Union[BankAccount, Card]]": + """ + List external accounts for an account. + """ + return cast( + "ListObject[Union[BankAccount, Card]]", + self._request( + "get", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + account: str, + params: Optional["AccountExternalAccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Union[BankAccount, Card]]": + """ + List external accounts for an account. + """ + return cast( + "ListObject[Union[BankAccount, Card]]", + await self._request_async( + "get", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + account: str, + params: "AccountExternalAccountCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Create an external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + self._request( + "post", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + account: str, + params: "AccountExternalAccountCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Union[BankAccount, Card]": + """ + Create an external account for a given account. + """ + return cast( + "Union[BankAccount, Card]", + await self._request_async( + "post", + "/v1/accounts/{account}/external_accounts".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_link.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_link.py new file mode 100644 index 00000000..15043e9e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_link.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from typing import ClassVar, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._account_link_create_params import ( + AccountLinkCreateParams, + ) + + +class AccountLink(CreateableAPIResource["AccountLink"]): + """ + Account Links are the means by which a Connect platform grants a connected account permission to access + Stripe-hosted applications, such as Connect Onboarding. + + Related guide: [Connect Onboarding](https://stripe.com/docs/connect/custom/hosted-onboarding) + """ + + OBJECT_NAME: ClassVar[Literal["account_link"]] = "account_link" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expires_at: int + """ + The timestamp at which this account link will expire. + """ + object: Literal["account_link"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + url: str + """ + The URL for the account link. + """ + + @classmethod + def create( + cls, **params: Unpack["AccountLinkCreateParams"] + ) -> "AccountLink": + """ + Creates an AccountLink object that includes a single-use Stripe URL that the platform can redirect their user to in order to take them through the Connect Onboarding flow. + """ + return cast( + "AccountLink", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["AccountLinkCreateParams"] + ) -> "AccountLink": + """ + Creates an AccountLink object that includes a single-use Stripe URL that the platform can redirect their user to in order to take them through the Connect Onboarding flow. + """ + return cast( + "AccountLink", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_link_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_link_service.py new file mode 100644 index 00000000..ac0d42f3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_link_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account_link import AccountLink + from stripe._request_options import RequestOptions + from stripe.params._account_link_create_params import ( + AccountLinkCreateParams, + ) + + +class AccountLinkService(StripeService): + def create( + self, + params: "AccountLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "AccountLink": + """ + Creates an AccountLink object that includes a single-use Stripe URL that the platform can redirect their user to in order to take them through the Connect Onboarding flow. + """ + return cast( + "AccountLink", + self._request( + "post", + "/v1/account_links", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "AccountLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "AccountLink": + """ + Creates an AccountLink object that includes a single-use Stripe URL that the platform can redirect their user to in order to take them through the Connect Onboarding flow. + """ + return cast( + "AccountLink", + await self._request_async( + "post", + "/v1/account_links", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_login_link_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_login_link_service.py new file mode 100644 index 00000000..39212510 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_login_link_service.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._login_link import LoginLink + from stripe._request_options import RequestOptions + from stripe.params._account_login_link_create_params import ( + AccountLoginLinkCreateParams, + ) + + +class AccountLoginLinkService(StripeService): + def create( + self, + account: str, + params: Optional["AccountLoginLinkCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "LoginLink": + """ + Creates a login link for a connected account to access the Express Dashboard. + + You can only create login links for accounts that use the [Express Dashboard](https://docs.stripe.com/connect/express-dashboard) and are connected to your platform. + """ + return cast( + "LoginLink", + self._request( + "post", + "/v1/accounts/{account}/login_links".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + account: str, + params: Optional["AccountLoginLinkCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "LoginLink": + """ + Creates a login link for a connected account to access the Express Dashboard. + + You can only create login links for accounts that use the [Express Dashboard](https://docs.stripe.com/connect/express-dashboard) and are connected to your platform. + """ + return cast( + "LoginLink", + await self._request_async( + "post", + "/v1/accounts/{account}/login_links".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_person_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_person_service.py new file mode 100644 index 00000000..06a94733 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_person_service.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._person import Person + from stripe._request_options import RequestOptions + from stripe.params._account_person_create_params import ( + AccountPersonCreateParams, + ) + from stripe.params._account_person_delete_params import ( + AccountPersonDeleteParams, + ) + from stripe.params._account_person_list_params import ( + AccountPersonListParams, + ) + from stripe.params._account_person_retrieve_params import ( + AccountPersonRetrieveParams, + ) + from stripe.params._account_person_update_params import ( + AccountPersonUpdateParams, + ) + + +class AccountPersonService(StripeService): + def delete( + self, + account: str, + person: str, + params: Optional["AccountPersonDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Deletes an existing person's relationship to the account's legal entity. Any person with a relationship for an account can be deleted through the API, except if the person is the account_opener. If your integration is using the executive parameter, you cannot delete the only verified executive on file. + """ + return cast( + "Person", + self._request( + "delete", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + account: str, + person: str, + params: Optional["AccountPersonDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Deletes an existing person's relationship to the account's legal entity. Any person with a relationship for an account can be deleted through the API, except if the person is the account_opener. If your integration is using the executive parameter, you cannot delete the only verified executive on file. + """ + return cast( + "Person", + await self._request_async( + "delete", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + account: str, + person: str, + params: Optional["AccountPersonRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Retrieves an existing person. + """ + return cast( + "Person", + self._request( + "get", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + account: str, + person: str, + params: Optional["AccountPersonRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Retrieves an existing person. + """ + return cast( + "Person", + await self._request_async( + "get", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + account: str, + person: str, + params: Optional["AccountPersonUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Updates an existing person. + """ + return cast( + "Person", + self._request( + "post", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + account: str, + person: str, + params: Optional["AccountPersonUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Updates an existing person. + """ + return cast( + "Person", + await self._request_async( + "post", + "/v1/accounts/{account}/persons/{person}".format( + account=sanitize_id(account), + person=sanitize_id(person), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + account: str, + params: Optional["AccountPersonListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Person]": + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + "ListObject[Person]", + self._request( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + account: str, + params: Optional["AccountPersonListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Person]": + """ + Returns a list of people associated with the account's legal entity. The people are returned sorted by creation date, with the most recent people appearing first. + """ + return cast( + "ListObject[Person]", + await self._request_async( + "get", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + account: str, + params: Optional["AccountPersonCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Creates a new person. + """ + return cast( + "Person", + self._request( + "post", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + account: str, + params: Optional["AccountPersonCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Person": + """ + Creates a new person. + """ + return cast( + "Person", + await self._request_async( + "post", + "/v1/accounts/{account}/persons".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_service.py new file mode 100644 index 00000000..ecec209b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_service.py @@ -0,0 +1,397 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._account_capability_service import AccountCapabilityService + from stripe._account_external_account_service import ( + AccountExternalAccountService, + ) + from stripe._account_login_link_service import AccountLoginLinkService + from stripe._account_person_service import AccountPersonService + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._account_create_params import AccountCreateParams + from stripe.params._account_delete_params import AccountDeleteParams + from stripe.params._account_list_params import AccountListParams + from stripe.params._account_reject_params import AccountRejectParams + from stripe.params._account_retrieve_current_params import ( + AccountRetrieveCurrentParams, + ) + from stripe.params._account_retrieve_params import AccountRetrieveParams + from stripe.params._account_update_params import AccountUpdateParams + +_subservices = { + "capabilities": [ + "stripe._account_capability_service", + "AccountCapabilityService", + ], + "external_accounts": [ + "stripe._account_external_account_service", + "AccountExternalAccountService", + ], + "login_links": [ + "stripe._account_login_link_service", + "AccountLoginLinkService", + ], + "persons": ["stripe._account_person_service", "AccountPersonService"], +} + + +class AccountService(StripeService): + capabilities: "AccountCapabilityService" + external_accounts: "AccountExternalAccountService" + login_links: "AccountLoginLinkService" + persons: "AccountPersonService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def delete( + self, + account: str, + params: Optional["AccountDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + return cast( + "Account", + self._request( + "delete", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + account: str, + params: Optional["AccountDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can delete accounts you manage. + + Test-mode accounts can be deleted at any time. + + Live-mode accounts that have access to the standard dashboard and Stripe is responsible for negative account balances cannot be deleted, which includes Standard accounts. All other Live-mode accounts, can be deleted when all [balances](https://docs.stripe.com/api/balance/balance_object) are zero. + + If you want to delete your own account, use the [account information tab in your account settings](https://dashboard.stripe.com/settings/account) instead. + """ + return cast( + "Account", + await self._request_async( + "delete", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + account: str, + params: Optional["AccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an account. + """ + return cast( + "Account", + self._request( + "get", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + account: str, + params: Optional["AccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an account. + """ + return cast( + "Account", + await self._request_async( + "get", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + account: str, + params: Optional["AccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Updates a [connected account](https://docs.stripe.com/connect/accounts) by setting the values of the parameters passed. Any parameters not provided are + left unchanged. + + For accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) + is application, which includes Custom accounts, you can update any information on the account. + + For accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) + is stripe, which includes Standard and Express accounts, you can update all information until you create + an [Account Link or Account Session](https://docs.stripe.com/api/account_links) to start Connect onboarding, + after which some properties can no longer be updated. + + To update your own account, use the [Dashboard](https://dashboard.stripe.com/settings/account). Refer to our + [Connect](https://docs.stripe.com/docs/connect/updating-accounts) documentation to learn more about updating accounts. + """ + return cast( + "Account", + self._request( + "post", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + account: str, + params: Optional["AccountUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Updates a [connected account](https://docs.stripe.com/connect/accounts) by setting the values of the parameters passed. Any parameters not provided are + left unchanged. + + For accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) + is application, which includes Custom accounts, you can update any information on the account. + + For accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) + is stripe, which includes Standard and Express accounts, you can update all information until you create + an [Account Link or Account Session](https://docs.stripe.com/api/account_links) to start Connect onboarding, + after which some properties can no longer be updated. + + To update your own account, use the [Dashboard](https://dashboard.stripe.com/settings/account). Refer to our + [Connect](https://docs.stripe.com/docs/connect/updating-accounts) documentation to learn more about updating accounts. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/accounts/{account}".format(account=sanitize_id(account)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve_current( + self, + params: Optional["AccountRetrieveCurrentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an account. + """ + return cast( + "Account", + self._request( + "get", + "/v1/account", + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_current_async( + self, + params: Optional["AccountRetrieveCurrentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an account. + """ + return cast( + "Account", + await self._request_async( + "get", + "/v1/account", + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["AccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Account]": + """ + Returns a list of accounts connected to your platform via [Connect](https://docs.stripe.com/docs/connect). If you're not a platform, the list is empty. + """ + return cast( + "ListObject[Account]", + self._request( + "get", + "/v1/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["AccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Account]": + """ + Returns a list of accounts connected to your platform via [Connect](https://docs.stripe.com/docs/connect). If you're not a platform, the list is empty. + """ + return cast( + "ListObject[Account]", + await self._request_async( + "get", + "/v1/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["AccountCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/docs/connect), you can create Stripe accounts for your users. + To do this, you'll first need to [register your platform](https://dashboard.stripe.com/account/applications/settings). + + If you've already collected information for your connected accounts, you [can prefill that information](https://docs.stripe.com/docs/connect/best-practices#onboarding) when + creating the account. Connect Onboarding won't ask for the prefilled information during account onboarding. + You can prefill any information on the account. + """ + return cast( + "Account", + self._request( + "post", + "/v1/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["AccountCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/docs/connect), you can create Stripe accounts for your users. + To do this, you'll first need to [register your platform](https://dashboard.stripe.com/account/applications/settings). + + If you've already collected information for your connected accounts, you [can prefill that information](https://docs.stripe.com/docs/connect/best-practices#onboarding) when + creating the account. Connect Onboarding won't ask for the prefilled information during account onboarding. + You can prefill any information on the account. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + def reject( + self, + account: str, + params: "AccountRejectParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + self._request( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def reject_async( + self, + account: str, + params: "AccountRejectParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + With [Connect](https://docs.stripe.com/connect), you can reject accounts that you have flagged as suspicious. + + Only accounts where your platform is liable for negative account balances, which includes Custom and Express accounts, can be rejected. Test-mode accounts can be rejected at any time. Live-mode accounts can only be rejected after all balances are zero. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/accounts/{account}/reject".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_session.py new file mode 100644 index 00000000..0f338bb1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_session.py @@ -0,0 +1,514 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._account_session_create_params import ( + AccountSessionCreateParams, + ) + + +class AccountSession(CreateableAPIResource["AccountSession"]): + """ + An AccountSession allows a Connect platform to grant access to a connected account in Connect embedded components. + + We recommend that you create an AccountSession each time you need to display an embedded component + to your user. Do not save AccountSessions to your database as they expire relatively + quickly, and cannot be used more than once. + + Related guide: [Connect embedded components](https://stripe.com/docs/connect/get-started-connect-embedded-components) + """ + + OBJECT_NAME: ClassVar[Literal["account_session"]] = "account_session" + + class Components(StripeObject): + class AccountManagement(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class AccountOnboarding(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class Balances(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + edit_payout_schedule: bool + """ + Whether to allow payout schedule to be changed. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + instant_payouts: bool + """ + Whether to allow creation of instant payouts. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + standard_payouts: bool + """ + Whether to allow creation of standard payouts. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class DisputesList(StripeObject): + class Features(StripeObject): + capture_payments: bool + """ + Whether to allow capturing and cancelling payment intents. This is `true` by default. + """ + destination_on_behalf_of_charge_management: bool + """ + Whether connected accounts can manage destination charges that are created on behalf of them. This is `false` by default. + """ + dispute_management: bool + """ + Whether responding to disputes is enabled, including submitting evidence and accepting disputes. This is `true` by default. + """ + refund_management: bool + """ + Whether sending refunds is enabled. This is `true` by default. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class Documents(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class FinancialAccount(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + send_money: bool + """ + Whether to allow sending money. + """ + transfer_balance: bool + """ + Whether to allow transferring balance. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class FinancialAccountTransactions(StripeObject): + class Features(StripeObject): + card_spend_dispute_management: bool + """ + Whether to allow card spend dispute management features. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class InstantPayoutsPromotion(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + instant_payouts: bool + """ + Whether to allow creation of instant payouts. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class IssuingCard(StripeObject): + class Features(StripeObject): + card_management: bool + """ + Whether to allow card management features. + """ + card_spend_dispute_management: bool + """ + Whether to allow card spend dispute management features. + """ + cardholder_management: bool + """ + Whether to allow cardholder management features. + """ + spend_control_management: bool + """ + Whether to allow spend control management features. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class IssuingCardsList(StripeObject): + class Features(StripeObject): + card_management: bool + """ + Whether to allow card management features. + """ + card_spend_dispute_management: bool + """ + Whether to allow card spend dispute management features. + """ + cardholder_management: bool + """ + Whether to allow cardholder management features. + """ + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + spend_control_management: bool + """ + Whether to allow spend control management features. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class NotificationBanner(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class PaymentDetails(StripeObject): + class Features(StripeObject): + capture_payments: bool + """ + Whether to allow capturing and cancelling payment intents. This is `true` by default. + """ + destination_on_behalf_of_charge_management: bool + """ + Whether connected accounts can manage destination charges that are created on behalf of them. This is `false` by default. + """ + dispute_management: bool + """ + Whether responding to disputes is enabled, including submitting evidence and accepting disputes. This is `true` by default. + """ + refund_management: bool + """ + Whether sending refunds is enabled. This is `true` by default. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class PaymentDisputes(StripeObject): + class Features(StripeObject): + destination_on_behalf_of_charge_management: bool + """ + Whether connected accounts can manage destination charges that are created on behalf of them. This is `false` by default. + """ + dispute_management: bool + """ + Whether responding to disputes is enabled, including submitting evidence and accepting disputes. This is `true` by default. + """ + refund_management: bool + """ + Whether sending refunds is enabled. This is `true` by default. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class Payments(StripeObject): + class Features(StripeObject): + capture_payments: bool + """ + Whether to allow capturing and cancelling payment intents. This is `true` by default. + """ + destination_on_behalf_of_charge_management: bool + """ + Whether connected accounts can manage destination charges that are created on behalf of them. This is `false` by default. + """ + dispute_management: bool + """ + Whether responding to disputes is enabled, including submitting evidence and accepting disputes. This is `true` by default. + """ + refund_management: bool + """ + Whether sending refunds is enabled. This is `true` by default. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class PayoutDetails(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class Payouts(StripeObject): + class Features(StripeObject): + disable_stripe_user_authentication: bool + """ + Whether Stripe user authentication is disabled. This value can only be `true` for accounts where `controller.requirement_collection` is `application` for the account. The default value is the opposite of the `external_account_collection` value. For example, if you don't set `external_account_collection`, it defaults to `true` and `disable_stripe_user_authentication` defaults to `false`. + """ + edit_payout_schedule: bool + """ + Whether to allow payout schedule to be changed. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + external_account_collection: bool + """ + Whether external account collection is enabled. This feature can only be `false` for accounts where you're responsible for collecting updated information when requirements are due or change, like Custom accounts. The default value for this feature is `true`. + """ + instant_payouts: bool + """ + Whether to allow creation of instant payouts. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + standard_payouts: bool + """ + Whether to allow creation of standard payouts. Defaults to `true` when `controller.losses.payments` is set to `stripe` for the account, otherwise `false`. + """ + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class PayoutsList(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class TaxRegistrations(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + class TaxSettings(StripeObject): + class Features(StripeObject): + pass + + enabled: bool + """ + Whether the embedded component is enabled. + """ + features: Features + _inner_class_types = {"features": Features} + + account_management: AccountManagement + account_onboarding: AccountOnboarding + balances: Balances + disputes_list: DisputesList + documents: Documents + financial_account: FinancialAccount + financial_account_transactions: FinancialAccountTransactions + instant_payouts_promotion: InstantPayoutsPromotion + issuing_card: IssuingCard + issuing_cards_list: IssuingCardsList + notification_banner: NotificationBanner + payment_details: PaymentDetails + payment_disputes: PaymentDisputes + payments: Payments + payout_details: PayoutDetails + payouts: Payouts + payouts_list: PayoutsList + tax_registrations: TaxRegistrations + tax_settings: TaxSettings + _inner_class_types = { + "account_management": AccountManagement, + "account_onboarding": AccountOnboarding, + "balances": Balances, + "disputes_list": DisputesList, + "documents": Documents, + "financial_account": FinancialAccount, + "financial_account_transactions": FinancialAccountTransactions, + "instant_payouts_promotion": InstantPayoutsPromotion, + "issuing_card": IssuingCard, + "issuing_cards_list": IssuingCardsList, + "notification_banner": NotificationBanner, + "payment_details": PaymentDetails, + "payment_disputes": PaymentDisputes, + "payments": Payments, + "payout_details": PayoutDetails, + "payouts": Payouts, + "payouts_list": PayoutsList, + "tax_registrations": TaxRegistrations, + "tax_settings": TaxSettings, + } + + account: str + """ + The ID of the account the AccountSession was created for + """ + client_secret: str + """ + The client secret of this AccountSession. Used on the client to set up secure access to the given `account`. + + The client secret can be used to provide access to `account` from your frontend. It should not be stored, logged, or exposed to anyone other than the connected account. Make sure that you have TLS enabled on any page that includes the client secret. + + Refer to our docs to [setup Connect embedded components](https://stripe.com/docs/connect/get-started-connect-embedded-components) and learn about how `client_secret` should be handled. + """ + components: Components + expires_at: int + """ + The timestamp at which this AccountSession will expire. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["account_session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def create( + cls, **params: Unpack["AccountSessionCreateParams"] + ) -> "AccountSession": + """ + Creates a AccountSession object that includes a single-use token that the platform can use on their front-end to grant client-side API access. + """ + return cast( + "AccountSession", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["AccountSessionCreateParams"] + ) -> "AccountSession": + """ + Creates a AccountSession object that includes a single-use token that the platform can use on their front-end to grant client-side API access. + """ + return cast( + "AccountSession", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + _inner_class_types = {"components": Components} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_account_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_account_session_service.py new file mode 100644 index 00000000..c0013cc7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_account_session_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account_session import AccountSession + from stripe._request_options import RequestOptions + from stripe.params._account_session_create_params import ( + AccountSessionCreateParams, + ) + + +class AccountSessionService(StripeService): + def create( + self, + params: "AccountSessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "AccountSession": + """ + Creates a AccountSession object that includes a single-use token that the platform can use on their front-end to grant client-side API access. + """ + return cast( + "AccountSession", + self._request( + "post", + "/v1/account_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "AccountSessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "AccountSession": + """ + Creates a AccountSession object that includes a single-use token that the platform can use on their front-end to grant client-side API access. + """ + return cast( + "AccountSession", + await self._request_async( + "post", + "/v1/account_sessions", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_any_iterator.py b/Backend/venv/lib/python3.12/site-packages/stripe/_any_iterator.py new file mode 100644 index 00000000..0a7e6058 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_any_iterator.py @@ -0,0 +1,34 @@ +from typing import TypeVar, Iterator, AsyncIterator + +T = TypeVar("T") + + +class AnyIterator(Iterator[T], AsyncIterator[T]): + """ + AnyIterator supports iteration through both `for ... in ` and `async for ... in syntaxes. + """ + + def __init__( + self, iterator: Iterator[T], async_iterator: AsyncIterator[T] + ) -> None: + self._iterator = iterator + self._async_iterator = async_iterator + + self._sync_iterated = False + self._async_iterated = False + + def __next__(self) -> T: + if self._async_iterated: + raise RuntimeError( + "AnyIterator error: cannot mix sync and async iteration" + ) + self._sync_iterated = True + return self._iterator.__next__() + + async def __anext__(self) -> T: + if self._sync_iterated: + raise RuntimeError( + "AnyIterator error: cannot mix sync and async iteration" + ) + self._async_iterated = True + return await self._async_iterator.__anext__() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_api_mode.py b/Backend/venv/lib/python3.12/site-packages/stripe/_api_mode.py new file mode 100644 index 00000000..7290784d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_api_mode.py @@ -0,0 +1,4 @@ +from typing_extensions import Literal + + +ApiMode = Literal["V1", "V2"] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_api_requestor.py b/Backend/venv/lib/python3.12/site-packages/stripe/_api_requestor.py new file mode 100644 index 00000000..4c4e44cb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_api_requestor.py @@ -0,0 +1,919 @@ +from io import BytesIO, IOBase +import json +import platform +from typing import ( + Any, + AsyncIterable, + Dict, + List, + Mapping, + Optional, + Tuple, + Union, + cast, + ClassVar, +) +from typing_extensions import ( + TYPE_CHECKING, + Literal, + NoReturn, + Unpack, +) +import uuid +from urllib.parse import urlsplit, urlunsplit, parse_qs + +# breaking circular dependency +import stripe # noqa: IMP101 +from stripe._util import ( + log_debug, + log_info, + dashboard_link, + _convert_to_stripe_object, + get_api_mode, +) +from stripe._version import VERSION +import stripe._error as error +import stripe.oauth_error as oauth_error +from stripe._multipart_data_generator import MultipartDataGenerator +from urllib.parse import urlencode +from stripe._encode import _api_encode, _json_encode_date_callback +from stripe._stripe_response import ( + StripeResponse, + StripeStreamResponse, + StripeStreamResponseAsync, +) +from stripe._request_options import ( + PERSISTENT_OPTIONS_KEYS, + RequestOptions, + merge_options, +) +from stripe._requestor_options import ( + RequestorOptions, + _GlobalRequestorOptions, +) +from stripe._http_client import ( + HTTPClient, + new_default_http_client, + new_http_client_async_fallback, +) + +from stripe._base_address import BaseAddress +from stripe._api_mode import ApiMode + +if TYPE_CHECKING: + from stripe._app_info import AppInfo + from stripe._stripe_object import StripeObject + +HttpVerb = Literal["get", "post", "delete"] + +# Lazily initialized +_default_proxy: Optional[str] = None + + +def is_v2_delete_resp(method: str, api_mode: ApiMode) -> bool: + return method == "delete" and api_mode == "V2" + + +class _APIRequestor(object): + _instance: ClassVar["_APIRequestor|None"] = None + + def __init__( + self, + options: Optional[RequestorOptions] = None, + client: Optional[HTTPClient] = None, + ): + if options is None: + options = RequestorOptions() + self._options = options + self._client = client + + # In the case of client=None, we should use the current value of stripe.default_http_client + # or lazily initialize it. Since stripe.default_http_client can change throughout the lifetime of + # an _APIRequestor, we shouldn't set it as stripe._client and should access it only through this + # getter. + def _get_http_client(self) -> HTTPClient: + client = self._client + if client is None: + global _default_proxy + + if not stripe.default_http_client: + kwargs = { + "verify_ssl_certs": stripe.verify_ssl_certs, + "proxy": stripe.proxy, + } + # If the stripe.default_http_client has not been set by the user + # yet, we'll set it here. This way, we aren't creating a new + # HttpClient for every request. + stripe.default_http_client = new_default_http_client( + async_fallback_client=new_http_client_async_fallback( + **kwargs + ), + **kwargs, + ) + _default_proxy = stripe.proxy + elif stripe.proxy != _default_proxy: + import warnings + + warnings.warn( + "stripe.proxy was updated after sending a " + "request - this is a no-op. To use a different proxy, " + "set stripe.default_http_client to a new client " + "configured with the proxy." + ) + + assert stripe.default_http_client is not None + return stripe.default_http_client + return client + + def _new_requestor_with_options( + self, options: Optional[RequestOptions] + ) -> "_APIRequestor": + """ + Returns a new _APIRequestor instance with the same HTTP client but a (potentially) updated set of options. Useful for ensuring the original isn't modified, but any options the original had are still used. + """ + options = options or {} + new_options = self._options.to_dict() + for key in PERSISTENT_OPTIONS_KEYS: + if key in options and options[key] is not None: + new_options[key] = options[key] + return _APIRequestor( + options=RequestorOptions(**new_options), client=self._client + ) + + @property + def api_key(self): + return self._options.api_key + + @property + def stripe_account(self): + return self._options.stripe_account + + @property + def stripe_version(self): + return self._options.stripe_version + + @property + def base_addresses(self): + return self._options.base_addresses + + @classmethod + def _global_instance(cls): + """ + Returns the singleton instance of _APIRequestor, to be used when + calling a static method such as stripe.Customer.create(...) + """ + + # Lazily initialize. + if cls._instance is None: + cls._instance = cls(options=_GlobalRequestorOptions(), client=None) + return cls._instance + + @staticmethod + def _global_with_options( + **params: Unpack[RequestOptions], + ) -> "_APIRequestor": + return _APIRequestor._global_instance()._new_requestor_with_options( + params + ) + + @classmethod + def _format_app_info(cls, info): + str = info["name"] + if info["version"]: + str += "/%s" % (info["version"],) + if info["url"]: + str += " (%s)" % (info["url"],) + return str + + def request( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + usage: Optional[List[str]] = None, + ) -> "StripeObject": + api_mode = get_api_mode(url) + requestor = self._new_requestor_with_options(options) + rbody, rcode, rheaders = requestor.request_raw( + method.lower(), + url, + params, + is_streaming=False, + api_mode=api_mode, + base_address=base_address, + options=options, + usage=usage, + ) + resp = requestor._interpret_response(rbody, rcode, rheaders, api_mode) + + obj = _convert_to_stripe_object( + resp=resp, + params=params, + requestor=requestor, + api_mode=api_mode, + is_v2_deleted_object=is_v2_delete_resp(method, api_mode), + ) + + return obj + + async def request_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + usage: Optional[List[str]] = None, + ) -> "StripeObject": + api_mode = get_api_mode(url) + requestor = self._new_requestor_with_options(options) + rbody, rcode, rheaders = await requestor.request_raw_async( + method.lower(), + url, + params, + is_streaming=False, + api_mode=api_mode, + base_address=base_address, + options=options, + usage=usage, + ) + resp = requestor._interpret_response(rbody, rcode, rheaders, api_mode) + + obj = _convert_to_stripe_object( + resp=resp, + params=params, + requestor=requestor, + api_mode=api_mode, + is_v2_deleted_object=is_v2_delete_resp(method, api_mode), + ) + + return obj + + def request_stream( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + usage: Optional[List[str]] = None, + ) -> StripeStreamResponse: + api_mode = get_api_mode(url) + stream, rcode, rheaders = self.request_raw( + method.lower(), + url, + params, + is_streaming=True, + api_mode=api_mode, + base_address=base_address, + options=options, + usage=usage, + ) + resp = self._interpret_streaming_response( + # TODO: should be able to remove this cast once self._client.request_stream_with_retries + # returns a more specific type. + cast(IOBase, stream), + rcode, + rheaders, + api_mode, + ) + return resp + + async def request_stream_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + usage: Optional[List[str]] = None, + ) -> StripeStreamResponseAsync: + api_mode = get_api_mode(url) + stream, rcode, rheaders = await self.request_raw_async( + method.lower(), + url, + params, + is_streaming=True, + api_mode=api_mode, + base_address=base_address, + options=options, + usage=usage, + ) + resp = await self._interpret_streaming_response_async( + stream, + rcode, + rheaders, + api_mode, + ) + return resp + + def handle_error_response( + self, rbody, rcode, resp, rheaders, api_mode + ) -> NoReturn: + try: + error_data = resp["error"] + except (KeyError, TypeError): + raise error.APIError( + "Invalid response object from API: %r (HTTP response code " + "was %d)" % (rbody, rcode), + rbody, + rcode, + resp, + ) + + err = None + + # OAuth errors are a JSON object where `error` is a string. In + # contrast, in API errors, `error` is a hash with sub-keys. We use + # this property to distinguish between OAuth and API errors. + if isinstance(error_data, str): + err = self.specific_oauth_error( + rbody, rcode, resp, rheaders, error_data + ) + + if err is None: + err = ( + self.specific_v2_api_error( + rbody, rcode, resp, rheaders, error_data + ) + if api_mode == "V2" + else self.specific_v1_api_error( + rbody, rcode, resp, rheaders, error_data + ) + ) + + raise err + + def specific_v2_api_error(self, rbody, rcode, resp, rheaders, error_data): + type = error_data.get("type") + code = error_data.get("code") + message = error_data.get("message") + error_args = { + "message": message, + "http_body": rbody, + "http_status": rcode, + "json_body": resp, + "headers": rheaders, + "code": code, + } + + log_info( + "Stripe v2 API error received", + error_code=code, + error_type=error_data.get("type"), + error_message=message, + error_param=error_data.get("param"), + ) + + if type == "idempotency_error": + return error.IdempotencyError( + message, + rbody, + rcode, + resp, + rheaders, + code, + ) + # switchCases: The beginning of the section generated from our OpenAPI spec + elif type == "temporary_session_expired": + return error.TemporarySessionExpiredError(**error_args) + # switchCases: The end of the section generated from our OpenAPI spec + + return self.specific_v1_api_error( + rbody, rcode, resp, rheaders, error_data + ) + + def specific_v1_api_error(self, rbody, rcode, resp, rheaders, error_data): + log_info( + "Stripe v1 API error received", + error_code=error_data.get("code"), + error_type=error_data.get("type"), + error_message=error_data.get("message"), + error_param=error_data.get("param"), + ) + + # Rate limits were previously coded as 400's with code 'rate_limit' + if rcode == 429 or ( + rcode == 400 and error_data.get("code") == "rate_limit" + ): + return error.RateLimitError( + error_data.get("message"), rbody, rcode, resp, rheaders + ) + elif rcode in [400, 404]: + if error_data.get("type") == "idempotency_error": + return error.IdempotencyError( + error_data.get("message"), rbody, rcode, resp, rheaders + ) + else: + return error.InvalidRequestError( + error_data.get("message"), + error_data.get("param"), + error_data.get("code"), + rbody, + rcode, + resp, + rheaders, + ) + elif rcode == 401: + return error.AuthenticationError( + error_data.get("message"), rbody, rcode, resp, rheaders + ) + elif rcode == 402: + return error.CardError( + error_data.get("message"), + error_data.get("param"), + error_data.get("code"), + rbody, + rcode, + resp, + rheaders, + ) + elif rcode == 403: + return error.PermissionError( + error_data.get("message"), rbody, rcode, resp, rheaders + ) + else: + return error.APIError( + error_data.get("message"), rbody, rcode, resp, rheaders + ) + + def specific_oauth_error(self, rbody, rcode, resp, rheaders, error_code): + description = resp.get("error_description", error_code) + + log_info( + "Stripe OAuth error received", + error_code=error_code, + error_description=description, + ) + + args = [error_code, description, rbody, rcode, resp, rheaders] + + if error_code == "invalid_client": + return oauth_error.InvalidClientError(*args) + elif error_code == "invalid_grant": + return oauth_error.InvalidGrantError(*args) + elif error_code == "invalid_request": + return oauth_error.InvalidRequestError(*args) + elif error_code == "invalid_scope": + return oauth_error.InvalidScopeError(*args) + elif error_code == "unsupported_grant_type": + return oauth_error.UnsupportedGrantTypeError(*args) + elif error_code == "unsupported_response_type": + return oauth_error.UnsupportedResponseTypeError(*args) + + return None + + def request_headers( + self, method: HttpVerb, api_mode: ApiMode, options: RequestOptions + ): + user_agent = "Stripe/%s PythonBindings/%s" % ( + api_mode.lower(), + VERSION, + ) + if stripe.app_info: + user_agent += " " + self._format_app_info(stripe.app_info) + + ua: Dict[str, Union[str, "AppInfo"]] = { + "bindings_version": VERSION, + "lang": "python", + "publisher": "stripe", + "httplib": self._get_http_client().name, + } + for attr, func in [ + ["lang_version", platform.python_version], + ["platform", platform.platform], + ["uname", lambda: " ".join(platform.uname())], + ]: + try: + val = func() + except Exception: + val = "(disabled)" + ua[attr] = val + if stripe.app_info: + ua["application"] = stripe.app_info + + headers: Dict[str, str] = { + "X-Stripe-Client-User-Agent": json.dumps(ua), + "User-Agent": user_agent, + "Authorization": "Bearer %s" % (options.get("api_key"),), + } + + stripe_account = options.get("stripe_account") + if stripe_account: + headers["Stripe-Account"] = stripe_account + + stripe_context = options.get("stripe_context") + if stripe_context and str(stripe_context): + headers["Stripe-Context"] = str(stripe_context) + + idempotency_key = options.get("idempotency_key") + if idempotency_key: + headers["Idempotency-Key"] = idempotency_key + + # IKs should be set for all POST requests and v2 delete requests + if method == "post" or (api_mode == "V2" and method == "delete"): + headers.setdefault("Idempotency-Key", str(uuid.uuid4())) + + if method == "post": + if api_mode == "V2": + headers["Content-Type"] = "application/json" + else: + headers["Content-Type"] = "application/x-www-form-urlencoded" + + stripe_version = options.get("stripe_version") + if stripe_version: + headers["Stripe-Version"] = stripe_version + + return headers + + def _args_for_request_with_retries( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + api_mode: ApiMode, + usage: Optional[List[str]] = None, + ): + """ + Mechanism for issuing an API call. Used by request_raw and request_raw_async. + """ + request_options = merge_options(self._options, options) + + # Special stripe_version handling for v2 requests: + if ( + options + and "stripe_version" in options + and (options["stripe_version"] is not None) + ): + # If user specified an API version, honor it + request_options["stripe_version"] = options["stripe_version"] + + if request_options.get("api_key") is None: + raise error.AuthenticationError( + "No API key provided. (HINT: set your API key using " + '"stripe.api_key = "). You can generate API keys ' + "from the Stripe web interface. See https://stripe.com/api " + "for details, or email support@stripe.com if you have any " + "questions." + ) + + abs_url = "%s%s" % ( + self._options.base_addresses.get(base_address), + url, + ) + + params = params or {} + if params and (method == "get" or method == "delete"): + # if we're sending params in the querystring, then we have to make sure we're not + # duplicating anything we got back from the server already (like in a list iterator) + # so, we parse the querystring the server sends back so we can merge with what we (or the user) are trying to send + existing_params = {} + for k, v in parse_qs(urlsplit(url).query).items(): + # note: server sends back "expand[]" but users supply "expand", so we strip the brackets from the key name + if k.endswith("[]"): + existing_params[k[:-2]] = v + else: + # all querystrings are pulled out as lists. + # We want to keep the querystrings that actually are lists, but flatten the ones that are single values + existing_params[k] = v[0] if len(v) == 1 else v + + # if a user is expanding something that wasn't expanded before, add (and deduplicate) it + # this could theoretically work for other lists that we want to merge too, but that doesn't seem to be a use case + # it never would have worked before, so I think we can start with `expand` and go from there + if "expand" in existing_params and "expand" in params: + params["expand"] = list( # type:ignore - this is a dict + set([*existing_params["expand"], *params["expand"]]) + ) + + params = { + **existing_params, + # user_supplied params take precedence over server params + **params, + } + + encoded_params = urlencode(list(_api_encode(params or {}, api_mode))) + + # Don't use strict form encoding by changing the square bracket control + # characters back to their literals. This is fine by the server, and + # makes these parameter strings easier to read. + encoded_params = encoded_params.replace("%5B", "[").replace("%5D", "]") + + if api_mode == "V2": + encoded_body = json.dumps( + params or {}, default=_json_encode_date_callback + ) + else: + encoded_body = encoded_params + + supplied_headers = None + if ( + "headers" in request_options + and request_options["headers"] is not None + ): + supplied_headers = dict(request_options["headers"]) + + headers = self.request_headers( + # this cast is safe because the blocks below validate that `method` is one of the allowed values + cast(HttpVerb, method), + api_mode, + request_options, + ) + + if method == "get" or method == "delete": + if params: + # if we're sending query params, we've already merged the incoming ones with the server's "url" + # so we can overwrite the whole thing + scheme, netloc, path, _, fragment = urlsplit(abs_url) + + abs_url = urlunsplit( + (scheme, netloc, path, encoded_params, fragment) + ) + post_data = None + elif method == "post": + if ( + options is not None + and options.get("content_type") == "multipart/form-data" + ): + generator = MultipartDataGenerator() + generator.add_params(params or {}) + post_data = generator.get_post_data() + headers["Content-Type"] = ( + "multipart/form-data; boundary=%s" % (generator.boundary,) + ) + else: + post_data = encoded_body + else: + raise error.APIConnectionError( + "Unrecognized HTTP method %r. This may indicate a bug in the " + "Stripe bindings. Please contact support@stripe.com for " + "assistance." % (method,) + ) + + if supplied_headers is not None: + for key, value in supplied_headers.items(): + headers[key] = value + + max_network_retries = request_options.get("max_network_retries") + + return ( + # Actual args + method, + abs_url, + headers, + post_data, + max_network_retries, + usage, + # For logging + encoded_params, + request_options.get("stripe_version"), + ) + + def request_raw( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + is_streaming: bool = False, + *, + base_address: BaseAddress, + api_mode: ApiMode, + usage: Optional[List[str]] = None, + ) -> Tuple[object, int, Mapping[str, str]]: + ( + method, + abs_url, + headers, + post_data, + max_network_retries, + usage, + encoded_params, + api_version, + ) = self._args_for_request_with_retries( + method, + url, + params, + options, + base_address=base_address, + api_mode=api_mode, + usage=usage, + ) + + log_info("Request to Stripe api", method=method, url=abs_url) + log_debug( + "Post details", post_data=encoded_params, api_version=api_version + ) + + if is_streaming: + ( + rcontent, + rcode, + rheaders, + ) = self._get_http_client().request_stream_with_retries( + method, + abs_url, + headers, + post_data, + max_network_retries=max_network_retries, + _usage=usage, + ) + else: + ( + rcontent, + rcode, + rheaders, + ) = self._get_http_client().request_with_retries( + method, + abs_url, + headers, + post_data, + max_network_retries=max_network_retries, + _usage=usage, + ) + + log_info("Stripe API response", path=abs_url, response_code=rcode) + log_debug("API response body", body=rcontent) + + if "Request-Id" in rheaders: + request_id = rheaders["Request-Id"] + log_debug( + "Dashboard link for request", + link=dashboard_link(request_id), + ) + + return rcontent, rcode, rheaders + + async def request_raw_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + is_streaming: bool = False, + *, + base_address: BaseAddress, + api_mode: ApiMode, + usage: Optional[List[str]] = None, + ) -> Tuple[AsyncIterable[bytes], int, Mapping[str, str]]: + """ + Mechanism for issuing an API call + """ + + usage = usage or [] + usage = usage + ["async"] + + ( + method, + abs_url, + headers, + post_data, + max_network_retries, + usage, + encoded_params, + api_version, + ) = self._args_for_request_with_retries( + method, + url, + params, + options, + base_address=base_address, + api_mode=api_mode, + usage=usage, + ) + + log_info("Request to Stripe api", method=method, url=abs_url) + log_debug( + "Post details", + post_data=encoded_params, + api_version=api_version, + ) + + if is_streaming: + ( + rcontent, + rcode, + rheaders, + ) = await self._get_http_client().request_stream_with_retries_async( + method, + abs_url, + headers, + post_data, + max_network_retries=max_network_retries, + _usage=usage, + ) + else: + ( + rcontent, + rcode, + rheaders, + ) = await self._get_http_client().request_with_retries_async( + method, + abs_url, + headers, + post_data, + max_network_retries=max_network_retries, + _usage=usage, + ) + + log_info("Stripe API response", path=abs_url, response_code=rcode) + log_debug("API response body", body=rcontent) + + if "Request-Id" in rheaders: + request_id = rheaders["Request-Id"] + log_debug( + "Dashboard link for request", + link=dashboard_link(request_id), + ) + + return rcontent, rcode, rheaders + + def _should_handle_code_as_error(self, rcode: int) -> bool: + return not 200 <= rcode < 300 + + def _interpret_response( + self, + rbody: object, + rcode: int, + rheaders: Mapping[str, str], + api_mode: ApiMode, + ) -> StripeResponse: + try: + if hasattr(rbody, "decode"): + # TODO: should be able to remove this cast once self._client.request_with_retries + # returns a more specific type. + rbody = cast(bytes, rbody).decode("utf-8") + resp = StripeResponse( + cast(str, rbody), + rcode, + rheaders, + ) + except Exception: + raise error.APIError( + "Invalid response body from API: %s " + "(HTTP response code was %d)" % (rbody, rcode), + cast(bytes, rbody), + rcode, + rheaders, + ) + if self._should_handle_code_as_error(rcode): + self.handle_error_response( + rbody, rcode, resp.data, rheaders, api_mode + ) + return resp + + def _interpret_streaming_response( + self, + stream: IOBase, + rcode: int, + rheaders: Mapping[str, str], + api_mode: ApiMode, + ) -> StripeStreamResponse: + # Streaming response are handled with minimal processing for the success + # case (ie. we don't want to read the content). When an error is + # received, we need to read from the stream and parse the received JSON, + # treating it like a standard JSON response. + if self._should_handle_code_as_error(rcode): + if hasattr(stream, "getvalue"): + json_content = cast(BytesIO, stream).getvalue() + elif hasattr(stream, "read"): + json_content = stream.read() + else: + raise NotImplementedError( + "HTTP client %s does not return an IOBase object which " + "can be consumed when streaming a response." + % self._get_http_client().name + ) + + self._interpret_response(json_content, rcode, rheaders, api_mode) + # _interpret_response is guaranteed to throw since we've checked self._should_handle_code_as_error + raise RuntimeError( + "_interpret_response should have raised an error" + ) + else: + return StripeStreamResponse(stream, rcode, rheaders) + + async def _interpret_streaming_response_async( + self, + stream: AsyncIterable[bytes], + rcode: int, + rheaders: Mapping[str, str], + api_mode: ApiMode, + ) -> StripeStreamResponseAsync: + if self._should_handle_code_as_error(rcode): + json_content = b"".join([chunk async for chunk in stream]) + self._interpret_response(json_content, rcode, rheaders, api_mode) + # _interpret_response is guaranteed to throw since we've checked self._should_handle_code_as_error + raise RuntimeError( + "_interpret_response should have raised an error" + ) + else: + return StripeStreamResponseAsync(stream, rcode, rheaders) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_api_resource.py new file mode 100644 index 00000000..2866b42c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_api_resource.py @@ -0,0 +1,232 @@ +from typing_extensions import Literal, Self + +from stripe._error import InvalidRequestError +from stripe._stripe_object import StripeObject +from stripe._request_options import extract_options_from_dict +from stripe._api_mode import ApiMode +from stripe._base_address import BaseAddress +from stripe._api_requestor import _APIRequestor +from stripe import _util +from urllib.parse import quote_plus +from typing import ( + Any, + ClassVar, + Generic, + List, + Optional, + TypeVar, + cast, + Mapping, +) + +T = TypeVar("T", bound=StripeObject) + + +class APIResource(StripeObject, Generic[T]): + OBJECT_NAME: ClassVar[str] + + @classmethod + @_util.deprecated( + "This method is deprecated and will be removed in a future version of stripe-python. Child classes of APIResource should define their own `retrieve` and use APIResource._request directly." + ) + def retrieve(cls, id, **params) -> T: + instance = cls(id, **params) + instance.refresh() + return cast(T, instance) + + def refresh(self) -> Self: + return self._request_and_refresh("get", self.instance_url()) + + async def refresh_async(self) -> Self: + return await self._request_and_refresh_async( + "get", self.instance_url() + ) + + @classmethod + def class_url(cls) -> str: + if cls == APIResource: + raise NotImplementedError( + "APIResource is an abstract class. You should perform " + "actions on its subclasses (e.g. Charge, Customer)" + ) + # Namespaces are separated in object names with periods (.) and in URLs + # with forward slashes (/), so replace the former with the latter. + base = cls.OBJECT_NAME.replace(".", "/") + return "/v1/%ss" % (base,) + + def instance_url(self) -> str: + id = self.get("id") + + if not isinstance(id, str): + raise InvalidRequestError( + "Could not determine which URL to request: %s instance " + "has invalid ID: %r, %s. ID should be of type `str` (or" + " `unicode`)" % (type(self).__name__, id, type(id)), + "id", + ) + + base = self.class_url() + extn = quote_plus(id) + return "%s/%s" % (base, extn) + + def _request( + self, + method, + url, + params=None, + *, + base_address: BaseAddress = "api", + api_mode: ApiMode = "V1", + ) -> StripeObject: + obj = StripeObject._request( + self, + method, + url, + params=params, + base_address=base_address, + ) + + if type(self) is type(obj): + self._refresh_from(values=obj, api_mode=api_mode) + return self + else: + return obj + + async def _request_async( + self, + method, + url, + params=None, + *, + base_address: BaseAddress = "api", + api_mode: ApiMode = "V1", + ) -> StripeObject: + obj = await StripeObject._request_async( + self, + method, + url, + params=params, + base_address=base_address, + ) + + if type(self) is type(obj): + self._refresh_from(values=obj, api_mode=api_mode) + return self + else: + return obj + + def _request_and_refresh( + self, + method: Literal["get", "post", "delete"], + url: str, + params: Optional[Mapping[str, Any]] = None, + usage: Optional[List[str]] = None, + *, + base_address: BaseAddress = "api", + api_mode: ApiMode = "V1", + ) -> Self: + obj = StripeObject._request( + self, + method, + url, + params=params, + base_address=base_address, + usage=usage, + ) + + self._refresh_from(values=obj, api_mode=api_mode) + return self + + async def _request_and_refresh_async( + self, + method: Literal["get", "post", "delete"], + url: str, + params: Optional[Mapping[str, Any]] = None, + usage: Optional[List[str]] = None, + *, + base_address: BaseAddress = "api", + api_mode: ApiMode = "V1", + ) -> Self: + obj = await StripeObject._request_async( + self, + method, + url, + params=params, + base_address=base_address, + usage=usage, + ) + + self._refresh_from(values=obj, api_mode=api_mode) + return self + + @classmethod + def _static_request( + cls, + method_, + url_, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ): + request_options, request_params = extract_options_from_dict(params) + return _APIRequestor._global_instance().request( + method_, + url_, + params=request_params, + options=request_options, + base_address=base_address, + ) + + @classmethod + async def _static_request_async( + cls, + method_, + url_, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ): + request_options, request_params = extract_options_from_dict(params) + return await _APIRequestor._global_instance().request_async( + method_, + url_, + params=request_params, + options=request_options, + base_address=base_address, + ) + + @classmethod + def _static_request_stream( + cls, + method, + url, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ): + request_options, request_params = extract_options_from_dict(params) + return _APIRequestor._global_instance().request_stream( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + ) + + @classmethod + async def _static_request_stream_async( + cls, + method, + url, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ): + request_options, request_params = extract_options_from_dict(params) + return await _APIRequestor._global_instance().request_stream_async( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_api_version.py b/Backend/venv/lib/python3.12/site-packages/stripe/_api_version.py new file mode 100644 index 00000000..570f6144 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_api_version.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +class _ApiVersion: + CURRENT = "2025-10-29.clover" + CURRENT_MAJOR = "clover" diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_app_info.py b/Backend/venv/lib/python3.12/site-packages/stripe/_app_info.py new file mode 100644 index 00000000..d31679fa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_app_info.py @@ -0,0 +1,9 @@ +from typing import Optional +from typing_extensions import TypedDict + + +class AppInfo(TypedDict): + name: str + partner_id: Optional[str] + url: Optional[str] + version: Optional[str] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain.py b/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain.py new file mode 100644 index 00000000..3ed5195a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._apple_pay_domain_create_params import ( + ApplePayDomainCreateParams, + ) + from stripe.params._apple_pay_domain_delete_params import ( + ApplePayDomainDeleteParams, + ) + from stripe.params._apple_pay_domain_list_params import ( + ApplePayDomainListParams, + ) + from stripe.params._apple_pay_domain_retrieve_params import ( + ApplePayDomainRetrieveParams, + ) + + +class ApplePayDomain( + CreateableAPIResource["ApplePayDomain"], + DeletableAPIResource["ApplePayDomain"], + ListableAPIResource["ApplePayDomain"], +): + OBJECT_NAME: ClassVar[Literal["apple_pay_domain"]] = "apple_pay_domain" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + domain_name: str + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["apple_pay_domain"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def create( + cls, **params: Unpack["ApplePayDomainCreateParams"] + ) -> "ApplePayDomain": + """ + Create an apple pay domain. + """ + return cast( + "ApplePayDomain", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ApplePayDomainCreateParams"] + ) -> "ApplePayDomain": + """ + Create an apple pay domain. + """ + return cast( + "ApplePayDomain", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ApplePayDomain", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + ... + + @overload + def delete( + self, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "ApplePayDomain", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ApplePayDomainDeleteParams"] + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ApplePayDomainListParams"] + ) -> ListObject["ApplePayDomain"]: + """ + List apple pay domains. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ApplePayDomainListParams"] + ) -> ListObject["ApplePayDomain"]: + """ + List apple pay domains. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ApplePayDomainRetrieveParams"] + ) -> "ApplePayDomain": + """ + Retrieve an apple pay domain. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ApplePayDomainRetrieveParams"] + ) -> "ApplePayDomain": + """ + Retrieve an apple pay domain. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/apple_pay/domains" diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain_service.py new file mode 100644 index 00000000..6c72f7d6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_apple_pay_domain_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._apple_pay_domain import ApplePayDomain + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._apple_pay_domain_create_params import ( + ApplePayDomainCreateParams, + ) + from stripe.params._apple_pay_domain_delete_params import ( + ApplePayDomainDeleteParams, + ) + from stripe.params._apple_pay_domain_list_params import ( + ApplePayDomainListParams, + ) + from stripe.params._apple_pay_domain_retrieve_params import ( + ApplePayDomainRetrieveParams, + ) + + +class ApplePayDomainService(StripeService): + def delete( + self, + domain: str, + params: Optional["ApplePayDomainDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + return cast( + "ApplePayDomain", + self._request( + "delete", + "/v1/apple_pay/domains/{domain}".format( + domain=sanitize_id(domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + domain: str, + params: Optional["ApplePayDomainDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Delete an apple pay domain. + """ + return cast( + "ApplePayDomain", + await self._request_async( + "delete", + "/v1/apple_pay/domains/{domain}".format( + domain=sanitize_id(domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + domain: str, + params: Optional["ApplePayDomainRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Retrieve an apple pay domain. + """ + return cast( + "ApplePayDomain", + self._request( + "get", + "/v1/apple_pay/domains/{domain}".format( + domain=sanitize_id(domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + domain: str, + params: Optional["ApplePayDomainRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Retrieve an apple pay domain. + """ + return cast( + "ApplePayDomain", + await self._request_async( + "get", + "/v1/apple_pay/domains/{domain}".format( + domain=sanitize_id(domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["ApplePayDomainListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplePayDomain]": + """ + List apple pay domains. + """ + return cast( + "ListObject[ApplePayDomain]", + self._request( + "get", + "/v1/apple_pay/domains", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ApplePayDomainListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplePayDomain]": + """ + List apple pay domains. + """ + return cast( + "ListObject[ApplePayDomain]", + await self._request_async( + "get", + "/v1/apple_pay/domains", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ApplePayDomainCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Create an apple pay domain. + """ + return cast( + "ApplePayDomain", + self._request( + "post", + "/v1/apple_pay/domains", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ApplePayDomainCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ApplePayDomain": + """ + Create an apple pay domain. + """ + return cast( + "ApplePayDomain", + await self._request_async( + "post", + "/v1/apple_pay/domains", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_application.py b/Backend/venv/lib/python3.12/site-packages/stripe/_application.py new file mode 100644 index 00000000..dee1e54f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_application.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal + + +class Application(StripeObject): + OBJECT_NAME: ClassVar[Literal["application"]] = "application" + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + name: Optional[str] + """ + The name of the application. + """ + object: Literal["application"] + """ + String representing the object's type. Objects of the same type share the same value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee.py b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee.py new file mode 100644 index 00000000..f83ab1ea --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee.py @@ -0,0 +1,520 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._application_fee_refund import ApplicationFeeRefund + from stripe._balance_transaction import BalanceTransaction + from stripe._charge import Charge + from stripe.params._application_fee_create_refund_params import ( + ApplicationFeeCreateRefundParams, + ) + from stripe.params._application_fee_list_params import ( + ApplicationFeeListParams, + ) + from stripe.params._application_fee_list_refunds_params import ( + ApplicationFeeListRefundsParams, + ) + from stripe.params._application_fee_modify_refund_params import ( + ApplicationFeeModifyRefundParams, + ) + from stripe.params._application_fee_refund_params import ( + ApplicationFeeRefundParams, + ) + from stripe.params._application_fee_retrieve_params import ( + ApplicationFeeRetrieveParams, + ) + from stripe.params._application_fee_retrieve_refund_params import ( + ApplicationFeeRetrieveRefundParams, + ) + + +@nested_resource_class_methods("refund") +class ApplicationFee(ListableAPIResource["ApplicationFee"]): + OBJECT_NAME: ClassVar[Literal["application_fee"]] = "application_fee" + + class FeeSource(StripeObject): + charge: Optional[str] + """ + Charge ID that created this application fee. + """ + payout: Optional[str] + """ + Payout ID that created this application fee. + """ + type: Literal["charge", "payout"] + """ + Type of object that created the application fee. + """ + + account: ExpandableField["Account"] + """ + ID of the Stripe account this fee was taken from. + """ + amount: int + """ + Amount earned, in cents (or local equivalent). + """ + amount_refunded: int + """ + Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the fee if a partial refund was issued) + """ + application: ExpandableField["Application"] + """ + ID of the Connect application that earned the fee. + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + Balance transaction that describes the impact of this collected application fee on your account balance (not including refunds). + """ + charge: ExpandableField["Charge"] + """ + ID of the charge that the application fee was taken from. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + fee_source: Optional[FeeSource] + """ + Polymorphic source of the application fee. Includes the ID of the object the application fee was created from. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["application_fee"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + originating_transaction: Optional[ExpandableField["Charge"]] + """ + ID of the corresponding charge on the platform account, if this fee was the result of a charge using the `destination` parameter. + """ + refunded: bool + """ + Whether the fee has been fully refunded. If the fee is only partially refunded, this attribute will still be false. + """ + refunds: ListObject["ApplicationFeeRefund"] + """ + A list of refunds that have been applied to the fee. + """ + + @classmethod + def list( + cls, **params: Unpack["ApplicationFeeListParams"] + ) -> ListObject["ApplicationFee"]: + """ + Returns a list of application fees you've previously collected. The application fees are returned in sorted order, with the most recent fees appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ApplicationFeeListParams"] + ) -> ListObject["ApplicationFee"]: + """ + Returns a list of application fees you've previously collected. The application fees are returned in sorted order, with the most recent fees appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_refund( + cls, id: str, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + cls._static_request( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + def refund( + id: str, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + ... + + @overload + def refund( + self, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + ... + + @class_method_variant("_cls_refund") + def refund( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + self._request( + "post", + "/v1/application_fees/{id}/refunds".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_refund_async( + cls, id: str, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + await cls._static_request_async( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + async def refund_async( + id: str, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + ... + + @overload + async def refund_async( + self, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + ... + + @class_method_variant("_cls_refund_async") + async def refund_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ApplicationFeeRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + await self._request_async( + "post", + "/v1/application_fees/{id}/refunds".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ApplicationFeeRetrieveParams"] + ) -> "ApplicationFee": + """ + Retrieves the details of an application fee that your account has collected. The same information is returned when refunding the application fee. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ApplicationFeeRetrieveParams"] + ) -> "ApplicationFee": + """ + Retrieves the details of an application fee that your account has collected. The same information is returned when refunding the application fee. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def retrieve_refund( + cls, + fee: str, + id: str, + **params: Unpack["ApplicationFeeRetrieveRefundParams"], + ) -> "ApplicationFeeRefund": + """ + By default, you can see the 10 most recent refunds stored directly on the application fee object, but you can also retrieve details about a specific refund stored on the application fee. + """ + return cast( + "ApplicationFeeRefund", + cls._static_request( + "get", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_refund_async( + cls, + fee: str, + id: str, + **params: Unpack["ApplicationFeeRetrieveRefundParams"], + ) -> "ApplicationFeeRefund": + """ + By default, you can see the 10 most recent refunds stored directly on the application fee object, but you can also retrieve details about a specific refund stored on the application fee. + """ + return cast( + "ApplicationFeeRefund", + await cls._static_request_async( + "get", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def modify_refund( + cls, + fee: str, + id: str, + **params: Unpack["ApplicationFeeModifyRefundParams"], + ) -> "ApplicationFeeRefund": + """ + Updates the specified application fee refund by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "ApplicationFeeRefund", + cls._static_request( + "post", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def modify_refund_async( + cls, + fee: str, + id: str, + **params: Unpack["ApplicationFeeModifyRefundParams"], + ) -> "ApplicationFeeRefund": + """ + Updates the specified application fee refund by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "ApplicationFeeRefund", + await cls._static_request_async( + "post", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def list_refunds( + cls, id: str, **params: Unpack["ApplicationFeeListRefundsParams"] + ) -> ListObject["ApplicationFeeRefund"]: + """ + You can see a list of the refunds belonging to a specific application fee. Note that the 10 most recent refunds are always available by default on the application fee object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + ListObject["ApplicationFeeRefund"], + cls._static_request( + "get", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + async def list_refunds_async( + cls, id: str, **params: Unpack["ApplicationFeeListRefundsParams"] + ) -> ListObject["ApplicationFeeRefund"]: + """ + You can see a list of the refunds belonging to a specific application fee. Note that the 10 most recent refunds are always available by default on the application fee object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + ListObject["ApplicationFeeRefund"], + await cls._static_request_async( + "get", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + def create_refund( + cls, id: str, **params: Unpack["ApplicationFeeCreateRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + cls._static_request( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + async def create_refund_async( + cls, id: str, **params: Unpack["ApplicationFeeCreateRefundParams"] + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + await cls._static_request_async( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + params=params, + ), + ) + + _inner_class_types = {"fee_source": FeeSource} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund.py b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund.py new file mode 100644 index 00000000..4ae51aeb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._application_fee import ApplicationFee +from stripe._expandable_field import ExpandableField +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + + +class ApplicationFeeRefund(UpdateableAPIResource["ApplicationFeeRefund"]): + """ + `Application Fee Refund` objects allow you to refund an application fee that + has previously been created but not yet refunded. Funds will be refunded to + the Stripe account from which the fee was originally collected. + + Related guide: [Refunding application fees](https://stripe.com/docs/connect/destination-charges#refunding-app-fee) + """ + + OBJECT_NAME: ClassVar[Literal["fee_refund"]] = "fee_refund" + amount: int + """ + Amount, in cents (or local equivalent). + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + Balance transaction that describes the impact on your account balance. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + fee: ExpandableField["ApplicationFee"] + """ + ID of the application fee that was refunded. + """ + id: str + """ + Unique identifier for the object. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["fee_refund"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def _build_instance_url(cls, fee, sid): + base = ApplicationFee.class_url() + cust_extn = sanitize_id(fee) + extn = sanitize_id(sid) + return "%s/%s/refunds/%s" % (base, cust_extn, extn) + + @classmethod + def modify(cls, fee, sid, **params) -> "ApplicationFeeRefund": + url = cls._build_instance_url(fee, sid) + return cast( + "ApplicationFeeRefund", + cls._static_request("post", url, params=params), + ) + + def instance_url(self): + return self._build_instance_url(self.fee, self.id) + + @classmethod + def retrieve(cls, id, **params) -> "ApplicationFeeRefund": + raise NotImplementedError( + "Can't retrieve a refund without an application fee ID. " + "Use application_fee.refunds.retrieve('refund_id') instead." + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund_service.py new file mode 100644 index 00000000..1f109689 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_refund_service.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._application_fee_refund import ApplicationFeeRefund + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._application_fee_refund_create_params import ( + ApplicationFeeRefundCreateParams, + ) + from stripe.params._application_fee_refund_list_params import ( + ApplicationFeeRefundListParams, + ) + from stripe.params._application_fee_refund_retrieve_params import ( + ApplicationFeeRefundRetrieveParams, + ) + from stripe.params._application_fee_refund_update_params import ( + ApplicationFeeRefundUpdateParams, + ) + + +class ApplicationFeeRefundService(StripeService): + def retrieve( + self, + fee: str, + id: str, + params: Optional["ApplicationFeeRefundRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + By default, you can see the 10 most recent refunds stored directly on the application fee object, but you can also retrieve details about a specific refund stored on the application fee. + """ + return cast( + "ApplicationFeeRefund", + self._request( + "get", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + fee: str, + id: str, + params: Optional["ApplicationFeeRefundRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + By default, you can see the 10 most recent refunds stored directly on the application fee object, but you can also retrieve details about a specific refund stored on the application fee. + """ + return cast( + "ApplicationFeeRefund", + await self._request_async( + "get", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + fee: str, + id: str, + params: Optional["ApplicationFeeRefundUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + Updates the specified application fee refund by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "ApplicationFeeRefund", + self._request( + "post", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + fee: str, + id: str, + params: Optional["ApplicationFeeRefundUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + Updates the specified application fee refund by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "ApplicationFeeRefund", + await self._request_async( + "post", + "/v1/application_fees/{fee}/refunds/{id}".format( + fee=sanitize_id(fee), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + id: str, + params: Optional["ApplicationFeeRefundListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplicationFeeRefund]": + """ + You can see a list of the refunds belonging to a specific application fee. Note that the 10 most recent refunds are always available by default on the application fee object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + "ListObject[ApplicationFeeRefund]", + self._request( + "get", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + id: str, + params: Optional["ApplicationFeeRefundListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplicationFeeRefund]": + """ + You can see a list of the refunds belonging to a specific application fee. Note that the 10 most recent refunds are always available by default on the application fee object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + "ListObject[ApplicationFeeRefund]", + await self._request_async( + "get", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + id: str, + params: Optional["ApplicationFeeRefundCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + self._request( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + id: str, + params: Optional["ApplicationFeeRefundCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFeeRefund": + """ + Refunds an application fee that has previously been collected but not yet refunded. + Funds will be refunded to the Stripe account from which the fee was originally collected. + + You can optionally refund only part of an application fee. + You can do so multiple times, until the entire fee has been refunded. + + Once entirely refunded, an application fee can't be refunded again. + This method will raise an error when called on an already-refunded application fee, + or when trying to refund more money than is left on an application fee. + """ + return cast( + "ApplicationFeeRefund", + await self._request_async( + "post", + "/v1/application_fees/{id}/refunds".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_service.py new file mode 100644 index 00000000..814c3ad9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_application_fee_service.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._application_fee import ApplicationFee + from stripe._application_fee_refund_service import ( + ApplicationFeeRefundService, + ) + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._application_fee_list_params import ( + ApplicationFeeListParams, + ) + from stripe.params._application_fee_retrieve_params import ( + ApplicationFeeRetrieveParams, + ) + +_subservices = { + "refunds": [ + "stripe._application_fee_refund_service", + "ApplicationFeeRefundService", + ], +} + + +class ApplicationFeeService(StripeService): + refunds: "ApplicationFeeRefundService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["ApplicationFeeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplicationFee]": + """ + Returns a list of application fees you've previously collected. The application fees are returned in sorted order, with the most recent fees appearing first. + """ + return cast( + "ListObject[ApplicationFee]", + self._request( + "get", + "/v1/application_fees", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ApplicationFeeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ApplicationFee]": + """ + Returns a list of application fees you've previously collected. The application fees are returned in sorted order, with the most recent fees appearing first. + """ + return cast( + "ListObject[ApplicationFee]", + await self._request_async( + "get", + "/v1/application_fees", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["ApplicationFeeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFee": + """ + Retrieves the details of an application fee that your account has collected. The same information is returned when refunding the application fee. + """ + return cast( + "ApplicationFee", + self._request( + "get", + "/v1/application_fees/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["ApplicationFeeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ApplicationFee": + """ + Retrieves the details of an application fee that your account has collected. The same information is returned when refunding the application fee. + """ + return cast( + "ApplicationFee", + await self._request_async( + "get", + "/v1/application_fees/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_apps_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_apps_service.py new file mode 100644 index 00000000..d20e1347 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_apps_service.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.apps._secret_service import SecretService + +_subservices = {"secrets": ["stripe.apps._secret_service", "SecretService"]} + + +class AppsService(StripeService): + secrets: "SecretService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance.py new file mode 100644 index 00000000..e3a5e847 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance.py @@ -0,0 +1,317 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._singleton_api_resource import SingletonAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._balance_retrieve_params import BalanceRetrieveParams + + +class Balance(SingletonAPIResource["Balance"]): + """ + This is an object representing your Stripe balance. You can retrieve it to see + the balance currently on your Stripe account. + + The top-level `available` and `pending` comprise your "payments balance." + + Related guide: [Balances and settlement time](https://stripe.com/docs/payments/balances), [Understanding Connect account balances](https://stripe.com/docs/connect/account-balances) + """ + + OBJECT_NAME: ClassVar[Literal["balance"]] = "balance" + + class Available(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class ConnectReserved(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class InstantAvailable(StripeObject): + class NetAvailable(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Net balance amount, subtracting fees from platform-set pricing. + """ + destination: str + """ + ID of the external account for this net balance (not expandable). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + net_available: Optional[List[NetAvailable]] + """ + Breakdown of balance by destination. + """ + source_types: Optional[SourceTypes] + _inner_class_types = { + "net_available": NetAvailable, + "source_types": SourceTypes, + } + + class Issuing(StripeObject): + class Available(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + available: List[Available] + """ + Funds that are available for use. + """ + _inner_class_types = {"available": Available} + + class Pending(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class RefundAndDisputePrefunding(StripeObject): + class Available(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + class Pending(StripeObject): + class SourceTypes(StripeObject): + bank_account: Optional[int] + """ + Amount coming from [legacy US ACH payments](https://docs.stripe.com/ach-deprecated). + """ + card: Optional[int] + """ + Amount coming from most payment methods, including cards as well as [non-legacy bank debits](https://docs.stripe.com/payments/bank-debits). + """ + fpx: Optional[int] + """ + Amount coming from [FPX](https://docs.stripe.com/payments/fpx), a Malaysian payment method. + """ + + amount: int + """ + Balance amount. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + source_types: Optional[SourceTypes] + _inner_class_types = {"source_types": SourceTypes} + + available: List[Available] + """ + Funds that are available for use. + """ + pending: List[Pending] + """ + Funds that are pending + """ + _inner_class_types = {"available": Available, "pending": Pending} + + available: List[Available] + """ + Available funds that you can transfer or pay out automatically by Stripe or explicitly through the [Transfers API](https://stripe.com/docs/api#transfers) or [Payouts API](https://stripe.com/docs/api#payouts). You can find the available balance for each currency and payment type in the `source_types` property. + """ + connect_reserved: Optional[List[ConnectReserved]] + """ + Funds held due to negative balances on connected accounts where [account.controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts. You can find the connect reserve balance for each currency and payment type in the `source_types` property. + """ + instant_available: Optional[List[InstantAvailable]] + """ + Funds that you can pay out using Instant Payouts. + """ + issuing: Optional[Issuing] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["balance"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + pending: List[Pending] + """ + Funds that aren't available in the balance yet. You can find the pending balance for each currency and each payment type in the `source_types` property. + """ + refund_and_dispute_prefunding: Optional[RefundAndDisputePrefunding] + + @classmethod + def retrieve(cls, **params: Unpack["BalanceRetrieveParams"]) -> "Balance": + """ + Retrieves the current account balance, based on the authentication that was used to make the request. + For a sample request, see [Accounting for negative balances](https://docs.stripe.com/docs/connect/account-balances#accounting-for-negative-balances). + """ + instance = cls(None, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, **params: Unpack["BalanceRetrieveParams"] + ) -> "Balance": + """ + Retrieves the current account balance, based on the authentication that was used to make the request. + For a sample request, see [Accounting for negative balances](https://docs.stripe.com/docs/connect/account-balances#accounting-for-negative-balances). + """ + instance = cls(None, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/balance" + + _inner_class_types = { + "available": Available, + "connect_reserved": ConnectReserved, + "instant_available": InstantAvailable, + "issuing": Issuing, + "pending": Pending, + "refund_and_dispute_prefunding": RefundAndDisputePrefunding, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_service.py new file mode 100644 index 00000000..2f4c7cb0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance import Balance + from stripe._request_options import RequestOptions + from stripe.params._balance_retrieve_params import BalanceRetrieveParams + + +class BalanceService(StripeService): + def retrieve( + self, + params: Optional["BalanceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Balance": + """ + Retrieves the current account balance, based on the authentication that was used to make the request. + For a sample request, see [Accounting for negative balances](https://docs.stripe.com/docs/connect/account-balances#accounting-for-negative-balances). + """ + return cast( + "Balance", + self._request( + "get", + "/v1/balance", + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + params: Optional["BalanceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Balance": + """ + Retrieves the current account balance, based on the authentication that was used to make the request. + For a sample request, see [Accounting for negative balances](https://docs.stripe.com/docs/connect/account-balances#accounting-for-negative-balances). + """ + return cast( + "Balance", + await self._request_async( + "get", + "/v1/balance", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings.py new file mode 100644 index 00000000..bda6ce9b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._singleton_api_resource import SingletonAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from typing import ClassVar, Dict, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._balance_settings_modify_params import ( + BalanceSettingsModifyParams, + ) + from stripe.params._balance_settings_retrieve_params import ( + BalanceSettingsRetrieveParams, + ) + + +class BalanceSettings( + SingletonAPIResource["BalanceSettings"], + UpdateableAPIResource["BalanceSettings"], +): + """ + Options for customizing account balances and payout settings for a Stripe platform's connected accounts. + """ + + OBJECT_NAME: ClassVar[Literal["balance_settings"]] = "balance_settings" + + class Payments(StripeObject): + class Payouts(StripeObject): + class Schedule(StripeObject): + interval: Optional[ + Literal["daily", "manual", "monthly", "weekly"] + ] + """ + How frequently funds will be paid out. One of `manual` (payouts only created via API call), `daily`, `weekly`, or `monthly`. + """ + monthly_payout_days: Optional[List[int]] + """ + The day of the month funds will be paid out. Only shown if `interval` is monthly. Payouts scheduled between the 29th and 31st of the month are sent on the last day of shorter months. + """ + weekly_payout_days: Optional[ + List[ + Literal[ + "friday", + "monday", + "thursday", + "tuesday", + "wednesday", + ] + ] + ] + """ + The days of the week when available funds are paid out, specified as an array, for example, [`monday`, `tuesday`]. Only shown if `interval` is weekly. + """ + + minimum_balance_by_currency: Optional[Dict[str, int]] + """ + The minimum balance amount to retain per currency after automatic payouts. Only funds that exceed these amounts are paid out. Learn more about the [minimum balances for automatic payouts](https://docs.stripe.com/payouts/minimum-balances-for-automatic-payouts). + """ + schedule: Optional[Schedule] + """ + Details on when funds from charges are available, and when they are paid out to an external account. See our [Setting Bank and Debit Card Payouts](https://stripe.com/docs/connect/bank-transfers#payout-information) documentation for details. + """ + statement_descriptor: Optional[str] + """ + The text that appears on the bank account statement for payouts. If not set, this defaults to the platform's bank descriptor as set in the Dashboard. + """ + status: Literal["disabled", "enabled"] + """ + Whether the funds in this account can be paid out. + """ + _inner_class_types = {"schedule": Schedule} + + class SettlementTiming(StripeObject): + delay_days: int + """ + The number of days charge funds are held before becoming available. + """ + delay_days_override: Optional[int] + """ + The number of days charge funds are held before becoming available. If present, overrides the default, or minimum available, for the account. + """ + + debit_negative_balances: Optional[bool] + """ + A Boolean indicating if Stripe should try to reclaim negative balances from an attached bank account. See [Understanding Connect account balances](https://docs.stripe.com/connect/account-balances) for details. The default value is `false` when [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts, otherwise `true`. + """ + payouts: Optional[Payouts] + """ + Settings specific to the account's payouts. + """ + settlement_timing: SettlementTiming + _inner_class_types = { + "payouts": Payouts, + "settlement_timing": SettlementTiming, + } + + object: Literal["balance_settings"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payments: Payments + + @classmethod + def modify( + cls, **params: Unpack["BalanceSettingsModifyParams"] + ) -> "BalanceSettings": + """ + Updates balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, **params: Unpack["BalanceSettingsModifyParams"] + ) -> "BalanceSettings": + """ + Updates balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, **params: Unpack["BalanceSettingsRetrieveParams"] + ) -> "BalanceSettings": + """ + Retrieves balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + instance = cls(None, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, **params: Unpack["BalanceSettingsRetrieveParams"] + ) -> "BalanceSettings": + """ + Retrieves balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + instance = cls(None, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/balance_settings" + + _inner_class_types = {"payments": Payments} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings_service.py new file mode 100644 index 00000000..a88c302a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_settings_service.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_settings import BalanceSettings + from stripe._request_options import RequestOptions + from stripe.params._balance_settings_retrieve_params import ( + BalanceSettingsRetrieveParams, + ) + from stripe.params._balance_settings_update_params import ( + BalanceSettingsUpdateParams, + ) + + +class BalanceSettingsService(StripeService): + def retrieve( + self, + params: Optional["BalanceSettingsRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceSettings": + """ + Retrieves balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + self._request( + "get", + "/v1/balance_settings", + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + params: Optional["BalanceSettingsRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceSettings": + """ + Retrieves balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + await self._request_async( + "get", + "/v1/balance_settings", + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + params: Optional["BalanceSettingsUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceSettings": + """ + Updates balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + self._request( + "post", + "/v1/balance_settings", + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + params: Optional["BalanceSettingsUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceSettings": + """ + Updates balance settings for a given connected account. + Related guide: [Making API calls for connected accounts](https://docs.stripe.com/connect/authentication) + """ + return cast( + "BalanceSettings", + await self._request_async( + "post", + "/v1/balance_settings", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction.py new file mode 100644 index 00000000..e8393984 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction.py @@ -0,0 +1,274 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional, Union +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._application_fee import ApplicationFee + from stripe._application_fee_refund import ApplicationFeeRefund + from stripe._charge import Charge + from stripe._connect_collection_transfer import ConnectCollectionTransfer + from stripe._customer_cash_balance_transaction import ( + CustomerCashBalanceTransaction, + ) + from stripe._dispute import Dispute as DisputeResource + from stripe._payout import Payout + from stripe._refund import Refund + from stripe._reserve_transaction import ReserveTransaction + from stripe._reversal import Reversal + from stripe._tax_deducted_at_source import TaxDeductedAtSource + from stripe._topup import Topup + from stripe._transfer import Transfer + from stripe.issuing._authorization import Authorization + from stripe.issuing._dispute import Dispute as IssuingDisputeResource + from stripe.issuing._transaction import Transaction + from stripe.params._balance_transaction_list_params import ( + BalanceTransactionListParams, + ) + from stripe.params._balance_transaction_retrieve_params import ( + BalanceTransactionRetrieveParams, + ) + + +class BalanceTransaction(ListableAPIResource["BalanceTransaction"]): + """ + Balance transactions represent funds moving through your Stripe account. + Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. + + Related guide: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types) + """ + + OBJECT_NAME: ClassVar[Literal["balance_transaction"]] = ( + "balance_transaction" + ) + + class FeeDetail(StripeObject): + amount: int + """ + Amount of the fee, in cents. + """ + application: Optional[str] + """ + ID of the Connect application that earned the fee. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + type: str + """ + Type of the fee, one of: `application_fee`, `payment_method_passthrough_fee`, `stripe_fee` or `tax`. + """ + + amount: int + """ + Gross amount of this transaction (in cents (or local equivalent)). A positive value represents funds charged to another party, and a negative value represents funds sent to another party. + """ + available_on: int + """ + The date that the transaction's net funds become available in the Stripe balance. + """ + balance_type: Literal[ + "issuing", "payments", "refund_and_dispute_prefunding" + ] + """ + The balance that this transaction impacts. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + exchange_rate: Optional[float] + """ + If applicable, this transaction uses an exchange rate. If money converts from currency A to currency B, then the `amount` in currency A, multipled by the `exchange_rate`, equals the `amount` in currency B. For example, if you charge a customer 10.00 EUR, the PaymentIntent's `amount` is `1000` and `currency` is `eur`. If this converts to 12.34 USD in your Stripe account, the BalanceTransaction's `amount` is `1234`, its `currency` is `usd`, and the `exchange_rate` is `1.234`. + """ + fee: int + """ + Fees (in cents (or local equivalent)) paid for this transaction. Represented as a positive integer when assessed. + """ + fee_details: List[FeeDetail] + """ + Detailed breakdown of fees (in cents (or local equivalent)) paid for this transaction. + """ + id: str + """ + Unique identifier for the object. + """ + net: int + """ + Net impact to a Stripe balance (in cents (or local equivalent)). A positive value represents incrementing a Stripe balance, and a negative value decrementing a Stripe balance. You can calculate the net impact of a transaction on a balance by `amount` - `fee` + """ + object: Literal["balance_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + reporting_category: str + """ + Learn more about how [reporting categories](https://stripe.com/docs/reports/reporting-categories) can help you understand balance transactions from an accounting perspective. + """ + source: Optional[ + ExpandableField[ + Union[ + "ApplicationFee", + "Charge", + "ConnectCollectionTransfer", + "CustomerCashBalanceTransaction", + "DisputeResource", + "ApplicationFeeRefund", + "Authorization", + "IssuingDisputeResource", + "Transaction", + "Payout", + "Refund", + "ReserveTransaction", + "TaxDeductedAtSource", + "Topup", + "Transfer", + "Reversal", + ] + ] + ] + """ + This transaction relates to the Stripe object. + """ + status: str + """ + The transaction's net funds status in the Stripe balance, which are either `available` or `pending`. + """ + type: Literal[ + "adjustment", + "advance", + "advance_funding", + "anticipation_repayment", + "application_fee", + "application_fee_refund", + "charge", + "climate_order_purchase", + "climate_order_refund", + "connect_collection_transfer", + "contribution", + "issuing_authorization_hold", + "issuing_authorization_release", + "issuing_dispute", + "issuing_transaction", + "obligation_outbound", + "obligation_reversal_inbound", + "payment", + "payment_failure_refund", + "payment_network_reserve_hold", + "payment_network_reserve_release", + "payment_refund", + "payment_reversal", + "payment_unreconciled", + "payout", + "payout_cancel", + "payout_failure", + "payout_minimum_balance_hold", + "payout_minimum_balance_release", + "refund", + "refund_failure", + "reserve_transaction", + "reserved_funds", + "stripe_balance_payment_debit", + "stripe_balance_payment_debit_reversal", + "stripe_fee", + "stripe_fx_fee", + "tax_fee", + "topup", + "topup_reversal", + "transfer", + "transfer_cancel", + "transfer_failure", + "transfer_refund", + ] + """ + Transaction type: `adjustment`, `advance`, `advance_funding`, `anticipation_repayment`, `application_fee`, `application_fee_refund`, `charge`, `climate_order_purchase`, `climate_order_refund`, `connect_collection_transfer`, `contribution`, `issuing_authorization_hold`, `issuing_authorization_release`, `issuing_dispute`, `issuing_transaction`, `obligation_outbound`, `obligation_reversal_inbound`, `payment`, `payment_failure_refund`, `payment_network_reserve_hold`, `payment_network_reserve_release`, `payment_refund`, `payment_reversal`, `payment_unreconciled`, `payout`, `payout_cancel`, `payout_failure`, `payout_minimum_balance_hold`, `payout_minimum_balance_release`, `refund`, `refund_failure`, `reserve_transaction`, `reserved_funds`, `stripe_fee`, `stripe_fx_fee`, `stripe_balance_payment_debit`, `stripe_balance_payment_debit_reversal`, `tax_fee`, `topup`, `topup_reversal`, `transfer`, `transfer_cancel`, `transfer_failure`, or `transfer_refund`. Learn more about [balance transaction types and what they represent](https://stripe.com/docs/reports/balance-transaction-types). To classify transactions for accounting purposes, consider `reporting_category` instead. + """ + + @classmethod + def list( + cls, **params: Unpack["BalanceTransactionListParams"] + ) -> ListObject["BalanceTransaction"]: + """ + Returns a list of transactions that have contributed to the Stripe account balance (e.g., charges, transfers, and so forth). The transactions are returned in sorted order, with the most recent transactions appearing first. + + Note that this endpoint was previously called “Balance history” and used the path /v1/balance/history. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["BalanceTransactionListParams"] + ) -> ListObject["BalanceTransaction"]: + """ + Returns a list of transactions that have contributed to the Stripe account balance (e.g., charges, transfers, and so forth). The transactions are returned in sorted order, with the most recent transactions appearing first. + + Note that this endpoint was previously called “Balance history” and used the path /v1/balance/history. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["BalanceTransactionRetrieveParams"] + ) -> "BalanceTransaction": + """ + Retrieves the balance transaction with the given ID. + + Note that this endpoint previously used the path /v1/balance/history/:id. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["BalanceTransactionRetrieveParams"] + ) -> "BalanceTransaction": + """ + Retrieves the balance transaction with the given ID. + + Note that this endpoint previously used the path /v1/balance/history/:id. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"fee_details": FeeDetail} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction_service.py new file mode 100644 index 00000000..35023fd9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_balance_transaction_service.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._balance_transaction_list_params import ( + BalanceTransactionListParams, + ) + from stripe.params._balance_transaction_retrieve_params import ( + BalanceTransactionRetrieveParams, + ) + + +class BalanceTransactionService(StripeService): + def list( + self, + params: Optional["BalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[BalanceTransaction]": + """ + Returns a list of transactions that have contributed to the Stripe account balance (e.g., charges, transfers, and so forth). The transactions are returned in sorted order, with the most recent transactions appearing first. + + Note that this endpoint was previously called “Balance history” and used the path /v1/balance/history. + """ + return cast( + "ListObject[BalanceTransaction]", + self._request( + "get", + "/v1/balance_transactions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["BalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[BalanceTransaction]": + """ + Returns a list of transactions that have contributed to the Stripe account balance (e.g., charges, transfers, and so forth). The transactions are returned in sorted order, with the most recent transactions appearing first. + + Note that this endpoint was previously called “Balance history” and used the path /v1/balance/history. + """ + return cast( + "ListObject[BalanceTransaction]", + await self._request_async( + "get", + "/v1/balance_transactions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["BalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceTransaction": + """ + Retrieves the balance transaction with the given ID. + + Note that this endpoint previously used the path /v1/balance/history/:id. + """ + return cast( + "BalanceTransaction", + self._request( + "get", + "/v1/balance_transactions/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["BalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BalanceTransaction": + """ + Retrieves the balance transaction with the given ID. + + Note that this endpoint previously used the path /v1/balance/history/:id. + """ + return cast( + "BalanceTransaction", + await self._request_async( + "get", + "/v1/balance_transactions/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_bank_account.py b/Backend/venv/lib/python3.12/site-packages/stripe/_bank_account.py new file mode 100644 index 00000000..068e8ccc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_bank_account.py @@ -0,0 +1,537 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._account import Account +from stripe._customer import Customer +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._error import InvalidRequestError +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from stripe._verify_mixin import VerifyMixin +from typing import ClassVar, Dict, List, Optional, Union, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._card import Card + from stripe.params._bank_account_delete_params import ( + BankAccountDeleteParams, + ) + + +class BankAccount( + DeletableAPIResource["BankAccount"], + UpdateableAPIResource["BankAccount"], + VerifyMixin, +): + """ + These bank accounts are payment methods on `Customer` objects. + + On the other hand [External Accounts](https://docs.stripe.com/api#external_accounts) are transfer + destinations on `Account` objects for connected accounts. + They can be bank accounts or debit cards as well, and are documented in the links above. + + Related guide: [Bank debits and transfers](https://docs.stripe.com/payments/bank-debits-transfers) + """ + + OBJECT_NAME: ClassVar[Literal["bank_account"]] = "bank_account" + + class FutureRequirements(StripeObject): + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + currently_due: Optional[List[str]] + """ + Fields that need to be collected to keep the external account enabled. If not collected by `current_deadline`, these fields appear in `past_due` as well, and the account is disabled. + """ + errors: Optional[List[Error]] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + past_due: Optional[List[str]] + """ + Fields that weren't collected by `current_deadline`. These fields need to be collected to enable the external account. + """ + pending_verification: Optional[List[str]] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due`, `currently_due`, or `past_due`. Fields might appear in `eventually_due`, `currently_due`, or `past_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"errors": Error} + + class Requirements(StripeObject): + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + currently_due: Optional[List[str]] + """ + Fields that need to be collected to keep the external account enabled. If not collected by `current_deadline`, these fields appear in `past_due` as well, and the account is disabled. + """ + errors: Optional[List[Error]] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + past_due: Optional[List[str]] + """ + Fields that weren't collected by `current_deadline`. These fields need to be collected to enable the external account. + """ + pending_verification: Optional[List[str]] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due`, `currently_due`, or `past_due`. Fields might appear in `eventually_due`, `currently_due`, or `past_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"errors": Error} + + account: Optional[ExpandableField["Account"]] + """ + The account this bank account belongs to. Only applicable on Accounts (not customers or recipients) This property is only available when returned as an [External Account](https://docs.stripe.com/api/external_account_bank_accounts/object) where [controller.is_controller](https://docs.stripe.com/api/accounts/object#account_object-controller-is_controller) is `true`. + """ + account_holder_name: Optional[str] + """ + The name of the person or business that owns the bank account. + """ + account_holder_type: Optional[str] + """ + The type of entity that holds the account. This can be either `individual` or `company`. + """ + account_type: Optional[str] + """ + The bank account type. This can only be `checking` or `savings` in most countries. In Japan, this can only be `futsu` or `toza`. + """ + available_payout_methods: Optional[List[Literal["instant", "standard"]]] + """ + A set of available payout methods for this bank account. Only values from this set should be passed as the `method` when creating a payout. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the routing number (e.g., `WELLS FARGO`). + """ + country: str + """ + Two-letter ISO code representing the country the bank account is located in. + """ + currency: str + """ + Three-letter [ISO code for the currency](https://stripe.com/docs/payouts) paid out to the bank account. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the customer that the bank account is associated with. + """ + default_for_currency: Optional[bool] + """ + Whether this bank account is the default external account for its currency. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + future_requirements: Optional[FutureRequirements] + """ + Information about the [upcoming new requirements for the bank account](https://stripe.com/docs/connect/custom-accounts/future-requirements), including what information needs to be collected, and by when. + """ + id: str + """ + Unique identifier for the object. + """ + last4: str + """ + The last four digits of the bank account number. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["bank_account"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + requirements: Optional[Requirements] + """ + Information about the requirements for the bank account, including what information needs to be collected. + """ + routing_number: Optional[str] + """ + The routing transit number for the bank account. + """ + status: str + """ + For bank accounts, possible values are `new`, `validated`, `verified`, `verification_failed`, or `errored`. A bank account that hasn't had any activity or validation performed is `new`. If Stripe can determine that the bank account exists, its status will be `validated`. Note that there often isn't enough information to know (e.g., for smaller credit unions), and the validation is not always run. If customer bank account verification has succeeded, the bank account status will be `verified`. If the verification failed for any reason, such as microdeposit failure, the status will be `verification_failed`. If a payout sent to this bank account fails, we'll set the status to `errored` and will not continue to send [scheduled payouts](https://stripe.com/docs/payouts#payout-schedule) until the bank details are updated. + + For external accounts, possible values are `new`, `errored` and `verification_failed`. If a payout fails, the status is set to `errored` and scheduled payouts are stopped until account details are updated. In the US and India, if we can't [verify the owner of the bank account](https://support.stripe.com/questions/bank-account-ownership-verification), we'll set the status to `verification_failed`. Other validations aren't run against external accounts because they're only used for payouts. This means the other statuses don't apply. + """ + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @overload + def delete( + self, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["BankAccountDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + def instance_url(self): + token = self.id + extn = sanitize_id(token) + if hasattr(self, "customer"): + customer = self.customer + + base = Customer.class_url() + assert customer is not None + if isinstance(customer, Customer): + customer = customer.id + owner_extn = sanitize_id(customer) + class_base = "sources" + + elif hasattr(self, "account"): + account = self.account + + base = Account.class_url() + assert account is not None + if isinstance(account, Account): + account = account.id + owner_extn = sanitize_id(account) + class_base = "external_accounts" + + else: + raise InvalidRequestError( + "Could not determine whether bank_account_id %s is " + "attached to a customer or an account." % token, + "id", + ) + + return "%s/%s/%s/%s" % (base, owner_extn, class_base, extn) + + @classmethod + def modify(cls, sid, **params): + raise NotImplementedError( + "Can't modify a bank account without a customer or account ID. " + "Use stripe.Customer.modify_source('customer_id', 'bank_account_id', ...) " + "(see https://stripe.com/docs/api/customer_bank_accounts/update) or " + "stripe.Account.modify_external_account('customer_id', 'bank_account_id', ...) " + "(see https://stripe.com/docs/api/external_account_bank_accounts/update)." + ) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a bank account without a customer or account ID. " + "Use stripe.customer.retrieve_source('customer_id', 'bank_account_id') " + "(see https://stripe.com/docs/api/customer_bank_accounts/retrieve) or " + "stripe.Account.retrieve_external_account('account_id', 'bank_account_id') " + "(see https://stripe.com/docs/api/external_account_bank_accounts/retrieve)." + ) + + _inner_class_types = { + "future_requirements": FutureRequirements, + "requirements": Requirements, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_base_address.py b/Backend/venv/lib/python3.12/site-packages/stripe/_base_address.py new file mode 100644 index 00000000..b45e6eda --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_base_address.py @@ -0,0 +1,12 @@ +from typing import Optional +from typing_extensions import NotRequired, TypedDict, Literal + + +BaseAddress = Literal["api", "files", "connect", "meter_events"] + + +class BaseAddresses(TypedDict): + api: NotRequired[Optional[str]] + connect: NotRequired[Optional[str]] + files: NotRequired[Optional[str]] + meter_events: NotRequired[Optional[str]] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_billing_portal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_billing_portal_service.py new file mode 100644 index 00000000..07fcd2d9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_billing_portal_service.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing_portal._configuration_service import ( + ConfigurationService, + ) + from stripe.billing_portal._session_service import SessionService + +_subservices = { + "configurations": [ + "stripe.billing_portal._configuration_service", + "ConfigurationService", + ], + "sessions": ["stripe.billing_portal._session_service", "SessionService"], +} + + +class BillingPortalService(StripeService): + configurations: "ConfigurationService" + sessions: "SessionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_billing_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_billing_service.py new file mode 100644 index 00000000..49fb9a4c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_billing_service.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing._alert_service import AlertService + from stripe.billing._credit_balance_summary_service import ( + CreditBalanceSummaryService, + ) + from stripe.billing._credit_balance_transaction_service import ( + CreditBalanceTransactionService, + ) + from stripe.billing._credit_grant_service import CreditGrantService + from stripe.billing._meter_event_adjustment_service import ( + MeterEventAdjustmentService, + ) + from stripe.billing._meter_event_service import MeterEventService + from stripe.billing._meter_service import MeterService + +_subservices = { + "alerts": ["stripe.billing._alert_service", "AlertService"], + "credit_balance_summary": [ + "stripe.billing._credit_balance_summary_service", + "CreditBalanceSummaryService", + ], + "credit_balance_transactions": [ + "stripe.billing._credit_balance_transaction_service", + "CreditBalanceTransactionService", + ], + "credit_grants": [ + "stripe.billing._credit_grant_service", + "CreditGrantService", + ], + "meters": ["stripe.billing._meter_service", "MeterService"], + "meter_events": [ + "stripe.billing._meter_event_service", + "MeterEventService", + ], + "meter_event_adjustments": [ + "stripe.billing._meter_event_adjustment_service", + "MeterEventAdjustmentService", + ], +} + + +class BillingService(StripeService): + alerts: "AlertService" + credit_balance_summary: "CreditBalanceSummaryService" + credit_balance_transactions: "CreditBalanceTransactionService" + credit_grants: "CreditGrantService" + meters: "MeterService" + meter_events: "MeterEventService" + meter_event_adjustments: "MeterEventAdjustmentService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_capability.py b/Backend/venv/lib/python3.12/site-packages/stripe/_capability.py new file mode 100644 index 00000000..8e244eef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_capability.py @@ -0,0 +1,415 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._account import Account +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, List, Optional +from typing_extensions import Literal + + +class Capability(UpdateableAPIResource["Capability"]): + """ + This is an object representing a capability for a Stripe account. + + Related guide: [Account capabilities](https://stripe.com/docs/connect/account-capabilities) + """ + + OBJECT_NAME: ClassVar[Literal["capability"]] = "capability" + + class FutureRequirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + """ + Fields that can be provided to satisfy all fields in `original_fields_due`. + """ + original_fields_due: List[str] + """ + Fields that are due and can be satisfied by providing all fields in `alternative_fields_due`. + """ + + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + alternatives: Optional[List[Alternative]] + """ + Fields that are due and can be satisfied by providing the corresponding alternative fields instead. + """ + current_deadline: Optional[int] + """ + Date on which `future_requirements` becomes the main `requirements` hash and `future_requirements` becomes empty. After the transition, `currently_due` requirements may immediately become `past_due`, but the account may also be given a grace period depending on the capability's enablement state prior to transitioning. + """ + currently_due: List[str] + """ + Fields that need to be collected to keep the capability enabled. If not collected by `future_requirements[current_deadline]`, these fields will transition to the main `requirements` hash. + """ + disabled_reason: Optional[ + Literal[ + "other", + "paused.inactivity", + "pending.onboarding", + "pending.review", + "platform_disabled", + "platform_paused", + "rejected.inactivity", + "rejected.other", + "rejected.unsupported_business", + "requirements.fields_needed", + ] + ] + """ + This is typed as an enum for consistency with `requirements.disabled_reason`, but it safe to assume `future_requirements.disabled_reason` is null because fields in `future_requirements` will never disable the account. + """ + errors: List[Error] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + eventually_due: List[str] + """ + Fields you must collect when all thresholds are reached. As they become required, they appear in `currently_due` as well. + """ + past_due: List[str] + """ + Fields that weren't collected by `requirements.current_deadline`. These fields need to be collected to enable the capability on the account. New fields will never appear here; `future_requirements.past_due` will always be a subset of `requirements.past_due`. + """ + pending_verification: List[str] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due` or `currently_due`. Fields might appear in `eventually_due` or `currently_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class Requirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + """ + Fields that can be provided to satisfy all fields in `original_fields_due`. + """ + original_fields_due: List[str] + """ + Fields that are due and can be satisfied by providing all fields in `alternative_fields_due`. + """ + + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + alternatives: Optional[List[Alternative]] + """ + Fields that are due and can be satisfied by providing the corresponding alternative fields instead. + """ + current_deadline: Optional[int] + """ + The date by which all required account information must be both submitted and verified. This includes fields listed in `currently_due` as well as those in `pending_verification`. If any required information is missing or unverified by this date, the account may be disabled. Note that `current_deadline` may change if additional `currently_due` requirements are requested. + """ + currently_due: List[str] + """ + Fields that need to be collected to keep the capability enabled. If not collected by `current_deadline`, these fields appear in `past_due` as well, and the capability is disabled. + """ + disabled_reason: Optional[ + Literal[ + "other", + "paused.inactivity", + "pending.onboarding", + "pending.review", + "platform_disabled", + "platform_paused", + "rejected.inactivity", + "rejected.other", + "rejected.unsupported_business", + "requirements.fields_needed", + ] + ] + """ + Description of why the capability is disabled. [Learn more about handling verification issues](https://stripe.com/docs/connect/handling-api-verification). + """ + errors: List[Error] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + eventually_due: List[str] + """ + Fields you must collect when all thresholds are reached. As they become required, they appear in `currently_due` as well, and `current_deadline` becomes set. + """ + past_due: List[str] + """ + Fields that weren't collected by `current_deadline`. These fields need to be collected to enable the capability on the account. + """ + pending_verification: List[str] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due`, `currently_due`, or `past_due`. Fields might appear in `eventually_due`, `currently_due`, or `past_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + account: ExpandableField["Account"] + """ + The account for which the capability enables functionality. + """ + future_requirements: Optional[FutureRequirements] + id: str + """ + The identifier for the capability. + """ + object: Literal["capability"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + requested: bool + """ + Whether the capability has been requested. + """ + requested_at: Optional[int] + """ + Time at which the capability was requested. Measured in seconds since the Unix epoch. + """ + requirements: Optional[Requirements] + status: Literal["active", "inactive", "pending", "unrequested"] + """ + The status of the capability. + """ + + def instance_url(self): + token = self.id + account = self.account + base = Account.class_url() + if isinstance(account, Account): + account = account.id + acct_extn = sanitize_id(account) + extn = sanitize_id(token) + return "%s/%s/capabilities/%s" % (base, acct_extn, extn) + + @classmethod + def modify(cls, sid, **params): + raise NotImplementedError( + "Can't update a capability without an account ID. Update a capability using " + "account.modify_capability('acct_123', 'acap_123', params)" + ) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a capability without an account ID. Retrieve a capability using " + "account.retrieve_capability('acct_123', 'acap_123')" + ) + + _inner_class_types = { + "future_requirements": FutureRequirements, + "requirements": Requirements, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_card.py b/Backend/venv/lib/python3.12/site-packages/stripe/_card.py new file mode 100644 index 00000000..5936cc24 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_card.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._account import Account +from stripe._customer import Customer +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._error import InvalidRequestError +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, Union, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._bank_account import BankAccount + from stripe.params._card_delete_params import CardDeleteParams + + +class Card(DeletableAPIResource["Card"], UpdateableAPIResource["Card"]): + """ + You can store multiple cards on a customer in order to charge the customer + later. You can also store multiple debit cards on a recipient in order to + transfer to those cards later. + + Related guide: [Card payments with Sources](https://stripe.com/docs/sources/cards) + """ + + OBJECT_NAME: ClassVar[Literal["card"]] = "card" + + class Networks(StripeObject): + preferred: Optional[str] + """ + The preferred network for co-branded cards. Can be `cartes_bancaires`, `mastercard`, `visa` or `invalid_preference` if requested network is not valid for the card. + """ + + account: Optional[ExpandableField["Account"]] + address_city: Optional[str] + """ + City/District/Suburb/Town/Village. + """ + address_country: Optional[str] + """ + Billing address country, if provided when creating card. + """ + address_line1: Optional[str] + """ + Address line 1 (Street address/PO Box/Company name). + """ + address_line1_check: Optional[str] + """ + If `address_line1` was provided, results of the check: `pass`, `fail`, `unavailable`, or `unchecked`. + """ + address_line2: Optional[str] + """ + Address line 2 (Apartment/Suite/Unit/Building). + """ + address_state: Optional[str] + """ + State/County/Province/Region. + """ + address_zip: Optional[str] + """ + ZIP or postal code. + """ + address_zip_check: Optional[str] + """ + If `address_zip` was provided, results of the check: `pass`, `fail`, `unavailable`, or `unchecked`. + """ + allow_redisplay: Optional[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to “unspecified”. + """ + available_payout_methods: Optional[List[Literal["instant", "standard"]]] + """ + A set of available payout methods for this card. Only values from this set should be passed as the `method` when creating a payout. + """ + brand: str + """ + Card brand. Can be `American Express`, `Cartes Bancaires`, `Diners Club`, `Discover`, `Eftpos Australia`, `Girocard`, `JCB`, `MasterCard`, `UnionPay`, `Visa`, or `Unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + currency: Optional[str] + """ + Three-letter [ISO code for currency](https://www.iso.org/iso-4217-currency-codes.html) in lowercase. Must be a [supported currency](https://docs.stripe.com/currencies). Only applicable on accounts (not customers or recipients). The card can be used as a transfer destination for funds in this currency. This property is only available when returned as an [External Account](https://docs.stripe.com/api/external_account_cards/object) where [controller.is_controller](https://docs.stripe.com/api/accounts/object#account_object-controller-is_controller) is `true`. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The customer that this card belongs to. This attribute will not be in the card object if the card belongs to an account or recipient instead. + """ + cvc_check: Optional[str] + """ + If a CVC was provided, results of the check: `pass`, `fail`, `unavailable`, or `unchecked`. A result of unchecked indicates that CVC was provided but hasn't been checked yet. Checks are typically performed when attaching a card to a Customer object, or when creating a charge. For more details, see [Check if a card is valid without a charge](https://support.stripe.com/questions/check-if-a-card-is-valid-without-a-charge). + """ + default_for_currency: Optional[bool] + """ + Whether this card is the default external account for its currency. This property is only available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `application`, which includes Custom accounts. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: str + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + id: str + """ + Unique identifier for the object. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: str + """ + The last four digits of the card. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + Cardholder name. + """ + networks: Optional[Networks] + object: Literal["card"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + regulated_status: Optional[Literal["regulated", "unregulated"]] + """ + Status of a card based on the card issuer. + """ + status: Optional[str] + """ + For external accounts that are cards, possible values are `new` and `errored`. If a payout fails, the status is set to `errored` and [scheduled payouts](https://stripe.com/docs/payouts#payout-schedule) are stopped until account details are updated. + """ + tokenization_method: Optional[str] + """ + If the card number is tokenized, this is the method that was used. Can be `android_pay` (includes Google Pay), `apple_pay`, `masterpass`, `visa_checkout`, or null. + """ + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + Union["BankAccount", "Card"], + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @overload + def delete( + self, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + Union["BankAccount", "Card"], + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardDeleteParams"] + ) -> Union["BankAccount", "Card"]: + """ + Delete a specified external account for a given account. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + def instance_url(self): + token = self.id + extn = sanitize_id(token) + if hasattr(self, "customer"): + customer = self.customer + + base = Customer.class_url() + assert customer is not None + if isinstance(customer, Customer): + customer = customer.id + owner_extn = sanitize_id(customer) + class_base = "sources" + + elif hasattr(self, "account"): + account = self.account + + base = Account.class_url() + assert account is not None + if isinstance(account, Account): + account = account.id + owner_extn = sanitize_id(account) + class_base = "external_accounts" + + else: + raise InvalidRequestError( + "Could not determine whether card_id %s is " + "attached to a customer, or " + "account." % token, + "id", + ) + + return "%s/%s/%s/%s" % (base, owner_extn, class_base, extn) + + @classmethod + def modify(cls, sid, **params): + raise NotImplementedError( + "Can't modify a card without a customer or account ID. " + "Use stripe.Customer.modify_source('customer_id', 'card_id', ...) " + "(see https://stripe.com/docs/api/cards/update) or " + "stripe.Account.modify_external_account('account_id', 'card_id', ...) " + "(see https://stripe.com/docs/api/external_account_cards/update)." + ) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a card without a customer or account ID. " + "Use stripe.Customer.retrieve_source('customer_id', 'card_id') " + "(see https://stripe.com/docs/api/cards/retrieve) or " + "stripe.Account.retrieve_external_account('account_id', 'card_id') " + "(see https://stripe.com/docs/api/external_account_cards/retrieve)." + ) + + _inner_class_types = {"networks": Networks} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_cash_balance.py b/Backend/venv/lib/python3.12/site-packages/stripe/_cash_balance.py new file mode 100644 index 00000000..287e786a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_cash_balance.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._customer import Customer +from stripe._stripe_object import StripeObject +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional +from typing_extensions import Literal + + +class CashBalance(StripeObject): + """ + A customer's `Cash balance` represents real funds. Customers can add funds to their cash balance by sending a bank transfer. These funds can be used for payment and can eventually be paid out to your bank account. + """ + + OBJECT_NAME: ClassVar[Literal["cash_balance"]] = "cash_balance" + + class Settings(StripeObject): + reconciliation_mode: Literal["automatic", "manual"] + """ + The configuration for how funds that land in the customer cash balance are reconciled. + """ + using_merchant_default: bool + """ + A flag to indicate if reconciliation mode returned is the user's default or is specific to this customer cash balance + """ + + available: Optional[Dict[str, int]] + """ + A hash of all cash balances available to this customer. You cannot delete a customer with any cash balances, even if the balance is 0. Amounts are represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + customer: str + """ + The ID of the customer whose cash balance this object represents. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["cash_balance"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + settings: Settings + + def instance_url(self): + customer = self.customer + base = Customer.class_url() + cust_extn = sanitize_id(customer) + return "%s/%s/cash_balance" % (base, cust_extn) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a Customer Cash Balance without a Customer ID. " + "Use Customer.retrieve_cash_balance('cus_123')" + ) + + _inner_class_types = {"settings": Settings} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_charge.py b/Backend/venv/lib/python3.12/site-packages/stripe/_charge.py new file mode 100644 index 00000000..bda833c4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_charge.py @@ -0,0 +1,2737 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + Union, + cast, + overload, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._application_fee import ApplicationFee + from stripe._balance_transaction import BalanceTransaction + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._customer import Customer + from stripe._mandate import Mandate + from stripe._payment_intent import PaymentIntent + from stripe._payment_method import PaymentMethod + from stripe._refund import Refund + from stripe._review import Review + from stripe._source import Source + from stripe._transfer import Transfer + from stripe.params._charge_capture_params import ChargeCaptureParams + from stripe.params._charge_create_params import ChargeCreateParams + from stripe.params._charge_list_params import ChargeListParams + from stripe.params._charge_list_refunds_params import ( + ChargeListRefundsParams, + ) + from stripe.params._charge_modify_params import ChargeModifyParams + from stripe.params._charge_retrieve_params import ChargeRetrieveParams + from stripe.params._charge_retrieve_refund_params import ( + ChargeRetrieveRefundParams, + ) + from stripe.params._charge_search_params import ChargeSearchParams + + +@nested_resource_class_methods("refund") +class Charge( + CreateableAPIResource["Charge"], + ListableAPIResource["Charge"], + SearchableAPIResource["Charge"], + UpdateableAPIResource["Charge"], +): + """ + The `Charge` object represents a single attempt to move money into your Stripe account. + PaymentIntent confirmation is the most common way to create Charges, but [Account Debits](https://stripe.com/docs/connect/account-debits) may also create Charges. + Some legacy payment flows create Charges directly, which is not recommended for new integrations. + """ + + OBJECT_NAME: ClassVar[Literal["charge"]] = "charge" + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + """ + Billing address. + """ + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + phone: Optional[str] + """ + Billing phone number (including extension). + """ + tax_id: Optional[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + _inner_class_types = {"address": Address} + + class FraudDetails(StripeObject): + stripe_report: Optional[str] + """ + Assessments from Stripe. If set, the value is `fraudulent`. + """ + user_report: Optional[str] + """ + Assessments reported by you. If set, possible values of are `safe` and `fraudulent`. + """ + + class Level3(StripeObject): + class LineItem(StripeObject): + discount_amount: Optional[int] + product_code: str + product_description: str + quantity: Optional[int] + tax_amount: Optional[int] + unit_cost: Optional[int] + + customer_reference: Optional[str] + line_items: List[LineItem] + merchant_reference: str + shipping_address_zip: Optional[str] + shipping_amount: Optional[int] + shipping_from_zip: Optional[str] + _inner_class_types = {"line_items": LineItem} + + class Outcome(StripeObject): + class Rule(StripeObject): + action: str + """ + The action taken on the payment. + """ + id: str + """ + Unique identifier for the object. + """ + predicate: str + """ + The predicate to evaluate the payment against. + """ + + advice_code: Optional[ + Literal["confirm_card_data", "do_not_try_again", "try_again_later"] + ] + """ + An enumerated value providing a more detailed explanation on [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines). + """ + network_advice_code: Optional[str] + """ + For charges declined by the network, a 2 digit code which indicates the advice returned by the network on how to proceed with an error. + """ + network_decline_code: Optional[str] + """ + For charges declined by the network, an alphanumeric code which indicates the reason the charge failed. + """ + network_status: Optional[str] + """ + Possible values are `approved_by_network`, `declined_by_network`, `not_sent_to_network`, and `reversed_after_approval`. The value `reversed_after_approval` indicates the payment was [blocked by Stripe](https://stripe.com/docs/declines#blocked-payments) after bank authorization, and may temporarily appear as "pending" on a cardholder's statement. + """ + reason: Optional[str] + """ + An enumerated value providing a more detailed explanation of the outcome's `type`. Charges blocked by Radar's default block rule have the value `highest_risk_level`. Charges placed in review by Radar's default review rule have the value `elevated_risk_level`. Charges blocked because the payment is unlikely to be authorized have the value `low_probability_of_authorization`. Charges authorized, blocked, or placed in review by custom rules have the value `rule`. See [understanding declines](https://stripe.com/docs/declines) for more details. + """ + risk_level: Optional[str] + """ + Stripe Radar's evaluation of the riskiness of the payment. Possible values for evaluated payments are `normal`, `elevated`, `highest`. For non-card payments, and card-based payments predating the public assignment of risk levels, this field will have the value `not_assessed`. In the event of an error in the evaluation, this field will have the value `unknown`. This field is only available with Radar. + """ + risk_score: Optional[int] + """ + Stripe Radar's evaluation of the riskiness of the payment. Possible values for evaluated payments are between 0 and 100. For non-card payments, card-based payments predating the public assignment of risk scores, or in the event of an error during evaluation, this field will not be present. This field is only available with Radar for Fraud Teams. + """ + rule: Optional[ExpandableField[Rule]] + """ + The ID of the Radar rule that matched the payment, if applicable. + """ + seller_message: Optional[str] + """ + A human-readable description of the outcome type and reason, designed for you (the recipient of the payment), not your customer. + """ + type: str + """ + Possible values are `authorized`, `manual_review`, `issuer_declined`, `blocked`, and `invalid`. See [understanding declines](https://stripe.com/docs/declines) and [Radar reviews](https://stripe.com/docs/radar/reviews) for details. + """ + _inner_class_types = {"rule": Rule} + + class PaymentMethodDetails(StripeObject): + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + """ + Account number to transfer funds to. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the routing number. + """ + routing_number: Optional[str] + """ + Routing transit number for the bank account to transfer funds to. + """ + swift_code: Optional[str] + """ + SWIFT code of the bank associated with the routing number. + """ + + class AchDebit(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Type of entity that holds the account. This can be either `individual` or `company`. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + routing_number: Optional[str] + """ + Routing transit number of the bank account. + """ + + class AcssDebit(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + institution_number: Optional[str] + """ + Institution number of the bank account + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + transit_number: Optional[str] + """ + Transit number of the bank account. + """ + + class Affirm(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + The Affirm transaction ID associated with this payment. + """ + + class AfterpayClearpay(StripeObject): + order_id: Optional[str] + """ + The Afterpay order ID associated with this payment intent. + """ + reference: Optional[str] + """ + Order identifier shown to the merchant in Afterpay's online portal. + """ + + class Alipay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular Alipay transaction. + """ + + class Alma(StripeObject): + class Installments(StripeObject): + count: int + """ + The number of installments. + """ + + installments: Optional[Installments] + transaction_id: Optional[str] + """ + The Alma transaction ID associated with this payment. + """ + _inner_class_types = {"installments": Installments} + + class AmazonPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Amazon Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + """ + Bank-State-Branch number of the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + sort_code: Optional[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + class Bancontact(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + Can be one of `en`, `de`, `fr`, or `nl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Bancontact directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class Billie(StripeObject): + transaction_id: Optional[str] + """ + The Billie transaction ID associated with this payment. + """ + + class Blik(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by BLIK to every buyer. + """ + + class Boleto(StripeObject): + tax_id: str + """ + The tax ID of the customer (CPF for individuals consumers or CNPJ for businesses consumers) + """ + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + """ + If a address line1 was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + address_postal_code_check: Optional[str] + """ + If a address postal code was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + cvc_check: Optional[str] + """ + If a CVC was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + + class ExtendedAuthorization(StripeObject): + status: Literal["disabled", "enabled"] + """ + Indicates whether or not the capture window is extended beyond the standard authorization. + """ + + class IncrementalAuthorization(StripeObject): + status: Literal["available", "unavailable"] + """ + Indicates whether or not the incremental authorization feature is supported. + """ + + class Installments(StripeObject): + class Plan(StripeObject): + count: Optional[int] + """ + For `fixed_count` installment plans, this is the number of installment payments your customer will make to their credit card. + """ + interval: Optional[Literal["month"]] + """ + For `fixed_count` installment plans, this is the interval between installment payments your customer will make to their credit card. + One of `month`. + """ + type: Literal["bonus", "fixed_count", "revolving"] + """ + Type of installment plan, one of `fixed_count`, `bonus`, or `revolving`. + """ + + plan: Optional[Plan] + """ + Installment plan selected for the payment. + """ + _inner_class_types = {"plan": Plan} + + class Multicapture(StripeObject): + status: Literal["available", "unavailable"] + """ + Indicates whether or not multiple captures are supported. + """ + + class NetworkToken(StripeObject): + used: bool + """ + Indicates if Stripe used a network token, either user provided or Stripe managed when processing the transaction. + """ + + class Overcapture(StripeObject): + maximum_amount_capturable: int + """ + The maximum amount that can be captured. + """ + status: Literal["available", "unavailable"] + """ + Indicates whether or not the authorized amount can be over-captured. + """ + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + """ + For authenticated transactions: how the customer was authenticated by + the issuing bank. + """ + electronic_commerce_indicator: Optional[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI). A protocol-level field + indicating what degree of authentication was performed. + """ + exemption_indicator: Optional[Literal["low_risk", "none"]] + """ + The exemption requested via 3DS and accepted by the issuer at authentication time. + """ + exemption_indicator_applied: Optional[bool] + """ + Whether Stripe requested the value of `exemption_indicator` in the transaction. This will depend on + the outcome of Stripe's internal risk assessment. + """ + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + """ + Indicates the outcome of 3D Secure authentication. + """ + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + """ + Additional information about why 3D Secure succeeded or failed based + on the `result`. + """ + transaction_id: Optional[str] + """ + The 3D Secure 1 XID or 3D Secure 2 Directory Server Transaction ID + (dsTransId) for this payment. + """ + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was used. + """ + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + """ + The type of the card wallet, one of `amex_express_checkout`, `apple_pay`, `google_pay`, `masterpass`, `samsung_pay`, `visa_checkout`, or `link`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + amount_authorized: Optional[int] + """ + The authorized amount. + """ + authorization_code: Optional[str] + """ + Authorization code on the charge. + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp at which the charge will be automatically refunded if uncaptured. + """ + checks: Optional[Checks] + """ + Check results by Card networks on Card address and CVC at time of payment. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + extended_authorization: Optional[ExtendedAuthorization] + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization: Optional[IncrementalAuthorization] + installments: Optional[Installments] + """ + Installment details for this payment. + + For more information, see the [installments integration guide](https://stripe.com/docs/payments/installments). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment or created by it. + """ + moto: Optional[bool] + """ + True if this payment was marked as MOTO and out of scope for SCA. + """ + multicapture: Optional[Multicapture] + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_token: Optional[NetworkToken] + """ + If this card has network token credentials, this contains the details of the network token credentials. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + overcapture: Optional[Overcapture] + regulated_status: Optional[Literal["regulated", "unregulated"]] + """ + Status of a card based on the card issuer. + """ + three_d_secure: Optional[ThreeDSecure] + """ + Populated if this transaction used 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "extended_authorization": ExtendedAuthorization, + "incremental_authorization": IncrementalAuthorization, + "installments": Installments, + "multicapture": Multicapture, + "network_token": NetworkToken, + "overcapture": Overcapture, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "credit", "prepaid", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", "google_pay", "samsung_pay", "unknown" + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + amount_authorized: Optional[int] + """ + The authorized amount + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization_supported: bool + """ + Whether this [PaymentIntent](https://stripe.com/docs/api/payment_intents) is eligible for incremental authorizations. Request support using [request_incremental_authorization_support](https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + overcapture_supported: bool + """ + Defines whether the authorized amount can be over-captured or not + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "offline": Offline, + "receipt": Receipt, + "wallet": Wallet, + } + + class Cashapp(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by Cash App to every buyer. + """ + cashtag: Optional[str] + """ + A public identifier for buyers using Cash App. + """ + transaction_id: Optional[str] + """ + A unique and immutable identifier of payments assigned by Cash App + """ + + class Crypto(StripeObject): + buyer_address: Optional[str] + """ + The wallet address of the customer. + """ + network: Optional[Literal["base", "ethereum", "polygon", "solana"]] + """ + The blockchain network that the transaction was sent on. + """ + token_currency: Optional[Literal["usdc", "usdg", "usdp"]] + """ + The token currency that the transaction was sent with. + """ + transaction_hash: Optional[str] + """ + The blockchain transaction hash of the crypto payment. + """ + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. Should be one of `arzte_und_apotheker_bank`, `austrian_anadi_bank_ag`, `bank_austria`, `bankhaus_carl_spangler`, `bankhaus_schelhammer_und_schattera_ag`, `bawag_psk_ag`, `bks_bank_ag`, `brull_kallmus_bank_ag`, `btv_vier_lander_bank`, `capital_bank_grawe_gruppe_ag`, `deutsche_bank_ag`, `dolomitenbank`, `easybank_ag`, `erste_bank_und_sparkassen`, `hypo_alpeadriabank_international_ag`, `hypo_noe_lb_fur_niederosterreich_u_wien`, `hypo_oberosterreich_salzburg_steiermark`, `hypo_tirol_bank_ag`, `hypo_vorarlberg_bank_ag`, `hypo_bank_burgenland_aktiengesellschaft`, `marchfelder_bank`, `oberbank_ag`, `raiffeisen_bankengruppe_osterreich`, `schoellerbank_ag`, `sparda_bank_wien`, `volksbank_gruppe`, `volkskreditbank_ag`, or `vr_bank_braunau`. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by EPS directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + EPS rarely provides this information so the attribute is usually empty. + """ + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type, if provided. Can be one of `individual` or `company`. + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. Can be one of `affin_bank`, `agrobank`, `alliance_bank`, `ambank`, `bank_islam`, `bank_muamalat`, `bank_rakyat`, `bsn`, `cimb`, `hong_leong_bank`, `hsbc`, `kfh`, `maybank2u`, `ocbc`, `public_bank`, `rhb`, `standard_chartered`, `uob`, `deutsche_bank`, `maybank2e`, `pb_enterprise`, or `bank_of_china`. + """ + transaction_id: Optional[str] + """ + Unique transaction id generated by FPX for every request from the merchant + """ + + class Giropay(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Giropay directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Giropay rarely provides this information so the attribute is usually empty. + """ + + class Grabpay(StripeObject): + transaction_id: Optional[str] + """ + Unique transaction id generated by GrabPay + """ + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by iDEAL directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class InteracPresent(StripeObject): + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "savings", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + brand: Optional[str] + """ + Card brand. Can be `interac`, `mastercard` or `visa`. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + _inner_class_types = {"receipt": Receipt} + + class KakaoPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Kakao Pay transaction ID associated with this payment. + """ + + class Klarna(StripeObject): + class PayerDetails(StripeObject): + class Address(StripeObject): + country: Optional[str] + """ + The payer address country + """ + + address: Optional[Address] + """ + The payer's address + """ + _inner_class_types = {"address": Address} + + payer_details: Optional[PayerDetails] + """ + The payer details for this transaction. + """ + payment_method_category: Optional[str] + """ + The Klarna payment method used for this transaction. + Can be one of `pay_later`, `pay_now`, `pay_with_financing`, or `pay_in_installments` + """ + preferred_locale: Optional[str] + """ + Preferred language of the Klarna authorization page that the customer is redirected to. + Can be one of `de-AT`, `en-AT`, `nl-BE`, `fr-BE`, `en-BE`, `de-DE`, `en-DE`, `da-DK`, `en-DK`, `es-ES`, `en-ES`, `fi-FI`, `sv-FI`, `en-FI`, `en-GB`, `en-IE`, `it-IT`, `en-IT`, `nl-NL`, `en-NL`, `nb-NO`, `en-NO`, `sv-SE`, `en-SE`, `en-US`, `es-US`, `fr-FR`, `en-FR`, `cs-CZ`, `en-CZ`, `ro-RO`, `en-RO`, `el-GR`, `en-GR`, `en-AU`, `en-NZ`, `en-CA`, `fr-CA`, `pl-PL`, `en-PL`, `pt-PT`, `en-PT`, `de-CH`, `fr-CH`, `it-CH`, or `en-CH` + """ + _inner_class_types = {"payer_details": PayerDetails} + + class Konbini(StripeObject): + class Store(StripeObject): + chain: Optional[ + Literal["familymart", "lawson", "ministop", "seicomart"] + ] + """ + The name of the convenience store chain where the payment was completed. + """ + + store: Optional[Store] + """ + If the payment succeeded, this contains the details of the convenience store where the payment was completed. + """ + _inner_class_types = {"store": Store} + + class KrCard(StripeObject): + brand: Optional[ + Literal[ + "bc", + "citi", + "hana", + "hyundai", + "jeju", + "jeonbuk", + "kakaobank", + "kbank", + "kdbbank", + "kookmin", + "kwangju", + "lotte", + "mg", + "nh", + "post", + "samsung", + "savingsbank", + "shinhan", + "shinhyup", + "suhyup", + "tossbank", + "woori", + ] + ] + """ + The local credit or debit card brand. + """ + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + last4: Optional[str] + """ + The last four digits of the card. This may not be present for American Express cards. + """ + transaction_id: Optional[str] + """ + The Korean Card transaction ID associated with this payment. + """ + + class Link(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the funding source country beneath the Link payment. + You could use this attribute to get a sense of international fees. + """ + + class MbWay(StripeObject): + pass + + class Mobilepay(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Brand of the card used in the transaction + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card + """ + exp_month: Optional[int] + """ + Two digit number representing the card's expiration month + """ + exp_year: Optional[int] + """ + Two digit number representing the card's expiration year + """ + last4: Optional[str] + """ + The last 4 digits of the card + """ + + card: Optional[Card] + """ + Internal card details + """ + _inner_class_types = {"card": Card} + + class Multibanco(StripeObject): + entity: Optional[str] + """ + Entity number associated with this Multibanco payment. + """ + reference: Optional[str] + """ + Reference number associated with this Multibanco payment. + """ + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Naver Pay transaction ID associated with this payment. + """ + + class NzBankAccount(StripeObject): + account_holder_name: Optional[str] + """ + The name on the bank account. Only present if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + bank_name: str + """ + The name of the bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + last4: str + """ + Last four digits of the bank account number. + """ + suffix: Optional[str] + """ + The suffix of the bank account number. + """ + + class Oxxo(StripeObject): + number: Optional[str] + """ + OXXO reference number + """ + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. Can be one of `ing`, `citi_handlowy`, `tmobile_usbugi_bankowe`, `plus_bank`, `etransfer_pocztowy24`, `banki_spbdzielcze`, `bank_nowy_bfg_sa`, `getin_bank`, `velobank`, `blik`, `noble_pay`, `ideabank`, `envelobank`, `santander_przelew24`, `nest_przelew`, `mbank_mtransfer`, `inteligo`, `pbac_z_ipko`, `bnp_paribas`, `credit_agricole`, `toyota_bank`, `bank_pekao_sa`, `volkswagen_bank`, `bank_millennium`, `alior_bank`, or `boz`. + """ + reference: Optional[str] + """ + Unique reference for this Przelewy24 payment. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Przelewy24 directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Przelewy24 rarely provides this information so the attribute is usually empty. + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Payco transaction ID associated with this payment. + """ + + class Paynow(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + reference: Optional[str] + """ + Reference number associated with this PayNow payment + """ + + class Paypal(StripeObject): + class SellerProtection(StripeObject): + dispute_categories: Optional[ + List[Literal["fraudulent", "product_not_received"]] + ] + """ + An array of conditions that are covered for the transaction, if applicable. + """ + status: Literal[ + "eligible", "not_eligible", "partially_eligible" + ] + """ + Indicates whether the transaction is eligible for PayPal's seller protection. + """ + + country: Optional[str] + """ + Two-letter ISO code representing the buyer's country. Values are provided by PayPal directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_email: Optional[str] + """ + Owner's email. Values are provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + payer_name: Optional[str] + """ + Owner's full name. Values provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + seller_protection: Optional[SellerProtection] + """ + The level of protection offered as defined by PayPal Seller Protection for Merchants, for this transaction. + """ + transaction_id: Optional[str] + """ + A unique ID generated by PayPal for this transaction. + """ + _inner_class_types = {"seller_protection": SellerProtection} + + class Pix(StripeObject): + bank_transaction_id: Optional[str] + """ + Unique transaction id generated by BCB + """ + + class Promptpay(StripeObject): + reference: Optional[str] + """ + Bill reference generated by PromptPay + """ + + class RevolutPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Revolut Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class SamsungPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Samsung Pay transaction ID associated with this payment. + """ + + class Satispay(StripeObject): + transaction_id: Optional[str] + """ + The Satispay transaction ID associated with this payment. + """ + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + iban: Optional[str] + """ + IBAN of the bank account to transfer funds to. + """ + + class SepaDebit(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + branch_code: Optional[str] + """ + Branch code of bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four characters of the IBAN. + """ + mandate: Optional[str] + """ + Find the ID of the mandate used for this payment under the [payment_method_details.sepa_debit.mandate](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-sepa_debit-mandate) property on the Charge. Use this mandate ID to [retrieve the Mandate](https://stripe.com/docs/api/mandates/retrieve). + """ + + class Sofort(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + """ + Preferred language of the SOFORT authorization page that the customer is redirected to. + Can be one of `de`, `en`, `es`, `fr`, `it`, `nl`, or `pl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by SOFORT directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class StripeAccount(StripeObject): + pass + + class Swish(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies the payer's Swish account. You can use this attribute to check whether two Swish transactions were paid for by the same payer + """ + payment_reference: Optional[str] + """ + Payer bank reference number for the payment + """ + verified_phone_last4: Optional[str] + """ + The last four digits of the Swish account phone number + """ + + class Twint(StripeObject): + pass + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + payment_reference: Optional[str] + """ + Reference number to locate ACH payments with customer's bank. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + class Wechat(StripeObject): + pass + + class WechatPay(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular WeChat Pay account. You can use this attribute to check whether two WeChat accounts are the same. + """ + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular WeChat Pay transaction. + """ + + class Zip(StripeObject): + pass + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + stripe_account: Optional[StripeAccount] + swish: Optional[Swish] + twint: Optional[Twint] + type: str + """ + The type of transaction-specific details of the payment method used in the payment. See [PaymentMethod.type](https://stripe.com/docs/api/payment_methods/object#payment_method_object-type) for the full list of possible types. + An additional hash is included on `payment_method_details` with a name matching this value. + It contains information specific to the payment method. + """ + us_bank_account: Optional[UsBankAccount] + wechat: Optional[Wechat] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "stripe_account": StripeAccount, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat": Wechat, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class PresentmentDetails(StripeObject): + presentment_amount: int + """ + Amount intended to be collected by this payment, denominated in `presentment_currency`. + """ + presentment_currency: str + """ + Currency presented to the customer during payment. + """ + + class RadarOptions(StripeObject): + session: Optional[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + class TransferData(StripeObject): + amount: Optional[int] + """ + The amount transferred to the destination account, if specified. By default, the entire charge amount is transferred to the destination account. + """ + destination: ExpandableField["Account"] + """ + ID of an existing, connected Stripe account to transfer funds to if `transfer_data` was specified in the charge request. + """ + + amount: int + """ + Amount intended to be collected by this payment. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). + """ + amount_captured: int + """ + Amount in cents (or local equivalent) captured (can be less than the amount attribute on the charge if a partial capture was made). + """ + amount_refunded: int + """ + Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the charge if a partial refund was issued). + """ + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect application that created the charge. + """ + application_fee: Optional[ExpandableField["ApplicationFee"]] + """ + The application fee (if any) for the charge. [See the Connect documentation](https://stripe.com/docs/connect/direct-charges#collect-fees) for details. + """ + application_fee_amount: Optional[int] + """ + The amount of the application fee (if any) requested for the charge. [See the Connect documentation](https://stripe.com/docs/connect/direct-charges#collect-fees) for details. + """ + authorization_code: Optional[str] + """ + Authorization code on the charge. + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + ID of the balance transaction that describes the impact of this charge on your account balance (not including refunds or disputes). + """ + billing_details: BillingDetails + calculated_statement_descriptor: Optional[str] + """ + The full statement descriptor that is passed to card networks, and that is displayed on your customers' credit card and bank statements. Allows you to see what the statement descriptor looks like after the static and dynamic portions are combined. This value only exists for card payments. + """ + captured: bool + """ + If the charge was created without capturing, this Boolean represents whether it is still uncaptured or has since been captured. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the customer this charge is for if one exists. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + disputed: bool + """ + Whether the charge has been disputed. + """ + failure_balance_transaction: Optional[ + ExpandableField["BalanceTransaction"] + ] + """ + ID of the balance transaction that describes the reversal of the balance on your account due to payment failure. + """ + failure_code: Optional[str] + """ + Error code explaining reason for charge failure if available (see [the errors section](https://stripe.com/docs/error-codes) for a list of codes). + """ + failure_message: Optional[str] + """ + Message to user further explaining reason for charge failure if available. + """ + fraud_details: Optional[FraudDetails] + """ + Information on fraud assessments for the charge. + """ + id: str + """ + Unique identifier for the object. + """ + level3: Optional[Level3] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["charge"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) the charge was made on behalf of without triggering an automatic transfer. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers) for details. + """ + outcome: Optional[Outcome] + """ + Details about whether the payment was accepted, and why. See [understanding declines](https://stripe.com/docs/declines) for details. + """ + paid: bool + """ + `true` if the charge succeeded, or was successfully authorized for later capture. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + ID of the PaymentIntent associated with this charge, if one exists. + """ + payment_method: Optional[str] + """ + ID of the payment method used in this charge. + """ + payment_method_details: Optional[PaymentMethodDetails] + """ + Details about the payment method at the time of the transaction. + """ + presentment_details: Optional[PresentmentDetails] + radar_options: Optional[RadarOptions] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + receipt_email: Optional[str] + """ + This is the email address that the receipt for this charge was sent to. + """ + receipt_number: Optional[str] + """ + This is the transaction number that appears on email receipts sent for this charge. This attribute will be `null` until a receipt has been sent. + """ + receipt_url: Optional[str] + """ + This is the URL to view the receipt for this charge. The receipt is kept up-to-date to the latest state of the charge, including any refunds. If the charge is for an Invoice, the receipt will be stylized as an Invoice receipt. + """ + refunded: bool + """ + Whether the charge has been fully refunded. If the charge is only partially refunded, this attribute will still be false. + """ + refunds: Optional[ListObject["Refund"]] + """ + A list of refunds that have been applied to the charge. + """ + review: Optional[ExpandableField["Review"]] + """ + ID of the review associated with this charge if one exists. + """ + shipping: Optional[Shipping] + """ + Shipping information for the charge. + """ + source: Optional[Union["Account", "BankAccount", "CardResource", "Source"]] + """ + This is a legacy field that will be removed in the future. It contains the Source, Card, or BankAccount object used for the charge. For details about the payment method used for this charge, refer to `payment_method` or `payment_method_details` instead. + """ + source_transfer: Optional[ExpandableField["Transfer"]] + """ + The transfer ID which created this charge. Only present if the charge came from another Stripe account. [See the Connect documentation](https://docs.stripe.com/connect/destination-charges) for details. + """ + statement_descriptor: Optional[str] + """ + For a non-card charge, text that appears on the customer's statement as the statement descriptor. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). + + For a card charge, this value is ignored unless you don't specify a `statement_descriptor_suffix`, in which case this value is used as the suffix. + """ + statement_descriptor_suffix: Optional[str] + """ + Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement. If the account has no prefix value, the suffix is concatenated to the account's statement descriptor. + """ + status: Literal["failed", "pending", "succeeded"] + """ + The status of the payment is either `succeeded`, `pending`, or `failed`. + """ + transfer: Optional[ExpandableField["Transfer"]] + """ + ID of the transfer to the `destination` account (only applicable if the charge was created using the `destination` parameter). + """ + transfer_data: Optional[TransferData] + """ + An optional dictionary including the account to automatically transfer to as part of a destination charge. [See the Connect documentation](https://stripe.com/docs/connect/destination-charges) for details. + """ + transfer_group: Optional[str] + """ + A string that identifies this transaction as part of a group. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) for details. + """ + + @classmethod + def _cls_capture( + cls, charge: str, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + cls._static_request( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(charge) + ), + params=params, + ), + ) + + @overload + @staticmethod + def capture( + charge: str, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + ... + + @overload + def capture(self, **params: Unpack["ChargeCaptureParams"]) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + ... + + @class_method_variant("_cls_capture") + def capture( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + self._request( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_capture_async( + cls, charge: str, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + await cls._static_request_async( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(charge) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def capture_async( + charge: str, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + ... + + @overload + async def capture_async( + self, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + ... + + @class_method_variant("_cls_capture_async") + async def capture_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ChargeCaptureParams"] + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + await self._request_async( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["ChargeCreateParams"]) -> "Charge": + """ + This method is no longer recommended—use the [Payment Intents API](https://docs.stripe.com/docs/api/payment_intents) + to initiate a new payment instead. Confirmation of the PaymentIntent creates the Charge + object used to request payment. + """ + return cast( + "Charge", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ChargeCreateParams"] + ) -> "Charge": + """ + This method is no longer recommended—use the [Payment Intents API](https://docs.stripe.com/docs/api/payment_intents) + to initiate a new payment instead. Confirmation of the PaymentIntent creates the Charge + object used to request payment. + """ + return cast( + "Charge", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["ChargeListParams"] + ) -> ListObject["Charge"]: + """ + Returns a list of charges you've previously created. The charges are returned in sorted order, with the most recent charges appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ChargeListParams"] + ) -> ListObject["Charge"]: + """ + Returns a list of charges you've previously created. The charges are returned in sorted order, with the most recent charges appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ChargeModifyParams"] + ) -> "Charge": + """ + Updates the specified charge by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Charge", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ChargeModifyParams"] + ) -> "Charge": + """ + Updates the specified charge by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Charge", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ChargeRetrieveParams"] + ) -> "Charge": + """ + Retrieves the details of a charge that has previously been created. Supply the unique charge ID that was returned from your previous request, and Stripe will return the corresponding charge information. The same information is returned when creating or refunding the charge. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ChargeRetrieveParams"] + ) -> "Charge": + """ + Retrieves the details of a charge that has previously been created. Supply the unique charge ID that was returned from your previous request, and Stripe will return the corresponding charge information. The same information is returned when creating or refunding the charge. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def search( + cls, *args, **kwargs: Unpack["ChargeSearchParams"] + ) -> SearchResultObject["Charge"]: + """ + Search for charges you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search(search_url="/v1/charges/search", *args, **kwargs) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["ChargeSearchParams"] + ) -> SearchResultObject["Charge"]: + """ + Search for charges you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/charges/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["ChargeSearchParams"] + ) -> Iterator["Charge"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["ChargeSearchParams"] + ) -> AsyncIterator["Charge"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + def mark_as_fraudulent(self, idempotency_key=None) -> "Charge": + params = { + "fraud_details": {"user_report": "fraudulent"}, + "idempotency_key": idempotency_key, + } + url = self.instance_url() + self._request_and_refresh("post", url, params) + return self + + def mark_as_safe(self, idempotency_key=None) -> "Charge": + params = { + "fraud_details": {"user_report": "safe"}, + "idempotency_key": idempotency_key, + } + url = self.instance_url() + self._request_and_refresh("post", url, params) + return self + + @classmethod + def retrieve_refund( + cls, + charge: str, + refund: str, + **params: Unpack["ChargeRetrieveRefundParams"], + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + return cast( + "Refund", + cls._static_request( + "get", + "/v1/charges/{charge}/refunds/{refund}".format( + charge=sanitize_id(charge), refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_refund_async( + cls, + charge: str, + refund: str, + **params: Unpack["ChargeRetrieveRefundParams"], + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + return cast( + "Refund", + await cls._static_request_async( + "get", + "/v1/charges/{charge}/refunds/{refund}".format( + charge=sanitize_id(charge), refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @classmethod + def list_refunds( + cls, charge: str, **params: Unpack["ChargeListRefundsParams"] + ) -> ListObject["Refund"]: + """ + You can see a list of the refunds belonging to a specific charge. Note that the 10 most recent refunds are always available by default on the charge object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + ListObject["Refund"], + cls._static_request( + "get", + "/v1/charges/{charge}/refunds".format( + charge=sanitize_id(charge) + ), + params=params, + ), + ) + + @classmethod + async def list_refunds_async( + cls, charge: str, **params: Unpack["ChargeListRefundsParams"] + ) -> ListObject["Refund"]: + """ + You can see a list of the refunds belonging to a specific charge. Note that the 10 most recent refunds are always available by default on the charge object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional refunds. + """ + return cast( + ListObject["Refund"], + await cls._static_request_async( + "get", + "/v1/charges/{charge}/refunds".format( + charge=sanitize_id(charge) + ), + params=params, + ), + ) + + _inner_class_types = { + "billing_details": BillingDetails, + "fraud_details": FraudDetails, + "level3": Level3, + "outcome": Outcome, + "payment_method_details": PaymentMethodDetails, + "presentment_details": PresentmentDetails, + "radar_options": RadarOptions, + "shipping": Shipping, + "transfer_data": TransferData, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_charge_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_charge_service.py new file mode 100644 index 00000000..2fca7659 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_charge_service.py @@ -0,0 +1,276 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._charge_capture_params import ChargeCaptureParams + from stripe.params._charge_create_params import ChargeCreateParams + from stripe.params._charge_list_params import ChargeListParams + from stripe.params._charge_retrieve_params import ChargeRetrieveParams + from stripe.params._charge_search_params import ChargeSearchParams + from stripe.params._charge_update_params import ChargeUpdateParams + + +class ChargeService(StripeService): + def list( + self, + params: Optional["ChargeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Charge]": + """ + Returns a list of charges you've previously created. The charges are returned in sorted order, with the most recent charges appearing first. + """ + return cast( + "ListObject[Charge]", + self._request( + "get", + "/v1/charges", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ChargeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Charge]": + """ + Returns a list of charges you've previously created. The charges are returned in sorted order, with the most recent charges appearing first. + """ + return cast( + "ListObject[Charge]", + await self._request_async( + "get", + "/v1/charges", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["ChargeCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + This method is no longer recommended—use the [Payment Intents API](https://docs.stripe.com/docs/api/payment_intents) + to initiate a new payment instead. Confirmation of the PaymentIntent creates the Charge + object used to request payment. + """ + return cast( + "Charge", + self._request( + "post", + "/v1/charges", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["ChargeCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + This method is no longer recommended—use the [Payment Intents API](https://docs.stripe.com/docs/api/payment_intents) + to initiate a new payment instead. Confirmation of the PaymentIntent creates the Charge + object used to request payment. + """ + return cast( + "Charge", + await self._request_async( + "post", + "/v1/charges", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + charge: str, + params: Optional["ChargeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Retrieves the details of a charge that has previously been created. Supply the unique charge ID that was returned from your previous request, and Stripe will return the corresponding charge information. The same information is returned when creating or refunding the charge. + """ + return cast( + "Charge", + self._request( + "get", + "/v1/charges/{charge}".format(charge=sanitize_id(charge)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + charge: str, + params: Optional["ChargeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Retrieves the details of a charge that has previously been created. Supply the unique charge ID that was returned from your previous request, and Stripe will return the corresponding charge information. The same information is returned when creating or refunding the charge. + """ + return cast( + "Charge", + await self._request_async( + "get", + "/v1/charges/{charge}".format(charge=sanitize_id(charge)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + charge: str, + params: Optional["ChargeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Updates the specified charge by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Charge", + self._request( + "post", + "/v1/charges/{charge}".format(charge=sanitize_id(charge)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + charge: str, + params: Optional["ChargeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Updates the specified charge by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Charge", + await self._request_async( + "post", + "/v1/charges/{charge}".format(charge=sanitize_id(charge)), + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "ChargeSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Charge]": + """ + Search for charges you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Charge]", + self._request( + "get", + "/v1/charges/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "ChargeSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Charge]": + """ + Search for charges you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Charge]", + await self._request_async( + "get", + "/v1/charges/search", + base_address="api", + params=params, + options=options, + ), + ) + + def capture( + self, + charge: str, + params: Optional["ChargeCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + self._request( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(charge), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def capture_async( + self, + charge: str, + params: Optional["ChargeCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Charge": + """ + Capture the payment of an existing, uncaptured charge that was created with the capture option set to false. + + Uncaptured payments expire a set number of days after they are created ([7 by default](https://docs.stripe.com/docs/charges/placing-a-hold)), after which they are marked as refunded and capture attempts will fail. + + Don't use this method to capture a PaymentIntent-initiated charge. Use [Capture a PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/capture). + """ + return cast( + "Charge", + await self._request_async( + "post", + "/v1/charges/{charge}/capture".format( + charge=sanitize_id(charge), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_checkout_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_checkout_service.py new file mode 100644 index 00000000..92c36e18 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_checkout_service.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.checkout._session_service import SessionService + +_subservices = { + "sessions": ["stripe.checkout._session_service", "SessionService"], +} + + +class CheckoutService(StripeService): + sessions: "SessionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_client_options.py b/Backend/venv/lib/python3.12/site-packages/stripe/_client_options.py new file mode 100644 index 00000000..4a498b8c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_client_options.py @@ -0,0 +1,17 @@ +from typing import Optional + + +class _ClientOptions(object): + client_id: Optional[str] + proxy: Optional[str] + verify_ssl_certs: Optional[bool] + + def __init__( + self, + client_id: Optional[str] = None, + proxy: Optional[str] = None, + verify_ssl_certs: Optional[bool] = None, + ): + self.client_id = client_id + self.proxy = proxy + self.verify_ssl_certs = verify_ssl_certs diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_climate_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_climate_service.py new file mode 100644 index 00000000..5bf1b46c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_climate_service.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.climate._order_service import OrderService + from stripe.climate._product_service import ProductService + from stripe.climate._supplier_service import SupplierService + +_subservices = { + "orders": ["stripe.climate._order_service", "OrderService"], + "products": ["stripe.climate._product_service", "ProductService"], + "suppliers": ["stripe.climate._supplier_service", "SupplierService"], +} + + +class ClimateService(StripeService): + orders: "OrderService" + products: "ProductService" + suppliers: "SupplierService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token.py b/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token.py new file mode 100644 index 00000000..78c93fd3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token.py @@ -0,0 +1,1747 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_resource import APIResource +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._customer import Customer + from stripe._setup_attempt import SetupAttempt + from stripe.params._confirmation_token_create_params import ( + ConfirmationTokenCreateParams, + ) + from stripe.params._confirmation_token_retrieve_params import ( + ConfirmationTokenRetrieveParams, + ) + + +class ConfirmationToken(APIResource["ConfirmationToken"]): + """ + ConfirmationTokens help transport client side data collected by Stripe JS over + to your server for confirming a PaymentIntent or SetupIntent. If the confirmation + is successful, values present on the ConfirmationToken are written onto the Intent. + + To learn more about how to use ConfirmationToken, visit the related guides: + - [Finalize payments on the server](https://stripe.com/docs/payments/finalize-payments-on-the-server) + - [Build two-step confirmation](https://stripe.com/docs/payments/build-a-two-step-confirmation). + """ + + OBJECT_NAME: ClassVar[Literal["confirmation_token"]] = "confirmation_token" + + class MandateData(StripeObject): + class CustomerAcceptance(StripeObject): + class Online(StripeObject): + ip_address: Optional[str] + """ + The IP address from which the Mandate was accepted by the customer. + """ + user_agent: Optional[str] + """ + The user agent of the browser from which the Mandate was accepted by the customer. + """ + + online: Optional[Online] + """ + If this is a Mandate accepted online, this hash contains details about the online acceptance. + """ + type: str + """ + The type of customer acceptance information included with the Mandate. + """ + _inner_class_types = {"online": Online} + + customer_acceptance: CustomerAcceptance + """ + This hash contains details about the customer acceptance of the Mandate. + """ + _inner_class_types = {"customer_acceptance": CustomerAcceptance} + + class PaymentMethodOptions(StripeObject): + class Card(StripeObject): + class Installments(StripeObject): + class Plan(StripeObject): + count: Optional[int] + """ + For `fixed_count` installment plans, this is the number of installment payments your customer will make to their credit card. + """ + interval: Optional[Literal["month"]] + """ + For `fixed_count` installment plans, this is the interval between installment payments your customer will make to their credit card. + One of `month`. + """ + type: Literal["bonus", "fixed_count", "revolving"] + """ + Type of installment plan, one of `fixed_count`, `bonus`, or `revolving`. + """ + + plan: Optional[Plan] + _inner_class_types = {"plan": Plan} + + cvc_token: Optional[str] + """ + The `cvc_update` Token collected from the Payment Element. + """ + installments: Optional[Installments] + """ + Installment configuration for payments. + """ + _inner_class_types = {"installments": Installments} + + card: Optional[Card] + """ + This hash contains the card payment method options. + """ + _inner_class_types = {"card": Card} + + class PaymentMethodPreview(StripeObject): + class AcssDebit(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + institution_number: Optional[str] + """ + Institution number of the bank account. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + transit_number: Optional[str] + """ + Transit number of the bank account. + """ + + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + pass + + class Alipay(StripeObject): + pass + + class Alma(StripeObject): + pass + + class AmazonPay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + """ + Six-digit number identifying bank and branch associated with this bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + sort_code: Optional[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + class Bancontact(StripeObject): + pass + + class Billie(StripeObject): + pass + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + """ + Billing address. + """ + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + phone: Optional[str] + """ + Billing phone number (including extension). + """ + tax_id: Optional[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + tax_id: str + """ + Uniquely identifies the customer tax id (CNPJ or CPF) + """ + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + """ + If a address line1 was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + address_postal_code_check: Optional[str] + """ + If a address postal code was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + cvc_check: Optional[str] + """ + If a CVC was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + + class GeneratedFrom(StripeObject): + class PaymentMethodDetails(StripeObject): + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Receipt(StripeObject): + account_type: Optional[ + Literal[ + "checking", "credit", "prepaid", "unknown" + ] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", + "google_pay", + "samsung_pay", + "unknown", + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + amount_authorized: Optional[int] + """ + The authorized amount + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization_supported: bool + """ + Whether this [PaymentIntent](https://stripe.com/docs/api/payment_intents) is eligible for incremental authorizations. Request support using [request_incremental_authorization_support](https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + overcapture_supported: bool + """ + Defines whether the authorized amount can be over-captured or not + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "offline": Offline, + "receipt": Receipt, + "wallet": Wallet, + } + + card_present: Optional[CardPresent] + type: str + """ + The type of payment method transaction-specific details from the transaction that generated this `card` payment method. Always `card_present`. + """ + _inner_class_types = {"card_present": CardPresent} + + charge: Optional[str] + """ + The charge that created this object. + """ + payment_method_details: Optional[PaymentMethodDetails] + """ + Transaction-specific details of the payment method used in the payment. + """ + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + """ + The ID of the SetupAttempt that generated this PaymentMethod, if any. + """ + _inner_class_types = { + "payment_method_details": PaymentMethodDetails, + } + + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for co-branded cards. Can be `cartes_bancaires`, `mastercard`, `visa` or `invalid_preference` if requested network is not valid for the card. + """ + + class ThreeDSecureUsage(StripeObject): + supported: bool + """ + Whether 3D Secure is supported on this card. + """ + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + """ + The type of the card wallet, one of `amex_express_checkout`, `apple_pay`, `google_pay`, `masterpass`, `samsung_pay`, `visa_checkout`, or `link`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + brand: str + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + checks: Optional[Checks] + """ + Checks on Card address and CVC if provided. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + display_brand: Optional[str] + """ + The brand to use when displaying the card, this accounts for customer's brand choice on dual-branded cards. Can be `american_express`, `cartes_bancaires`, `diners_club`, `discover`, `eftpos_australia`, `interac`, `jcb`, `mastercard`, `union_pay`, `visa`, or `other` and may contain more values in the future. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: str + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_from: Optional[GeneratedFrom] + """ + Details of the original PaymentMethod that created this object. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: str + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + regulated_status: Optional[Literal["regulated", "unregulated"]] + """ + Status of a card based on the card issuer. + """ + three_d_secure_usage: Optional[ThreeDSecureUsage] + """ + Contains details on how this Card may be used for 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "generated_from": GeneratedFrom, + "networks": Networks, + "three_d_secure_usage": ThreeDSecureUsage, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for the card. + """ + + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", "google_pay", "samsung_pay", "unknown" + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + offline: Optional[Offline] + """ + Details about payment methods collected offline. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "networks": Networks, + "offline": Offline, + "wallet": Wallet, + } + + class Cashapp(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by Cash App to every buyer. + """ + cashtag: Optional[str] + """ + A public identifier for buyers using Cash App. + """ + + class Crypto(StripeObject): + pass + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. Should be one of `arzte_und_apotheker_bank`, `austrian_anadi_bank_ag`, `bank_austria`, `bankhaus_carl_spangler`, `bankhaus_schelhammer_und_schattera_ag`, `bawag_psk_ag`, `bks_bank_ag`, `brull_kallmus_bank_ag`, `btv_vier_lander_bank`, `capital_bank_grawe_gruppe_ag`, `deutsche_bank_ag`, `dolomitenbank`, `easybank_ag`, `erste_bank_und_sparkassen`, `hypo_alpeadriabank_international_ag`, `hypo_noe_lb_fur_niederosterreich_u_wien`, `hypo_oberosterreich_salzburg_steiermark`, `hypo_tirol_bank_ag`, `hypo_vorarlberg_bank_ag`, `hypo_bank_burgenland_aktiengesellschaft`, `marchfelder_bank`, `oberbank_ag`, `raiffeisen_bankengruppe_osterreich`, `schoellerbank_ag`, `sparda_bank_wien`, `volksbank_gruppe`, `volkskreditbank_ag`, or `vr_bank_braunau`. + """ + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type, if provided. Can be one of `individual` or `company`. + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank, if provided. Can be one of `affin_bank`, `agrobank`, `alliance_bank`, `ambank`, `bank_islam`, `bank_muamalat`, `bank_rakyat`, `bsn`, `cimb`, `hong_leong_bank`, `hsbc`, `kfh`, `maybank2u`, `ocbc`, `public_bank`, `rhb`, `standard_chartered`, `uob`, `deutsche_bank`, `maybank2e`, `pb_enterprise`, or `bank_of_china`. + """ + + class Giropay(StripeObject): + pass + + class Grabpay(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank, if provided. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank, if the bank was provided. + """ + + class InteracPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for the card. + """ + + brand: Optional[str] + """ + Card brand. Can be `interac`, `mastercard` or `visa`. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + _inner_class_types = {"networks": Networks} + + class KakaoPay(StripeObject): + pass + + class Klarna(StripeObject): + class Dob(StripeObject): + day: Optional[int] + """ + The day of birth, between 1 and 31. + """ + month: Optional[int] + """ + The month of birth, between 1 and 12. + """ + year: Optional[int] + """ + The four-digit year of birth. + """ + + dob: Optional[Dob] + """ + The customer's date of birth, if provided. + """ + _inner_class_types = {"dob": Dob} + + class Konbini(StripeObject): + pass + + class KrCard(StripeObject): + brand: Optional[ + Literal[ + "bc", + "citi", + "hana", + "hyundai", + "jeju", + "jeonbuk", + "kakaobank", + "kbank", + "kdbbank", + "kookmin", + "kwangju", + "lotte", + "mg", + "nh", + "post", + "samsung", + "savingsbank", + "shinhan", + "shinhyup", + "suhyup", + "tossbank", + "woori", + ] + ] + """ + The local credit or debit card brand. + """ + last4: Optional[str] + """ + The last four digits of the card. This may not be present for American Express cards. + """ + + class Link(StripeObject): + email: Optional[str] + """ + Account owner's email address. + """ + persistent_token: Optional[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + class MbWay(StripeObject): + pass + + class Mobilepay(StripeObject): + pass + + class Multibanco(StripeObject): + pass + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Naver Pay account. You can use this attribute to check whether two Naver Pay accounts are the same. + """ + funding: Literal["card", "points"] + """ + Whether to fund this transaction with Naver Pay points or a card. + """ + + class NzBankAccount(StripeObject): + account_holder_name: Optional[str] + """ + The name on the bank account. Only present if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + bank_name: str + """ + The name of the bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + last4: str + """ + Last four digits of the bank account number. + """ + suffix: Optional[str] + """ + The suffix of the bank account number. + """ + + class Oxxo(StripeObject): + pass + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank, if provided. + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + pass + + class Paynow(StripeObject): + pass + + class Paypal(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the buyer's country. Values are provided by PayPal directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_email: Optional[str] + """ + Owner's email. Values are provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + + class Pix(StripeObject): + pass + + class Promptpay(StripeObject): + pass + + class RevolutPay(StripeObject): + pass + + class SamsungPay(StripeObject): + pass + + class Satispay(StripeObject): + pass + + class SepaDebit(StripeObject): + class GeneratedFrom(StripeObject): + charge: Optional[ExpandableField["Charge"]] + """ + The ID of the Charge that generated this PaymentMethod, if any. + """ + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + """ + The ID of the SetupAttempt that generated this PaymentMethod, if any. + """ + + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + branch_code: Optional[str] + """ + Branch code of bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + generated_from: Optional[GeneratedFrom] + """ + Information about the object that generated this PaymentMethod. + """ + last4: Optional[str] + """ + Last four characters of the IBAN. + """ + _inner_class_types = {"generated_from": GeneratedFrom} + + class Sofort(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + class Swish(StripeObject): + pass + + class Twint(StripeObject): + pass + + class UsBankAccount(StripeObject): + class Networks(StripeObject): + preferred: Optional[str] + """ + The preferred network. + """ + supported: List[Literal["ach", "us_domestic_wire"]] + """ + All supported networks. + """ + + class StatusDetails(StripeObject): + class Blocked(StripeObject): + network_code: Optional[ + Literal[ + "R02", + "R03", + "R04", + "R05", + "R07", + "R08", + "R10", + "R11", + "R16", + "R20", + "R29", + "R31", + ] + ] + """ + The ACH network code that resulted in this block. + """ + reason: Optional[ + Literal[ + "bank_account_closed", + "bank_account_frozen", + "bank_account_invalid_details", + "bank_account_restricted", + "bank_account_unusable", + "debit_not_authorized", + ] + ] + """ + The reason why this PaymentMethod's fingerprint has been blocked + """ + + blocked: Optional[Blocked] + _inner_class_types = {"blocked": Blocked} + + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + The name of the bank. + """ + financial_connections_account: Optional[str] + """ + The ID of the Financial Connections Account used to create the payment method. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + networks: Optional[Networks] + """ + Contains information about US bank account networks that can be used. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + status_details: Optional[StatusDetails] + """ + Contains information about the future reusability of this PaymentMethod. + """ + _inner_class_types = { + "networks": Networks, + "status_details": StatusDetails, + } + + class WechatPay(StripeObject): + pass + + class Zip(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + allow_redisplay: Optional[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to “unspecified”. + """ + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + billing_details: BillingDetails + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the Customer to which this PaymentMethod is saved. This will not be set when the PaymentMethod has not been saved to a Customer. + """ + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + swish: Optional[Swish] + twint: Optional[Twint] + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "card_present", + "cashapp", + "crypto", + "custom", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "interac_present", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + name: str + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + _inner_class_types = {"address": Address} + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expires_at: Optional[int] + """ + Time at which this ConfirmationToken expires and can no longer be used to confirm a PaymentIntent or SetupIntent. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + mandate_data: Optional[MandateData] + """ + Data used for generating a Mandate. + """ + object: Literal["confirmation_token"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_intent: Optional[str] + """ + ID of the PaymentIntent that this ConfirmationToken was used to confirm, or null if this ConfirmationToken has not yet been used. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment-method-specific configuration for this ConfirmationToken. + """ + payment_method_preview: Optional[PaymentMethodPreview] + """ + Payment details collected by the Payment Element, used to create a PaymentMethod when a PaymentIntent or SetupIntent is confirmed with this ConfirmationToken. + """ + return_url: Optional[str] + """ + Return URL used to confirm the Intent. + """ + setup_future_usage: Optional[Literal["off_session", "on_session"]] + """ + Indicates that you intend to make future payments with this ConfirmationToken's payment method. + + The presence of this property will [attach the payment method](https://stripe.com/docs/payments/save-during-payment) to the PaymentIntent's Customer, if present, after the PaymentIntent is confirmed and any required actions from the user are complete. + """ + setup_intent: Optional[str] + """ + ID of the SetupIntent that this ConfirmationToken was used to confirm, or null if this ConfirmationToken has not yet been used. + """ + shipping: Optional[Shipping] + """ + Shipping information collected on this ConfirmationToken. + """ + use_stripe_sdk: bool + """ + Indicates whether the Stripe SDK is used to handle confirmation flow. Defaults to `true` on ConfirmationToken. + """ + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ConfirmationTokenRetrieveParams"] + ) -> "ConfirmationToken": + """ + Retrieves an existing ConfirmationToken object + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ConfirmationTokenRetrieveParams"] + ) -> "ConfirmationToken": + """ + Retrieves an existing ConfirmationToken object + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["ConfirmationToken"]): + _resource_cls: Type["ConfirmationToken"] + + @classmethod + def create( + cls, **params: Unpack["ConfirmationTokenCreateParams"] + ) -> "ConfirmationToken": + """ + Creates a test mode Confirmation Token server side for your integration tests. + """ + return cast( + "ConfirmationToken", + cls._static_request( + "post", + "/v1/test_helpers/confirmation_tokens", + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ConfirmationTokenCreateParams"] + ) -> "ConfirmationToken": + """ + Creates a test mode Confirmation Token server side for your integration tests. + """ + return cast( + "ConfirmationToken", + await cls._static_request_async( + "post", + "/v1/test_helpers/confirmation_tokens", + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "mandate_data": MandateData, + "payment_method_options": PaymentMethodOptions, + "payment_method_preview": PaymentMethodPreview, + "shipping": Shipping, + } + + +ConfirmationToken.TestHelpers._resource_cls = ConfirmationToken diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token_service.py new file mode 100644 index 00000000..066b43fc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_confirmation_token_service.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._confirmation_token import ConfirmationToken + from stripe._request_options import RequestOptions + from stripe.params._confirmation_token_retrieve_params import ( + ConfirmationTokenRetrieveParams, + ) + + +class ConfirmationTokenService(StripeService): + def retrieve( + self, + confirmation_token: str, + params: Optional["ConfirmationTokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConfirmationToken": + """ + Retrieves an existing ConfirmationToken object + """ + return cast( + "ConfirmationToken", + self._request( + "get", + "/v1/confirmation_tokens/{confirmation_token}".format( + confirmation_token=sanitize_id(confirmation_token), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + confirmation_token: str, + params: Optional["ConfirmationTokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ConfirmationToken": + """ + Retrieves an existing ConfirmationToken object + """ + return cast( + "ConfirmationToken", + await self._request_async( + "get", + "/v1/confirmation_tokens/{confirmation_token}".format( + confirmation_token=sanitize_id(confirmation_token), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_connect_collection_transfer.py b/Backend/venv/lib/python3.12/site-packages/stripe/_connect_collection_transfer.py new file mode 100644 index 00000000..397e20d1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_connect_collection_transfer.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + + +class ConnectCollectionTransfer(StripeObject): + OBJECT_NAME: ClassVar[Literal["connect_collection_transfer"]] = ( + "connect_collection_transfer" + ) + amount: int + """ + Amount transferred, in cents (or local equivalent). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + destination: ExpandableField["Account"] + """ + ID of the account that funds are being collected for. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["connect_collection_transfer"] + """ + String representing the object's type. Objects of the same type share the same value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec.py b/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec.py new file mode 100644 index 00000000..2b7f67ff --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, List +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._country_spec_list_params import CountrySpecListParams + from stripe.params._country_spec_retrieve_params import ( + CountrySpecRetrieveParams, + ) + + +class CountrySpec(ListableAPIResource["CountrySpec"]): + """ + Stripe needs to collect certain pieces of information about each account + created. These requirements can differ depending on the account's country. The + Country Specs API makes these rules available to your integration. + + You can also view the information from this API call as [an online + guide](https://docs.stripe.com/docs/connect/required-verification-information). + """ + + OBJECT_NAME: ClassVar[Literal["country_spec"]] = "country_spec" + + class VerificationFields(StripeObject): + class Company(StripeObject): + additional: List[str] + """ + Additional fields which are only required for some users. + """ + minimum: List[str] + """ + Fields which every account must eventually provide. + """ + + class Individual(StripeObject): + additional: List[str] + """ + Additional fields which are only required for some users. + """ + minimum: List[str] + """ + Fields which every account must eventually provide. + """ + + company: Company + individual: Individual + _inner_class_types = {"company": Company, "individual": Individual} + + default_currency: str + """ + The default currency for this country. This applies to both payment methods and bank accounts. + """ + id: str + """ + Unique identifier for the object. Represented as the ISO country code for this country. + """ + object: Literal["country_spec"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + supported_bank_account_currencies: Dict[str, List[str]] + """ + Currencies that can be accepted in the specific country (for transfers). + """ + supported_payment_currencies: List[str] + """ + Currencies that can be accepted in the specified country (for payments). + """ + supported_payment_methods: List[str] + """ + Payment methods available in the specified country. You may need to enable some payment methods (e.g., [ACH](https://stripe.com/docs/ach)) on your account before they appear in this list. The `stripe` payment method refers to [charging through your platform](https://stripe.com/docs/connect/destination-charges). + """ + supported_transfer_countries: List[str] + """ + Countries that can accept transfers from the specified country. + """ + verification_fields: VerificationFields + + @classmethod + def list( + cls, **params: Unpack["CountrySpecListParams"] + ) -> ListObject["CountrySpec"]: + """ + Lists all Country Spec objects available in the API. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CountrySpecListParams"] + ) -> ListObject["CountrySpec"]: + """ + Lists all Country Spec objects available in the API. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CountrySpecRetrieveParams"] + ) -> "CountrySpec": + """ + Returns a Country Spec for a given Country code. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CountrySpecRetrieveParams"] + ) -> "CountrySpec": + """ + Returns a Country Spec for a given Country code. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"verification_fields": VerificationFields} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec_service.py new file mode 100644 index 00000000..b5e14736 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_country_spec_service.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._country_spec import CountrySpec + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._country_spec_list_params import CountrySpecListParams + from stripe.params._country_spec_retrieve_params import ( + CountrySpecRetrieveParams, + ) + + +class CountrySpecService(StripeService): + def list( + self, + params: Optional["CountrySpecListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CountrySpec]": + """ + Lists all Country Spec objects available in the API. + """ + return cast( + "ListObject[CountrySpec]", + self._request( + "get", + "/v1/country_specs", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CountrySpecListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CountrySpec]": + """ + Lists all Country Spec objects available in the API. + """ + return cast( + "ListObject[CountrySpec]", + await self._request_async( + "get", + "/v1/country_specs", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + country: str, + params: Optional["CountrySpecRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CountrySpec": + """ + Returns a Country Spec for a given Country code. + """ + return cast( + "CountrySpec", + self._request( + "get", + "/v1/country_specs/{country}".format( + country=sanitize_id(country), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + country: str, + params: Optional["CountrySpecRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CountrySpec": + """ + Returns a Country Spec for a given Country code. + """ + return cast( + "CountrySpec", + await self._request_async( + "get", + "/v1/country_specs/{country}".format( + country=sanitize_id(country), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_coupon.py b/Backend/venv/lib/python3.12/site-packages/stripe/_coupon.py new file mode 100644 index 00000000..92bf85b7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_coupon.py @@ -0,0 +1,344 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._coupon_create_params import CouponCreateParams + from stripe.params._coupon_delete_params import CouponDeleteParams + from stripe.params._coupon_list_params import CouponListParams + from stripe.params._coupon_modify_params import CouponModifyParams + from stripe.params._coupon_retrieve_params import CouponRetrieveParams + + +class Coupon( + CreateableAPIResource["Coupon"], + DeletableAPIResource["Coupon"], + ListableAPIResource["Coupon"], + UpdateableAPIResource["Coupon"], +): + """ + A coupon contains information about a percent-off or amount-off discount you + might want to apply to a customer. Coupons may be applied to [subscriptions](https://stripe.com/docs/api#subscriptions), [invoices](https://stripe.com/docs/api#invoices), + [checkout sessions](https://stripe.com/docs/api/checkout/sessions), [quotes](https://stripe.com/docs/api#quotes), and more. Coupons do not work with conventional one-off [charges](https://stripe.com/docs/api#create_charge) or [payment intents](https://stripe.com/docs/api/payment_intents). + """ + + OBJECT_NAME: ClassVar[Literal["coupon"]] = "coupon" + + class AppliesTo(StripeObject): + products: List[str] + """ + A list of product IDs this coupon applies to + """ + + class CurrencyOptions(StripeObject): + amount_off: int + """ + Amount (in the `currency` specified) that will be taken off the subtotal of any invoices for this customer. + """ + + amount_off: Optional[int] + """ + Amount (in the `currency` specified) that will be taken off the subtotal of any invoices for this customer. + """ + applies_to: Optional[AppliesTo] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: Optional[str] + """ + If `amount_off` has been set, the three-letter [ISO code for the currency](https://stripe.com/docs/currencies) of the amount to take off. + """ + currency_options: Optional[Dict[str, CurrencyOptions]] + """ + Coupons defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + duration: Literal["forever", "once", "repeating"] + """ + One of `forever`, `once`, or `repeating`. Describes how long a customer who applies this coupon will get the discount. + """ + duration_in_months: Optional[int] + """ + If `duration` is `repeating`, the number of months the coupon applies. Null if coupon `duration` is `forever` or `once`. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + max_redemptions: Optional[int] + """ + Maximum number of times this coupon can be redeemed, in total, across all customers, before it is no longer valid. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + Name of the coupon displayed to customers on for instance invoices or receipts. + """ + object: Literal["coupon"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + percent_off: Optional[float] + """ + Percent that will be taken off the subtotal of any invoices for this customer for the duration of the coupon. For example, a coupon with percent_off of 50 will make a $ (or local equivalent)100 invoice $ (or local equivalent)50 instead. + """ + redeem_by: Optional[int] + """ + Date after which the coupon can no longer be redeemed. + """ + times_redeemed: int + """ + Number of times this coupon has been applied to a customer. + """ + valid: bool + """ + Taking account of the above properties, whether this coupon can still be applied to a customer. + """ + + @classmethod + def create(cls, **params: Unpack["CouponCreateParams"]) -> "Coupon": + """ + You can create coupons easily via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. Coupon creation is also accessible via the API if you need to create coupons on the fly. + + A coupon has either a percent_off or an amount_off and currency. If you set an amount_off, that amount will be subtracted from any invoice's subtotal. For example, an invoice with a subtotal of 100 will have a final total of 0 if a coupon with an amount_off of 200 is applied to it and an invoice with a subtotal of 300 will have a final total of 100 if a coupon with an amount_off of 200 is applied to it. + """ + return cast( + "Coupon", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CouponCreateParams"] + ) -> "Coupon": + """ + You can create coupons easily via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. Coupon creation is also accessible via the API if you need to create coupons on the fly. + + A coupon has either a percent_off or an amount_off and currency. If you set an amount_off, that amount will be subtracted from any invoice's subtotal. For example, an invoice with a subtotal of 100 will have a final total of 0 if a coupon with an amount_off of 200 is applied to it and an invoice with a subtotal of 300 will have a final total of 100 if a coupon with an amount_off of 200 is applied to it. + """ + return cast( + "Coupon", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Coupon", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["CouponDeleteParams"]) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + ... + + @overload + def delete(self, **params: Unpack["CouponDeleteParams"]) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Coupon", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CouponDeleteParams"] + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["CouponListParams"] + ) -> ListObject["Coupon"]: + """ + Returns a list of your coupons. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CouponListParams"] + ) -> ListObject["Coupon"]: + """ + Returns a list of your coupons. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["CouponModifyParams"] + ) -> "Coupon": + """ + Updates the metadata of a coupon. Other coupon details (currency, duration, amount_off) are, by design, not editable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Coupon", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CouponModifyParams"] + ) -> "Coupon": + """ + Updates the metadata of a coupon. Other coupon details (currency, duration, amount_off) are, by design, not editable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Coupon", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CouponRetrieveParams"] + ) -> "Coupon": + """ + Retrieves the coupon with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CouponRetrieveParams"] + ) -> "Coupon": + """ + Retrieves the coupon with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "applies_to": AppliesTo, + "currency_options": CurrencyOptions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_coupon_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_coupon_service.py new file mode 100644 index 00000000..c927d272 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_coupon_service.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._coupon import Coupon + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._coupon_create_params import CouponCreateParams + from stripe.params._coupon_delete_params import CouponDeleteParams + from stripe.params._coupon_list_params import CouponListParams + from stripe.params._coupon_retrieve_params import CouponRetrieveParams + from stripe.params._coupon_update_params import CouponUpdateParams + + +class CouponService(StripeService): + def delete( + self, + coupon: str, + params: Optional["CouponDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + return cast( + "Coupon", + self._request( + "delete", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + coupon: str, + params: Optional["CouponDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + You can delete coupons via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. However, deleting a coupon does not affect any customers who have already applied the coupon; it means that new customers can't redeem the coupon. You can also delete coupons via the API. + """ + return cast( + "Coupon", + await self._request_async( + "delete", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + coupon: str, + params: Optional["CouponRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + Retrieves the coupon with the given ID. + """ + return cast( + "Coupon", + self._request( + "get", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + coupon: str, + params: Optional["CouponRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + Retrieves the coupon with the given ID. + """ + return cast( + "Coupon", + await self._request_async( + "get", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + coupon: str, + params: Optional["CouponUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + Updates the metadata of a coupon. Other coupon details (currency, duration, amount_off) are, by design, not editable. + """ + return cast( + "Coupon", + self._request( + "post", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + coupon: str, + params: Optional["CouponUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + Updates the metadata of a coupon. Other coupon details (currency, duration, amount_off) are, by design, not editable. + """ + return cast( + "Coupon", + await self._request_async( + "post", + "/v1/coupons/{coupon}".format(coupon=sanitize_id(coupon)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["CouponListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Coupon]": + """ + Returns a list of your coupons. + """ + return cast( + "ListObject[Coupon]", + self._request( + "get", + "/v1/coupons", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CouponListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Coupon]": + """ + Returns a list of your coupons. + """ + return cast( + "ListObject[Coupon]", + await self._request_async( + "get", + "/v1/coupons", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["CouponCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + You can create coupons easily via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. Coupon creation is also accessible via the API if you need to create coupons on the fly. + + A coupon has either a percent_off or an amount_off and currency. If you set an amount_off, that amount will be subtracted from any invoice's subtotal. For example, an invoice with a subtotal of 100 will have a final total of 0 if a coupon with an amount_off of 200 is applied to it and an invoice with a subtotal of 300 will have a final total of 100 if a coupon with an amount_off of 200 is applied to it. + """ + return cast( + "Coupon", + self._request( + "post", + "/v1/coupons", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["CouponCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Coupon": + """ + You can create coupons easily via the [coupon management](https://dashboard.stripe.com/coupons) page of the Stripe dashboard. Coupon creation is also accessible via the API if you need to create coupons on the fly. + + A coupon has either a percent_off or an amount_off and currency. If you set an amount_off, that amount will be subtracted from any invoice's subtotal. For example, an invoice with a subtotal of 100 will have a final total of 0 if a coupon with an amount_off of 200 is applied to it and an invoice with a subtotal of 300 will have a final total of 100 if a coupon with an amount_off of 200 is applied to it. + """ + return cast( + "Coupon", + await self._request_async( + "post", + "/v1/coupons", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_createable_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_createable_api_resource.py new file mode 100644 index 00000000..993a3261 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_createable_api_resource.py @@ -0,0 +1,14 @@ +from stripe._api_resource import APIResource +from typing import TypeVar, cast +from stripe._stripe_object import StripeObject + +T = TypeVar("T", bound=StripeObject) + + +class CreateableAPIResource(APIResource[T]): + @classmethod + def create(cls, **params) -> T: + return cast( + T, + cls._static_request("post", cls.class_url(), params=params), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note.py b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note.py new file mode 100644 index 00000000..2140bebd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note.py @@ -0,0 +1,730 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._credit_note_line_item import CreditNoteLineItem + from stripe._customer import Customer + from stripe._customer_balance_transaction import CustomerBalanceTransaction + from stripe._discount import Discount + from stripe._invoice import Invoice + from stripe._refund import Refund as RefundResource + from stripe._shipping_rate import ShippingRate + from stripe._tax_rate import TaxRate + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction, + ) + from stripe.params._credit_note_create_params import CreditNoteCreateParams + from stripe.params._credit_note_list_lines_params import ( + CreditNoteListLinesParams, + ) + from stripe.params._credit_note_list_params import CreditNoteListParams + from stripe.params._credit_note_modify_params import CreditNoteModifyParams + from stripe.params._credit_note_preview_lines_params import ( + CreditNotePreviewLinesParams, + ) + from stripe.params._credit_note_preview_params import ( + CreditNotePreviewParams, + ) + from stripe.params._credit_note_retrieve_params import ( + CreditNoteRetrieveParams, + ) + from stripe.params._credit_note_void_credit_note_params import ( + CreditNoteVoidCreditNoteParams, + ) + + +@nested_resource_class_methods("line") +class CreditNote( + CreateableAPIResource["CreditNote"], + ListableAPIResource["CreditNote"], + UpdateableAPIResource["CreditNote"], +): + """ + Issue a credit note to adjust an invoice's amount after the invoice is finalized. + + Related guide: [Credit notes](https://stripe.com/docs/billing/invoices/credit-notes) + """ + + OBJECT_NAME: ClassVar[Literal["credit_note"]] = "credit_note" + + class DiscountAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the discount. + """ + discount: ExpandableField["Discount"] + """ + The discount that was applied to get this discount amount. + """ + + class PretaxCreditAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the pretax credit amount. + """ + credit_balance_transaction: Optional[ + ExpandableField["CreditBalanceTransaction"] + ] + """ + The credit balance transaction that was applied to get this pretax credit amount. + """ + discount: Optional[ExpandableField["Discount"]] + """ + The discount that was applied to get this pretax credit amount. + """ + type: Literal["credit_balance_transaction", "discount"] + """ + Type of the pretax credit amount referenced. + """ + + class Refund(StripeObject): + class PaymentRecordRefund(StripeObject): + payment_record: str + """ + ID of the payment record. + """ + refund_group: str + """ + ID of the refund group. + """ + + amount_refunded: int + """ + Amount of the refund that applies to this credit note, in cents (or local equivalent). + """ + payment_record_refund: Optional[PaymentRecordRefund] + """ + The PaymentRecord refund details associated with this credit note refund. + """ + refund: ExpandableField["RefundResource"] + """ + ID of the refund. + """ + type: Optional[Literal["payment_record_refund", "refund"]] + """ + Type of the refund, one of `refund` or `payment_record_refund`. + """ + _inner_class_types = {"payment_record_refund": PaymentRecordRefund} + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + amount_subtotal: int + """ + Total shipping cost before any taxes are applied. + """ + amount_tax: int + """ + Total tax amount applied due to shipping costs. If no tax was applied, defaults to 0. + """ + amount_total: int + """ + Total shipping cost after taxes are applied. + """ + shipping_rate: Optional[ExpandableField["ShippingRate"]] + """ + The ID of the ShippingRate for this invoice. + """ + taxes: Optional[List[Tax]] + """ + The taxes applied to the shipping rate. + """ + _inner_class_types = {"taxes": Tax} + + class TotalTax(StripeObject): + class TaxRateDetails(StripeObject): + tax_rate: str + + amount: int + """ + The amount of the tax, in cents (or local equivalent). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Whether this tax is inclusive or exclusive. + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Additional details about the tax rate. Only present when `type` is `tax_rate_details`. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_available", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + type: Literal["tax_rate_details"] + """ + The type of tax information. + """ + _inner_class_types = {"tax_rate_details": TaxRateDetails} + + amount: int + """ + The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax. + """ + amount_shipping: int + """ + This is the sum of all the shipping amounts. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: ExpandableField["Customer"] + """ + ID of the customer. + """ + customer_balance_transaction: Optional[ + ExpandableField["CustomerBalanceTransaction"] + ] + """ + Customer balance transaction related to this credit note. + """ + discount_amount: int + """ + The integer amount in cents (or local equivalent) representing the total amount of discount that was credited. + """ + discount_amounts: List[DiscountAmount] + """ + The aggregate amounts calculated per discount for all line items. + """ + effective_at: Optional[int] + """ + The date when this credit note is in effect. Same as `created` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: ExpandableField["Invoice"] + """ + ID of the invoice. + """ + lines: ListObject["CreditNoteLineItem"] + """ + Line items that make up the credit note + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + memo: Optional[str] + """ + Customer-facing text that appears on the credit note PDF. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + number: str + """ + A unique number that identifies this particular credit note and appears on the PDF of the credit note and its associated invoice. + """ + object: Literal["credit_note"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + out_of_band_amount: Optional[int] + """ + Amount that was credited outside of Stripe. + """ + pdf: str + """ + The link to download the PDF of the credit note. + """ + post_payment_amount: int + """ + The amount of the credit note that was refunded to the customer, credited to the customer's balance, credited outside of Stripe, or any combination thereof. + """ + pre_payment_amount: int + """ + The amount of the credit note by which the invoice's `amount_remaining` and `amount_due` were reduced. + """ + pretax_credit_amounts: List[PretaxCreditAmount] + """ + The pretax credit amounts (ex: discount, credit grants, etc) for all line items. + """ + reason: Optional[ + Literal[ + "duplicate", "fraudulent", "order_change", "product_unsatisfactory" + ] + ] + """ + Reason for issuing this credit note, one of `duplicate`, `fraudulent`, `order_change`, or `product_unsatisfactory` + """ + refunds: List[Refund] + """ + Refunds related to this credit note. + """ + shipping_cost: Optional[ShippingCost] + """ + The details of the cost of shipping, including the ShippingRate applied to the invoice. + """ + status: Literal["issued", "void"] + """ + Status of this credit note, one of `issued` or `void`. Learn more about [voiding credit notes](https://stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + subtotal: int + """ + The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding exclusive tax and invoice level discounts. + """ + subtotal_excluding_tax: Optional[int] + """ + The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding all tax and invoice level discounts. + """ + total: int + """ + The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax and all discount. + """ + total_excluding_tax: Optional[int] + """ + The integer amount in cents (or local equivalent) representing the total amount of the credit note, excluding tax, but including discounts. + """ + total_taxes: Optional[List[TotalTax]] + """ + The aggregate tax information for all line items. + """ + type: Literal["mixed", "post_payment", "pre_payment"] + """ + Type of this credit note, one of `pre_payment` or `post_payment`. A `pre_payment` credit note means it was issued when the invoice was open. A `post_payment` credit note means it was issued when the invoice was paid. + """ + voided_at: Optional[int] + """ + The time that the credit note was voided. + """ + + @classmethod + def create( + cls, **params: Unpack["CreditNoteCreateParams"] + ) -> "CreditNote": + """ + Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice's amount_remaining (and amount_due), but not below zero. + This amount is indicated by the credit note's pre_payment_amount. The excess amount is indicated by post_payment_amount, and it can result in any combination of the following: + + + Refunds: create a new refund (using refund_amount) or link existing refunds (using refunds). + Customer balance credit: credit the customer's balance (using credit_amount) which will be automatically applied to their next invoice when it's finalized. + Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using out_of_band_amount). + + + The sum of refunds, customer balance credits, and outside of Stripe credits must equal the post_payment_amount. + + You may issue multiple credit notes for an invoice. Each credit note may increment the invoice's pre_payment_credit_notes_amount, + post_payment_credit_notes_amount, or both, depending on the invoice's amount_remaining at the time of credit note creation. + """ + return cast( + "CreditNote", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CreditNoteCreateParams"] + ) -> "CreditNote": + """ + Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice's amount_remaining (and amount_due), but not below zero. + This amount is indicated by the credit note's pre_payment_amount. The excess amount is indicated by post_payment_amount, and it can result in any combination of the following: + + + Refunds: create a new refund (using refund_amount) or link existing refunds (using refunds). + Customer balance credit: credit the customer's balance (using credit_amount) which will be automatically applied to their next invoice when it's finalized. + Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using out_of_band_amount). + + + The sum of refunds, customer balance credits, and outside of Stripe credits must equal the post_payment_amount. + + You may issue multiple credit notes for an invoice. Each credit note may increment the invoice's pre_payment_credit_notes_amount, + post_payment_credit_notes_amount, or both, depending on the invoice's amount_remaining at the time of credit note creation. + """ + return cast( + "CreditNote", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["CreditNoteListParams"] + ) -> ListObject["CreditNote"]: + """ + Returns a list of credit notes. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CreditNoteListParams"] + ) -> ListObject["CreditNote"]: + """ + Returns a list of credit notes. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["CreditNoteModifyParams"] + ) -> "CreditNote": + """ + Updates an existing credit note. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "CreditNote", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CreditNoteModifyParams"] + ) -> "CreditNote": + """ + Updates an existing credit note. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "CreditNote", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def preview( + cls, **params: Unpack["CreditNotePreviewParams"] + ) -> "CreditNote": + """ + Get a preview of a credit note without creating it. + """ + return cast( + "CreditNote", + cls._static_request( + "get", + "/v1/credit_notes/preview", + params=params, + ), + ) + + @classmethod + async def preview_async( + cls, **params: Unpack["CreditNotePreviewParams"] + ) -> "CreditNote": + """ + Get a preview of a credit note without creating it. + """ + return cast( + "CreditNote", + await cls._static_request_async( + "get", + "/v1/credit_notes/preview", + params=params, + ), + ) + + @classmethod + def preview_lines( + cls, **params: Unpack["CreditNotePreviewLinesParams"] + ) -> ListObject["CreditNoteLineItem"]: + """ + When retrieving a credit note preview, you'll get a lines property containing the first handful of those items. This URL you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["CreditNoteLineItem"], + cls._static_request( + "get", + "/v1/credit_notes/preview/lines", + params=params, + ), + ) + + @classmethod + async def preview_lines_async( + cls, **params: Unpack["CreditNotePreviewLinesParams"] + ) -> ListObject["CreditNoteLineItem"]: + """ + When retrieving a credit note preview, you'll get a lines property containing the first handful of those items. This URL you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["CreditNoteLineItem"], + await cls._static_request_async( + "get", + "/v1/credit_notes/preview/lines", + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CreditNoteRetrieveParams"] + ) -> "CreditNote": + """ + Retrieves the credit note object with the given identifier. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CreditNoteRetrieveParams"] + ) -> "CreditNote": + """ + Retrieves the credit note object with the given identifier. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_void_credit_note( + cls, id: str, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + cls._static_request( + "post", + "/v1/credit_notes/{id}/void".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + def void_credit_note( + id: str, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + ... + + @overload + def void_credit_note( + self, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + ... + + @class_method_variant("_cls_void_credit_note") + def void_credit_note( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + self._request( + "post", + "/v1/credit_notes/{id}/void".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_void_credit_note_async( + cls, id: str, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + await cls._static_request_async( + "post", + "/v1/credit_notes/{id}/void".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + async def void_credit_note_async( + id: str, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + ... + + @overload + async def void_credit_note_async( + self, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + ... + + @class_method_variant("_cls_void_credit_note_async") + async def void_credit_note_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditNoteVoidCreditNoteParams"] + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + await self._request_async( + "post", + "/v1/credit_notes/{id}/void".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list_lines( + cls, credit_note: str, **params: Unpack["CreditNoteListLinesParams"] + ) -> ListObject["CreditNoteLineItem"]: + """ + When retrieving a credit note, you'll get a lines property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["CreditNoteLineItem"], + cls._static_request( + "get", + "/v1/credit_notes/{credit_note}/lines".format( + credit_note=sanitize_id(credit_note) + ), + params=params, + ), + ) + + @classmethod + async def list_lines_async( + cls, credit_note: str, **params: Unpack["CreditNoteListLinesParams"] + ) -> ListObject["CreditNoteLineItem"]: + """ + When retrieving a credit note, you'll get a lines property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["CreditNoteLineItem"], + await cls._static_request_async( + "get", + "/v1/credit_notes/{credit_note}/lines".format( + credit_note=sanitize_id(credit_note) + ), + params=params, + ), + ) + + _inner_class_types = { + "discount_amounts": DiscountAmount, + "pretax_credit_amounts": PretaxCreditAmount, + "refunds": Refund, + "shipping_cost": ShippingCost, + "total_taxes": TotalTax, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item.py new file mode 100644 index 00000000..2fe47601 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._discount import Discount + from stripe._tax_rate import TaxRate + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction, + ) + + +class CreditNoteLineItem(StripeObject): + """ + The credit note line item object + """ + + OBJECT_NAME: ClassVar[Literal["credit_note_line_item"]] = ( + "credit_note_line_item" + ) + + class DiscountAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the discount. + """ + discount: ExpandableField["Discount"] + """ + The discount that was applied to get this discount amount. + """ + + class PretaxCreditAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the pretax credit amount. + """ + credit_balance_transaction: Optional[ + ExpandableField["CreditBalanceTransaction"] + ] + """ + The credit balance transaction that was applied to get this pretax credit amount. + """ + discount: Optional[ExpandableField["Discount"]] + """ + The discount that was applied to get this pretax credit amount. + """ + type: Literal["credit_balance_transaction", "discount"] + """ + Type of the pretax credit amount referenced. + """ + + class Tax(StripeObject): + class TaxRateDetails(StripeObject): + tax_rate: str + + amount: int + """ + The amount of the tax, in cents (or local equivalent). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Whether this tax is inclusive or exclusive. + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Additional details about the tax rate. Only present when `type` is `tax_rate_details`. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_available", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + type: Literal["tax_rate_details"] + """ + The type of tax information. + """ + _inner_class_types = {"tax_rate_details": TaxRateDetails} + + amount: int + """ + The integer amount in cents (or local equivalent) representing the gross amount being credited for this line item, excluding (exclusive) tax and discounts. + """ + description: Optional[str] + """ + Description of the item being credited. + """ + discount_amount: int + """ + The integer amount in cents (or local equivalent) representing the discount being credited for this line item. + """ + discount_amounts: List[DiscountAmount] + """ + The amount of discount calculated per discount for this line item + """ + id: str + """ + Unique identifier for the object. + """ + invoice_line_item: Optional[str] + """ + ID of the invoice line item being credited + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["credit_note_line_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + pretax_credit_amounts: List[PretaxCreditAmount] + """ + The pretax credit amounts (ex: discount, credit grants, etc) for this line item. + """ + quantity: Optional[int] + """ + The number of units of product being credited. + """ + tax_rates: List["TaxRate"] + """ + The tax rates which apply to the line item. + """ + taxes: Optional[List[Tax]] + """ + The tax information of the line item. + """ + type: Literal["custom_line_item", "invoice_line_item"] + """ + The type of the credit note line item, one of `invoice_line_item` or `custom_line_item`. When the type is `invoice_line_item` there is an additional `invoice_line_item` property on the resource the value of which is the id of the credited line item on the invoice. + """ + unit_amount: Optional[int] + """ + The cost of each unit of product being credited. + """ + unit_amount_decimal: Optional[str] + """ + Same as `unit_amount`, but contains a decimal value with at most 12 decimal places. + """ + _inner_class_types = { + "discount_amounts": DiscountAmount, + "pretax_credit_amounts": PretaxCreditAmount, + "taxes": Tax, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item_service.py new file mode 100644 index 00000000..e5b85b2d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._credit_note_line_item import CreditNoteLineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._credit_note_line_item_list_params import ( + CreditNoteLineItemListParams, + ) + + +class CreditNoteLineItemService(StripeService): + def list( + self, + credit_note: str, + params: Optional["CreditNoteLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNoteLineItem]": + """ + When retrieving a credit note, you'll get a lines property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[CreditNoteLineItem]", + self._request( + "get", + "/v1/credit_notes/{credit_note}/lines".format( + credit_note=sanitize_id(credit_note), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + credit_note: str, + params: Optional["CreditNoteLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNoteLineItem]": + """ + When retrieving a credit note, you'll get a lines property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[CreditNoteLineItem]", + await self._request_async( + "get", + "/v1/credit_notes/{credit_note}/lines".format( + credit_note=sanitize_id(credit_note), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_preview_lines_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_preview_lines_service.py new file mode 100644 index 00000000..9c562309 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_preview_lines_service.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._credit_note_line_item import CreditNoteLineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._credit_note_preview_lines_list_params import ( + CreditNotePreviewLinesListParams, + ) + + +class CreditNotePreviewLinesService(StripeService): + def list( + self, + params: "CreditNotePreviewLinesListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNoteLineItem]": + """ + When retrieving a credit note preview, you'll get a lines property containing the first handful of those items. This URL you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[CreditNoteLineItem]", + self._request( + "get", + "/v1/credit_notes/preview/lines", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "CreditNotePreviewLinesListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNoteLineItem]": + """ + When retrieving a credit note preview, you'll get a lines property containing the first handful of those items. This URL you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[CreditNoteLineItem]", + await self._request_async( + "get", + "/v1/credit_notes/preview/lines", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_service.py new file mode 100644 index 00000000..4d716f4c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_credit_note_service.py @@ -0,0 +1,321 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._credit_note import CreditNote + from stripe._credit_note_line_item_service import CreditNoteLineItemService + from stripe._credit_note_preview_lines_service import ( + CreditNotePreviewLinesService, + ) + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._credit_note_create_params import CreditNoteCreateParams + from stripe.params._credit_note_list_params import CreditNoteListParams + from stripe.params._credit_note_preview_params import ( + CreditNotePreviewParams, + ) + from stripe.params._credit_note_retrieve_params import ( + CreditNoteRetrieveParams, + ) + from stripe.params._credit_note_update_params import CreditNoteUpdateParams + from stripe.params._credit_note_void_credit_note_params import ( + CreditNoteVoidCreditNoteParams, + ) + +_subservices = { + "line_items": [ + "stripe._credit_note_line_item_service", + "CreditNoteLineItemService", + ], + "preview_lines": [ + "stripe._credit_note_preview_lines_service", + "CreditNotePreviewLinesService", + ], +} + + +class CreditNoteService(StripeService): + line_items: "CreditNoteLineItemService" + preview_lines: "CreditNotePreviewLinesService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["CreditNoteListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNote]": + """ + Returns a list of credit notes. + """ + return cast( + "ListObject[CreditNote]", + self._request( + "get", + "/v1/credit_notes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CreditNoteListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditNote]": + """ + Returns a list of credit notes. + """ + return cast( + "ListObject[CreditNote]", + await self._request_async( + "get", + "/v1/credit_notes", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CreditNoteCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice's amount_remaining (and amount_due), but not below zero. + This amount is indicated by the credit note's pre_payment_amount. The excess amount is indicated by post_payment_amount, and it can result in any combination of the following: + + + Refunds: create a new refund (using refund_amount) or link existing refunds (using refunds). + Customer balance credit: credit the customer's balance (using credit_amount) which will be automatically applied to their next invoice when it's finalized. + Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using out_of_band_amount). + + + The sum of refunds, customer balance credits, and outside of Stripe credits must equal the post_payment_amount. + + You may issue multiple credit notes for an invoice. Each credit note may increment the invoice's pre_payment_credit_notes_amount, + post_payment_credit_notes_amount, or both, depending on the invoice's amount_remaining at the time of credit note creation. + """ + return cast( + "CreditNote", + self._request( + "post", + "/v1/credit_notes", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CreditNoteCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice's amount_remaining (and amount_due), but not below zero. + This amount is indicated by the credit note's pre_payment_amount. The excess amount is indicated by post_payment_amount, and it can result in any combination of the following: + + + Refunds: create a new refund (using refund_amount) or link existing refunds (using refunds). + Customer balance credit: credit the customer's balance (using credit_amount) which will be automatically applied to their next invoice when it's finalized. + Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using out_of_band_amount). + + + The sum of refunds, customer balance credits, and outside of Stripe credits must equal the post_payment_amount. + + You may issue multiple credit notes for an invoice. Each credit note may increment the invoice's pre_payment_credit_notes_amount, + post_payment_credit_notes_amount, or both, depending on the invoice's amount_remaining at the time of credit note creation. + """ + return cast( + "CreditNote", + await self._request_async( + "post", + "/v1/credit_notes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["CreditNoteRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Retrieves the credit note object with the given identifier. + """ + return cast( + "CreditNote", + self._request( + "get", + "/v1/credit_notes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["CreditNoteRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Retrieves the credit note object with the given identifier. + """ + return cast( + "CreditNote", + await self._request_async( + "get", + "/v1/credit_notes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["CreditNoteUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Updates an existing credit note. + """ + return cast( + "CreditNote", + self._request( + "post", + "/v1/credit_notes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["CreditNoteUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Updates an existing credit note. + """ + return cast( + "CreditNote", + await self._request_async( + "post", + "/v1/credit_notes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def preview( + self, + params: "CreditNotePreviewParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Get a preview of a credit note without creating it. + """ + return cast( + "CreditNote", + self._request( + "get", + "/v1/credit_notes/preview", + base_address="api", + params=params, + options=options, + ), + ) + + async def preview_async( + self, + params: "CreditNotePreviewParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Get a preview of a credit note without creating it. + """ + return cast( + "CreditNote", + await self._request_async( + "get", + "/v1/credit_notes/preview", + base_address="api", + params=params, + options=options, + ), + ) + + def void_credit_note( + self, + id: str, + params: Optional["CreditNoteVoidCreditNoteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + self._request( + "post", + "/v1/credit_notes/{id}/void".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def void_credit_note_async( + self, + id: str, + params: Optional["CreditNoteVoidCreditNoteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditNote": + """ + Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding). + """ + return cast( + "CreditNote", + await self._request_async( + "post", + "/v1/credit_notes/{id}/void".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_custom_method.py b/Backend/venv/lib/python3.12/site-packages/stripe/_custom_method.py new file mode 100644 index 00000000..b2950f23 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_custom_method.py @@ -0,0 +1,71 @@ +from typing import Optional +from stripe import _util +from urllib.parse import quote_plus + + +# TODO(major): 1704. +@_util.deprecated( + "the custom_method class decorator will be removed in a future version of stripe-python. Define custom methods directly and use StripeObject._static_request within." +) +def custom_method( + name: str, + http_verb: str, + http_path: Optional[str] = None, + is_streaming=False, +): + if http_verb not in ["get", "post", "delete"]: + raise ValueError( + "Invalid http_verb: %s. Must be one of 'get', 'post' or 'delete'" + % http_verb + ) + if http_path is None: + http_path = name + + def wrapper(cls): + def custom_method_request(cls, sid, **params): + url = "%s/%s/%s" % ( + cls.class_url(), + quote_plus(sid), + http_path, + ) + obj = cls._static_request(http_verb, url, params=params) + + # For list objects, we have to attach the parameters so that they + # can be referenced in auto-pagination and ensure consistency. + if "object" in obj and obj.object == "list": + obj._retrieve_params = params + + return obj + + def custom_method_request_stream(cls, sid, **params): + url = "%s/%s/%s" % ( + cls.class_url(), + quote_plus(sid), + http_path, + ) + return cls._static_request_stream(http_verb, url, params=params) + + if is_streaming: + class_method_impl = classmethod(custom_method_request_stream) + else: + class_method_impl = classmethod(custom_method_request) + + existing_method = getattr(cls, name, None) + if existing_method is None: + setattr(cls, name, class_method_impl) + else: + # If a method with the same name we want to use already exists on + # the class, we assume it's an instance method. In this case, the + # new class method is prefixed with `_cls_`, and the original + # instance method is decorated with `util.class_method_variant` so + # that the new class method is called when the original method is + # called as a class method. + setattr(cls, "_cls_" + name, class_method_impl) + instance_method = _util.class_method_variant("_cls_" + name)( + existing_method + ) + setattr(cls, name, instance_method) + + return cls + + return wrapper diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer.py new file mode 100644 index 00000000..cdb343ef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer.py @@ -0,0 +1,1990 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + Union, + cast, + overload, +) +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe._cash_balance import CashBalance + from stripe._customer_balance_transaction import CustomerBalanceTransaction + from stripe._customer_cash_balance_transaction import ( + CustomerCashBalanceTransaction, + ) + from stripe._discount import Discount + from stripe._funding_instructions import FundingInstructions + from stripe._payment_method import PaymentMethod + from stripe._source import Source + from stripe._subscription import Subscription + from stripe._tax_id import TaxId + from stripe.params._customer_create_balance_transaction_params import ( + CustomerCreateBalanceTransactionParams, + ) + from stripe.params._customer_create_funding_instructions_params import ( + CustomerCreateFundingInstructionsParams, + ) + from stripe.params._customer_create_params import CustomerCreateParams + from stripe.params._customer_create_source_params import ( + CustomerCreateSourceParams, + ) + from stripe.params._customer_create_tax_id_params import ( + CustomerCreateTaxIdParams, + ) + from stripe.params._customer_delete_discount_params import ( + CustomerDeleteDiscountParams, + ) + from stripe.params._customer_delete_params import CustomerDeleteParams + from stripe.params._customer_delete_source_params import ( + CustomerDeleteSourceParams, + ) + from stripe.params._customer_delete_tax_id_params import ( + CustomerDeleteTaxIdParams, + ) + from stripe.params._customer_fund_cash_balance_params import ( + CustomerFundCashBalanceParams, + ) + from stripe.params._customer_list_balance_transactions_params import ( + CustomerListBalanceTransactionsParams, + ) + from stripe.params._customer_list_cash_balance_transactions_params import ( + CustomerListCashBalanceTransactionsParams, + ) + from stripe.params._customer_list_params import CustomerListParams + from stripe.params._customer_list_payment_methods_params import ( + CustomerListPaymentMethodsParams, + ) + from stripe.params._customer_list_sources_params import ( + CustomerListSourcesParams, + ) + from stripe.params._customer_list_tax_ids_params import ( + CustomerListTaxIdsParams, + ) + from stripe.params._customer_modify_balance_transaction_params import ( + CustomerModifyBalanceTransactionParams, + ) + from stripe.params._customer_modify_cash_balance_params import ( + CustomerModifyCashBalanceParams, + ) + from stripe.params._customer_modify_params import CustomerModifyParams + from stripe.params._customer_modify_source_params import ( + CustomerModifySourceParams, + ) + from stripe.params._customer_retrieve_balance_transaction_params import ( + CustomerRetrieveBalanceTransactionParams, + ) + from stripe.params._customer_retrieve_cash_balance_params import ( + CustomerRetrieveCashBalanceParams, + ) + from stripe.params._customer_retrieve_cash_balance_transaction_params import ( + CustomerRetrieveCashBalanceTransactionParams, + ) + from stripe.params._customer_retrieve_params import CustomerRetrieveParams + from stripe.params._customer_retrieve_payment_method_params import ( + CustomerRetrievePaymentMethodParams, + ) + from stripe.params._customer_retrieve_source_params import ( + CustomerRetrieveSourceParams, + ) + from stripe.params._customer_retrieve_tax_id_params import ( + CustomerRetrieveTaxIdParams, + ) + from stripe.params._customer_search_params import CustomerSearchParams + from stripe.test_helpers._test_clock import TestClock + + +@nested_resource_class_methods("balance_transaction") +@nested_resource_class_methods("cash_balance_transaction") +@nested_resource_class_methods("source") +@nested_resource_class_methods("tax_id") +class Customer( + CreateableAPIResource["Customer"], + DeletableAPIResource["Customer"], + ListableAPIResource["Customer"], + SearchableAPIResource["Customer"], + UpdateableAPIResource["Customer"], +): + """ + This object represents a customer of your business. Use it to [create recurring charges](https://stripe.com/docs/invoicing/customer), [save payment](https://stripe.com/docs/payments/save-during-payment) and contact information, + and track payments that belong to the same customer. + """ + + OBJECT_NAME: ClassVar[Literal["customer"]] = "customer" + + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class InvoiceSettings(StripeObject): + class CustomField(StripeObject): + name: str + """ + The name of the custom field. + """ + value: str + """ + The value of the custom field. + """ + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + """ + How line-item prices and amounts will be displayed with respect to tax on invoice PDFs. + """ + template: Optional[str] + """ + ID of the invoice rendering template to be used for this customer's invoices. If set, the template will be used on all invoices for this customer unless a template is set directly on the invoice. + """ + + custom_fields: Optional[List[CustomField]] + """ + Default custom fields to be displayed on invoices for this customer. + """ + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of a payment method that's attached to the customer, to be used as the customer's default payment method for subscriptions and invoices. + """ + footer: Optional[str] + """ + Default footer to be displayed on invoices for this customer. + """ + rendering_options: Optional[RenderingOptions] + """ + Default options for invoice PDF rendering for this customer. + """ + _inner_class_types = { + "custom_fields": CustomField, + "rendering_options": RenderingOptions, + } + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + class Tax(StripeObject): + class Location(StripeObject): + country: str + """ + The identified tax country of the customer. + """ + source: Literal[ + "billing_address", + "ip_address", + "payment_method", + "shipping_destination", + ] + """ + The data source used to infer the customer's location. + """ + state: Optional[str] + """ + The identified tax state, county, province, or region of the customer. + """ + + automatic_tax: Literal[ + "failed", "not_collecting", "supported", "unrecognized_location" + ] + """ + Surfaces if automatic tax computation is possible given the current customer location information. + """ + ip_address: Optional[str] + """ + A recent IP address of the customer used for tax reporting and tax location inference. + """ + location: Optional[Location] + """ + The identified tax location of the customer. + """ + provider: Literal["anrok", "avalara", "sphere", "stripe"] + """ + The tax calculation provider used for location resolution. Defaults to `stripe` when not using a [third-party provider](https://docs.stripe.com/tax/third-party-apps). + """ + _inner_class_types = {"location": Location} + + address: Optional[Address] + """ + The customer's address. + """ + balance: Optional[int] + """ + The current balance, if any, that's stored on the customer in their default currency. If negative, the customer has credit to apply to their next invoice. If positive, the customer has an amount owed that's added to their next invoice. The balance only considers amounts that Stripe hasn't successfully applied to any invoice. It doesn't reflect unpaid invoices. This balance is only taken into account after invoices finalize. For multi-currency balances, see [invoice_credit_balance](https://stripe.com/docs/api/customers/object#customer_object-invoice_credit_balance). + """ + business_name: Optional[str] + """ + The customer's business name. + """ + cash_balance: Optional["CashBalance"] + """ + The current funds being held by Stripe on behalf of the customer. You can apply these funds towards payment intents when the source is "cash_balance". The `settings[reconciliation_mode]` field describes if these funds apply to these payment intents manually or automatically. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: Optional[str] + """ + Three-letter [ISO code for the currency](https://stripe.com/docs/currencies) the customer can be charged in for recurring billing purposes. + """ + default_source: Optional[ + ExpandableField[Union["Account", "BankAccount", "Card", "Source"]] + ] + """ + ID of the default payment source for the customer. + + If you use payment methods created through the PaymentMethods API, see the [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) field instead. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + delinquent: Optional[bool] + """ + Tracks the most recent state change on any invoice belonging to the customer. Paying an invoice or marking it uncollectible via the API will set this field to false. An automatic payment failure or passing the `invoice.due_date` will set this field to `true`. + + If an invoice becomes uncollectible by [dunning](https://stripe.com/docs/billing/automatic-collection), `delinquent` doesn't reset to `false`. + + If you care whether the customer has paid their most recent subscription invoice, use `subscription.status` instead. Paying or marking uncollectible any customer invoice regardless of whether it is the latest invoice for a subscription will always set this field to `false`. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + discount: Optional["Discount"] + """ + Describes the current discount active on the customer, if there is one. + """ + email: Optional[str] + """ + The customer's email address. + """ + id: str + """ + Unique identifier for the object. + """ + individual_name: Optional[str] + """ + The customer's individual name. + """ + invoice_credit_balance: Optional[Dict[str, int]] + """ + The current multi-currency balances, if any, that's stored on the customer. If positive in a currency, the customer has a credit to apply to their next invoice denominated in that currency. If negative, the customer has an amount owed that's added to their next invoice denominated in that currency. These balances don't apply to unpaid invoices. They solely track amounts that Stripe hasn't successfully applied to any invoice. Stripe only applies a balance in a specific currency to an invoice after that invoice (which is in the same currency) finalizes. + """ + invoice_prefix: Optional[str] + """ + The prefix for the customer used to generate unique invoice numbers. + """ + invoice_settings: Optional[InvoiceSettings] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + The customer's full name or business name. + """ + next_invoice_sequence: Optional[int] + """ + The suffix of the customer's next invoice number (for example, 0001). When the account uses account level sequencing, this parameter is ignored in API requests and the field omitted in API responses. + """ + object: Literal["customer"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + phone: Optional[str] + """ + The customer's phone number. + """ + preferred_locales: Optional[List[str]] + """ + The customer's preferred locales (languages), ordered by preference. + """ + shipping: Optional[Shipping] + """ + Mailing and shipping address for the customer. Appears on invoices emailed to this customer. + """ + sources: Optional[ + ListObject[Union["Account", "BankAccount", "Card", "Source"]] + ] + """ + The customer's payment sources, if any. + """ + subscriptions: Optional[ListObject["Subscription"]] + """ + The customer's current subscriptions, if any. + """ + tax: Optional[Tax] + tax_exempt: Optional[Literal["exempt", "none", "reverse"]] + """ + Describes the customer's tax exemption status, which is `none`, `exempt`, or `reverse`. When set to `reverse`, invoice and receipt PDFs include the following text: **"Reverse charge"**. + """ + tax_ids: Optional[ListObject["TaxId"]] + """ + The customer's tax IDs. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock that this customer belongs to. + """ + + @classmethod + def create(cls, **params: Unpack["CustomerCreateParams"]) -> "Customer": + """ + Creates a new customer object. + """ + return cast( + "Customer", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CustomerCreateParams"] + ) -> "Customer": + """ + Creates a new customer object. + """ + return cast( + "Customer", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_create_funding_instructions( + cls, + customer: str, + **params: Unpack["CustomerCreateFundingInstructionsParams"], + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + cls._static_request( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def create_funding_instructions( + customer: str, + **params: Unpack["CustomerCreateFundingInstructionsParams"], + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + ... + + @overload + def create_funding_instructions( + self, **params: Unpack["CustomerCreateFundingInstructionsParams"] + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + ... + + @class_method_variant("_cls_create_funding_instructions") + def create_funding_instructions( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerCreateFundingInstructionsParams"] + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + self._request( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_create_funding_instructions_async( + cls, + customer: str, + **params: Unpack["CustomerCreateFundingInstructionsParams"], + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + await cls._static_request_async( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def create_funding_instructions_async( + customer: str, + **params: Unpack["CustomerCreateFundingInstructionsParams"], + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + ... + + @overload + async def create_funding_instructions_async( + self, **params: Unpack["CustomerCreateFundingInstructionsParams"] + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + ... + + @class_method_variant("_cls_create_funding_instructions_async") + async def create_funding_instructions_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerCreateFundingInstructionsParams"] + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + await self._request_async( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Customer", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + ... + + @overload + def delete(self, **params: Unpack["CustomerDeleteParams"]) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Customer", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerDeleteParams"] + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def _cls_delete_discount( + cls, customer: str, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + cls._static_request( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def delete_discount( + customer: str, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + ... + + @overload + def delete_discount( + self, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + ... + + @class_method_variant("_cls_delete_discount") + def delete_discount( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + self._request( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_delete_discount_async( + cls, customer: str, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + await cls._static_request_async( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def delete_discount_async( + customer: str, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + ... + + @overload + async def delete_discount_async( + self, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + ... + + @class_method_variant("_cls_delete_discount_async") + async def delete_discount_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + await self._request_async( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["CustomerListParams"] + ) -> ListObject["Customer"]: + """ + Returns a list of your customers. The customers are returned sorted by creation date, with the most recent customers appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CustomerListParams"] + ) -> ListObject["Customer"]: + """ + Returns a list of your customers. The customers are returned sorted by creation date, with the most recent customers appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_list_payment_methods( + cls, + customer: str, + **params: Unpack["CustomerListPaymentMethodsParams"], + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + ListObject["PaymentMethod"], + cls._static_request( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_payment_methods( + customer: str, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + ... + + @overload + def list_payment_methods( + self, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + ... + + @class_method_variant("_cls_list_payment_methods") + def list_payment_methods( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + ListObject["PaymentMethod"], + self._request( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_payment_methods_async( + cls, + customer: str, + **params: Unpack["CustomerListPaymentMethodsParams"], + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + ListObject["PaymentMethod"], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_payment_methods_async( + customer: str, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + ... + + @overload + async def list_payment_methods_async( + self, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + ... + + @class_method_variant("_cls_list_payment_methods_async") + async def list_payment_methods_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerListPaymentMethodsParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + ListObject["PaymentMethod"], + await self._request_async( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["CustomerModifyParams"] + ) -> "Customer": + """ + Updates the specified customer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the source parameter, that becomes the customer's active source (e.g., a card) to be used for all charges in the future. When you update a customer to a new valid card source by passing the source parameter: for each of the customer's current subscriptions, if the subscription bills automatically and is in the past_due state, then the latest open invoice for the subscription with automatic collection enabled will be retried. This retry will not count as an automatic retry, and will not affect the next regularly scheduled payment for the invoice. Changing the default_source for a customer will not trigger this behavior. + + This request accepts mostly the same arguments as the customer creation call. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Customer", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CustomerModifyParams"] + ) -> "Customer": + """ + Updates the specified customer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the source parameter, that becomes the customer's active source (e.g., a card) to be used for all charges in the future. When you update a customer to a new valid card source by passing the source parameter: for each of the customer's current subscriptions, if the subscription bills automatically and is in the past_due state, then the latest open invoice for the subscription with automatic collection enabled will be retried. This retry will not count as an automatic retry, and will not affect the next regularly scheduled payment for the invoice. Changing the default_source for a customer will not trigger this behavior. + + This request accepts mostly the same arguments as the customer creation call. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Customer", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CustomerRetrieveParams"] + ) -> "Customer": + """ + Retrieves a Customer object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CustomerRetrieveParams"] + ) -> "Customer": + """ + Retrieves a Customer object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_retrieve_payment_method( + cls, + customer: str, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + cls._static_request( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(customer), + payment_method=sanitize_id(payment_method), + ), + params=params, + ), + ) + + @overload + @staticmethod + def retrieve_payment_method( + customer: str, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + ... + + @overload + def retrieve_payment_method( + self, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + ... + + @class_method_variant("_cls_retrieve_payment_method") + def retrieve_payment_method( # pyright: ignore[reportGeneralTypeIssues] + self, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + self._request( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(self.get("id")), + payment_method=sanitize_id(payment_method), + ), + params=params, + ), + ) + + @classmethod + async def _cls_retrieve_payment_method_async( + cls, + customer: str, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + await cls._static_request_async( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(customer), + payment_method=sanitize_id(payment_method), + ), + params=params, + ), + ) + + @overload + @staticmethod + async def retrieve_payment_method_async( + customer: str, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + ... + + @overload + async def retrieve_payment_method_async( + self, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + ... + + @class_method_variant("_cls_retrieve_payment_method_async") + async def retrieve_payment_method_async( # pyright: ignore[reportGeneralTypeIssues] + self, + payment_method: str, + **params: Unpack["CustomerRetrievePaymentMethodParams"], + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + await self._request_async( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(self.get("id")), + payment_method=sanitize_id(payment_method), + ), + params=params, + ), + ) + + @classmethod + def search( + cls, *args, **kwargs: Unpack["CustomerSearchParams"] + ) -> SearchResultObject["Customer"]: + """ + Search for customers you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search(search_url="/v1/customers/search", *args, **kwargs) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["CustomerSearchParams"] + ) -> SearchResultObject["Customer"]: + """ + Search for customers you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/customers/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["CustomerSearchParams"] + ) -> Iterator["Customer"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["CustomerSearchParams"] + ) -> AsyncIterator["Customer"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + @classmethod + def list_balance_transactions( + cls, + customer: str, + **params: Unpack["CustomerListBalanceTransactionsParams"], + ) -> ListObject["CustomerBalanceTransaction"]: + """ + Returns a list of transactions that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + ListObject["CustomerBalanceTransaction"], + cls._static_request( + "get", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def list_balance_transactions_async( + cls, + customer: str, + **params: Unpack["CustomerListBalanceTransactionsParams"], + ) -> ListObject["CustomerBalanceTransaction"]: + """ + Returns a list of transactions that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + ListObject["CustomerBalanceTransaction"], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def create_balance_transaction( + cls, + customer: str, + **params: Unpack["CustomerCreateBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Creates an immutable transaction that updates the customer's credit [balance](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + cls._static_request( + "post", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def create_balance_transaction_async( + cls, + customer: str, + **params: Unpack["CustomerCreateBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Creates an immutable transaction that updates the customer's credit [balance](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + await cls._static_request_async( + "post", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def retrieve_balance_transaction( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerRetrieveBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Retrieves a specific customer balance transaction that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + cls._static_request( + "get", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + async def retrieve_balance_transaction_async( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerRetrieveBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Retrieves a specific customer balance transaction that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + await cls._static_request_async( + "get", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + def modify_balance_transaction( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerModifyBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Most credit balance transaction fields are immutable, but you may update its description and metadata. + """ + return cast( + "CustomerBalanceTransaction", + cls._static_request( + "post", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + async def modify_balance_transaction_async( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerModifyBalanceTransactionParams"], + ) -> "CustomerBalanceTransaction": + """ + Most credit balance transaction fields are immutable, but you may update its description and metadata. + """ + return cast( + "CustomerBalanceTransaction", + await cls._static_request_async( + "post", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + def list_cash_balance_transactions( + cls, + customer: str, + **params: Unpack["CustomerListCashBalanceTransactionsParams"], + ) -> ListObject["CustomerCashBalanceTransaction"]: + """ + Returns a list of transactions that modified the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + ListObject["CustomerCashBalanceTransaction"], + cls._static_request( + "get", + "/v1/customers/{customer}/cash_balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def list_cash_balance_transactions_async( + cls, + customer: str, + **params: Unpack["CustomerListCashBalanceTransactionsParams"], + ) -> ListObject["CustomerCashBalanceTransaction"]: + """ + Returns a list of transactions that modified the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + ListObject["CustomerCashBalanceTransaction"], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/cash_balance_transactions".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def retrieve_cash_balance_transaction( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerRetrieveCashBalanceTransactionParams"], + ) -> "CustomerCashBalanceTransaction": + """ + Retrieves a specific cash balance transaction, which updated the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "CustomerCashBalanceTransaction", + cls._static_request( + "get", + "/v1/customers/{customer}/cash_balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + async def retrieve_cash_balance_transaction_async( + cls, + customer: str, + transaction: str, + **params: Unpack["CustomerRetrieveCashBalanceTransactionParams"], + ) -> "CustomerCashBalanceTransaction": + """ + Retrieves a specific cash balance transaction, which updated the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "CustomerCashBalanceTransaction", + await cls._static_request_async( + "get", + "/v1/customers/{customer}/cash_balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + params=params, + ), + ) + + @classmethod + def list_sources( + cls, customer: str, **params: Unpack["CustomerListSourcesParams"] + ) -> ListObject[Union["Account", "BankAccount", "Card", "Source"]]: + """ + List sources for a specified customer. + """ + return cast( + ListObject[Union["Account", "BankAccount", "Card", "Source"]], + cls._static_request( + "get", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def list_sources_async( + cls, customer: str, **params: Unpack["CustomerListSourcesParams"] + ) -> ListObject[Union["Account", "BankAccount", "Card", "Source"]]: + """ + List sources for a specified customer. + """ + return cast( + ListObject[Union["Account", "BankAccount", "Card", "Source"]], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def create_source( + cls, customer: str, **params: Unpack["CustomerCreateSourceParams"] + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + When you create a new credit card, you must specify a customer or recipient on which to create it. + + If the card's owner has no default card, then the new card will become the default. + However, if the owner already has a default, then it will not change. + To change the default, you should [update the customer](https://docs.stripe.com/docs/api#update_customer) to have a new default_source. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + cls._static_request( + "post", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def create_source_async( + cls, customer: str, **params: Unpack["CustomerCreateSourceParams"] + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + When you create a new credit card, you must specify a customer or recipient on which to create it. + + If the card's owner has no default card, then the new card will become the default. + However, if the owner already has a default, then it will not change. + To change the default, you should [update the customer](https://docs.stripe.com/docs/api#update_customer) to have a new default_source. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + await cls._static_request_async( + "post", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def retrieve_source( + cls, + customer: str, + id: str, + **params: Unpack["CustomerRetrieveSourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Retrieve a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + cls._static_request( + "get", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_source_async( + cls, + customer: str, + id: str, + **params: Unpack["CustomerRetrieveSourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Retrieve a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def modify_source( + cls, + customer: str, + id: str, + **params: Unpack["CustomerModifySourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Update a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + cls._static_request( + "post", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def modify_source_async( + cls, + customer: str, + id: str, + **params: Unpack["CustomerModifySourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Update a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + await cls._static_request_async( + "post", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def delete_source( + cls, + customer: str, + id: str, + **params: Unpack["CustomerDeleteSourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Delete a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + cls._static_request( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def delete_source_async( + cls, + customer: str, + id: str, + **params: Unpack["CustomerDeleteSourceParams"], + ) -> Union["Account", "BankAccount", "Card", "Source"]: + """ + Delete a specified source for a given customer. + """ + return cast( + Union["Account", "BankAccount", "Card", "Source"], + await cls._static_request_async( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def create_tax_id( + cls, customer: str, **params: Unpack["CustomerCreateTaxIdParams"] + ) -> "TaxId": + """ + Creates a new tax_id object for a customer. + """ + return cast( + "TaxId", + cls._static_request( + "post", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def create_tax_id_async( + cls, customer: str, **params: Unpack["CustomerCreateTaxIdParams"] + ) -> "TaxId": + """ + Creates a new tax_id object for a customer. + """ + return cast( + "TaxId", + await cls._static_request_async( + "post", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def retrieve_tax_id( + cls, + customer: str, + id: str, + **params: Unpack["CustomerRetrieveTaxIdParams"], + ) -> "TaxId": + """ + Retrieves the tax_id object with the given identifier. + """ + return cast( + "TaxId", + cls._static_request( + "get", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_tax_id_async( + cls, + customer: str, + id: str, + **params: Unpack["CustomerRetrieveTaxIdParams"], + ) -> "TaxId": + """ + Retrieves the tax_id object with the given identifier. + """ + return cast( + "TaxId", + await cls._static_request_async( + "get", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def delete_tax_id( + cls, + customer: str, + id: str, + **params: Unpack["CustomerDeleteTaxIdParams"], + ) -> "TaxId": + """ + Deletes an existing tax_id object. + """ + return cast( + "TaxId", + cls._static_request( + "delete", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def delete_tax_id_async( + cls, + customer: str, + id: str, + **params: Unpack["CustomerDeleteTaxIdParams"], + ) -> "TaxId": + """ + Deletes an existing tax_id object. + """ + return cast( + "TaxId", + await cls._static_request_async( + "delete", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def list_tax_ids( + cls, customer: str, **params: Unpack["CustomerListTaxIdsParams"] + ) -> ListObject["TaxId"]: + """ + Returns a list of tax IDs for a customer. + """ + return cast( + ListObject["TaxId"], + cls._static_request( + "get", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def list_tax_ids_async( + cls, customer: str, **params: Unpack["CustomerListTaxIdsParams"] + ) -> ListObject["TaxId"]: + """ + Returns a list of tax IDs for a customer. + """ + return cast( + ListObject["TaxId"], + await cls._static_request_async( + "get", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def retrieve_cash_balance( + cls, + customer: str, + **params: Unpack["CustomerRetrieveCashBalanceParams"], + ) -> "CashBalance": + """ + Retrieves a customer's cash balance. + """ + return cast( + "CashBalance", + cls._static_request( + "get", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_cash_balance_async( + cls, + customer: str, + **params: Unpack["CustomerRetrieveCashBalanceParams"], + ) -> "CashBalance": + """ + Retrieves a customer's cash balance. + """ + return cast( + "CashBalance", + await cls._static_request_async( + "get", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + def modify_cash_balance( + cls, customer: str, **params: Unpack["CustomerModifyCashBalanceParams"] + ) -> "CashBalance": + """ + Changes the settings on a customer's cash balance. + """ + return cast( + "CashBalance", + cls._static_request( + "post", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @classmethod + async def modify_cash_balance_async( + cls, customer: str, **params: Unpack["CustomerModifyCashBalanceParams"] + ) -> "CashBalance": + """ + Changes the settings on a customer's cash balance. + """ + return cast( + "CashBalance", + await cls._static_request_async( + "post", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + class TestHelpers(APIResourceTestHelpers["Customer"]): + _resource_cls: Type["Customer"] + + @classmethod + def _cls_fund_cash_balance( + cls, + customer: str, + **params: Unpack["CustomerFundCashBalanceParams"], + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + cls._static_request( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + def fund_cash_balance( + customer: str, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + ... + + @overload + def fund_cash_balance( + self, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + ... + + @class_method_variant("_cls_fund_cash_balance") + def fund_cash_balance( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + self.resource._request( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_fund_cash_balance_async( + cls, + customer: str, + **params: Unpack["CustomerFundCashBalanceParams"], + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + await cls._static_request_async( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(customer) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def fund_cash_balance_async( + customer: str, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + ... + + @overload + async def fund_cash_balance_async( + self, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + ... + + @class_method_variant("_cls_fund_cash_balance_async") + async def fund_cash_balance_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CustomerFundCashBalanceParams"] + ) -> "CustomerCashBalanceTransaction": + """ + Create an incoming testmode bank transfer + """ + return cast( + "CustomerCashBalanceTransaction", + await self.resource._request_async( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "address": Address, + "invoice_settings": InvoiceSettings, + "shipping": Shipping, + "tax": Tax, + } + + +Customer.TestHelpers._resource_cls = Customer diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction.py new file mode 100644 index 00000000..9ace2480 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_resource import APIResource +from stripe._customer import Customer +from stripe._expandable_field import ExpandableField +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._credit_note import CreditNote + from stripe._invoice import Invoice + from stripe.checkout._session import Session + + +class CustomerBalanceTransaction(APIResource["CustomerBalanceTransaction"]): + """ + Each customer has a [Balance](https://stripe.com/docs/api/customers/object#customer_object-balance) value, + which denotes a debit or credit that's automatically applied to their next invoice upon finalization. + You may modify the value directly by using the [update customer API](https://stripe.com/docs/api/customers/update), + or by creating a Customer Balance Transaction, which increments or decrements the customer's `balance` by the specified `amount`. + + Related guide: [Customer balance](https://stripe.com/docs/billing/customer/balance) + """ + + OBJECT_NAME: ClassVar[Literal["customer_balance_transaction"]] = ( + "customer_balance_transaction" + ) + amount: int + """ + The amount of the transaction. A negative value is a credit for the customer's balance, and a positive value is a debit to the customer's `balance`. + """ + checkout_session: Optional[ExpandableField["Session"]] + """ + The ID of the checkout session (if any) that created the transaction. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + credit_note: Optional[ExpandableField["CreditNote"]] + """ + The ID of the credit note (if any) related to the transaction. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: ExpandableField["Customer"] + """ + The ID of the customer the transaction belongs to. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + ending_balance: int + """ + The customer's `balance` after the transaction was applied. A negative value decreases the amount due on the customer's next invoice. A positive value increases the amount due on the customer's next invoice. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: Optional[ExpandableField["Invoice"]] + """ + The ID of the invoice (if any) related to the transaction. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["customer_balance_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + type: Literal[ + "adjustment", + "applied_to_invoice", + "checkout_session_subscription_payment", + "checkout_session_subscription_payment_canceled", + "credit_note", + "initial", + "invoice_overpaid", + "invoice_too_large", + "invoice_too_small", + "migration", + "unapplied_from_invoice", + "unspent_receiver_credit", + ] + """ + Transaction type: `adjustment`, `applied_to_invoice`, `credit_note`, `initial`, `invoice_overpaid`, `invoice_too_large`, `invoice_too_small`, `unspent_receiver_credit`, `unapplied_from_invoice`, `checkout_session_subscription_payment`, or `checkout_session_subscription_payment_canceled`. See the [Customer Balance page](https://stripe.com/docs/billing/customer/balance#types) to learn more about transaction types. + """ + + def instance_url(self): + token = self.id + customer = self.customer + if isinstance(customer, Customer): + customer = customer.id + base = Customer.class_url() + cust_extn = sanitize_id(customer) + extn = sanitize_id(token) + return "%s/%s/balance_transactions/%s" % (base, cust_extn, extn) + + @classmethod + def retrieve(cls, id, **params) -> "CustomerBalanceTransaction": + raise NotImplementedError( + "Can't retrieve a Customer Balance Transaction without a Customer ID. " + "Use Customer.retrieve_customer_balance_transaction('cus_123', 'cbtxn_123')" + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction_service.py new file mode 100644 index 00000000..5a4feab8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_balance_transaction_service.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer_balance_transaction import CustomerBalanceTransaction + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._customer_balance_transaction_create_params import ( + CustomerBalanceTransactionCreateParams, + ) + from stripe.params._customer_balance_transaction_list_params import ( + CustomerBalanceTransactionListParams, + ) + from stripe.params._customer_balance_transaction_retrieve_params import ( + CustomerBalanceTransactionRetrieveParams, + ) + from stripe.params._customer_balance_transaction_update_params import ( + CustomerBalanceTransactionUpdateParams, + ) + + +class CustomerBalanceTransactionService(StripeService): + def list( + self, + customer: str, + params: Optional["CustomerBalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CustomerBalanceTransaction]": + """ + Returns a list of transactions that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "ListObject[CustomerBalanceTransaction]", + self._request( + "get", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + customer: str, + params: Optional["CustomerBalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CustomerBalanceTransaction]": + """ + Returns a list of transactions that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "ListObject[CustomerBalanceTransaction]", + await self._request_async( + "get", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + customer: str, + params: "CustomerBalanceTransactionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Creates an immutable transaction that updates the customer's credit [balance](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + self._request( + "post", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + customer: str, + params: "CustomerBalanceTransactionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Creates an immutable transaction that updates the customer's credit [balance](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + await self._request_async( + "post", + "/v1/customers/{customer}/balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + transaction: str, + params: Optional["CustomerBalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Retrieves a specific customer balance transaction that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + self._request( + "get", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + transaction: str, + params: Optional["CustomerBalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Retrieves a specific customer balance transaction that updated the customer's [balances](https://docs.stripe.com/docs/billing/customer/balance). + """ + return cast( + "CustomerBalanceTransaction", + await self._request_async( + "get", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + customer: str, + transaction: str, + params: Optional["CustomerBalanceTransactionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Most credit balance transaction fields are immutable, but you may update its description and metadata. + """ + return cast( + "CustomerBalanceTransaction", + self._request( + "post", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + customer: str, + transaction: str, + params: Optional["CustomerBalanceTransactionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerBalanceTransaction": + """ + Most credit balance transaction fields are immutable, but you may update its description and metadata. + """ + return cast( + "CustomerBalanceTransaction", + await self._request_async( + "post", + "/v1/customers/{customer}/balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_service.py new file mode 100644 index 00000000..80ea75f1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_service.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._cash_balance import CashBalance + from stripe._request_options import RequestOptions + from stripe.params._customer_cash_balance_retrieve_params import ( + CustomerCashBalanceRetrieveParams, + ) + from stripe.params._customer_cash_balance_update_params import ( + CustomerCashBalanceUpdateParams, + ) + + +class CustomerCashBalanceService(StripeService): + def retrieve( + self, + customer: str, + params: Optional["CustomerCashBalanceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CashBalance": + """ + Retrieves a customer's cash balance. + """ + return cast( + "CashBalance", + self._request( + "get", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + params: Optional["CustomerCashBalanceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CashBalance": + """ + Retrieves a customer's cash balance. + """ + return cast( + "CashBalance", + await self._request_async( + "get", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + customer: str, + params: Optional["CustomerCashBalanceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CashBalance": + """ + Changes the settings on a customer's cash balance. + """ + return cast( + "CashBalance", + self._request( + "post", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + customer: str, + params: Optional["CustomerCashBalanceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CashBalance": + """ + Changes the settings on a customer's cash balance. + """ + return cast( + "CashBalance", + await self._request_async( + "post", + "/v1/customers/{customer}/cash_balance".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction.py new file mode 100644 index 00000000..64db2470 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._customer import Customer + from stripe._payment_intent import PaymentIntent + from stripe._refund import Refund + + +class CustomerCashBalanceTransaction(StripeObject): + """ + Customers with certain payments enabled have a cash balance, representing funds that were paid + by the customer to a merchant, but have not yet been allocated to a payment. Cash Balance Transactions + represent when funds are moved into or out of this balance. This includes funding by the customer, allocation + to payments, and refunds to the customer. + """ + + OBJECT_NAME: ClassVar[Literal["customer_cash_balance_transaction"]] = ( + "customer_cash_balance_transaction" + ) + + class AdjustedForOverdraft(StripeObject): + balance_transaction: ExpandableField["BalanceTransaction"] + """ + The [Balance Transaction](https://stripe.com/docs/api/balance_transactions/object) that corresponds to funds taken out of your Stripe balance. + """ + linked_transaction: ExpandableField["CustomerCashBalanceTransaction"] + """ + The [Cash Balance Transaction](https://stripe.com/docs/api/cash_balance_transactions/object) that brought the customer balance negative, triggering the clawback of funds. + """ + + class AppliedToPayment(StripeObject): + payment_intent: ExpandableField["PaymentIntent"] + """ + The [Payment Intent](https://stripe.com/docs/api/payment_intents/object) that funds were applied to. + """ + + class Funded(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + bic: Optional[str] + """ + The BIC of the bank of the sender of the funding. + """ + iban_last4: Optional[str] + """ + The last 4 digits of the IBAN of the sender of the funding. + """ + sender_name: Optional[str] + """ + The full name of the sender, as supplied by the sending bank. + """ + + class GbBankTransfer(StripeObject): + account_number_last4: Optional[str] + """ + The last 4 digits of the account number of the sender of the funding. + """ + sender_name: Optional[str] + """ + The full name of the sender, as supplied by the sending bank. + """ + sort_code: Optional[str] + """ + The sort code of the bank of the sender of the funding + """ + + class JpBankTransfer(StripeObject): + sender_bank: Optional[str] + """ + The name of the bank of the sender of the funding. + """ + sender_branch: Optional[str] + """ + The name of the bank branch of the sender of the funding. + """ + sender_name: Optional[str] + """ + The full name of the sender, as supplied by the sending bank. + """ + + class UsBankTransfer(StripeObject): + network: Optional[Literal["ach", "domestic_wire_us", "swift"]] + """ + The banking network used for this funding. + """ + sender_name: Optional[str] + """ + The full name of the sender, as supplied by the sending bank. + """ + + eu_bank_transfer: Optional[EuBankTransfer] + gb_bank_transfer: Optional[GbBankTransfer] + jp_bank_transfer: Optional[JpBankTransfer] + reference: Optional[str] + """ + The user-supplied reference field on the bank transfer. + """ + type: Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + """ + The funding method type used to fund the customer balance. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + us_bank_transfer: Optional[UsBankTransfer] + _inner_class_types = { + "eu_bank_transfer": EuBankTransfer, + "gb_bank_transfer": GbBankTransfer, + "jp_bank_transfer": JpBankTransfer, + "us_bank_transfer": UsBankTransfer, + } + + bank_transfer: BankTransfer + _inner_class_types = {"bank_transfer": BankTransfer} + + class RefundedFromPayment(StripeObject): + refund: ExpandableField["Refund"] + """ + The [Refund](https://stripe.com/docs/api/refunds/object) that moved these funds into the customer's cash balance. + """ + + class TransferredToBalance(StripeObject): + balance_transaction: ExpandableField["BalanceTransaction"] + """ + The [Balance Transaction](https://stripe.com/docs/api/balance_transactions/object) that corresponds to funds transferred to your Stripe balance. + """ + + class UnappliedFromPayment(StripeObject): + payment_intent: ExpandableField["PaymentIntent"] + """ + The [Payment Intent](https://stripe.com/docs/api/payment_intents/object) that funds were unapplied from. + """ + + adjusted_for_overdraft: Optional[AdjustedForOverdraft] + applied_to_payment: Optional[AppliedToPayment] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: ExpandableField["Customer"] + """ + The customer whose available cash balance changed as a result of this transaction. + """ + ending_balance: int + """ + The total available cash balance for the specified currency after this transaction was applied. Represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + funded: Optional[Funded] + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + net_amount: int + """ + The amount by which the cash balance changed, represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). A positive value represents funds being added to the cash balance, a negative value represents funds being removed from the cash balance. + """ + object: Literal["customer_cash_balance_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + refunded_from_payment: Optional[RefundedFromPayment] + transferred_to_balance: Optional[TransferredToBalance] + type: Literal[ + "adjusted_for_overdraft", + "applied_to_payment", + "funded", + "funding_reversed", + "refunded_from_payment", + "return_canceled", + "return_initiated", + "transferred_to_balance", + "unapplied_from_payment", + ] + """ + The type of the cash balance transaction. New types may be added in future. See [Customer Balance](https://stripe.com/docs/payments/customer-balance#types) to learn more about these types. + """ + unapplied_from_payment: Optional[UnappliedFromPayment] + _inner_class_types = { + "adjusted_for_overdraft": AdjustedForOverdraft, + "applied_to_payment": AppliedToPayment, + "funded": Funded, + "refunded_from_payment": RefundedFromPayment, + "transferred_to_balance": TransferredToBalance, + "unapplied_from_payment": UnappliedFromPayment, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction_service.py new file mode 100644 index 00000000..e9ceb320 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_cash_balance_transaction_service.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer_cash_balance_transaction import ( + CustomerCashBalanceTransaction, + ) + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._customer_cash_balance_transaction_list_params import ( + CustomerCashBalanceTransactionListParams, + ) + from stripe.params._customer_cash_balance_transaction_retrieve_params import ( + CustomerCashBalanceTransactionRetrieveParams, + ) + + +class CustomerCashBalanceTransactionService(StripeService): + def list( + self, + customer: str, + params: Optional["CustomerCashBalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CustomerCashBalanceTransaction]": + """ + Returns a list of transactions that modified the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "ListObject[CustomerCashBalanceTransaction]", + self._request( + "get", + "/v1/customers/{customer}/cash_balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + customer: str, + params: Optional["CustomerCashBalanceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CustomerCashBalanceTransaction]": + """ + Returns a list of transactions that modified the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "ListObject[CustomerCashBalanceTransaction]", + await self._request_async( + "get", + "/v1/customers/{customer}/cash_balance_transactions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + transaction: str, + params: Optional[ + "CustomerCashBalanceTransactionRetrieveParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerCashBalanceTransaction": + """ + Retrieves a specific cash balance transaction, which updated the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "CustomerCashBalanceTransaction", + self._request( + "get", + "/v1/customers/{customer}/cash_balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + transaction: str, + params: Optional[ + "CustomerCashBalanceTransactionRetrieveParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "CustomerCashBalanceTransaction": + """ + Retrieves a specific cash balance transaction, which updated the customer's [cash balance](https://docs.stripe.com/docs/payments/customer-balance). + """ + return cast( + "CustomerCashBalanceTransaction", + await self._request_async( + "get", + "/v1/customers/{customer}/cash_balance_transactions/{transaction}".format( + customer=sanitize_id(customer), + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_funding_instructions_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_funding_instructions_service.py new file mode 100644 index 00000000..463434fe --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_funding_instructions_service.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._funding_instructions import FundingInstructions + from stripe._request_options import RequestOptions + from stripe.params._customer_funding_instructions_create_params import ( + CustomerFundingInstructionsCreateParams, + ) + + +class CustomerFundingInstructionsService(StripeService): + def create( + self, + customer: str, + params: "CustomerFundingInstructionsCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + self._request( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + customer: str, + params: "CustomerFundingInstructionsCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FundingInstructions": + """ + Retrieve funding instructions for a customer cash balance. If funding instructions do not yet exist for the customer, new + funding instructions will be created. If funding instructions have already been created for a given customer, the same + funding instructions will be retrieved. In other words, we will return the same funding instructions each time. + """ + return cast( + "FundingInstructions", + await self._request_async( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_method_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_method_service.py new file mode 100644 index 00000000..05d0e9b6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_method_service.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_method import PaymentMethod + from stripe._request_options import RequestOptions + from stripe.params._customer_payment_method_list_params import ( + CustomerPaymentMethodListParams, + ) + from stripe.params._customer_payment_method_retrieve_params import ( + CustomerPaymentMethodRetrieveParams, + ) + + +class CustomerPaymentMethodService(StripeService): + def list( + self, + customer: str, + params: Optional["CustomerPaymentMethodListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethod]": + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + "ListObject[PaymentMethod]", + self._request( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + customer: str, + params: Optional["CustomerPaymentMethodListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethod]": + """ + Returns a list of PaymentMethods for a given Customer + """ + return cast( + "ListObject[PaymentMethod]", + await self._request_async( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + payment_method: str, + params: Optional["CustomerPaymentMethodRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + self._request( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(customer), + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + payment_method: str, + params: Optional["CustomerPaymentMethodRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object for a given Customer. + """ + return cast( + "PaymentMethod", + await self._request_async( + "get", + "/v1/customers/{customer}/payment_methods/{payment_method}".format( + customer=sanitize_id(customer), + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_source_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_source_service.py new file mode 100644 index 00000000..7ea89ac7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_payment_source_service.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._source import Source + from stripe.params._customer_payment_source_create_params import ( + CustomerPaymentSourceCreateParams, + ) + from stripe.params._customer_payment_source_delete_params import ( + CustomerPaymentSourceDeleteParams, + ) + from stripe.params._customer_payment_source_list_params import ( + CustomerPaymentSourceListParams, + ) + from stripe.params._customer_payment_source_retrieve_params import ( + CustomerPaymentSourceRetrieveParams, + ) + from stripe.params._customer_payment_source_update_params import ( + CustomerPaymentSourceUpdateParams, + ) + from stripe.params._customer_payment_source_verify_params import ( + CustomerPaymentSourceVerifyParams, + ) + from typing import Union + + +class CustomerPaymentSourceService(StripeService): + def list( + self, + customer: str, + params: Optional["CustomerPaymentSourceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Union[Account, BankAccount, Card, Source]]": + """ + List sources for a specified customer. + """ + return cast( + "ListObject[Union[Account, BankAccount, Card, Source]]", + self._request( + "get", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + customer: str, + params: Optional["CustomerPaymentSourceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Union[Account, BankAccount, Card, Source]]": + """ + List sources for a specified customer. + """ + return cast( + "ListObject[Union[Account, BankAccount, Card, Source]]", + await self._request_async( + "get", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + customer: str, + params: "CustomerPaymentSourceCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + When you create a new credit card, you must specify a customer or recipient on which to create it. + + If the card's owner has no default card, then the new card will become the default. + However, if the owner already has a default, then it will not change. + To change the default, you should [update the customer](https://docs.stripe.com/docs/api#update_customer) to have a new default_source. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + self._request( + "post", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + customer: str, + params: "CustomerPaymentSourceCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + When you create a new credit card, you must specify a customer or recipient on which to create it. + + If the card's owner has no default card, then the new card will become the default. + However, if the owner already has a default, then it will not change. + To change the default, you should [update the customer](https://docs.stripe.com/docs/api#update_customer) to have a new default_source. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + await self._request_async( + "post", + "/v1/customers/{customer}/sources".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Retrieve a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + self._request( + "get", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Retrieve a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + await self._request_async( + "get", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Update a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + self._request( + "post", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Update a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + await self._request_async( + "post", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def delete( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Delete a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + self._request( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Delete a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + await self._request_async( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def verify( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceVerifyParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BankAccount": + """ + Verify a specified bank account for a given customer. + """ + return cast( + "BankAccount", + self._request( + "post", + "/v1/customers/{customer}/sources/{id}/verify".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def verify_async( + self, + customer: str, + id: str, + params: Optional["CustomerPaymentSourceVerifyParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "BankAccount": + """ + Verify a specified bank account for a given customer. + """ + return cast( + "BankAccount", + await self._request_async( + "post", + "/v1/customers/{customer}/sources/{id}/verify".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_service.py new file mode 100644 index 00000000..369841df --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_service.py @@ -0,0 +1,399 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe._customer_balance_transaction_service import ( + CustomerBalanceTransactionService, + ) + from stripe._customer_cash_balance_service import ( + CustomerCashBalanceService, + ) + from stripe._customer_cash_balance_transaction_service import ( + CustomerCashBalanceTransactionService, + ) + from stripe._customer_funding_instructions_service import ( + CustomerFundingInstructionsService, + ) + from stripe._customer_payment_method_service import ( + CustomerPaymentMethodService, + ) + from stripe._customer_payment_source_service import ( + CustomerPaymentSourceService, + ) + from stripe._customer_tax_id_service import CustomerTaxIdService + from stripe._discount import Discount + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._customer_create_params import CustomerCreateParams + from stripe.params._customer_delete_discount_params import ( + CustomerDeleteDiscountParams, + ) + from stripe.params._customer_delete_params import CustomerDeleteParams + from stripe.params._customer_list_params import CustomerListParams + from stripe.params._customer_retrieve_params import CustomerRetrieveParams + from stripe.params._customer_search_params import CustomerSearchParams + from stripe.params._customer_update_params import CustomerUpdateParams + +_subservices = { + "balance_transactions": [ + "stripe._customer_balance_transaction_service", + "CustomerBalanceTransactionService", + ], + "cash_balance": [ + "stripe._customer_cash_balance_service", + "CustomerCashBalanceService", + ], + "cash_balance_transactions": [ + "stripe._customer_cash_balance_transaction_service", + "CustomerCashBalanceTransactionService", + ], + "funding_instructions": [ + "stripe._customer_funding_instructions_service", + "CustomerFundingInstructionsService", + ], + "payment_methods": [ + "stripe._customer_payment_method_service", + "CustomerPaymentMethodService", + ], + "payment_sources": [ + "stripe._customer_payment_source_service", + "CustomerPaymentSourceService", + ], + "tax_ids": ["stripe._customer_tax_id_service", "CustomerTaxIdService"], +} + + +class CustomerService(StripeService): + balance_transactions: "CustomerBalanceTransactionService" + cash_balance: "CustomerCashBalanceService" + cash_balance_transactions: "CustomerCashBalanceTransactionService" + funding_instructions: "CustomerFundingInstructionsService" + payment_methods: "CustomerPaymentMethodService" + payment_sources: "CustomerPaymentSourceService" + tax_ids: "CustomerTaxIdService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def delete( + self, + customer: str, + params: Optional["CustomerDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + return cast( + "Customer", + self._request( + "delete", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + customer: str, + params: Optional["CustomerDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Permanently deletes a customer. It cannot be undone. Also immediately cancels any active subscriptions on the customer. + """ + return cast( + "Customer", + await self._request_async( + "delete", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + params: Optional["CustomerRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Retrieves a Customer object. + """ + return cast( + "Customer", + self._request( + "get", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + params: Optional["CustomerRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Retrieves a Customer object. + """ + return cast( + "Customer", + await self._request_async( + "get", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + customer: str, + params: Optional["CustomerUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Updates the specified customer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the source parameter, that becomes the customer's active source (e.g., a card) to be used for all charges in the future. When you update a customer to a new valid card source by passing the source parameter: for each of the customer's current subscriptions, if the subscription bills automatically and is in the past_due state, then the latest open invoice for the subscription with automatic collection enabled will be retried. This retry will not count as an automatic retry, and will not affect the next regularly scheduled payment for the invoice. Changing the default_source for a customer will not trigger this behavior. + + This request accepts mostly the same arguments as the customer creation call. + """ + return cast( + "Customer", + self._request( + "post", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + customer: str, + params: Optional["CustomerUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Updates the specified customer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the source parameter, that becomes the customer's active source (e.g., a card) to be used for all charges in the future. When you update a customer to a new valid card source by passing the source parameter: for each of the customer's current subscriptions, if the subscription bills automatically and is in the past_due state, then the latest open invoice for the subscription with automatic collection enabled will be retried. This retry will not count as an automatic retry, and will not affect the next regularly scheduled payment for the invoice. Changing the default_source for a customer will not trigger this behavior. + + This request accepts mostly the same arguments as the customer creation call. + """ + return cast( + "Customer", + await self._request_async( + "post", + "/v1/customers/{customer}".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def delete_discount( + self, + customer: str, + params: Optional["CustomerDeleteDiscountParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + self._request( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_discount_async( + self, + customer: str, + params: Optional["CustomerDeleteDiscountParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Discount": + """ + Removes the currently applied discount on a customer. + """ + return cast( + "Discount", + await self._request_async( + "delete", + "/v1/customers/{customer}/discount".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["CustomerListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Customer]": + """ + Returns a list of your customers. The customers are returned sorted by creation date, with the most recent customers appearing first. + """ + return cast( + "ListObject[Customer]", + self._request( + "get", + "/v1/customers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CustomerListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Customer]": + """ + Returns a list of your customers. The customers are returned sorted by creation date, with the most recent customers appearing first. + """ + return cast( + "ListObject[Customer]", + await self._request_async( + "get", + "/v1/customers", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["CustomerCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Creates a new customer object. + """ + return cast( + "Customer", + self._request( + "post", + "/v1/customers", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["CustomerCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Customer": + """ + Creates a new customer object. + """ + return cast( + "Customer", + await self._request_async( + "post", + "/v1/customers", + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "CustomerSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Customer]": + """ + Search for customers you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Customer]", + self._request( + "get", + "/v1/customers/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "CustomerSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Customer]": + """ + Search for customers you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Customer]", + await self._request_async( + "get", + "/v1/customers/search", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session.py new file mode 100644 index 00000000..b73d0a29 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe.params._customer_session_create_params import ( + CustomerSessionCreateParams, + ) + + +class CustomerSession(CreateableAPIResource["CustomerSession"]): + """ + A Customer Session allows you to grant Stripe's frontend SDKs (like Stripe.js) client-side access + control over a Customer. + + Related guides: [Customer Session with the Payment Element](https://docs.stripe.com/payments/accept-a-payment-deferred?platform=web&type=payment#save-payment-methods), + [Customer Session with the Pricing Table](https://docs.stripe.com/payments/checkout/pricing-table#customer-session), + [Customer Session with the Buy Button](https://docs.stripe.com/payment-links/buy-button#pass-an-existing-customer). + """ + + OBJECT_NAME: ClassVar[Literal["customer_session"]] = "customer_session" + + class Components(StripeObject): + class BuyButton(StripeObject): + enabled: bool + """ + Whether the buy button is enabled. + """ + + class CustomerSheet(StripeObject): + class Features(StripeObject): + payment_method_allow_redisplay_filters: Optional[ + List[Literal["always", "limited", "unspecified"]] + ] + """ + A list of [`allow_redisplay`](https://docs.stripe.com/api/payment_methods/object#payment_method_object-allow_redisplay) values that controls which saved payment methods the customer sheet displays by filtering to only show payment methods with an `allow_redisplay` value that is present in this list. + + If not specified, defaults to ["always"]. In order to display all saved payment methods, specify ["always", "limited", "unspecified"]. + """ + payment_method_remove: Optional[Literal["disabled", "enabled"]] + """ + Controls whether the customer sheet displays the option to remove a saved payment method." + + Allowing buyers to remove their saved payment methods impacts subscriptions that depend on that payment method. Removing the payment method detaches the [`customer` object](https://docs.stripe.com/api/payment_methods/object#payment_method_object-customer) from that [PaymentMethod](https://docs.stripe.com/api/payment_methods). + """ + + enabled: bool + """ + Whether the customer sheet is enabled. + """ + features: Optional[Features] + """ + This hash defines whether the customer sheet supports certain features. + """ + _inner_class_types = {"features": Features} + + class MobilePaymentElement(StripeObject): + class Features(StripeObject): + payment_method_allow_redisplay_filters: Optional[ + List[Literal["always", "limited", "unspecified"]] + ] + """ + A list of [`allow_redisplay`](https://docs.stripe.com/api/payment_methods/object#payment_method_object-allow_redisplay) values that controls which saved payment methods the mobile payment element displays by filtering to only show payment methods with an `allow_redisplay` value that is present in this list. + + If not specified, defaults to ["always"]. In order to display all saved payment methods, specify ["always", "limited", "unspecified"]. + """ + payment_method_redisplay: Optional[ + Literal["disabled", "enabled"] + ] + """ + Controls whether or not the mobile payment element shows saved payment methods. + """ + payment_method_remove: Optional[Literal["disabled", "enabled"]] + """ + Controls whether the mobile payment element displays the option to remove a saved payment method." + + Allowing buyers to remove their saved payment methods impacts subscriptions that depend on that payment method. Removing the payment method detaches the [`customer` object](https://docs.stripe.com/api/payment_methods/object#payment_method_object-customer) from that [PaymentMethod](https://docs.stripe.com/api/payment_methods). + """ + payment_method_save: Optional[Literal["disabled", "enabled"]] + """ + Controls whether the mobile payment element displays a checkbox offering to save a new payment method. + + If a customer checks the box, the [`allow_redisplay`](https://docs.stripe.com/api/payment_methods/object#payment_method_object-allow_redisplay) value on the PaymentMethod is set to `'always'` at confirmation time. For PaymentIntents, the [`setup_future_usage`](https://docs.stripe.com/api/payment_intents/object#payment_intent_object-setup_future_usage) value is also set to the value defined in `payment_method_save_usage`. + """ + payment_method_save_allow_redisplay_override: Optional[ + Literal["always", "limited", "unspecified"] + ] + """ + Allows overriding the value of allow_override when saving a new payment method when payment_method_save is set to disabled. Use values: "always", "limited", or "unspecified". + + If not specified, defaults to `nil` (no override value). + """ + + enabled: bool + """ + Whether the mobile payment element is enabled. + """ + features: Optional[Features] + """ + This hash defines whether the mobile payment element supports certain features. + """ + _inner_class_types = {"features": Features} + + class PaymentElement(StripeObject): + class Features(StripeObject): + payment_method_allow_redisplay_filters: List[ + Literal["always", "limited", "unspecified"] + ] + """ + A list of [`allow_redisplay`](https://docs.stripe.com/api/payment_methods/object#payment_method_object-allow_redisplay) values that controls which saved payment methods the Payment Element displays by filtering to only show payment methods with an `allow_redisplay` value that is present in this list. + + If not specified, defaults to ["always"]. In order to display all saved payment methods, specify ["always", "limited", "unspecified"]. + """ + payment_method_redisplay: Literal["disabled", "enabled"] + """ + Controls whether or not the Payment Element shows saved payment methods. This parameter defaults to `disabled`. + """ + payment_method_redisplay_limit: Optional[int] + """ + Determines the max number of saved payment methods for the Payment Element to display. This parameter defaults to `3`. The maximum redisplay limit is `10`. + """ + payment_method_remove: Literal["disabled", "enabled"] + """ + Controls whether the Payment Element displays the option to remove a saved payment method. This parameter defaults to `disabled`. + + Allowing buyers to remove their saved payment methods impacts subscriptions that depend on that payment method. Removing the payment method detaches the [`customer` object](https://docs.stripe.com/api/payment_methods/object#payment_method_object-customer) from that [PaymentMethod](https://docs.stripe.com/api/payment_methods). + """ + payment_method_save: Literal["disabled", "enabled"] + """ + Controls whether the Payment Element displays a checkbox offering to save a new payment method. This parameter defaults to `disabled`. + + If a customer checks the box, the [`allow_redisplay`](https://docs.stripe.com/api/payment_methods/object#payment_method_object-allow_redisplay) value on the PaymentMethod is set to `'always'` at confirmation time. For PaymentIntents, the [`setup_future_usage`](https://docs.stripe.com/api/payment_intents/object#payment_intent_object-setup_future_usage) value is also set to the value defined in `payment_method_save_usage`. + """ + payment_method_save_usage: Optional[ + Literal["off_session", "on_session"] + ] + """ + When using PaymentIntents and the customer checks the save checkbox, this field determines the [`setup_future_usage`](https://docs.stripe.com/api/payment_intents/object#payment_intent_object-setup_future_usage) value used to confirm the PaymentIntent. + + When using SetupIntents, directly configure the [`usage`](https://docs.stripe.com/api/setup_intents/object#setup_intent_object-usage) value on SetupIntent creation. + """ + + enabled: bool + """ + Whether the Payment Element is enabled. + """ + features: Optional[Features] + """ + This hash defines whether the Payment Element supports certain features. + """ + _inner_class_types = {"features": Features} + + class PricingTable(StripeObject): + enabled: bool + """ + Whether the pricing table is enabled. + """ + + buy_button: BuyButton + """ + This hash contains whether the buy button is enabled. + """ + customer_sheet: CustomerSheet + """ + This hash contains whether the customer sheet is enabled and the features it supports. + """ + mobile_payment_element: MobilePaymentElement + """ + This hash contains whether the mobile payment element is enabled and the features it supports. + """ + payment_element: PaymentElement + """ + This hash contains whether the Payment Element is enabled and the features it supports. + """ + pricing_table: PricingTable + """ + This hash contains whether the pricing table is enabled. + """ + _inner_class_types = { + "buy_button": BuyButton, + "customer_sheet": CustomerSheet, + "mobile_payment_element": MobilePaymentElement, + "payment_element": PaymentElement, + "pricing_table": PricingTable, + } + + client_secret: str + """ + The client secret of this Customer Session. Used on the client to set up secure access to the given `customer`. + + The client secret can be used to provide access to `customer` from your frontend. It should not be stored, logged, or exposed to anyone other than the relevant customer. Make sure that you have TLS enabled on any page that includes the client secret. + """ + components: Optional[Components] + """ + Configuration for the components supported by this Customer Session. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: ExpandableField["Customer"] + """ + The Customer the Customer Session was created for. + """ + expires_at: int + """ + The timestamp at which this Customer Session will expire. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["customer_session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def create( + cls, **params: Unpack["CustomerSessionCreateParams"] + ) -> "CustomerSession": + """ + Creates a Customer Session object that includes a single-use client secret that you can use on your front-end to grant client-side API access for certain customer resources. + """ + return cast( + "CustomerSession", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CustomerSessionCreateParams"] + ) -> "CustomerSession": + """ + Creates a Customer Session object that includes a single-use client secret that you can use on your front-end to grant client-side API access for certain customer resources. + """ + return cast( + "CustomerSession", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + _inner_class_types = {"components": Components} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session_service.py new file mode 100644 index 00000000..83625862 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_session_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer_session import CustomerSession + from stripe._request_options import RequestOptions + from stripe.params._customer_session_create_params import ( + CustomerSessionCreateParams, + ) + + +class CustomerSessionService(StripeService): + def create( + self, + params: "CustomerSessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerSession": + """ + Creates a Customer Session object that includes a single-use client secret that you can use on your front-end to grant client-side API access for certain customer resources. + """ + return cast( + "CustomerSession", + self._request( + "post", + "/v1/customer_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CustomerSessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CustomerSession": + """ + Creates a Customer Session object that includes a single-use client secret that you can use on your front-end to grant client-side API access for certain customer resources. + """ + return cast( + "CustomerSession", + await self._request_async( + "post", + "/v1/customer_sessions", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_customer_tax_id_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_tax_id_service.py new file mode 100644 index 00000000..617c1f89 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_customer_tax_id_service.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._tax_id import TaxId + from stripe.params._customer_tax_id_create_params import ( + CustomerTaxIdCreateParams, + ) + from stripe.params._customer_tax_id_delete_params import ( + CustomerTaxIdDeleteParams, + ) + from stripe.params._customer_tax_id_list_params import ( + CustomerTaxIdListParams, + ) + from stripe.params._customer_tax_id_retrieve_params import ( + CustomerTaxIdRetrieveParams, + ) + + +class CustomerTaxIdService(StripeService): + def delete( + self, + customer: str, + id: str, + params: Optional["CustomerTaxIdDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Deletes an existing tax_id object. + """ + return cast( + "TaxId", + self._request( + "delete", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + customer: str, + id: str, + params: Optional["CustomerTaxIdDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Deletes an existing tax_id object. + """ + return cast( + "TaxId", + await self._request_async( + "delete", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + customer: str, + id: str, + params: Optional["CustomerTaxIdRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Retrieves the tax_id object with the given identifier. + """ + return cast( + "TaxId", + self._request( + "get", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + customer: str, + id: str, + params: Optional["CustomerTaxIdRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Retrieves the tax_id object with the given identifier. + """ + return cast( + "TaxId", + await self._request_async( + "get", + "/v1/customers/{customer}/tax_ids/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + customer: str, + params: Optional["CustomerTaxIdListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxId]": + """ + Returns a list of tax IDs for a customer. + """ + return cast( + "ListObject[TaxId]", + self._request( + "get", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + customer: str, + params: Optional["CustomerTaxIdListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxId]": + """ + Returns a list of tax IDs for a customer. + """ + return cast( + "ListObject[TaxId]", + await self._request_async( + "get", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + customer: str, + params: "CustomerTaxIdCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Creates a new tax_id object for a customer. + """ + return cast( + "TaxId", + self._request( + "post", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + customer: str, + params: "CustomerTaxIdCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Creates a new tax_id object for a customer. + """ + return cast( + "TaxId", + await self._request_async( + "post", + "/v1/customers/{customer}/tax_ids".format( + customer=sanitize_id(customer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_deletable_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_deletable_api_resource.py new file mode 100644 index 00000000..ee23c742 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_deletable_api_resource.py @@ -0,0 +1,23 @@ +from stripe import _util +from stripe._api_resource import APIResource +from urllib.parse import quote_plus +from typing import TypeVar, cast +from stripe._stripe_object import StripeObject + +T = TypeVar("T", bound=StripeObject) + + +class DeletableAPIResource(APIResource[T]): + @classmethod + def _cls_delete(cls, sid, **params) -> T: + url = "%s/%s" % (cls.class_url(), quote_plus(sid)) + return cast(T, cls._static_request("delete", url, params=params)) + + @_util.class_method_variant("_cls_delete") + def delete(self, **params) -> T: + return cast( + T, + self._request_and_refresh( + "delete", self.instance_url(), params=params + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_discount.py b/Backend/venv/lib/python3.12/site-packages/stripe/_discount.py new file mode 100644 index 00000000..1cd39b58 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_discount.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._coupon import Coupon + from stripe._customer import Customer + from stripe._promotion_code import PromotionCode + + +class Discount(StripeObject): + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + OBJECT_NAME: ClassVar[Literal["discount"]] = "discount" + + class Source(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + The coupon that was redeemed to create this discount. + """ + type: Literal["coupon"] + """ + The source type of the discount. + """ + + checkout_session: Optional[str] + """ + The Checkout session that this coupon is applied to, if it is applied to a particular session in payment mode. Will not be present for subscription mode. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the customer associated with this discount. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + end: Optional[int] + """ + If the coupon has a duration of `repeating`, the date that this discount will end. If the coupon has a duration of `once` or `forever`, this attribute will be null. + """ + id: str + """ + The ID of the discount object. Discounts cannot be fetched by ID. Use `expand[]=discounts` in API calls to expand discount IDs in an array. + """ + invoice: Optional[str] + """ + The invoice that the discount's coupon was applied to, if it was applied directly to a particular invoice. + """ + invoice_item: Optional[str] + """ + The invoice item `id` (or invoice line item `id` for invoice line items of type='subscription') that the discount's coupon was applied to, if it was applied directly to a particular invoice item or invoice line item. + """ + object: Literal["discount"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + promotion_code: Optional[ExpandableField["PromotionCode"]] + """ + The promotion code applied to create this discount. + """ + source: Source + start: int + """ + Date that the coupon was applied. + """ + subscription: Optional[str] + """ + The subscription that this coupon is applied to, if it is applied to a particular subscription. + """ + subscription_item: Optional[str] + """ + The subscription item that this coupon is applied to, if it is applied to a particular subscription item. + """ + _inner_class_types = {"source": Source} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_dispute.py b/Backend/venv/lib/python3.12/site-packages/stripe/_dispute.py new file mode 100644 index 00000000..9c519b4a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_dispute.py @@ -0,0 +1,717 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._charge import Charge + from stripe._file import File + from stripe._payment_intent import PaymentIntent + from stripe.params._dispute_close_params import DisputeCloseParams + from stripe.params._dispute_list_params import DisputeListParams + from stripe.params._dispute_modify_params import DisputeModifyParams + from stripe.params._dispute_retrieve_params import DisputeRetrieveParams + + +class Dispute( + ListableAPIResource["Dispute"], UpdateableAPIResource["Dispute"] +): + """ + A dispute occurs when a customer questions your charge with their card issuer. + When this happens, you have the opportunity to respond to the dispute with + evidence that shows that the charge is legitimate. + + Related guide: [Disputes and fraud](https://stripe.com/docs/disputes) + """ + + OBJECT_NAME: ClassVar[Literal["dispute"]] = "dispute" + + class Evidence(StripeObject): + class EnhancedEvidence(StripeObject): + class VisaCompellingEvidence3(StripeObject): + class DisputedTransaction(StripeObject): + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + customer_account_id: Optional[str] + """ + User Account ID used to log into business platform. Must be recognizable by the user. + """ + customer_device_fingerprint: Optional[str] + """ + Unique identifier of the cardholder's device derived from a combination of at least two hardware and software attributes. Must be at least 20 characters. + """ + customer_device_id: Optional[str] + """ + Unique identifier of the cardholder's device such as a device serial number (e.g., International Mobile Equipment Identity [IMEI]). Must be at least 15 characters. + """ + customer_email_address: Optional[str] + """ + The email address of the customer. + """ + customer_purchase_ip: Optional[str] + """ + The IP address that the customer used when making the purchase. + """ + merchandise_or_services: Optional[ + Literal["merchandise", "services"] + ] + """ + Categorization of disputed payment. + """ + product_description: Optional[str] + """ + A description of the product or service that was sold. + """ + shipping_address: Optional[ShippingAddress] + """ + The address to which a physical product was shipped. All fields are required for Visa Compelling Evidence 3.0 evidence submission. + """ + _inner_class_types = {"shipping_address": ShippingAddress} + + class PriorUndisputedTransaction(StripeObject): + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + charge: str + """ + Stripe charge ID for the Visa Compelling Evidence 3.0 eligible prior charge. + """ + customer_account_id: Optional[str] + """ + User Account ID used to log into business platform. Must be recognizable by the user. + """ + customer_device_fingerprint: Optional[str] + """ + Unique identifier of the cardholder's device derived from a combination of at least two hardware and software attributes. Must be at least 20 characters. + """ + customer_device_id: Optional[str] + """ + Unique identifier of the cardholder's device such as a device serial number (e.g., International Mobile Equipment Identity [IMEI]). Must be at least 15 characters. + """ + customer_email_address: Optional[str] + """ + The email address of the customer. + """ + customer_purchase_ip: Optional[str] + """ + The IP address that the customer used when making the purchase. + """ + product_description: Optional[str] + """ + A description of the product or service that was sold. + """ + shipping_address: Optional[ShippingAddress] + """ + The address to which a physical product was shipped. All fields are required for Visa Compelling Evidence 3.0 evidence submission. + """ + _inner_class_types = {"shipping_address": ShippingAddress} + + disputed_transaction: Optional[DisputedTransaction] + """ + Disputed transaction details for Visa Compelling Evidence 3.0 evidence submission. + """ + prior_undisputed_transactions: List[PriorUndisputedTransaction] + """ + List of exactly two prior undisputed transaction objects for Visa Compelling Evidence 3.0 evidence submission. + """ + _inner_class_types = { + "disputed_transaction": DisputedTransaction, + "prior_undisputed_transactions": PriorUndisputedTransaction, + } + + class VisaCompliance(StripeObject): + fee_acknowledged: bool + """ + A field acknowledging the fee incurred when countering a Visa compliance dispute. If this field is set to true, evidence can be submitted for the compliance dispute. Stripe collects a 500 USD (or local equivalent) amount to cover the network costs associated with resolving compliance disputes. Stripe refunds the 500 USD network fee if you win the dispute. + """ + + visa_compelling_evidence_3: Optional[VisaCompellingEvidence3] + visa_compliance: Optional[VisaCompliance] + _inner_class_types = { + "visa_compelling_evidence_3": VisaCompellingEvidence3, + "visa_compliance": VisaCompliance, + } + + access_activity_log: Optional[str] + """ + Any server or activity logs showing proof that the customer accessed or downloaded the purchased digital product. This information should include IP addresses, corresponding timestamps, and any detailed recorded activity. + """ + billing_address: Optional[str] + """ + The billing address provided by the customer. + """ + cancellation_policy: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Your subscription cancellation policy, as shown to the customer. + """ + cancellation_policy_disclosure: Optional[str] + """ + An explanation of how and when the customer was shown your refund policy prior to purchase. + """ + cancellation_rebuttal: Optional[str] + """ + A justification for why the customer's subscription was not canceled. + """ + customer_communication: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Any communication with the customer that you feel is relevant to your case. Examples include emails proving that the customer received the product or service, or demonstrating their use of or satisfaction with the product or service. + """ + customer_email_address: Optional[str] + """ + The email address of the customer. + """ + customer_name: Optional[str] + """ + The name of the customer. + """ + customer_purchase_ip: Optional[str] + """ + The IP address that the customer used when making the purchase. + """ + customer_signature: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) A relevant document or contract showing the customer's signature. + """ + duplicate_charge_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Documentation for the prior charge that can uniquely identify the charge, such as a receipt, shipping label, work order, etc. This document should be paired with a similar document from the disputed payment that proves the two payments are separate. + """ + duplicate_charge_explanation: Optional[str] + """ + An explanation of the difference between the disputed charge versus the prior charge that appears to be a duplicate. + """ + duplicate_charge_id: Optional[str] + """ + The Stripe ID for the prior charge which appears to be a duplicate of the disputed charge. + """ + enhanced_evidence: EnhancedEvidence + product_description: Optional[str] + """ + A description of the product or service that was sold. + """ + receipt: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Any receipt or message sent to the customer notifying them of the charge. + """ + refund_policy: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Your refund policy, as shown to the customer. + """ + refund_policy_disclosure: Optional[str] + """ + Documentation demonstrating that the customer was shown your refund policy prior to purchase. + """ + refund_refusal_explanation: Optional[str] + """ + A justification for why the customer is not entitled to a refund. + """ + service_date: Optional[str] + """ + The date on which the customer received or began receiving the purchased service, in a clear human-readable format. + """ + service_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Documentation showing proof that a service was provided to the customer. This could include a copy of a signed contract, work order, or other form of written agreement. + """ + shipping_address: Optional[str] + """ + The address to which a physical product was shipped. You should try to include as complete address information as possible. + """ + shipping_carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. If multiple carriers were used for this purchase, please separate them with commas. + """ + shipping_date: Optional[str] + """ + The date on which a physical product began its route to the shipping address, in a clear human-readable format. + """ + shipping_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Documentation showing proof that a product was shipped to the customer at the same address the customer provided to you. This could include a copy of the shipment receipt, shipping label, etc. It should show the customer's full shipping address, if possible. + """ + shipping_tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + uncategorized_file: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Any additional evidence or statements. + """ + uncategorized_text: Optional[str] + """ + Any additional evidence or statements. + """ + _inner_class_types = {"enhanced_evidence": EnhancedEvidence} + + class EvidenceDetails(StripeObject): + class EnhancedEligibility(StripeObject): + class VisaCompellingEvidence3(StripeObject): + required_actions: List[ + Literal[ + "missing_customer_identifiers", + "missing_disputed_transaction_description", + "missing_merchandise_or_services", + "missing_prior_undisputed_transaction_description", + "missing_prior_undisputed_transactions", + ] + ] + """ + List of actions required to qualify dispute for Visa Compelling Evidence 3.0 evidence submission. + """ + status: Literal[ + "not_qualified", "qualified", "requires_action" + ] + """ + Visa Compelling Evidence 3.0 eligibility status. + """ + + class VisaCompliance(StripeObject): + status: Literal[ + "fee_acknowledged", "requires_fee_acknowledgement" + ] + """ + Visa compliance eligibility status. + """ + + visa_compelling_evidence_3: Optional[VisaCompellingEvidence3] + visa_compliance: Optional[VisaCompliance] + _inner_class_types = { + "visa_compelling_evidence_3": VisaCompellingEvidence3, + "visa_compliance": VisaCompliance, + } + + due_by: Optional[int] + """ + Date by which evidence must be submitted in order to successfully challenge dispute. Will be 0 if the customer's bank or credit card company doesn't allow a response for this particular dispute. + """ + enhanced_eligibility: EnhancedEligibility + has_evidence: bool + """ + Whether evidence has been staged for this dispute. + """ + past_due: bool + """ + Whether the last evidence submission was submitted past the due date. Defaults to `false` if no evidence submissions have occurred. If `true`, then delivery of the latest evidence is *not* guaranteed. + """ + submission_count: int + """ + The number of times evidence has been submitted. Typically, you may only submit evidence once. + """ + _inner_class_types = {"enhanced_eligibility": EnhancedEligibility} + + class PaymentMethodDetails(StripeObject): + class AmazonPay(StripeObject): + dispute_type: Optional[Literal["chargeback", "claim"]] + """ + The AmazonPay dispute type, chargeback or claim + """ + + class Card(StripeObject): + brand: str + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + case_type: Literal[ + "block", "chargeback", "compliance", "inquiry", "resolution" + ] + """ + The type of dispute opened. Different case types may have varying fees and financial impact. + """ + network_reason_code: Optional[str] + """ + The card network's specific dispute reason code, which maps to one of Stripe's primary dispute categories to simplify response guidance. The [Network code map](https://stripe.com/docs/disputes/categories#network-code-map) lists all available dispute reason codes by network. + """ + + class Klarna(StripeObject): + chargeback_loss_reason_code: Optional[str] + """ + Chargeback loss reason mapped by Stripe from Klarna's chargeback loss reason + """ + reason_code: Optional[str] + """ + The reason for the dispute as defined by Klarna + """ + + class Paypal(StripeObject): + case_id: Optional[str] + """ + The ID of the dispute in PayPal. + """ + reason_code: Optional[str] + """ + The reason for the dispute as defined by PayPal + """ + + amazon_pay: Optional[AmazonPay] + card: Optional[Card] + klarna: Optional[Klarna] + paypal: Optional[Paypal] + type: Literal["amazon_pay", "card", "klarna", "paypal"] + """ + Payment method type. + """ + _inner_class_types = { + "amazon_pay": AmazonPay, + "card": Card, + "klarna": Klarna, + "paypal": Paypal, + } + + amount: int + """ + Disputed amount. Usually the amount of the charge, but it can differ (usually because of currency fluctuation or because only part of the order is disputed). + """ + balance_transactions: List["BalanceTransaction"] + """ + List of zero, one, or two balance transactions that show funds withdrawn and reinstated to your Stripe account as a result of this dispute. + """ + charge: ExpandableField["Charge"] + """ + ID of the charge that's disputed. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + enhanced_eligibility_types: List[ + Literal["visa_compelling_evidence_3", "visa_compliance"] + ] + """ + List of eligibility types that are included in `enhanced_evidence`. + """ + evidence: Evidence + evidence_details: EvidenceDetails + id: str + """ + Unique identifier for the object. + """ + is_charge_refundable: bool + """ + If true, it's still possible to refund the disputed payment. After the payment has been fully refunded, no further funds are withdrawn from your Stripe account as a result of this dispute. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + network_reason_code: Optional[str] + """ + Network-dependent reason code for the dispute. + """ + object: Literal["dispute"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + ID of the PaymentIntent that's disputed. + """ + payment_method_details: Optional[PaymentMethodDetails] + reason: str + """ + Reason given by cardholder for dispute. Possible values are `bank_cannot_process`, `check_returned`, `credit_not_processed`, `customer_initiated`, `debit_not_authorized`, `duplicate`, `fraudulent`, `general`, `incorrect_account_details`, `insufficient_funds`, `noncompliant`, `product_not_received`, `product_unacceptable`, `subscription_canceled`, or `unrecognized`. Learn more about [dispute reasons](https://stripe.com/docs/disputes/categories). + """ + status: Literal[ + "lost", + "needs_response", + "prevented", + "under_review", + "warning_closed", + "warning_needs_response", + "warning_under_review", + "won", + ] + """ + The current status of a dispute. Possible values include:`warning_needs_response`, `warning_under_review`, `warning_closed`, `needs_response`, `under_review`, `won`, `lost`, or `prevented`. + """ + + @classmethod + def _cls_close( + cls, dispute: str, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + cls._static_request( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(dispute) + ), + params=params, + ), + ) + + @overload + @staticmethod + def close( + dispute: str, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + ... + + @overload + def close(self, **params: Unpack["DisputeCloseParams"]) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + ... + + @class_method_variant("_cls_close") + def close( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_close_async( + cls, dispute: str, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + await cls._static_request_async( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(dispute) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def close_async( + dispute: str, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + ... + + @overload + async def close_async( + self, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + ... + + @class_method_variant("_cls_close_async") + async def close_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["DisputeCloseParams"] + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["DisputeListParams"] + ) -> ListObject["Dispute"]: + """ + Returns a list of your disputes. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["DisputeListParams"] + ) -> ListObject["Dispute"]: + """ + Returns a list of your disputes. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["DisputeModifyParams"] + ) -> "Dispute": + """ + When you get a dispute, contacting your customer is always the best first step. If that doesn't work, you can submit evidence to help us resolve the dispute in your favor. You can do this in your [dashboard](https://dashboard.stripe.com/disputes), but if you prefer, you can use the API to submit evidence programmatically. + + Depending on your dispute type, different evidence fields will give you a better chance of winning your dispute. To figure out which evidence fields to provide, see our [guide to dispute types](https://docs.stripe.com/docs/disputes/categories). + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Dispute", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["DisputeModifyParams"] + ) -> "Dispute": + """ + When you get a dispute, contacting your customer is always the best first step. If that doesn't work, you can submit evidence to help us resolve the dispute in your favor. You can do this in your [dashboard](https://dashboard.stripe.com/disputes), but if you prefer, you can use the API to submit evidence programmatically. + + Depending on your dispute type, different evidence fields will give you a better chance of winning your dispute. To figure out which evidence fields to provide, see our [guide to dispute types](https://docs.stripe.com/docs/disputes/categories). + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Dispute", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["DisputeRetrieveParams"] + ) -> "Dispute": + """ + Retrieves the dispute with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["DisputeRetrieveParams"] + ) -> "Dispute": + """ + Retrieves the dispute with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "evidence": Evidence, + "evidence_details": EvidenceDetails, + "payment_method_details": PaymentMethodDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_dispute_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_dispute_service.py new file mode 100644 index 00000000..a6d2a8ce --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_dispute_service.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._dispute import Dispute + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._dispute_close_params import DisputeCloseParams + from stripe.params._dispute_list_params import DisputeListParams + from stripe.params._dispute_retrieve_params import DisputeRetrieveParams + from stripe.params._dispute_update_params import DisputeUpdateParams + + +class DisputeService(StripeService): + def list( + self, + params: Optional["DisputeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Dispute]": + """ + Returns a list of your disputes. + """ + return cast( + "ListObject[Dispute]", + self._request( + "get", + "/v1/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["DisputeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Dispute]": + """ + Returns a list of your disputes. + """ + return cast( + "ListObject[Dispute]", + await self._request_async( + "get", + "/v1/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + dispute: str, + params: Optional["DisputeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Retrieves the dispute with the given ID. + """ + return cast( + "Dispute", + self._request( + "get", + "/v1/disputes/{dispute}".format(dispute=sanitize_id(dispute)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + dispute: str, + params: Optional["DisputeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Retrieves the dispute with the given ID. + """ + return cast( + "Dispute", + await self._request_async( + "get", + "/v1/disputes/{dispute}".format(dispute=sanitize_id(dispute)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + dispute: str, + params: Optional["DisputeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + When you get a dispute, contacting your customer is always the best first step. If that doesn't work, you can submit evidence to help us resolve the dispute in your favor. You can do this in your [dashboard](https://dashboard.stripe.com/disputes), but if you prefer, you can use the API to submit evidence programmatically. + + Depending on your dispute type, different evidence fields will give you a better chance of winning your dispute. To figure out which evidence fields to provide, see our [guide to dispute types](https://docs.stripe.com/docs/disputes/categories). + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/disputes/{dispute}".format(dispute=sanitize_id(dispute)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + dispute: str, + params: Optional["DisputeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + When you get a dispute, contacting your customer is always the best first step. If that doesn't work, you can submit evidence to help us resolve the dispute in your favor. You can do this in your [dashboard](https://dashboard.stripe.com/disputes), but if you prefer, you can use the API to submit evidence programmatically. + + Depending on your dispute type, different evidence fields will give you a better chance of winning your dispute. To figure out which evidence fields to provide, see our [guide to dispute types](https://docs.stripe.com/docs/disputes/categories). + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/disputes/{dispute}".format(dispute=sanitize_id(dispute)), + base_address="api", + params=params, + options=options, + ), + ) + + def close( + self, + dispute: str, + params: Optional["DisputeCloseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def close_async( + self, + dispute: str, + params: Optional["DisputeCloseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Closing the dispute for a charge indicates that you do not have any evidence to submit and are essentially dismissing the dispute, acknowledging it as lost. + + The status of the dispute will change from needs_response to lost. Closing a dispute is irreversible. + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_encode.py b/Backend/venv/lib/python3.12/site-packages/stripe/_encode.py new file mode 100644 index 00000000..8ad5f484 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_encode.py @@ -0,0 +1,56 @@ +import calendar +import datetime +import time +from collections import OrderedDict +from typing import Generator, Optional, Tuple, Any + + +def _encode_datetime(dttime: datetime.datetime): + if dttime.tzinfo and dttime.tzinfo.utcoffset(dttime) is not None: + utc_timestamp = calendar.timegm(dttime.utctimetuple()) + else: + utc_timestamp = time.mktime(dttime.timetuple()) + + return int(utc_timestamp) + + +def _encode_nested_dict(key, data, fmt="%s[%s]"): + d = OrderedDict() + for subkey, subvalue in data.items(): + d[fmt % (key, subkey)] = subvalue + return d + + +def _json_encode_date_callback(value): + if isinstance(value, datetime.datetime): + return _encode_datetime(value) + return value + + +def _api_encode( + data, api_mode: Optional[str] +) -> Generator[Tuple[str, Any], None, None]: + for key, value in data.items(): + if value is None: + continue + elif hasattr(value, "stripe_id"): + yield (key, value.stripe_id) + elif isinstance(value, list) or isinstance(value, tuple): + for i, sv in enumerate(value): + encoded_key = key if api_mode == "V2" else "%s[%d]" % (key, i) + if isinstance(sv, dict): + subdict = _encode_nested_dict(encoded_key, sv) + for k, v in _api_encode(subdict, api_mode): + yield (k, v) + else: + yield (encoded_key, sv) + elif isinstance(value, dict): + subdict = _encode_nested_dict(key, value) + for subkey, subvalue in _api_encode(subdict, api_mode): + yield (subkey, subvalue) + elif isinstance(value, datetime.datetime): + yield (key, _encode_datetime(value)) + elif isinstance(value, bool): + yield (key, str(value).lower()) + else: + yield (key, value) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_entitlements_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_entitlements_service.py new file mode 100644 index 00000000..634a73fc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_entitlements_service.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.entitlements._active_entitlement_service import ( + ActiveEntitlementService, + ) + from stripe.entitlements._feature_service import FeatureService + +_subservices = { + "active_entitlements": [ + "stripe.entitlements._active_entitlement_service", + "ActiveEntitlementService", + ], + "features": ["stripe.entitlements._feature_service", "FeatureService"], +} + + +class EntitlementsService(StripeService): + active_entitlements: "ActiveEntitlementService" + features: "FeatureService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key.py b/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key.py new file mode 100644 index 00000000..830e86b5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._ephemeral_key_delete_params import ( + EphemeralKeyDeleteParams, + ) + + +class EphemeralKey( + CreateableAPIResource["EphemeralKey"], + DeletableAPIResource["EphemeralKey"], +): + OBJECT_NAME: ClassVar[Literal["ephemeral_key"]] = "ephemeral_key" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expires: int + """ + Time at which the key will expire. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["ephemeral_key"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + secret: Optional[str] + """ + The key's secret. You can use this value to make authorized requests to the Stripe API. + """ + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "EphemeralKey", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + ... + + @overload + def delete( + self, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "EphemeralKey", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["EphemeralKeyDeleteParams"] + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def create(cls, **params): + if params.get("stripe_version") is None: + raise ValueError( + "stripe_version must be specified to create an ephemeral key" + ) + + url = cls.class_url() + return cls._static_request( + "post", + url, + params=params, + base_address="api", + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key_service.py new file mode 100644 index 00000000..a8d45b08 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_ephemeral_key_service.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._ephemeral_key import EphemeralKey + from stripe._request_options import RequestOptions + from stripe.params._ephemeral_key_create_params import ( + EphemeralKeyCreateParams, + ) + from stripe.params._ephemeral_key_delete_params import ( + EphemeralKeyDeleteParams, + ) + + +class EphemeralKeyService(StripeService): + def delete( + self, + key: str, + params: Optional["EphemeralKeyDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + return cast( + "EphemeralKey", + self._request( + "delete", + "/v1/ephemeral_keys/{key}".format(key=sanitize_id(key)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + key: str, + params: Optional["EphemeralKeyDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EphemeralKey": + """ + Invalidates a short-lived API key for a given resource. + """ + return cast( + "EphemeralKey", + await self._request_async( + "delete", + "/v1/ephemeral_keys/{key}".format(key=sanitize_id(key)), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["EphemeralKeyCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EphemeralKey": + """ + Creates a short-lived API key for a given resource. + """ + return cast( + "EphemeralKey", + self._request( + "post", + "/v1/ephemeral_keys", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["EphemeralKeyCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "EphemeralKey": + """ + Creates a short-lived API key for a given resource. + """ + return cast( + "EphemeralKey", + await self._request_async( + "post", + "/v1/ephemeral_keys", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_error.py b/Backend/venv/lib/python3.12/site-packages/stripe/_error.py new file mode 100644 index 00000000..76e26bb4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_error.py @@ -0,0 +1,195 @@ +from typing import Dict, Optional, Union, cast + +from stripe._error_object import ErrorObject + + +class StripeError(Exception): + _message: Optional[str] + http_body: Optional[str] + http_status: Optional[int] + json_body: Optional[object] + headers: Optional[Dict[str, str]] + code: Optional[str] + request_id: Optional[str] + error: Optional["ErrorObject"] + + def __init__( + self, + message: Optional[str] = None, + http_body: Optional[Union[bytes, str]] = None, + http_status: Optional[int] = None, + json_body: Optional[object] = None, + headers: Optional[Dict[str, str]] = None, + code: Optional[str] = None, + ): + super(StripeError, self).__init__(message) + + body: Optional[str] = None + if http_body: + # http_body can sometimes be a memoryview which must be cast + # to a "bytes" before calling decode, so we check for the + # decode attribute and then cast + if hasattr(http_body, "decode"): + try: + body = cast(bytes, http_body).decode("utf-8") + except BaseException: + body = ( + "" + ) + elif isinstance(http_body, str): + body = http_body + + self._message = message + self.http_body = body + self.http_status = http_status + self.json_body = json_body + self.headers = headers or {} + self.code = code + self.request_id = self.headers.get("request-id", None) + self.error = self._construct_error_object() + + def __str__(self): + msg = self._message or "" + if self.request_id is not None: + return "Request {0}: {1}".format(self.request_id, msg) + else: + return msg + + # Returns the underlying `Exception` (base class) message, which is usually + # the raw message returned by Stripe's API. This was previously available + # in python2 via `error.message`. Unlike `str(error)`, it omits "Request + # req_..." from the beginning of the string. + @property + def user_message(self): + return self._message + + def __repr__(self): + return "%s(message=%r, http_status=%r, request_id=%r)" % ( + self.__class__.__name__, + self._message, + self.http_status, + self.request_id, + ) + + def _construct_error_object(self) -> Optional[ErrorObject]: + if ( + self.json_body is None + or not isinstance(self.json_body, dict) + or "error" not in self.json_body + or not isinstance(self.json_body["error"], dict) + ): + return None + from stripe._error_object import ErrorObject + from stripe._api_requestor import _APIRequestor + + return ErrorObject._construct_from( + values=self.json_body["error"], + requestor=_APIRequestor._global_instance(), + # We pass in API mode as "V1" here because it's required, + # but ErrorObject is reused for both V1 and V2 errors. + api_mode="V1", + ) + + +class APIError(StripeError): + pass + + +class APIConnectionError(StripeError): + should_retry: bool + + def __init__( + self, + message, + http_body=None, + http_status=None, + json_body=None, + headers=None, + code=None, + should_retry=False, + ): + super(APIConnectionError, self).__init__( + message, http_body, http_status, json_body, headers, code + ) + self.should_retry = should_retry + + +class StripeErrorWithParamCode(StripeError): + def __repr__(self): + return ( + "%s(message=%r, param=%r, code=%r, http_status=%r, " + "request_id=%r)" + % ( + self.__class__.__name__, + self._message, + self.param, # pyright: ignore + self.code, + self.http_status, + self.request_id, + ) + ) + + +class CardError(StripeErrorWithParamCode): + def __init__( + self, + message, + param, + code, + http_body=None, + http_status=None, + json_body=None, + headers=None, + ): + super(CardError, self).__init__( + message, http_body, http_status, json_body, headers, code + ) + self.param = param + + +class IdempotencyError(StripeError): + pass + + +class InvalidRequestError(StripeErrorWithParamCode): + def __init__( + self, + message, + param, + code=None, + http_body=None, + http_status=None, + json_body=None, + headers=None, + ): + super(InvalidRequestError, self).__init__( + message, http_body, http_status, json_body, headers, code + ) + self.param = param + + +class AuthenticationError(StripeError): + pass + + +class PermissionError(StripeError): + pass + + +class RateLimitError(StripeError): + pass + + +class SignatureVerificationError(StripeError): + def __init__(self, message, sig_header, http_body=None): + super(SignatureVerificationError, self).__init__(message, http_body) + self.sig_header = sig_header + + +# classDefinitions: The beginning of the section generated from our OpenAPI spec +class TemporarySessionExpiredError(StripeError): + pass + + +# classDefinitions: The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_error_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/_error_object.py new file mode 100644 index 00000000..9221218b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_error_object.py @@ -0,0 +1,136 @@ +from typing import Optional +from typing_extensions import TYPE_CHECKING +from stripe._util import merge_dicts +from stripe._stripe_object import StripeObject +from stripe._api_mode import ApiMode + +if TYPE_CHECKING: + from stripe._payment_intent import PaymentIntent + from stripe._setup_intent import SetupIntent + from stripe._source import Source + from stripe._payment_method import PaymentMethod + + +class ErrorObject(StripeObject): + charge: Optional[str] + code: Optional[str] + decline_code: Optional[str] + doc_url: Optional[str] + message: Optional[str] + param: Optional[str] + payment_intent: Optional["PaymentIntent"] + payment_method: Optional["PaymentMethod"] + setup_intent: Optional["SetupIntent"] + source: Optional["Source"] + type: str + + def refresh_from( + self, + values, + api_key=None, + partial=False, + stripe_version=None, + stripe_account=None, + last_response=None, + *, + api_mode: ApiMode = "V1", + ): + return self._refresh_from( + values=values, + partial=partial, + last_response=last_response, + requestor=self._requestor._new_requestor_with_options( + { + "api_key": api_key, + "stripe_version": stripe_version, + "stripe_account": stripe_account, + } + ), + api_mode=api_mode, + ) + + def _refresh_from( + self, + *, + values, + partial=False, + last_response=None, + requestor, + api_mode: ApiMode, + ) -> None: + # Unlike most other API resources, the API will omit attributes in + # error objects when they have a null value. We manually set default + # values here to facilitate generic error handling. + values = merge_dicts( + { + "charge": None, + "code": None, + "decline_code": None, + "doc_url": None, + "message": None, + "param": None, + "payment_intent": None, + "payment_method": None, + "setup_intent": None, + "source": None, + "type": None, + }, + values, + ) + return super(ErrorObject, self)._refresh_from( + values=values, + partial=partial, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + + +class OAuthErrorObject(StripeObject): + def refresh_from( + self, + values, + api_key=None, + partial=False, + stripe_version=None, + stripe_account=None, + last_response=None, + *, + api_mode: ApiMode = "V1", + ): + return self._refresh_from( + values=values, + partial=partial, + last_response=last_response, + requestor=self._requestor._new_requestor_with_options( + { + "api_key": api_key, + "stripe_version": stripe_version, + "stripe_account": stripe_account, + } + ), + api_mode=api_mode, + ) + + def _refresh_from( + self, + *, + values, + partial=False, + last_response=None, + requestor, + api_mode: ApiMode, + ) -> None: + # Unlike most other API resources, the API will omit attributes in + # error objects when they have a null value. We manually set default + # values here to facilitate generic error handling. + values = merge_dicts( + {"error": None, "error_description": None}, values + ) + return super(OAuthErrorObject, self)._refresh_from( + values=values, + partial=partial, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/_event.py new file mode 100644 index 00000000..3ba4cbdf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_event.py @@ -0,0 +1,413 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._event_list_params import EventListParams + from stripe.params._event_retrieve_params import EventRetrieveParams + from typing import Any + + +class Event(ListableAPIResource["Event"]): + """ + Snapshot events allow you to track and react to activity in your Stripe integration. When + the state of another API resource changes, Stripe creates an `Event` object that contains + all the relevant information associated with that action, including the affected API + resource. For example, a successful payment triggers a `charge.succeeded` event, which + contains the `Charge` in the event's data property. Some actions trigger multiple events. + For example, if you create a new subscription for a customer, it triggers both a + `customer.subscription.created` event and a `charge.succeeded` event. + + Configure an event destination in your account to listen for events that represent actions + your integration needs to respond to. Additionally, you can retrieve an individual event or + a list of events from the API. + + [Connect](https://docs.stripe.com/connect) platforms can also receive event notifications + that occur in their connected accounts. These events include an account attribute that + identifies the relevant connected account. + + You can access events through the [Retrieve Event API](https://docs.stripe.com/api/events#retrieve_event) + for 30 days. + """ + + OBJECT_NAME: ClassVar[Literal["event"]] = "event" + + class Data(StripeObject): + object: Dict[str, "Any"] + """ + Object containing the API resource relevant to the event. For example, an `invoice.created` event will have a full [invoice object](https://stripe.com/docs/api#invoice_object) as the value of the object key. + """ + previous_attributes: Optional[Dict[str, "Any"]] + """ + Object containing the names of the updated attributes and their values prior to the event (only included in events of type `*.updated`). If an array attribute has any updated elements, this object contains the entire array. In Stripe API versions 2017-04-06 or earlier, an updated array attribute in this object includes only the updated array elements. + """ + + class Request(StripeObject): + id: Optional[str] + """ + ID of the API request that caused the event. If null, the event was automatic (e.g., Stripe's automatic subscription handling). Request logs are available in the [dashboard](https://dashboard.stripe.com/logs), but currently not in the API. + """ + idempotency_key: Optional[str] + """ + The idempotency key transmitted during the request, if any. *Note: This property is populated only for events on or after May 23, 2017*. + """ + + account: Optional[str] + """ + The connected account that originates the event. + """ + api_version: Optional[str] + """ + The Stripe API version used to render `data` when the event was created. The contents of `data` never change, so this value remains static regardless of the API version currently in use. This property is populated only for events created on or after October 31, 2014. + """ + context: Optional[str] + """ + Authentication context needed to fetch the event or related object. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + data: Data + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["event"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + pending_webhooks: int + """ + Number of webhooks that haven't been successfully delivered (for example, to return a 20x response) to the URLs you specify. + """ + request: Optional[Request] + """ + Information on the API request that triggers the event. + """ + type: Literal[ + "account.application.authorized", + "account.application.deauthorized", + "account.external_account.created", + "account.external_account.deleted", + "account.external_account.updated", + "account.updated", + "application_fee.created", + "application_fee.refund.updated", + "application_fee.refunded", + "balance.available", + "balance_settings.updated", + "billing.alert.triggered", + "billing_portal.configuration.created", + "billing_portal.configuration.updated", + "billing_portal.session.created", + "capability.updated", + "cash_balance.funds_available", + "charge.captured", + "charge.dispute.closed", + "charge.dispute.created", + "charge.dispute.funds_reinstated", + "charge.dispute.funds_withdrawn", + "charge.dispute.updated", + "charge.expired", + "charge.failed", + "charge.pending", + "charge.refund.updated", + "charge.refunded", + "charge.succeeded", + "charge.updated", + "checkout.session.async_payment_failed", + "checkout.session.async_payment_succeeded", + "checkout.session.completed", + "checkout.session.expired", + "climate.order.canceled", + "climate.order.created", + "climate.order.delayed", + "climate.order.delivered", + "climate.order.product_substituted", + "climate.product.created", + "climate.product.pricing_updated", + "coupon.created", + "coupon.deleted", + "coupon.updated", + "credit_note.created", + "credit_note.updated", + "credit_note.voided", + "customer.created", + "customer.deleted", + "customer.discount.created", + "customer.discount.deleted", + "customer.discount.updated", + "customer.source.created", + "customer.source.deleted", + "customer.source.expiring", + "customer.source.updated", + "customer.subscription.created", + "customer.subscription.deleted", + "customer.subscription.paused", + "customer.subscription.pending_update_applied", + "customer.subscription.pending_update_expired", + "customer.subscription.resumed", + "customer.subscription.trial_will_end", + "customer.subscription.updated", + "customer.tax_id.created", + "customer.tax_id.deleted", + "customer.tax_id.updated", + "customer.updated", + "customer_cash_balance_transaction.created", + "entitlements.active_entitlement_summary.updated", + "file.created", + "financial_connections.account.created", + "financial_connections.account.deactivated", + "financial_connections.account.disconnected", + "financial_connections.account.reactivated", + "financial_connections.account.refreshed_balance", + "financial_connections.account.refreshed_ownership", + "financial_connections.account.refreshed_transactions", + "identity.verification_session.canceled", + "identity.verification_session.created", + "identity.verification_session.processing", + "identity.verification_session.redacted", + "identity.verification_session.requires_input", + "identity.verification_session.verified", + "invoice.created", + "invoice.deleted", + "invoice.finalization_failed", + "invoice.finalized", + "invoice.marked_uncollectible", + "invoice.overdue", + "invoice.overpaid", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_attempt_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.updated", + "invoice.voided", + "invoice.will_be_due", + "invoice_payment.paid", + "invoiceitem.created", + "invoiceitem.deleted", + "issuing_authorization.created", + "issuing_authorization.request", + "issuing_authorization.updated", + "issuing_card.created", + "issuing_card.updated", + "issuing_cardholder.created", + "issuing_cardholder.updated", + "issuing_dispute.closed", + "issuing_dispute.created", + "issuing_dispute.funds_reinstated", + "issuing_dispute.funds_rescinded", + "issuing_dispute.submitted", + "issuing_dispute.updated", + "issuing_personalization_design.activated", + "issuing_personalization_design.deactivated", + "issuing_personalization_design.rejected", + "issuing_personalization_design.updated", + "issuing_token.created", + "issuing_token.updated", + "issuing_transaction.created", + "issuing_transaction.purchase_details_receipt_updated", + "issuing_transaction.updated", + "mandate.updated", + "payment_intent.amount_capturable_updated", + "payment_intent.canceled", + "payment_intent.created", + "payment_intent.partially_funded", + "payment_intent.payment_failed", + "payment_intent.processing", + "payment_intent.requires_action", + "payment_intent.succeeded", + "payment_link.created", + "payment_link.updated", + "payment_method.attached", + "payment_method.automatically_updated", + "payment_method.detached", + "payment_method.updated", + "payout.canceled", + "payout.created", + "payout.failed", + "payout.paid", + "payout.reconciliation_completed", + "payout.updated", + "person.created", + "person.deleted", + "person.updated", + "plan.created", + "plan.deleted", + "plan.updated", + "price.created", + "price.deleted", + "price.updated", + "product.created", + "product.deleted", + "product.updated", + "promotion_code.created", + "promotion_code.updated", + "quote.accepted", + "quote.canceled", + "quote.created", + "quote.finalized", + "radar.early_fraud_warning.created", + "radar.early_fraud_warning.updated", + "refund.created", + "refund.failed", + "refund.updated", + "reporting.report_run.failed", + "reporting.report_run.succeeded", + "reporting.report_type.updated", + "review.closed", + "review.opened", + "setup_intent.canceled", + "setup_intent.created", + "setup_intent.requires_action", + "setup_intent.setup_failed", + "setup_intent.succeeded", + "sigma.scheduled_query_run.created", + "source.canceled", + "source.chargeable", + "source.failed", + "source.mandate_notification", + "source.refund_attributes_required", + "source.transaction.created", + "source.transaction.updated", + "subscription_schedule.aborted", + "subscription_schedule.canceled", + "subscription_schedule.completed", + "subscription_schedule.created", + "subscription_schedule.expiring", + "subscription_schedule.released", + "subscription_schedule.updated", + "tax.settings.updated", + "tax_rate.created", + "tax_rate.updated", + "terminal.reader.action_failed", + "terminal.reader.action_succeeded", + "terminal.reader.action_updated", + "test_helpers.test_clock.advancing", + "test_helpers.test_clock.created", + "test_helpers.test_clock.deleted", + "test_helpers.test_clock.internal_failure", + "test_helpers.test_clock.ready", + "topup.canceled", + "topup.created", + "topup.failed", + "topup.reversed", + "topup.succeeded", + "transfer.created", + "transfer.reversed", + "transfer.updated", + "treasury.credit_reversal.created", + "treasury.credit_reversal.posted", + "treasury.debit_reversal.completed", + "treasury.debit_reversal.created", + "treasury.debit_reversal.initial_credit_granted", + "treasury.financial_account.closed", + "treasury.financial_account.created", + "treasury.financial_account.features_status_updated", + "treasury.inbound_transfer.canceled", + "treasury.inbound_transfer.created", + "treasury.inbound_transfer.failed", + "treasury.inbound_transfer.succeeded", + "treasury.outbound_payment.canceled", + "treasury.outbound_payment.created", + "treasury.outbound_payment.expected_arrival_date_updated", + "treasury.outbound_payment.failed", + "treasury.outbound_payment.posted", + "treasury.outbound_payment.returned", + "treasury.outbound_payment.tracking_details_updated", + "treasury.outbound_transfer.canceled", + "treasury.outbound_transfer.created", + "treasury.outbound_transfer.expected_arrival_date_updated", + "treasury.outbound_transfer.failed", + "treasury.outbound_transfer.posted", + "treasury.outbound_transfer.returned", + "treasury.outbound_transfer.tracking_details_updated", + "treasury.received_credit.created", + "treasury.received_credit.failed", + "treasury.received_credit.succeeded", + "treasury.received_debit.created", + "billing.credit_balance_transaction.created", + "billing.credit_grant.created", + "billing.credit_grant.updated", + "billing.meter.created", + "billing.meter.deactivated", + "billing.meter.reactivated", + "billing.meter.updated", + ] + """ + Description of the event (for example, `invoice.created` or `charge.refunded`). + """ + + @classmethod + def list(cls, **params: Unpack["EventListParams"]) -> ListObject["Event"]: + """ + List events, going back up to 30 days. Each event data is rendered according to Stripe API version at its creation time, specified in [event object](https://docs.stripe.com/api/events/object) api_version attribute (not according to your current Stripe API version or Stripe-Version header). + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["EventListParams"] + ) -> ListObject["Event"]: + """ + List events, going back up to 30 days. Each event data is rendered according to Stripe API version at its creation time, specified in [event object](https://docs.stripe.com/api/events/object) api_version attribute (not according to your current Stripe API version or Stripe-Version header). + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["EventRetrieveParams"] + ) -> "Event": + """ + Retrieves the details of an event if it was created in the last 30 days. Supply the unique identifier of the event, which you might have received in a webhook. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["EventRetrieveParams"] + ) -> "Event": + """ + Retrieves the details of an event if it was created in the last 30 days. Supply the unique identifier of the event, which you might have received in a webhook. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"data": Data, "request": Request} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_event_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_event_service.py new file mode 100644 index 00000000..f11a9e1e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_event_service.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._event import Event + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._event_list_params import EventListParams + from stripe.params._event_retrieve_params import EventRetrieveParams + + +class EventService(StripeService): + def list( + self, + params: Optional["EventListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Event]": + """ + List events, going back up to 30 days. Each event data is rendered according to Stripe API version at its creation time, specified in [event object](https://docs.stripe.com/api/events/object) api_version attribute (not according to your current Stripe API version or Stripe-Version header). + """ + return cast( + "ListObject[Event]", + self._request( + "get", + "/v1/events", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["EventListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Event]": + """ + List events, going back up to 30 days. Each event data is rendered according to Stripe API version at its creation time, specified in [event object](https://docs.stripe.com/api/events/object) api_version attribute (not according to your current Stripe API version or Stripe-Version header). + """ + return cast( + "ListObject[Event]", + await self._request_async( + "get", + "/v1/events", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["EventRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Retrieves the details of an event if it was created in the last 30 days. Supply the unique identifier of the event, which you might have received in a webhook. + """ + return cast( + "Event", + self._request( + "get", + "/v1/events/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["EventRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Event": + """ + Retrieves the details of an event if it was created in the last 30 days. Supply the unique identifier of the event, which you might have received in a webhook. + """ + return cast( + "Event", + await self._request_async( + "get", + "/v1/events/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate.py b/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate.py new file mode 100644 index 00000000..4e7bdfff --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._util import deprecated +from typing import ClassVar, Dict +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._exchange_rate_list_params import ExchangeRateListParams + from stripe.params._exchange_rate_retrieve_params import ( + ExchangeRateRetrieveParams, + ) + + +class ExchangeRate(ListableAPIResource["ExchangeRate"]): + """ + [Deprecated] The `ExchangeRate` APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + `ExchangeRate` objects allow you to determine the rates that Stripe is currently + using to convert from one currency to another. Since this number is variable + throughout the day, there are various reasons why you might want to know the current + rate (for example, to dynamically price an item for a user with a default + payment in a foreign currency). + + Please refer to our [Exchange Rates API](https://stripe.com/docs/fx-rates) guide for more details. + + *[Note: this integration path is supported but no longer recommended]* Additionally, + you can guarantee that a charge is made with an exchange rate that you expect is + current. To do so, you must pass in the exchange_rate to charges endpoints. If the + value is no longer up to date, the charge won't go through. Please refer to our + [Using with charges](https://stripe.com/docs/exchange-rates) guide for more details. + + ----- + +   + + *This Exchange Rates API is a Beta Service and is subject to Stripe's terms of service. You may use the API solely for the purpose of transacting on Stripe. For example, the API may be queried in order to:* + + - *localize prices for processing payments on Stripe* + - *reconcile Stripe transactions* + - *determine how much money to send to a connected account* + - *determine app fees to charge a connected account* + + *Using this Exchange Rates API beta for any purpose other than to transact on Stripe is strictly prohibited and constitutes a violation of Stripe's terms of service.* + """ + + OBJECT_NAME: ClassVar[Literal["exchange_rate"]] = "exchange_rate" + id: str + """ + Unique identifier for the object. Represented as the three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) in lowercase. + """ + object: Literal["exchange_rate"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + rates: Dict[str, float] + """ + Hash where the keys are supported currencies and the values are the exchange rate at which the base id currency converts to the key currency. + """ + + @classmethod + @deprecated( + "This method is deprecated, please refer to the description for details.", + ) + def list( + cls, **params: Unpack["ExchangeRateListParams"] + ) -> ListObject["ExchangeRate"]: + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Returns a list of objects that contain the rates at which foreign currencies are converted to one another. Only shows the currencies for which Stripe supports. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + @deprecated( + "This method is deprecated, please refer to the description for details.", + ) + async def list_async( + cls, **params: Unpack["ExchangeRateListParams"] + ) -> ListObject["ExchangeRate"]: + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Returns a list of objects that contain the rates at which foreign currencies are converted to one another. Only shows the currencies for which Stripe supports. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + @deprecated( + "This method is deprecated, please refer to the description for details.", + ) + def retrieve( + cls, id: str, **params: Unpack["ExchangeRateRetrieveParams"] + ) -> "ExchangeRate": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Retrieves the exchange rates from the given currency to every supported currency. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + @deprecated( + "This method is deprecated, please refer to the description for details.", + ) + async def retrieve_async( + cls, id: str, **params: Unpack["ExchangeRateRetrieveParams"] + ) -> "ExchangeRate": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Retrieves the exchange rates from the given currency to every supported currency. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate_service.py new file mode 100644 index 00000000..16675be0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_exchange_rate_service.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._exchange_rate import ExchangeRate + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._exchange_rate_list_params import ExchangeRateListParams + from stripe.params._exchange_rate_retrieve_params import ( + ExchangeRateRetrieveParams, + ) + + +class ExchangeRateService(StripeService): + def list( + self, + params: Optional["ExchangeRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ExchangeRate]": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Returns a list of objects that contain the rates at which foreign currencies are converted to one another. Only shows the currencies for which Stripe supports. + """ + return cast( + "ListObject[ExchangeRate]", + self._request( + "get", + "/v1/exchange_rates", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ExchangeRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ExchangeRate]": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Returns a list of objects that contain the rates at which foreign currencies are converted to one another. Only shows the currencies for which Stripe supports. + """ + return cast( + "ListObject[ExchangeRate]", + await self._request_async( + "get", + "/v1/exchange_rates", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + rate_id: str, + params: Optional["ExchangeRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ExchangeRate": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Retrieves the exchange rates from the given currency to every supported currency. + """ + return cast( + "ExchangeRate", + self._request( + "get", + "/v1/exchange_rates/{rate_id}".format( + rate_id=sanitize_id(rate_id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + rate_id: str, + params: Optional["ExchangeRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ExchangeRate": + """ + [Deprecated] The ExchangeRate APIs are deprecated. Please use the [FX Quotes API](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) instead. + + Retrieves the exchange rates from the given currency to every supported currency. + """ + return cast( + "ExchangeRate", + await self._request_async( + "get", + "/v1/exchange_rates/{rate_id}".format( + rate_id=sanitize_id(rate_id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_expandable_field.py b/Backend/venv/lib/python3.12/site-packages/stripe/_expandable_field.py new file mode 100644 index 00000000..6ef126fe --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_expandable_field.py @@ -0,0 +1,4 @@ +from typing import Union, TypeVar + +T = TypeVar("T") +ExpandableField = Union[str, T] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_file.py b/Backend/venv/lib/python3.12/site-packages/stripe/_file.py new file mode 100644 index 00000000..78a81763 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_file.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file_link import FileLink + from stripe.params._file_create_params import FileCreateParams + from stripe.params._file_list_params import FileListParams + from stripe.params._file_retrieve_params import FileRetrieveParams + + +class File(CreateableAPIResource["File"], ListableAPIResource["File"]): + """ + This object represents files hosted on Stripe's servers. You can upload + files with the [create file](https://stripe.com/docs/api#create_file) request + (for example, when uploading dispute evidence). Stripe also + creates files independently (for example, the results of a [Sigma scheduled + query](https://docs.stripe.com/api#scheduled_queries)). + + Related guide: [File upload guide](https://stripe.com/docs/file-upload) + """ + + OBJECT_NAME: ClassVar[Literal["file"]] = "file" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expires_at: Optional[int] + """ + The file expires and isn't available at this time in epoch seconds. + """ + filename: Optional[str] + """ + The suitable name for saving the file to a filesystem. + """ + id: str + """ + Unique identifier for the object. + """ + links: Optional[ListObject["FileLink"]] + """ + A list of [file links](https://stripe.com/docs/api#file_links) that point at this file. + """ + object: Literal["file"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + purpose: Literal[ + "account_requirement", + "additional_verification", + "business_icon", + "business_logo", + "customer_signature", + "dispute_evidence", + "document_provider_identity_document", + "finance_report_run", + "financial_account_statement", + "identity_document", + "identity_document_downloadable", + "issuing_regulatory_reporting", + "pci_document", + "platform_terms_of_service", + "selfie", + "sigma_scheduled_query", + "tax_document_user_upload", + "terminal_android_apk", + "terminal_reader_splashscreen", + ] + """ + The [purpose](https://stripe.com/docs/file-upload#uploading-a-file) of the uploaded file. + """ + size: int + """ + The size of the file object in bytes. + """ + title: Optional[str] + """ + A suitable title for the document. + """ + type: Optional[str] + """ + The returned file type (for example, `csv`, `pdf`, `jpg`, or `png`). + """ + url: Optional[str] + """ + Use your live secret API key to download the file from this URL. + """ + + @classmethod + def create(cls, **params: Unpack["FileCreateParams"]) -> "File": + """ + To upload a file to Stripe, you need to send a request of type multipart/form-data. Include the file you want to upload in the request, and the parameters for creating a file. + + All of Stripe's officially supported Client libraries support sending multipart/form-data. + """ + params["content_type"] = "multipart/form-data" + + return cast( + "File", + cls._static_request( + "post", + cls.class_url(), + params=params, + base_address="files", + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["FileCreateParams"] + ) -> "File": + """ + To upload a file to Stripe, you need to send a request of type multipart/form-data. Include the file you want to upload in the request, and the parameters for creating a file. + + All of Stripe's officially supported Client libraries support sending multipart/form-data. + """ + params["content_type"] = "multipart/form-data" + + return cast( + "File", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + base_address="files", + ), + ) + + @classmethod + def list(cls, **params: Unpack["FileListParams"]) -> ListObject["File"]: + """ + Returns a list of the files that your account has access to. Stripe sorts and returns the files by their creation dates, placing the most recently created files at the top. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["FileListParams"] + ) -> ListObject["File"]: + """ + Returns a list of the files that your account has access to. Stripe sorts and returns the files by their creation dates, placing the most recently created files at the top. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["FileRetrieveParams"] + ) -> "File": + """ + Retrieves the details of an existing file object. After you supply a unique file ID, Stripe returns the corresponding file object. Learn how to [access file contents](https://docs.stripe.com/docs/file-upload#download-file-contents). + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["FileRetrieveParams"] + ) -> "File": + """ + Retrieves the details of an existing file object. After you supply a unique file ID, Stripe returns the corresponding file object. Learn how to [access file contents](https://docs.stripe.com/docs/file-upload#download-file-contents). + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + # This resource can have two different object names. In latter API + # versions, only `file` is used, but since stripe-python may be used with + # any API version, we need to support deserializing the older + # `file_upload` object into the same class. + OBJECT_NAME_ALT = "file_upload" + + @classmethod + def class_url(cls): + return "/v1/files" + + +# For backwards compatibility, the `File` class is aliased to `FileUpload`. +FileUpload = File diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_file_link.py b/Backend/venv/lib/python3.12/site-packages/stripe/_file_link.py new file mode 100644 index 00000000..d72e1489 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_file_link.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe.params._file_link_create_params import FileLinkCreateParams + from stripe.params._file_link_list_params import FileLinkListParams + from stripe.params._file_link_modify_params import FileLinkModifyParams + from stripe.params._file_link_retrieve_params import FileLinkRetrieveParams + + +class FileLink( + CreateableAPIResource["FileLink"], + ListableAPIResource["FileLink"], + UpdateableAPIResource["FileLink"], +): + """ + To share the contents of a `File` object with non-Stripe users, you can + create a `FileLink`. `FileLink`s contain a URL that you can use to + retrieve the contents of the file without authentication. + """ + + OBJECT_NAME: ClassVar[Literal["file_link"]] = "file_link" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + expired: bool + """ + Returns if the link is already expired. + """ + expires_at: Optional[int] + """ + Time that the link expires. + """ + file: ExpandableField["File"] + """ + The file object this link points to. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["file_link"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + url: Optional[str] + """ + The publicly accessible URL to download the file. + """ + + @classmethod + def create(cls, **params: Unpack["FileLinkCreateParams"]) -> "FileLink": + """ + Creates a new file link object. + """ + return cast( + "FileLink", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["FileLinkCreateParams"] + ) -> "FileLink": + """ + Creates a new file link object. + """ + return cast( + "FileLink", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["FileLinkListParams"] + ) -> ListObject["FileLink"]: + """ + Returns a list of file links. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["FileLinkListParams"] + ) -> ListObject["FileLink"]: + """ + Returns a list of file links. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["FileLinkModifyParams"] + ) -> "FileLink": + """ + Updates an existing file link object. Expired links can no longer be updated. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "FileLink", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["FileLinkModifyParams"] + ) -> "FileLink": + """ + Updates an existing file link object. Expired links can no longer be updated. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "FileLink", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["FileLinkRetrieveParams"] + ) -> "FileLink": + """ + Retrieves the file link with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["FileLinkRetrieveParams"] + ) -> "FileLink": + """ + Retrieves the file link with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_file_link_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_file_link_service.py new file mode 100644 index 00000000..8a965380 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_file_link_service.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file_link import FileLink + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._file_link_create_params import FileLinkCreateParams + from stripe.params._file_link_list_params import FileLinkListParams + from stripe.params._file_link_retrieve_params import FileLinkRetrieveParams + from stripe.params._file_link_update_params import FileLinkUpdateParams + + +class FileLinkService(StripeService): + def list( + self, + params: Optional["FileLinkListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[FileLink]": + """ + Returns a list of file links. + """ + return cast( + "ListObject[FileLink]", + self._request( + "get", + "/v1/file_links", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["FileLinkListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[FileLink]": + """ + Returns a list of file links. + """ + return cast( + "ListObject[FileLink]", + await self._request_async( + "get", + "/v1/file_links", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "FileLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Creates a new file link object. + """ + return cast( + "FileLink", + self._request( + "post", + "/v1/file_links", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "FileLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Creates a new file link object. + """ + return cast( + "FileLink", + await self._request_async( + "post", + "/v1/file_links", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + link: str, + params: Optional["FileLinkRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Retrieves the file link with the given ID. + """ + return cast( + "FileLink", + self._request( + "get", + "/v1/file_links/{link}".format(link=sanitize_id(link)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + link: str, + params: Optional["FileLinkRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Retrieves the file link with the given ID. + """ + return cast( + "FileLink", + await self._request_async( + "get", + "/v1/file_links/{link}".format(link=sanitize_id(link)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + link: str, + params: Optional["FileLinkUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Updates an existing file link object. Expired links can no longer be updated. + """ + return cast( + "FileLink", + self._request( + "post", + "/v1/file_links/{link}".format(link=sanitize_id(link)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + link: str, + params: Optional["FileLinkUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "FileLink": + """ + Updates an existing file link object. Expired links can no longer be updated. + """ + return cast( + "FileLink", + await self._request_async( + "post", + "/v1/file_links/{link}".format(link=sanitize_id(link)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_file_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_file_service.py new file mode 100644 index 00000000..7822f15e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_file_service.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._file_create_params import FileCreateParams + from stripe.params._file_list_params import FileListParams + from stripe.params._file_retrieve_params import FileRetrieveParams + + +class FileService(StripeService): + def list( + self, + params: Optional["FileListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[File]": + """ + Returns a list of the files that your account has access to. Stripe sorts and returns the files by their creation dates, placing the most recently created files at the top. + """ + return cast( + "ListObject[File]", + self._request( + "get", + "/v1/files", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["FileListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[File]": + """ + Returns a list of the files that your account has access to. Stripe sorts and returns the files by their creation dates, placing the most recently created files at the top. + """ + return cast( + "ListObject[File]", + await self._request_async( + "get", + "/v1/files", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "FileCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "File": + """ + To upload a file to Stripe, you need to send a request of type multipart/form-data. Include the file you want to upload in the request, and the parameters for creating a file. + + All of Stripe's officially supported Client libraries support sending multipart/form-data. + """ + if options is None: + options = {} + options["content_type"] = "multipart/form-data" + return cast( + "File", + self._request( + "post", + "/v1/files", + base_address="files", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "FileCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "File": + """ + To upload a file to Stripe, you need to send a request of type multipart/form-data. Include the file you want to upload in the request, and the parameters for creating a file. + + All of Stripe's officially supported Client libraries support sending multipart/form-data. + """ + if options is None: + options = {} + options["content_type"] = "multipart/form-data" + return cast( + "File", + await self._request_async( + "post", + "/v1/files", + base_address="files", + params=params, + options=options, + ), + ) + + def retrieve( + self, + file: str, + params: Optional["FileRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "File": + """ + Retrieves the details of an existing file object. After you supply a unique file ID, Stripe returns the corresponding file object. Learn how to [access file contents](https://docs.stripe.com/docs/file-upload#download-file-contents). + """ + return cast( + "File", + self._request( + "get", + "/v1/files/{file}".format(file=sanitize_id(file)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + file: str, + params: Optional["FileRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "File": + """ + Retrieves the details of an existing file object. After you supply a unique file ID, Stripe returns the corresponding file object. Learn how to [access file contents](https://docs.stripe.com/docs/file-upload#download-file-contents). + """ + return cast( + "File", + await self._request_async( + "get", + "/v1/files/{file}".format(file=sanitize_id(file)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_financial_connections_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_financial_connections_service.py new file mode 100644 index 00000000..4be4c3be --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_financial_connections_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.financial_connections._account_service import AccountService + from stripe.financial_connections._session_service import SessionService + from stripe.financial_connections._transaction_service import ( + TransactionService, + ) + +_subservices = { + "accounts": [ + "stripe.financial_connections._account_service", + "AccountService", + ], + "sessions": [ + "stripe.financial_connections._session_service", + "SessionService", + ], + "transactions": [ + "stripe.financial_connections._transaction_service", + "TransactionService", + ], +} + + +class FinancialConnectionsService(StripeService): + accounts: "AccountService" + sessions: "SessionService" + transactions: "TransactionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_forwarding_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_forwarding_service.py new file mode 100644 index 00000000..fa6a34ae --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_forwarding_service.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.forwarding._request_service import RequestService + +_subservices = { + "requests": ["stripe.forwarding._request_service", "RequestService"], +} + + +class ForwardingService(StripeService): + requests: "RequestService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_funding_instructions.py b/Backend/venv/lib/python3.12/site-packages/stripe/_funding_instructions.py new file mode 100644 index 00000000..2ca103b7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_funding_instructions.py @@ -0,0 +1,582 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal + + +class FundingInstructions(StripeObject): + """ + Each customer has a [`balance`](https://stripe.com/docs/api/customers/object#customer_object-balance) that is + automatically applied to future invoices and payments using the `customer_balance` payment method. + Customers can fund this balance by initiating a bank transfer to any account in the + `financial_addresses` field. + Related guide: [Customer balance funding instructions](https://stripe.com/docs/payments/customer-balance/funding-instructions) + """ + + OBJECT_NAME: ClassVar[Literal["funding_instructions"]] = ( + "funding_instructions" + ) + + class BankTransfer(StripeObject): + class FinancialAddress(StripeObject): + class Aba(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + account_number: str + """ + The ABA account number + """ + account_type: str + """ + The account type + """ + bank_address: BankAddress + bank_name: str + """ + The bank name + """ + routing_number: str + """ + The ABA routing number + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Iban(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The name of the person or business that owns the bank account + """ + bank_address: BankAddress + bic: str + """ + The BIC/SWIFT code of the account. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + iban: str + """ + The IBAN of the account. + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class SortCode(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The name of the person or business that owns the bank account + """ + account_number: str + """ + The account number + """ + bank_address: BankAddress + sort_code: str + """ + The six-digit sort code + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Spei(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + bank_address: BankAddress + bank_code: str + """ + The three-digit bank code + """ + bank_name: str + """ + The short banking institution name + """ + clabe: str + """ + The CLABE number + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Swift(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + account_number: str + """ + The account number + """ + account_type: str + """ + The account type + """ + bank_address: BankAddress + bank_name: str + """ + The bank name + """ + swift_code: str + """ + The SWIFT code + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Zengin(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: Optional[str] + """ + The account holder name + """ + account_number: Optional[str] + """ + The account number + """ + account_type: Optional[str] + """ + The bank account type. In Japan, this can only be `futsu` or `toza`. + """ + bank_address: BankAddress + bank_code: Optional[str] + """ + The bank code of the account + """ + bank_name: Optional[str] + """ + The bank name of the account + """ + branch_code: Optional[str] + """ + The branch code of the account + """ + branch_name: Optional[str] + """ + The branch name of the account + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + aba: Optional[Aba] + """ + ABA Records contain U.S. bank account details per the ABA format. + """ + iban: Optional[Iban] + """ + Iban Records contain E.U. bank account details per the SEPA format. + """ + sort_code: Optional[SortCode] + """ + Sort Code Records contain U.K. bank account details per the sort code format. + """ + spei: Optional[Spei] + """ + SPEI Records contain Mexico bank account details per the SPEI format. + """ + supported_networks: Optional[ + List[ + Literal[ + "ach", + "bacs", + "domestic_wire_us", + "fps", + "sepa", + "spei", + "swift", + "zengin", + ] + ] + ] + """ + The payment networks supported by this FinancialAddress + """ + swift: Optional[Swift] + """ + SWIFT Records contain U.S. bank account details per the SWIFT format. + """ + type: Literal[ + "aba", "iban", "sort_code", "spei", "swift", "zengin" + ] + """ + The type of financial address + """ + zengin: Optional[Zengin] + """ + Zengin Records contain Japan bank account details per the Zengin format. + """ + _inner_class_types = { + "aba": Aba, + "iban": Iban, + "sort_code": SortCode, + "spei": Spei, + "swift": Swift, + "zengin": Zengin, + } + + country: str + """ + The country of the bank account to fund + """ + financial_addresses: List[FinancialAddress] + """ + A list of financial addresses that can be used to fund a particular balance + """ + type: Literal["eu_bank_transfer", "jp_bank_transfer"] + """ + The bank_transfer type + """ + _inner_class_types = {"financial_addresses": FinancialAddress} + + bank_transfer: BankTransfer + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + funding_type: Literal["bank_transfer"] + """ + The `funding_type` of the returned instructions + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["funding_instructions"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + _inner_class_types = {"bank_transfer": BankTransfer} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_http_client.py b/Backend/venv/lib/python3.12/site-packages/stripe/_http_client.py new file mode 100644 index 00000000..62fae3eb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_http_client.py @@ -0,0 +1,1546 @@ +from io import BytesIO +import textwrap +import email +import time +import random +import threading +import json +import asyncio +import ssl +from http.client import HTTPResponse + +# Used for global variables +import stripe # noqa: IMP101 +from stripe import _util +from stripe._request_metrics import RequestMetrics +from stripe._error import APIConnectionError + +from typing import ( + Any, + Dict, + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Tuple, + ClassVar, + Union, + cast, + overload, + AsyncIterable, +) +from typing_extensions import ( + TYPE_CHECKING, + Literal, + NoReturn, + TypedDict, + Awaitable, + Never, +) + +if TYPE_CHECKING: + from urllib.parse import ParseResult + + try: + from requests import Session as RequestsSession + except ImportError: + pass + + try: + from httpx import Timeout as HTTPXTimeout + from httpx import Client as HTTPXClientType + except ImportError: + pass + + try: + from aiohttp import ClientTimeout as AIOHTTPTimeout + from aiohttp import StreamReader as AIOHTTPStreamReader + except ImportError: + pass + + +def _now_ms(): + return int(round(time.time() * 1000)) + + +def new_default_http_client(*args: Any, **kwargs: Any) -> "HTTPClient": + """ + This method creates and returns a new HTTPClient based on what libraries are available. It uses the following precedence rules: + + 1. Urlfetch (this is provided by Google App Engine, so if it's present you probably want it) + 2. Requests (popular library, the top priority for all environments outside Google App Engine, but not always present) + 3. Pycurl (another library, not always present, not as preferred as Requests but at least it verifies SSL certs) + 4. urllib with a warning (basically always present, a reasonable final default) + + For performance, it only imports what it's actually going to use. But, it re-calculates every time its called, so probably save its result instead of calling it multiple times. + """ + try: + from google.appengine.api import urlfetch # type: ignore # noqa: F401 + except ImportError: + pass + else: + return UrlFetchClient(*args, **kwargs) + + try: + import requests # noqa: F401 + except ImportError: + pass + else: + return RequestsClient(*args, **kwargs) + + try: + import pycurl # type: ignore # noqa: F401 + except ImportError: + pass + else: + return PycurlClient(*args, **kwargs) + + return UrllibClient(*args, **kwargs) + + +def new_http_client_async_fallback(*args: Any, **kwargs: Any) -> "HTTPClient": + """ + Similar to `new_default_http_client` above, this returns a client that can handle async HTTP requests, if available. + """ + + try: + import httpx # noqa: F401 + import anyio # noqa: F401 + except ImportError: + pass + else: + return HTTPXClient(*args, **kwargs) + + try: + import aiohttp # noqa: F401 + except ImportError: + pass + else: + return AIOHTTPClient(*args, **kwargs) + + return NoImportFoundAsyncClient(*args, **kwargs) + + +class HTTPClient(object): + """ + Base HTTP client that custom clients can inherit from. + """ + + name: ClassVar[str] + + class _Proxy(TypedDict): + http: Optional[str] + https: Optional[str] + + MAX_DELAY = 5 + INITIAL_DELAY = 0.5 + MAX_RETRY_AFTER = 60 + _proxy: Optional[_Proxy] + _verify_ssl_certs: bool + + def __init__( + self, + verify_ssl_certs: bool = True, + proxy: Optional[Union[str, _Proxy]] = None, + async_fallback_client: Optional["HTTPClient"] = None, + _lib=None, # used for internal unit testing + ): + self._verify_ssl_certs = verify_ssl_certs + if proxy: + if isinstance(proxy, str): + proxy = {"http": proxy, "https": proxy} + if not isinstance(proxy, dict): # pyright: ignore[reportUnnecessaryIsInstance] + raise ValueError( + "Proxy(ies) must be specified as either a string " + "URL or a dict() with string URL under the" + " " + "https" + " and/or " + "http" + " keys." + ) + self._proxy = proxy.copy() if proxy else None + self._async_fallback_client = async_fallback_client + + self._thread_local = threading.local() + + def _should_retry( + self, + response: Optional[Tuple[Any, int, Optional[Mapping[str, str]]]], + api_connection_error: Optional[APIConnectionError], + num_retries: int, + max_network_retries: Optional[int], + ): + max_network_retries = ( + max_network_retries if max_network_retries is not None else 0 + ) + if num_retries >= max_network_retries: + return False + + if response is None: + # We generally want to retry on timeout and connection + # exceptions, but defer this decision to underlying subclass + # implementations. They should evaluate the driver-specific + # errors worthy of retries, and set flag on the error returned. + assert api_connection_error is not None + return api_connection_error.should_retry + + _, status_code, rheaders = response + + # The API may ask us not to retry (eg; if doing so would be a no-op) + # or advise us to retry (eg; in cases of lock timeouts); we defer to that. + # + # Note that we expect the headers object to be a CaseInsensitiveDict, as is the case with the requests library. + if rheaders is not None and "stripe-should-retry" in rheaders: + if rheaders["stripe-should-retry"] == "false": + return False + if rheaders["stripe-should-retry"] == "true": + return True + + # Retry on conflict errors. + if status_code == 409: + return True + + # Retry on 500, 503, and other internal errors. + # + # Note that we expect the stripe-should-retry header to be false + # in most cases when a 500 is returned, since our idempotency framework + # would typically replay it anyway. + if status_code >= 500: + return True + + return False + + def _retry_after_header( + self, response: Optional[Tuple[Any, Any, Mapping[str, str]]] = None + ): + if response is None: + return None + _, _, rheaders = response + + try: + return int(rheaders["retry-after"]) + except (KeyError, ValueError): + return None + + def _sleep_time_seconds( + self, + num_retries: int, + response: Optional[Tuple[Any, Any, Mapping[str, str]]] = None, + ) -> float: + """ + Apply exponential backoff with initial_network_retry_delay on the number of num_retries so far as inputs. + Do not allow the number to exceed `max_network_retry_delay`. + """ + sleep_seconds = min( + HTTPClient.INITIAL_DELAY * (2 ** (num_retries - 1)), + HTTPClient.MAX_DELAY, + ) + + sleep_seconds = self._add_jitter_time(sleep_seconds) + + # But never sleep less than the base sleep seconds. + sleep_seconds = max(HTTPClient.INITIAL_DELAY, sleep_seconds) + + # And never sleep less than the time the API asks us to wait, assuming it's a reasonable ask. + retry_after = self._retry_after_header(response) or 0 + if retry_after <= HTTPClient.MAX_RETRY_AFTER: + sleep_seconds = max(retry_after, sleep_seconds) + + return sleep_seconds + + def _add_jitter_time(self, sleep_seconds: float) -> float: + """ + Randomize the value in `[(sleep_seconds/ 2) to (sleep_seconds)]`. + Also separated method here to isolate randomness for tests + """ + sleep_seconds *= 0.5 * (1 + random.uniform(0, 1)) + return sleep_seconds + + def _add_telemetry_header( + self, headers: Mapping[str, str] + ) -> Mapping[str, str]: + last_request_metrics = getattr( + self._thread_local, "last_request_metrics", None + ) + if stripe.enable_telemetry and last_request_metrics: + telemetry = { + "last_request_metrics": last_request_metrics.payload() + } + ret = dict(headers) + ret["X-Stripe-Client-Telemetry"] = json.dumps(telemetry) + return ret + return headers + + def _record_request_metrics(self, response, request_start, usage): + _, _, rheaders = response + if "Request-Id" in rheaders and stripe.enable_telemetry: + request_id = rheaders["Request-Id"] + request_duration_ms = _now_ms() - request_start + self._thread_local.last_request_metrics = RequestMetrics( + request_id, request_duration_ms, usage=usage + ) + + def request_with_retries( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data: Any = None, + max_network_retries: Optional[int] = None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[str, int, Mapping[str, str]]: + return self._request_with_retries_internal( + method, + url, + headers, + post_data, + is_streaming=False, + max_network_retries=max_network_retries, + _usage=_usage, + ) + + def request_stream_with_retries( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + max_network_retries=None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Mapping[str, str]]: + return self._request_with_retries_internal( + method, + url, + headers, + post_data, + is_streaming=True, + max_network_retries=max_network_retries, + _usage=_usage, + ) + + def _request_with_retries_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data: Any, + is_streaming: bool, + max_network_retries: Optional[int], + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Mapping[str, str]]: + headers = self._add_telemetry_header(headers) + + num_retries = 0 + + while True: + request_start = _now_ms() + + try: + if is_streaming: + response = self.request_stream( + method, url, headers, post_data + ) + else: + response = self.request(method, url, headers, post_data) + connection_error = None + except APIConnectionError as e: + connection_error = e + response = None + + if self._should_retry( + response, connection_error, num_retries, max_network_retries + ): + if connection_error: + _util.log_info( + "Encountered a retryable error %s" + % connection_error.user_message + ) + num_retries += 1 + sleep_time = self._sleep_time_seconds(num_retries, response) + _util.log_info( + ( + "Initiating retry %i for request %s %s after " + "sleeping %.2f seconds." + % (num_retries, method, url, sleep_time) + ) + ) + time.sleep(sleep_time) + else: + if response is not None: + self._record_request_metrics( + response, request_start, usage=_usage + ) + + return response + else: + assert connection_error is not None + raise connection_error + + def request( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data: Any = None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[str, int, Mapping[str, str]]: + raise NotImplementedError( + "HTTPClient subclasses must implement `request`" + ) + + def request_stream( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data: Any = None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Mapping[str, str]]: + raise NotImplementedError( + "HTTPClient subclasses must implement `request_stream`" + ) + + def close(self): + raise NotImplementedError( + "HTTPClient subclasses must implement `close`" + ) + + async def request_with_retries_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + max_network_retries: Optional[int] = None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Any]: + return await self._request_with_retries_internal_async( + method, + url, + headers, + post_data, + is_streaming=False, + max_network_retries=max_network_retries, + _usage=_usage, + ) + + async def request_stream_with_retries_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + max_network_retries=None, + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[AsyncIterable[bytes], int, Any]: + return await self._request_with_retries_internal_async( + method, + url, + headers, + post_data, + is_streaming=True, + max_network_retries=max_network_retries, + _usage=_usage, + ) + + @overload + async def _request_with_retries_internal_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[False], + max_network_retries: Optional[int], + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Mapping[str, str]]: ... + + @overload + async def _request_with_retries_internal_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[True], + max_network_retries: Optional[int], + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[AsyncIterable[bytes], int, Mapping[str, str]]: ... + + async def _request_with_retries_internal_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: bool, + max_network_retries: Optional[int], + *, + _usage: Optional[List[str]] = None, + ) -> Tuple[Any, int, Mapping[str, str]]: + headers = self._add_telemetry_header(headers) + + num_retries = 0 + + while True: + request_start = _now_ms() + + try: + if is_streaming: + response = await self.request_stream_async( + method, url, headers, post_data + ) + else: + response = await self.request_async( + method, url, headers, post_data + ) + connection_error = None + except APIConnectionError as e: + connection_error = e + response = None + + if self._should_retry( + response, connection_error, num_retries, max_network_retries + ): + if connection_error: + _util.log_info( + "Encountered a retryable error %s" + % connection_error.user_message + ) + num_retries += 1 + sleep_time = self._sleep_time_seconds(num_retries, response) + _util.log_info( + ( + "Initiating retry %i for request %s %s after " + "sleeping %.2f seconds." + % (num_retries, method, url, sleep_time) + ) + ) + await self.sleep_async(sleep_time) + else: + if response is not None: + self._record_request_metrics( + response, request_start, usage=_usage + ) + + return response + else: + assert connection_error is not None + raise connection_error + + async def request_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[bytes, int, Mapping[str, str]]: + if self._async_fallback_client is not None: + return await self._async_fallback_client.request_async( + method, url, headers, post_data + ) + raise NotImplementedError( + "HTTPClient subclasses must implement `request_async`" + ) + + async def request_stream_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[AsyncIterable[bytes], int, Mapping[str, str]]: + if self._async_fallback_client is not None: + return await self._async_fallback_client.request_stream_async( + method, url, headers, post_data + ) + raise NotImplementedError( + "HTTPClient subclasses must implement `request_stream_async`" + ) + + async def close_async(self): + if self._async_fallback_client is not None: + return await self._async_fallback_client.close_async() + raise NotImplementedError( + "HTTPClient subclasses must implement `close_async`" + ) + + def sleep_async(self, secs: float) -> Awaitable[None]: + if self._async_fallback_client is not None: + return self._async_fallback_client.sleep_async(secs) + raise NotImplementedError( + "HTTPClient subclasses must implement `sleep`" + ) + + +class RequestsClient(HTTPClient): + name = "requests" + + def __init__( + self, + timeout: Union[float, Tuple[float, float]] = 80, + session: Optional["RequestsSession"] = None, + verify_ssl_certs: bool = True, + proxy: Optional[Union[str, HTTPClient._Proxy]] = None, + async_fallback_client: Optional[HTTPClient] = None, + _lib=None, # used for internal unit testing + **kwargs, + ): + super(RequestsClient, self).__init__( + verify_ssl_certs=verify_ssl_certs, + proxy=proxy, + async_fallback_client=async_fallback_client, + ) + self._session = session + self._timeout = timeout + + if _lib is None: + import requests + + _lib = requests + + self.requests = _lib + + def request( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data=None, + ) -> Tuple[bytes, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=False + ) + + def request_stream( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data=None, + ) -> Tuple[Any, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=True + ) + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data, + is_streaming: Literal[True], + ) -> Tuple[Any, int, Mapping[str, str]]: ... + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data, + is_streaming: Literal[False], + ) -> Tuple[bytes, int, Mapping[str, str]]: ... + + def _request_internal( + self, + method: str, + url: str, + headers: Optional[Mapping[str, str]], + post_data, + is_streaming: bool, + ) -> Tuple[Union[bytes, Any], int, Mapping[str, str]]: + kwargs = {} + if self._verify_ssl_certs: + kwargs["verify"] = stripe.ca_bundle_path + else: + kwargs["verify"] = False + + if self._proxy: + kwargs["proxies"] = self._proxy + + if is_streaming: + kwargs["stream"] = True + + if getattr(self._thread_local, "session", None) is None: + self._thread_local.session = ( + self._session or self.requests.Session() + ) + + try: + try: + result = cast( + "RequestsSession", self._thread_local.session + ).request( + method, + url, + headers=headers, + data=post_data, + timeout=self._timeout, + **kwargs, + ) + except TypeError as e: + raise TypeError( + "Warning: It looks like your installed version of the " + '"requests" library is not compatible with Stripe\'s ' + "usage thereof. (HINT: The most likely cause is that " + 'your "requests" library is out of date. You can fix ' + 'that by running "pip install -U requests".) The ' + "underlying error was: %s" % (e,) + ) + + if is_streaming: + content = result.raw + else: + # This causes the content to actually be read, which could cause + # e.g. a socket timeout. TODO: The other fetch methods probably + # are susceptible to the same and should be updated. + content = result.content + + status_code = result.status_code + except Exception as e: + # Would catch just requests.exceptions.RequestException, but can + # also raise ValueError, RuntimeError, etc. + self._handle_request_error(e) + + return content, status_code, result.headers + + def _handle_request_error(self, e: Exception) -> NoReturn: + # Catch SSL error first as it belongs to ConnectionError, + # but we don't want to retry + if isinstance(e, self.requests.exceptions.SSLError): + msg = ( + "Could not verify Stripe's SSL certificate. Please make " + "sure that your network is not intercepting certificates. " + "If this problem persists, let us know at " + "support@stripe.com." + ) + err = "%s: %s" % (type(e).__name__, str(e)) + should_retry = False + # Retry only timeout and connect errors; similar to urllib3 Retry + elif isinstance( + e, + ( + self.requests.exceptions.Timeout, + self.requests.exceptions.ConnectionError, + ), + ): + msg = ( + "Unexpected error communicating with Stripe. " + "If this problem persists, let us know at " + "support@stripe.com." + ) + err = "%s: %s" % (type(e).__name__, str(e)) + should_retry = True + # Catch remaining request exceptions + elif isinstance(e, self.requests.exceptions.RequestException): + msg = ( + "Unexpected error communicating with Stripe. " + "If this problem persists, let us know at " + "support@stripe.com." + ) + err = "%s: %s" % (type(e).__name__, str(e)) + should_retry = False + else: + msg = ( + "Unexpected error communicating with Stripe. " + "It looks like there's probably a configuration " + "issue locally. If this problem persists, let us " + "know at support@stripe.com." + ) + err = "A %s was raised" % (type(e).__name__,) + if str(e): + err += " with error message %s" % (str(e),) + else: + err += " with no error message" + should_retry = False + + msg = textwrap.fill(msg) + "\n\n(Network error: %s)" % (err,) + raise APIConnectionError(msg, should_retry=should_retry) from e + + def close(self): + if getattr(self._thread_local, "session", None) is not None: + self._thread_local.session.close() + + +class UrlFetchClient(HTTPClient): + name = "urlfetch" + + def __init__( + self, + verify_ssl_certs: bool = True, + proxy: Optional[HTTPClient._Proxy] = None, + deadline: int = 55, + async_fallback_client: Optional[HTTPClient] = None, + _lib=None, # used for internal unit testing + ): + super(UrlFetchClient, self).__init__( + verify_ssl_certs=verify_ssl_certs, + proxy=proxy, + async_fallback_client=async_fallback_client, + ) + + # no proxy support in urlfetch. for a patch, see: + # https://code.google.com/p/googleappengine/issues/detail?id=544 + if proxy: + raise ValueError( + "No proxy support in urlfetch library. " + "Set stripe.default_http_client to either RequestsClient, " + "PycurlClient, or UrllibClient instance to use a proxy." + ) + + self._verify_ssl_certs = verify_ssl_certs + # GAE requests time out after 60 seconds, so make sure to default + # to 55 seconds to allow for a slow Stripe + self._deadline = deadline + + if _lib is None: + from google.appengine.api import urlfetch # pyright: ignore + + _lib = urlfetch + + self.urlfetch = _lib + + def request( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[str, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=False + ) + + def request_stream( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[BytesIO, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=True + ) + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[True], + ) -> Tuple[BytesIO, int, Any]: ... + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[False], + ) -> Tuple[str, int, Any]: ... + + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming, + ): + try: + result = self.urlfetch.fetch( + url=url, + method=method, + headers=headers, + # Google App Engine doesn't let us specify our own cert bundle. + # However, that's ok because the CA bundle they use recognizes + # api.stripe.com. + validate_certificate=self._verify_ssl_certs, + deadline=self._deadline, + payload=post_data, + ) + except self.urlfetch.Error as e: + self._handle_request_error(e, url) + + if is_streaming: + # This doesn't really stream. + content = BytesIO(str.encode(result.content)) + else: + content = result.content + + return content, result.status_code, result.headers + + def _handle_request_error(self, e: Exception, url: str) -> NoReturn: + if isinstance(e, self.urlfetch.InvalidURLError): + msg = ( + "The Stripe library attempted to fetch an " + "invalid URL (%r). This is likely due to a bug " + "in the Stripe Python bindings. Please let us know " + "at support@stripe.com." % (url,) + ) + elif isinstance(e, self.urlfetch.DownloadError): + msg = "There was a problem retrieving data from Stripe." + elif isinstance(e, self.urlfetch.ResponseTooLargeError): + msg = ( + "There was a problem receiving all of your data from " + "Stripe. This is likely due to a bug in Stripe. " + "Please let us know at support@stripe.com." + ) + else: + msg = ( + "Unexpected error communicating with Stripe. If this " + "problem persists, let us know at support@stripe.com." + ) + + msg = textwrap.fill(msg) + "\n\n(Network error: " + str(e) + ")" + raise APIConnectionError(msg) from e + + def close(self): + pass + + +class _Proxy(TypedDict): + http: Optional["ParseResult"] + https: Optional["ParseResult"] + + +class PycurlClient(HTTPClient): + class _ParsedProxy(TypedDict, total=False): + http: Optional["ParseResult"] + https: Optional["ParseResult"] + + name = "pycurl" + _parsed_proxy: Optional[_ParsedProxy] + + def __init__( + self, + verify_ssl_certs: bool = True, + proxy: Optional[HTTPClient._Proxy] = None, + async_fallback_client: Optional[HTTPClient] = None, + _lib=None, # used for internal unit testing + ): + super(PycurlClient, self).__init__( + verify_ssl_certs=verify_ssl_certs, + proxy=proxy, + async_fallback_client=async_fallback_client, + ) + + if _lib is None: + import pycurl # pyright: ignore[reportMissingModuleSource] + + _lib = pycurl + + self.pycurl = _lib + # Initialize this within the object so that we can reuse connections. + self._curl = _lib.Curl() + + self._parsed_proxy = {} + # need to urlparse the proxy, since PyCurl + # consumes the proxy url in small pieces + if self._proxy: + from urllib.parse import urlparse + + proxy_ = self._proxy + for scheme, value in proxy_.items(): + # In general, TypedDict.items() gives you (key: str, value: object) + # but we know value to be a string because all the value types on Proxy_ are strings. + self._parsed_proxy[scheme] = urlparse(cast(str, value)) + + def parse_headers(self, data): + if "\r\n" not in data: + return {} + raw_headers = data.split("\r\n", 1)[1] + headers = email.message_from_string(raw_headers) + return dict((k.lower(), v) for k, v in dict(headers).items()) + + def request( + self, method, url, headers: Mapping[str, str], post_data=None + ) -> Tuple[str, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=False + ) + + def request_stream( + self, method, url, headers: Mapping[str, str], post_data=None + ) -> Tuple[BytesIO, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=True + ) + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[True], + ) -> Tuple[BytesIO, int, Any]: ... + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[False], + ) -> Tuple[str, int, Mapping[str, str]]: ... + + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming, + ) -> Tuple[Union[str, BytesIO], int, Mapping[str, str]]: + b = BytesIO() + rheaders = BytesIO() + + # Pycurl's design is a little weird: although we set per-request + # options on this object, it's also capable of maintaining established + # connections. Here we call reset() between uses to make sure it's in a + # pristine state, but notably reset() doesn't reset connections, so we + # still get to take advantage of those by virtue of re-using the same + # object. + self._curl.reset() + + proxy = self._get_proxy(url) + if proxy: + if proxy.hostname: + self._curl.setopt(self.pycurl.PROXY, proxy.hostname) + if proxy.port: + self._curl.setopt(self.pycurl.PROXYPORT, proxy.port) + if proxy.username or proxy.password: + self._curl.setopt( + self.pycurl.PROXYUSERPWD, + "%s:%s" % (proxy.username, proxy.password), + ) + + if method == "get": + self._curl.setopt(self.pycurl.HTTPGET, 1) + elif method == "post": + self._curl.setopt(self.pycurl.POST, 1) + self._curl.setopt(self.pycurl.POSTFIELDS, post_data) + else: + self._curl.setopt(self.pycurl.CUSTOMREQUEST, method.upper()) + + # pycurl doesn't like unicode URLs + self._curl.setopt(self.pycurl.URL, url) + + self._curl.setopt(self.pycurl.WRITEFUNCTION, b.write) + self._curl.setopt(self.pycurl.HEADERFUNCTION, rheaders.write) + self._curl.setopt(self.pycurl.NOSIGNAL, 1) + self._curl.setopt(self.pycurl.CONNECTTIMEOUT, 30) + self._curl.setopt(self.pycurl.TIMEOUT, 80) + self._curl.setopt( + self.pycurl.HTTPHEADER, + ["%s: %s" % (k, v) for k, v in dict(headers).items()], + ) + if self._verify_ssl_certs: + self._curl.setopt(self.pycurl.CAINFO, stripe.ca_bundle_path) + else: + self._curl.setopt(self.pycurl.SSL_VERIFYHOST, False) + + try: + self._curl.perform() + except self.pycurl.error as e: + self._handle_request_error(e) + + if is_streaming: + b.seek(0) + rcontent = b + else: + rcontent = b.getvalue().decode("utf-8") + + rcode = self._curl.getinfo(self.pycurl.RESPONSE_CODE) + headers = self.parse_headers(rheaders.getvalue().decode("utf-8")) + + return rcontent, rcode, headers + + def _handle_request_error(self, e: Exception) -> NoReturn: + if e.args[0] in [ + self.pycurl.E_COULDNT_CONNECT, + self.pycurl.E_COULDNT_RESOLVE_HOST, + self.pycurl.E_OPERATION_TIMEOUTED, + ]: + msg = ( + "Could not connect to Stripe. Please check your " + "internet connection and try again. If this problem " + "persists, you should check Stripe's service status at " + "https://twitter.com/stripestatus, or let us know at " + "support@stripe.com." + ) + should_retry = True + elif e.args[0] in [ + self.pycurl.E_SSL_CACERT, + self.pycurl.E_SSL_PEER_CERTIFICATE, + ]: + msg = ( + "Could not verify Stripe's SSL certificate. Please make " + "sure that your network is not intercepting certificates. " + "If this problem persists, let us know at " + "support@stripe.com." + ) + should_retry = False + else: + msg = ( + "Unexpected error communicating with Stripe. If this " + "problem persists, let us know at support@stripe.com." + ) + should_retry = False + + msg = textwrap.fill(msg) + "\n\n(Network error: " + e.args[1] + ")" + raise APIConnectionError(msg, should_retry=should_retry) from e + + def _get_proxy(self, url) -> Optional["ParseResult"]: + if self._parsed_proxy: + proxy = self._parsed_proxy + scheme = url.split(":")[0] if url else None + if scheme: + return proxy.get(scheme, proxy.get(scheme[0:-1])) + return None + + def close(self): + pass + + +class UrllibClient(HTTPClient): + name = "urllib.request" + + def __init__( + self, + verify_ssl_certs: bool = True, + proxy: Optional[HTTPClient._Proxy] = None, + async_fallback_client: Optional[HTTPClient] = None, + _lib=None, # used for internal unit testing + ): + super(UrllibClient, self).__init__( + verify_ssl_certs=verify_ssl_certs, + proxy=proxy, + async_fallback_client=async_fallback_client, + ) + + if _lib is None: + import urllib.request as urllibrequest + + _lib = urllibrequest + self.urllibrequest = _lib + + import urllib.error as urlliberror + + self.urlliberror = urlliberror + + # prepare and cache proxy tied opener here + self._opener = None + if self._proxy: + # We have to cast _Proxy to Dict[str, str] because pyright is not smart enough to + # realize that all the value types are str. + proxy_handler = self.urllibrequest.ProxyHandler( + cast(Dict[str, str], self._proxy) + ) + self._opener = self.urllibrequest.build_opener(proxy_handler) + + def request( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[str, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=False + ) + + def request_stream( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[HTTPResponse, int, Mapping[str, str]]: + return self._request_internal( + method, url, headers, post_data, is_streaming=True + ) + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[False], + ) -> Tuple[str, int, Any]: ... + + @overload + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming: Literal[True], + ) -> Tuple[HTTPResponse, int, Any]: ... + + def _request_internal( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data, + is_streaming, + ): + if isinstance(post_data, str): + post_data = post_data.encode("utf-8") + + req = self.urllibrequest.Request( + url, post_data, cast(MutableMapping[str, str], headers) + ) + + if method not in ("get", "post"): + req.get_method = lambda: method.upper() + + try: + # use the custom proxy tied opener, if any. + # otherwise, fall to the default urllib opener. + response = ( + self._opener.open(req) + if self._opener + else self.urllibrequest.urlopen(req) + ) + + if is_streaming: + rcontent = response + else: + rcontent = response.read() + + rcode = response.code + headers = dict(response.info()) + except self.urlliberror.HTTPError as e: + rcode = e.code + rcontent = e.read() + headers = dict(e.info()) + except (self.urlliberror.URLError, ValueError) as e: + self._handle_request_error(e) + lh = dict((k.lower(), v) for k, v in iter(dict(headers).items())) + return rcontent, rcode, lh + + def _handle_request_error(self, e: Exception) -> NoReturn: + msg = ( + "Unexpected error communicating with Stripe. " + "If this problem persists, let us know at support@stripe.com." + ) + msg = textwrap.fill(msg) + "\n\n(Network error: " + str(e) + ")" + raise APIConnectionError(msg) from e + + def close(self): + pass + + +class HTTPXClient(HTTPClient): + name = "httpx" + + _client: Optional["HTTPXClientType"] + + def __init__( + self, + timeout: Optional[Union[float, "HTTPXTimeout"]] = 80, + allow_sync_methods=False, + _lib=None, # used for internal unit testing + **kwargs, + ): + super(HTTPXClient, self).__init__(**kwargs) + + if _lib is None: + import httpx + + _lib = httpx + self.httpx = _lib + + import anyio + + self.anyio = anyio + + kwargs = {} + if self._verify_ssl_certs: + kwargs["verify"] = ssl.create_default_context( + cafile=stripe.ca_bundle_path + ) + else: + kwargs["verify"] = False + + self._client_async = self.httpx.AsyncClient(**kwargs) + self._client = None + if allow_sync_methods: + self._client = self.httpx.Client(**kwargs) + self._timeout = timeout + + def sleep_async(self, secs): + return self.anyio.sleep(secs) + + def _get_request_args_kwargs( + self, method: str, url: str, headers: Mapping[str, str], post_data + ): + kwargs = {} + + if self._proxy: + kwargs["proxies"] = self._proxy + + if self._timeout: + kwargs["timeout"] = self._timeout + return [ + (method, url), + {"headers": headers, "data": post_data or {}, **kwargs}, + ] + + def request( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + ) -> Tuple[bytes, int, Mapping[str, str]]: + if self._client is None: + raise RuntimeError( + "Stripe: HTTPXClient was initialized with allow_sync_methods=False, " + "so it cannot be used for synchronous requests." + ) + args, kwargs = self._get_request_args_kwargs( + method, url, headers, post_data + ) + try: + response = self._client.request(*args, **kwargs) + except Exception as e: + self._handle_request_error(e) + + content = response.content + status_code = response.status_code + response_headers = response.headers + return content, status_code, response_headers + + async def request_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + ) -> Tuple[bytes, int, Mapping[str, str]]: + args, kwargs = self._get_request_args_kwargs( + method, url, headers, post_data + ) + try: + response = await self._client_async.request(*args, **kwargs) + except Exception as e: + self._handle_request_error(e) + + content = response.content + status_code = response.status_code + response_headers = response.headers + return content, status_code, response_headers + + def _handle_request_error(self, e: Exception) -> NoReturn: + msg = ( + "Unexpected error communicating with Stripe. If this " + "problem persists, let us know at support@stripe.com." + ) + err = "A %s was raised" % (type(e).__name__,) + should_retry = True + + msg = textwrap.fill(msg) + "\n\n(Network error: %s)" % (err,) + raise APIConnectionError(msg, should_retry=should_retry) from e + + def request_stream( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[Iterable[bytes], int, Mapping[str, str]]: + if self._client is None: + raise RuntimeError( + "Stripe: HTTPXClient was not initialized with allow_sync_methods=True, " + "so it cannot be used for synchronous requests." + ) + args, kwargs = self._get_request_args_kwargs( + method, url, headers, post_data + ) + try: + response = self._client.send( + request=self._client_async.build_request(*args, **kwargs), + stream=True, + ) + except Exception as e: + self._handle_request_error(e) + content = response.iter_bytes() + status_code = response.status_code + headers = response.headers + + return content, status_code, headers + + async def request_stream_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[AsyncIterable[bytes], int, Mapping[str, str]]: + args, kwargs = self._get_request_args_kwargs( + method, url, headers, post_data + ) + try: + response = await self._client_async.send( + request=self._client_async.build_request(*args, **kwargs), + stream=True, + ) + except Exception as e: + self._handle_request_error(e) + content = response.aiter_bytes() + status_code = response.status_code + headers = response.headers + + return content, status_code, headers + + def close(self): + if self._client is not None: + self._client.close() + + async def close_async(self): + await self._client_async.aclose() + + +class AIOHTTPClient(HTTPClient): + name = "aiohttp" + + def __init__( + self, + timeout: Optional[Union[float, "AIOHTTPTimeout"]] = 80, + _lib=None, # used for internal unit testing + **kwargs, + ): + super(AIOHTTPClient, self).__init__(**kwargs) + + if _lib is None: + import aiohttp + + _lib = aiohttp + + self.aiohttp = _lib + + self._timeout = timeout + self._cached_session = None + + @property + def _session(self): + if self._cached_session is None: + kwargs = {} + if self._verify_ssl_certs: + ssl_context = ssl.create_default_context( + cafile=stripe.ca_bundle_path + ) + kwargs["connector"] = self.aiohttp.TCPConnector( + ssl=ssl_context + ) + else: + kwargs["connector"] = self.aiohttp.TCPConnector( + verify_ssl=False + ) + + self._cached_session = self.aiohttp.ClientSession(**kwargs) + + return self._cached_session + + def sleep_async(self, secs): + return asyncio.sleep(secs) + + def request(self) -> Tuple[bytes, int, Mapping[str, str]]: + raise NotImplementedError( + "AIOHTTPClient does not support synchronous requests." + ) + + def _get_request_args_kwargs( + self, method: str, url: str, headers: Mapping[str, str], post_data + ): + args = (method, url) + kwargs = {} + if self._proxy: + if self._proxy["http"] != self._proxy["https"]: + raise ValueError( + "AIOHTTPClient does not support different proxies for HTTP and HTTPS." + ) + kwargs["proxy"] = self._proxy["https"] + if self._timeout: + kwargs["timeout"] = self._timeout + + kwargs["headers"] = headers + kwargs["data"] = post_data + return args, kwargs + + async def request_async( + self, + method: str, + url: str, + headers: Mapping[str, str], + post_data=None, + ) -> Tuple[bytes, int, Mapping[str, str]]: + ( + content, + status_code, + response_headers, + ) = await self.request_stream_async( + method, url, headers, post_data=post_data + ) + + return (await content.read()), status_code, response_headers + + def _handle_request_error(self, e: Exception) -> NoReturn: + msg = ( + "Unexpected error communicating with Stripe. If this " + "problem persists, let us know at support@stripe.com." + ) + err = "A %s was raised" % (type(e).__name__,) + should_retry = True + + msg = textwrap.fill(msg) + "\n\n(Network error: %s)" % (err,) + raise APIConnectionError(msg, should_retry=should_retry) from e + + def request_stream(self) -> Tuple[Iterable[bytes], int, Mapping[str, str]]: + raise NotImplementedError( + "AIOHTTPClient does not support synchronous requests." + ) + + async def request_stream_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple["AIOHTTPStreamReader", int, Mapping[str, str]]: + args, kwargs = self._get_request_args_kwargs( + method, url, headers, post_data + ) + try: + response = await self._session.request(*args, **kwargs) + except Exception as e: + self._handle_request_error(e) + + content = response.content + status_code = response.status + response_headers = response.headers + return content, status_code, response_headers + + def close(self): + pass + + async def close_async(self): + await self._session.close() + + +class NoImportFoundAsyncClient(HTTPClient): + def __init__(self, **kwargs): + super(NoImportFoundAsyncClient, self).__init__(**kwargs) + + @staticmethod + def raise_async_client_import_error() -> Never: + raise ImportError( + ( + "Import httpx not found. To make async http requests," + "You must either install httpx or define your own" + "async http client by subclassing stripe.HTTPClient" + "and setting stripe.default_http_client to an instance of it." + ) + ) + + async def request_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ) -> Tuple[bytes, int, Mapping[str, str]]: + self.raise_async_client_import_error() + + async def request_stream_async( + self, method: str, url: str, headers: Mapping[str, str], post_data=None + ): + self.raise_async_client_import_error() + + async def close_async(self): + self.raise_async_client_import_error() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_identity_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_identity_service.py new file mode 100644 index 00000000..3e67a906 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_identity_service.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.identity._verification_report_service import ( + VerificationReportService, + ) + from stripe.identity._verification_session_service import ( + VerificationSessionService, + ) + +_subservices = { + "verification_reports": [ + "stripe.identity._verification_report_service", + "VerificationReportService", + ], + "verification_sessions": [ + "stripe.identity._verification_session_service", + "VerificationSessionService", + ], +} + + +class IdentityService(StripeService): + verification_reports: "VerificationReportService" + verification_sessions: "VerificationSessionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice.py new file mode 100644 index 00000000..8bb7ed6a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice.py @@ -0,0 +1,2965 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + Union, + cast, + overload, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._customer import Customer + from stripe._discount import Discount + from stripe._invoice_line_item import InvoiceLineItem + from stripe._invoice_payment import InvoicePayment + from stripe._payment_intent import PaymentIntent + from stripe._payment_method import PaymentMethod + from stripe._setup_intent import SetupIntent + from stripe._shipping_rate import ShippingRate + from stripe._source import Source + from stripe._subscription import Subscription + from stripe._tax_id import TaxId + from stripe._tax_rate import TaxRate + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction, + ) + from stripe.params._invoice_add_lines_params import InvoiceAddLinesParams + from stripe.params._invoice_attach_payment_params import ( + InvoiceAttachPaymentParams, + ) + from stripe.params._invoice_create_params import InvoiceCreateParams + from stripe.params._invoice_create_preview_params import ( + InvoiceCreatePreviewParams, + ) + from stripe.params._invoice_delete_params import InvoiceDeleteParams + from stripe.params._invoice_finalize_invoice_params import ( + InvoiceFinalizeInvoiceParams, + ) + from stripe.params._invoice_list_lines_params import InvoiceListLinesParams + from stripe.params._invoice_list_params import InvoiceListParams + from stripe.params._invoice_mark_uncollectible_params import ( + InvoiceMarkUncollectibleParams, + ) + from stripe.params._invoice_modify_params import InvoiceModifyParams + from stripe.params._invoice_pay_params import InvoicePayParams + from stripe.params._invoice_remove_lines_params import ( + InvoiceRemoveLinesParams, + ) + from stripe.params._invoice_retrieve_params import InvoiceRetrieveParams + from stripe.params._invoice_search_params import InvoiceSearchParams + from stripe.params._invoice_send_invoice_params import ( + InvoiceSendInvoiceParams, + ) + from stripe.params._invoice_update_lines_params import ( + InvoiceUpdateLinesParams, + ) + from stripe.params._invoice_void_invoice_params import ( + InvoiceVoidInvoiceParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +@nested_resource_class_methods("line") +class Invoice( + CreateableAPIResource["Invoice"], + DeletableAPIResource["Invoice"], + ListableAPIResource["Invoice"], + SearchableAPIResource["Invoice"], + UpdateableAPIResource["Invoice"], +): + """ + Invoices are statements of amounts owed by a customer, and are either + generated one-off, or generated periodically from a subscription. + + They contain [invoice items](https://stripe.com/docs/api#invoiceitems), and proration adjustments + that may be caused by subscription upgrades/downgrades (if necessary). + + If your invoice is configured to be billed through automatic charges, + Stripe automatically finalizes your invoice and attempts payment. Note + that finalizing the invoice, + [when automatic](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection), does + not happen immediately as the invoice is created. Stripe waits + until one hour after the last webhook was successfully sent (or the last + webhook timed out after failing). If you (and the platforms you may have + connected to) have no webhooks configured, Stripe waits one hour after + creation to finalize the invoice. + + If your invoice is configured to be billed by sending an email, then based on your + [email settings](https://dashboard.stripe.com/account/billing/automatic), + Stripe will email the invoice to your customer and await payment. These + emails can contain a link to a hosted page to pay the invoice. + + Stripe applies any customer credit on the account before determining the + amount due for the invoice (i.e., the amount that will be actually + charged). If the amount due for the invoice is less than Stripe's [minimum allowed charge + per currency](https://docs.stripe.com/docs/currencies#minimum-and-maximum-charge-amounts), the + invoice is automatically marked paid, and we add the amount due to the + customer's credit balance which is applied to the next invoice. + + More details on the customer's credit balance are + [here](https://stripe.com/docs/billing/customer/balance). + + Related guide: [Send invoices to customers](https://stripe.com/docs/billing/invoices/sending) + """ + + OBJECT_NAME: ClassVar[Literal["invoice"]] = "invoice" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + disabled_reason: Optional[ + Literal[ + "finalization_requires_location_inputs", + "finalization_system_error", + ] + ] + """ + If Stripe disabled automatic tax, this enum describes why. + """ + enabled: bool + """ + Whether Stripe automatically computes tax on this invoice. Note that incompatible invoice items (invoice items with manually specified [tax rates](https://stripe.com/docs/api/tax_rates), negative amounts, or `tax_behavior=unspecified`) cannot be added to automatic tax invoices. + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + provider: Optional[str] + """ + The tax provider powering automatic tax. + """ + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + """ + The status of the most recent automated tax calculation for this invoice. + """ + _inner_class_types = {"liability": Liability} + + class ConfirmationSecret(StripeObject): + client_secret: str + """ + The client_secret of the payment that Stripe creates for the invoice after finalization. + """ + type: str + """ + The type of client_secret. Currently this is always payment_intent, referencing the default payment_intent that Stripe creates during invoice finalization + """ + + class CustomField(StripeObject): + name: str + """ + The name of the custom field. + """ + value: str + """ + The value of the custom field. + """ + + class CustomerAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class CustomerShipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + class CustomerTaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "unknown", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + The type of the tax ID, one of `ad_nrt`, `ar_cuit`, `eu_vat`, `bo_tin`, `br_cnpj`, `br_cpf`, `cn_tin`, `co_nit`, `cr_tin`, `do_rcn`, `ec_ruc`, `eu_oss_vat`, `hr_oib`, `pe_ruc`, `ro_tin`, `rs_pib`, `sv_nit`, `uy_ruc`, `ve_rif`, `vn_tin`, `gb_vat`, `nz_gst`, `au_abn`, `au_arn`, `in_gst`, `no_vat`, `no_voec`, `za_vat`, `ch_vat`, `mx_rfc`, `sg_uen`, `ru_inn`, `ru_kpp`, `ca_bn`, `hk_br`, `es_cif`, `tw_vat`, `th_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `li_uid`, `li_vat`, `my_itn`, `us_ein`, `kr_brn`, `ca_qst`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `my_sst`, `sg_gst`, `ae_trn`, `cl_tin`, `sa_vat`, `id_npwp`, `my_frp`, `il_vat`, `ge_vat`, `ua_vat`, `is_vat`, `bg_uic`, `hu_tin`, `si_tin`, `ke_pin`, `tr_tin`, `eg_tin`, `ph_tin`, `al_tin`, `bh_vat`, `kz_bin`, `ng_tin`, `om_vat`, `de_stn`, `ch_uid`, `tz_vat`, `uz_vat`, `uz_tin`, `md_vat`, `ma_vat`, `by_tin`, `ao_tin`, `bs_tin`, `bb_tin`, `cd_nif`, `mr_nif`, `me_pib`, `zw_tin`, `ba_tin`, `gn_nif`, `mk_vat`, `sr_fin`, `sn_ninea`, `am_tin`, `np_pan`, `tj_tin`, `ug_tin`, `zm_tin`, `kh_tin`, `aw_tin`, `az_tin`, `bd_bin`, `bj_ifu`, `et_tin`, `kg_tin`, `la_tin`, `cm_niu`, `cv_nif`, `bf_ifu`, or `unknown` + """ + value: Optional[str] + """ + The value of the tax ID. + """ + + class FromInvoice(StripeObject): + action: str + """ + The relation between this invoice and the cloned invoice + """ + invoice: ExpandableField["Invoice"] + """ + The invoice that was cloned. + """ + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + class LastFinalizationError(StripeObject): + advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one. + """ + charge: Optional[str] + """ + For card errors, the ID of the failed charge. + """ + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "balance_invalid_parameter", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_exceeds_transaction_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "customer_session_expired", + "customer_tax_location_invalid", + "debit_not_authorized", + "email_invalid", + "expired_card", + "financial_connections_account_inactive", + "financial_connections_account_pending_account_numbers", + "financial_connections_account_unavailable_account_numbers", + "financial_connections_no_successful_transaction_refresh", + "forwarding_api_inactive", + "forwarding_api_invalid_parameter", + "forwarding_api_retryable_upstream_error", + "forwarding_api_upstream_connection_error", + "forwarding_api_upstream_connection_timeout", + "forwarding_api_upstream_error", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "india_recurring_payment_mandate_canceled", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_mandate_reference_prefix_format", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_rate_limit_exceeded", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_mobile_wallet_unsupported", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_address_invalid", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "tax_id_prohibited", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_hardware_fault", + "terminal_reader_invalid_location_for_activation", + "terminal_reader_invalid_location_for_payment", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_card_network_invalid", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + """ + For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported. + """ + decline_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one. + """ + doc_url: Optional[str] + """ + A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported. + """ + message: Optional[str] + """ + A human-readable message providing more details about the error. For card errors, these messages can be shown to your users. + """ + network_advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error. + """ + network_decline_code: Optional[str] + """ + For payments declined by the network, an alphanumeric code which indicates the reason the payment failed. + """ + param: Optional[str] + """ + If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field. + """ + payment_intent: Optional["PaymentIntent"] + """ + A PaymentIntent guides you through the process of collecting a payment from your customer. + We recommend that you create exactly one PaymentIntent for each order or + customer session in your system. You can reference the PaymentIntent later to + see the history of payment attempts for a particular session. + + A PaymentIntent transitions through + [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) + throughout its lifetime as it interfaces with Stripe.js to perform + authentication flows and ultimately creates at most one successful charge. + + Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents) + """ + payment_method: Optional["PaymentMethod"] + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + payment_method_type: Optional[str] + """ + If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors. + """ + request_log_url: Optional[str] + """ + A URL to the request log entry in your dashboard. + """ + setup_intent: Optional["SetupIntent"] + """ + A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. + For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. + Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. + + Create a SetupIntent when you're ready to collect your customer's payment credentials. + Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. + The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides + you through the setup process. + + Successful SetupIntents result in payment credentials that are optimized for future payments. + For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through + [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection + to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). + If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), + it automatically attaches the resulting payment method to that Customer after successful setup. + We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on + PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. + + By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. + + Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents) + """ + source: Optional[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + """ + The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error` + """ + + class Parent(StripeObject): + class QuoteDetails(StripeObject): + quote: str + """ + The quote that generated this invoice + """ + + class SubscriptionDetails(StripeObject): + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) defined as subscription metadata when an invoice is created. Becomes an immutable snapshot of the subscription metadata at the time of invoice finalization. + *Note: This attribute is populated only for invoices created on or after June 29, 2023.* + """ + subscription: ExpandableField["Subscription"] + """ + The subscription that generated this invoice + """ + subscription_proration_date: Optional[int] + """ + Only set for upcoming invoices that preview prorations. The time used to calculate prorations. + """ + + quote_details: Optional[QuoteDetails] + """ + Details about the quote that generated this invoice + """ + subscription_details: Optional[SubscriptionDetails] + """ + Details about the subscription that generated this invoice + """ + type: Literal["quote_details", "subscription_details"] + """ + The type of parent that generated this invoice + """ + _inner_class_types = { + "quote_details": QuoteDetails, + "subscription_details": SubscriptionDetails, + } + + class PaymentSettings(StripeObject): + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + transaction_type: Optional[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + + class Card(StripeObject): + class Installments(StripeObject): + enabled: Optional[bool] + """ + Whether Installments are enabled for this Invoice. + """ + + installments: Optional[Installments] + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + _inner_class_types = {"installments": Installments} + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + eu_bank_transfer: Optional[EuBankTransfer] + type: Optional[str] + """ + The bank transfer type that can be used for funding. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + _inner_class_types = {"bank_transfer": BankTransfer} + + class Konbini(StripeObject): + pass + + class SepaDebit(StripeObject): + pass + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class Filters(StripeObject): + account_subcategories: Optional[ + List[Literal["checking", "savings"]] + ] + """ + The account subcategories to use to filter for possible accounts to link. Valid subcategories are `checking` and `savings`. + """ + + filters: Optional[Filters] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + """ + The list of permissions to request. The `payment_method` permission must be included. + """ + prefetch: Optional[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + Data features requested to be retrieved upon account creation. + """ + _inner_class_types = {"filters": Filters} + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = { + "financial_connections": FinancialConnections, + } + + acss_debit: Optional[AcssDebit] + """ + If paying by `acss_debit`, this sub-hash contains details about the Canadian pre-authorized debit payment method options to pass to the invoice's PaymentIntent. + """ + bancontact: Optional[Bancontact] + """ + If paying by `bancontact`, this sub-hash contains details about the Bancontact payment method options to pass to the invoice's PaymentIntent. + """ + card: Optional[Card] + """ + If paying by `card`, this sub-hash contains details about the Card payment method options to pass to the invoice's PaymentIntent. + """ + customer_balance: Optional[CustomerBalance] + """ + If paying by `customer_balance`, this sub-hash contains details about the Bank transfer payment method options to pass to the invoice's PaymentIntent. + """ + konbini: Optional[Konbini] + """ + If paying by `konbini`, this sub-hash contains details about the Konbini payment method options to pass to the invoice's PaymentIntent. + """ + sepa_debit: Optional[SepaDebit] + """ + If paying by `sepa_debit`, this sub-hash contains details about the SEPA Direct Debit payment method options to pass to the invoice's PaymentIntent. + """ + us_bank_account: Optional[UsBankAccount] + """ + If paying by `us_bank_account`, this sub-hash contains details about the ACH direct debit payment method options to pass to the invoice's PaymentIntent. + """ + _inner_class_types = { + "acss_debit": AcssDebit, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "konbini": Konbini, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + + default_mandate: Optional[str] + """ + ID of the mandate to be used for this invoice. It must correspond to the payment method used to pay the invoice, including the invoice's default_payment_method or default_source, if set. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment-method-specific configuration to provide to the invoice's PaymentIntent. + """ + payment_method_types: Optional[ + List[ + Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "affirm", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "boleto", + "card", + "cashapp", + "crypto", + "custom", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "jp_credit_transfer", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "multibanco", + "naver_pay", + "nz_bank_account", + "p24", + "payco", + "paynow", + "paypal", + "promptpay", + "revolut_pay", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "swish", + "us_bank_account", + "wechat_pay", + ] + ] + ] + """ + The list of payment method types (e.g. card) to provide to the invoice's PaymentIntent. If not set, Stripe attempts to automatically determine the types to use by looking at the invoice's default payment method, the subscription's default payment method, the customer's default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice). + """ + _inner_class_types = {"payment_method_options": PaymentMethodOptions} + + class Rendering(StripeObject): + class Pdf(StripeObject): + page_size: Optional[Literal["a4", "auto", "letter"]] + """ + Page size of invoice pdf. Options include a4, letter, and auto. If set to auto, page size will be switched to a4 or letter based on customer locale. + """ + + amount_tax_display: Optional[str] + """ + How line-item prices and amounts will be displayed with respect to tax on invoice PDFs. + """ + pdf: Optional[Pdf] + """ + Invoice pdf rendering options + """ + template: Optional[str] + """ + ID of the rendering template that the invoice is formatted by. + """ + template_version: Optional[int] + """ + Version of the rendering template that the invoice is using. + """ + _inner_class_types = {"pdf": Pdf} + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + amount_subtotal: int + """ + Total shipping cost before any taxes are applied. + """ + amount_tax: int + """ + Total tax amount applied due to shipping costs. If no tax was applied, defaults to 0. + """ + amount_total: int + """ + Total shipping cost after taxes are applied. + """ + shipping_rate: Optional[ExpandableField["ShippingRate"]] + """ + The ID of the ShippingRate for this invoice. + """ + taxes: Optional[List[Tax]] + """ + The taxes applied to the shipping rate. + """ + _inner_class_types = {"taxes": Tax} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + class StatusTransitions(StripeObject): + finalized_at: Optional[int] + """ + The time that the invoice draft was finalized. + """ + marked_uncollectible_at: Optional[int] + """ + The time that the invoice was marked uncollectible. + """ + paid_at: Optional[int] + """ + The time that the invoice was paid. + """ + voided_at: Optional[int] + """ + The time that the invoice was voided. + """ + + class ThresholdReason(StripeObject): + class ItemReason(StripeObject): + line_item_ids: List[str] + """ + The IDs of the line items that triggered the threshold invoice. + """ + usage_gte: int + """ + The quantity threshold boundary that applied to the given line item. + """ + + amount_gte: Optional[int] + """ + The total invoice amount threshold boundary if it triggered the threshold invoice. + """ + item_reasons: List[ItemReason] + """ + Indicates which line items triggered a threshold invoice. + """ + _inner_class_types = {"item_reasons": ItemReason} + + class TotalDiscountAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the discount. + """ + discount: ExpandableField["Discount"] + """ + The discount that was applied to get this discount amount. + """ + + class TotalPretaxCreditAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the pretax credit amount. + """ + credit_balance_transaction: Optional[ + ExpandableField["CreditBalanceTransaction"] + ] + """ + The credit balance transaction that was applied to get this pretax credit amount. + """ + discount: Optional[ExpandableField["Discount"]] + """ + The discount that was applied to get this pretax credit amount. + """ + type: Literal["credit_balance_transaction", "discount"] + """ + Type of the pretax credit amount referenced. + """ + + class TotalTax(StripeObject): + class TaxRateDetails(StripeObject): + tax_rate: str + + amount: int + """ + The amount of the tax, in cents (or local equivalent). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Whether this tax is inclusive or exclusive. + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Additional details about the tax rate. Only present when `type` is `tax_rate_details`. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_available", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + type: Literal["tax_rate_details"] + """ + The type of tax information. + """ + _inner_class_types = {"tax_rate_details": TaxRateDetails} + + account_country: Optional[str] + """ + The country of the business associated with this invoice, most often the business creating the invoice. + """ + account_name: Optional[str] + """ + The public name of the business associated with this invoice, most often the business creating the invoice. + """ + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + """ + The account tax IDs associated with the invoice. Only editable when the invoice is a draft. + """ + amount_due: int + """ + Final amount due at this time for this invoice. If the invoice's total is smaller than the minimum charge amount, for example, or if there is account credit that can be applied to the invoice, the `amount_due` may be 0. If there is a positive `starting_balance` for the invoice (the customer owes money), the `amount_due` will also take that into account. The charge that gets generated for the invoice will be for the amount specified in `amount_due`. + """ + amount_overpaid: int + """ + Amount that was overpaid on the invoice. The amount overpaid is credited to the customer's credit balance. + """ + amount_paid: int + """ + The amount, in cents (or local equivalent), that was paid. + """ + amount_remaining: int + """ + The difference between amount_due and amount_paid, in cents (or local equivalent). + """ + amount_shipping: int + """ + This is the sum of all the shipping amounts. + """ + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect Application that created the invoice. + """ + attempt_count: int + """ + Number of payment attempts made for this invoice, from the perspective of the payment retry schedule. Any payment attempt counts as the first attempt, and subsequently only automatic retries increment the attempt count. In other words, manual payment attempts after the first attempt do not affect the retry schedule. If a failure is returned with a non-retryable return code, the invoice can no longer be retried unless a new payment method is obtained. Retries will continue to be scheduled, and attempt_count will continue to increment, but retries will only be executed if a new payment method is obtained. + """ + attempted: bool + """ + Whether an attempt has been made to pay the invoice. An invoice is not attempted until 1 hour after the `invoice.created` webhook, for example, so you might not want to display that invoice as unpaid to your users. + """ + auto_advance: Optional[bool] + """ + Controls whether Stripe performs [automatic collection](https://stripe.com/docs/invoicing/integration/automatic-advancement-collection) of the invoice. If `false`, the invoice's state doesn't automatically advance without an explicit action. + """ + automatic_tax: AutomaticTax + automatically_finalizes_at: Optional[int] + """ + The time when this invoice is currently scheduled to be automatically finalized. The field will be `null` if the invoice is not scheduled to finalize in the future. If the invoice is not in the draft state, this field will always be `null` - see `finalized_at` for the time when an already-finalized invoice was finalized. + """ + billing_reason: Optional[ + Literal[ + "automatic_pending_invoice_item_invoice", + "manual", + "quote_accept", + "subscription", + "subscription_create", + "subscription_cycle", + "subscription_threshold", + "subscription_update", + "upcoming", + ] + ] + """ + Indicates the reason why the invoice was created. + + * `manual`: Unrelated to a subscription, for example, created via the invoice editor. + * `subscription`: No longer in use. Applies to subscriptions from before May 2018 where no distinction was made between updates, cycles, and thresholds. + * `subscription_create`: A new subscription was created. + * `subscription_cycle`: A subscription advanced into a new period. + * `subscription_threshold`: A subscription reached a billing threshold. + * `subscription_update`: A subscription was updated. + * `upcoming`: Reserved for upcoming invoices created through the Create Preview Invoice API or when an `invoice.upcoming` event is generated for an upcoming invoice on a subscription. + """ + collection_method: Literal["charge_automatically", "send_invoice"] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this invoice using the default source attached to the customer. When sending an invoice, Stripe will email this invoice to the customer with payment instructions. + """ + confirmation_secret: Optional[ConfirmationSecret] + """ + The confirmation secret associated with this invoice. Currently, this contains the client_secret of the PaymentIntent that Stripe creates during invoice finalization. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + custom_fields: Optional[List[CustomField]] + """ + Custom fields displayed on the invoice. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the customer who will be billed. + """ + customer_address: Optional[CustomerAddress] + """ + The customer's address. Until the invoice is finalized, this field will equal `customer.address`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_email: Optional[str] + """ + The customer's email. Until the invoice is finalized, this field will equal `customer.email`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_name: Optional[str] + """ + The customer's name. Until the invoice is finalized, this field will equal `customer.name`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_phone: Optional[str] + """ + The customer's phone number. Until the invoice is finalized, this field will equal `customer.phone`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_shipping: Optional[CustomerShipping] + """ + The customer's shipping information. Until the invoice is finalized, this field will equal `customer.shipping`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_tax_exempt: Optional[Literal["exempt", "none", "reverse"]] + """ + The customer's tax exempt status. Until the invoice is finalized, this field will equal `customer.tax_exempt`. Once the invoice is finalized, this field will no longer be updated. + """ + customer_tax_ids: Optional[List[CustomerTaxId]] + """ + The customer's tax IDs. Until the invoice is finalized, this field will contain the same tax IDs as `customer.tax_ids`. Once the invoice is finalized, this field will no longer be updated. + """ + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the default payment method for the invoice. It must belong to the customer associated with the invoice. If not set, defaults to the subscription's default payment method, if any, or to the default payment method in the customer's invoice settings. + """ + default_source: Optional[ + ExpandableField[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + ] + """ + ID of the default payment source for the invoice. It must belong to the customer associated with the invoice and be in a chargeable state. If not set, defaults to the subscription's default source, if any, or to the customer's default source. + """ + default_tax_rates: List["TaxRate"] + """ + The tax rates applied to this invoice, if any. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. Referenced as 'memo' in the Dashboard. + """ + discounts: List[ExpandableField["Discount"]] + """ + The discounts applied to the invoice. Line item discounts are applied before invoice discounts. Use `expand[]=discounts` to expand each discount. + """ + due_date: Optional[int] + """ + The date on which payment for this invoice is due. This value will be `null` for invoices where `collection_method=charge_automatically`. + """ + effective_at: Optional[int] + """ + The date when this invoice is in effect. Same as `finalized_at` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the invoice PDF and receipt. + """ + ending_balance: Optional[int] + """ + Ending customer balance after the invoice is finalized. Invoices are finalized approximately an hour after successful webhook delivery or when payment collection is attempted for the invoice. If the invoice has not been finalized yet, this will be null. + """ + footer: Optional[str] + """ + Footer displayed on the invoice. + """ + from_invoice: Optional[FromInvoice] + """ + Details of the invoice that was cloned. See the [revision documentation](https://stripe.com/docs/invoicing/invoice-revisions) for more details. + """ + hosted_invoice_url: Optional[str] + """ + The URL for the hosted invoice page, which allows customers to view and pay an invoice. If the invoice has not been finalized yet, this will be null. + """ + id: str + """ + Unique identifier for the object. For preview invoices created using the [create preview](https://stripe.com/docs/api/invoices/create_preview) endpoint, this id will be prefixed with `upcoming_in`. + """ + invoice_pdf: Optional[str] + """ + The link to download the PDF for the invoice. If the invoice has not been finalized yet, this will be null. + """ + issuer: Issuer + last_finalization_error: Optional[LastFinalizationError] + """ + The error encountered during the previous attempt to finalize the invoice. This field is cleared when the invoice is successfully finalized. + """ + latest_revision: Optional[ExpandableField["Invoice"]] + """ + The ID of the most recent non-draft revision of this invoice + """ + lines: ListObject["InvoiceLineItem"] + """ + The individual line items that make up the invoice. `lines` is sorted as follows: (1) pending invoice items (including prorations) in reverse chronological order, (2) subscription items in reverse chronological order, and (3) invoice items added after invoice creation in chronological order. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + next_payment_attempt: Optional[int] + """ + The time at which payment will next be attempted. This value will be `null` for invoices where `collection_method=send_invoice`. + """ + number: Optional[str] + """ + A unique, identifying string that appears on emails sent to the customer for this invoice. This starts with the customer's unique invoice_prefix if it is specified. + """ + object: Literal["invoice"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the [Invoices with Connect](https://stripe.com/docs/billing/invoices/connect) documentation for details. + """ + parent: Optional[Parent] + """ + The parent that generated this invoice + """ + payment_settings: PaymentSettings + payments: Optional[ListObject["InvoicePayment"]] + """ + Payments for this invoice + """ + period_end: int + """ + End of the usage period during which invoice items were added to this invoice. This looks back one period for a subscription invoice. Use the [line item period](https://docs.stripe.com/api/invoices/line_item#invoice_line_item_object-period) to get the service period for each price. + """ + period_start: int + """ + Start of the usage period during which invoice items were added to this invoice. This looks back one period for a subscription invoice. Use the [line item period](https://docs.stripe.com/api/invoices/line_item#invoice_line_item_object-period) to get the service period for each price. + """ + post_payment_credit_notes_amount: int + """ + Total amount of all post-payment credit notes issued for this invoice. + """ + pre_payment_credit_notes_amount: int + """ + Total amount of all pre-payment credit notes issued for this invoice. + """ + receipt_number: Optional[str] + """ + This is the transaction number that appears on email receipts sent for this invoice. + """ + rendering: Optional[Rendering] + """ + The rendering-related settings that control how the invoice is displayed on customer-facing surfaces such as PDF and Hosted Invoice Page. + """ + shipping_cost: Optional[ShippingCost] + """ + The details of the cost of shipping, including the ShippingRate applied on the invoice. + """ + shipping_details: Optional[ShippingDetails] + """ + Shipping details for the invoice. The Invoice PDF will use the `shipping_details` value if it is set, otherwise the PDF will render the shipping address from the customer. + """ + starting_balance: int + """ + Starting customer balance before the invoice is finalized. If the invoice has not been finalized yet, this will be the current customer balance. For revision invoices, this also includes any customer balance that was applied to the original invoice. + """ + statement_descriptor: Optional[str] + """ + Extra information about an invoice for the customer's credit card statement. + """ + status: Optional[Literal["draft", "open", "paid", "uncollectible", "void"]] + """ + The status of the invoice, one of `draft`, `open`, `paid`, `uncollectible`, or `void`. [Learn more](https://stripe.com/docs/billing/invoices/workflow#workflow-overview) + """ + status_transitions: StatusTransitions + subtotal: int + """ + Total of all subscriptions, invoice items, and prorations on the invoice before any invoice level discount or exclusive tax is applied. Item discounts are already incorporated + """ + subtotal_excluding_tax: Optional[int] + """ + The integer amount in cents (or local equivalent) representing the subtotal of the invoice before any invoice level discount or tax is applied. Item discounts are already incorporated + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this invoice belongs to. + """ + threshold_reason: Optional[ThresholdReason] + total: int + """ + Total after discounts and taxes. + """ + total_discount_amounts: Optional[List[TotalDiscountAmount]] + """ + The aggregate amounts calculated per discount across all line items. + """ + total_excluding_tax: Optional[int] + """ + The integer amount in cents (or local equivalent) representing the total amount of the invoice including all discounts but excluding all tax. + """ + total_pretax_credit_amounts: Optional[List[TotalPretaxCreditAmount]] + """ + Contains pretax credit amounts (ex: discount, credit grants, etc) that apply to this invoice. This is a combined list of total_pretax_credit_amounts across all invoice line items. + """ + total_taxes: Optional[List[TotalTax]] + """ + The aggregate tax information of all line items. + """ + webhooks_delivered_at: Optional[int] + """ + Invoices are automatically paid or sent 1 hour after webhooks are delivered, or until all webhook delivery attempts have [been exhausted](https://stripe.com/docs/billing/webhooks#understand). This field tracks the time when webhooks for this invoice were successfully delivered. If the invoice had no webhooks to deliver, this will be set while the invoice is being created. + """ + + @classmethod + def _cls_add_lines( + cls, invoice: str, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def add_lines( + invoice: str, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + def add_lines( + self, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_add_lines") + def add_lines( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_add_lines_async( + cls, invoice: str, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def add_lines_async( + invoice: str, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + async def add_lines_async( + self, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_add_lines_async") + async def add_lines_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceAddLinesParams"] + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_attach_payment( + cls, invoice: str, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def attach_payment( + invoice: str, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + ... + + @overload + def attach_payment( + self, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + ... + + @class_method_variant("_cls_attach_payment") + def attach_payment( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_attach_payment_async( + cls, invoice: str, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def attach_payment_async( + invoice: str, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + ... + + @overload + async def attach_payment_async( + self, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + ... + + @class_method_variant("_cls_attach_payment_async") + async def attach_payment_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceAttachPaymentParams"] + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["InvoiceCreateParams"]) -> "Invoice": + """ + This endpoint creates a draft invoice for a given customer. The invoice remains a draft until you [finalize the invoice, which allows you to [pay](#pay_invoice) or send](https://docs.stripe.com/api#finalize_invoice) the invoice to your customers. + """ + return cast( + "Invoice", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["InvoiceCreateParams"] + ) -> "Invoice": + """ + This endpoint creates a draft invoice for a given customer. The invoice remains a draft until you [finalize the invoice, which allows you to [pay](#pay_invoice) or send](https://docs.stripe.com/api#finalize_invoice) the invoice to your customers. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def create_preview( + cls, **params: Unpack["InvoiceCreatePreviewParams"] + ) -> "Invoice": + """ + At any time, you can preview the upcoming invoice for a subscription or subscription schedule. This will show you all the charges that are pending, including subscription renewal charges, invoice item charges, etc. It will also show you any discounts that are applicable to the invoice. + + You can also preview the effects of creating or updating a subscription or subscription schedule, including a preview of any prorations that will take place. To ensure that the actual proration is calculated exactly the same as the previewed proration, you should pass the subscription_details.proration_date parameter when doing the actual subscription update. + + The recommended way to get only the prorations being previewed on the invoice is to consider line items where parent.subscription_item_details.proration is true. + + Note that when you are viewing an upcoming invoice, you are simply viewing a preview – the invoice has not yet been created. As such, the upcoming invoice will not show up in invoice listing calls, and you cannot use the API to pay or edit the invoice. If you want to change the amount that your customer will be billed, you can add, remove, or update pending invoice items, or update the customer's discount. + + Note: Currency conversion calculations use the latest exchange rates. Exchange rates may vary between the time of the preview and the time of the actual invoice creation. [Learn more](https://docs.stripe.com/currencies/conversions) + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/create_preview", + params=params, + ), + ) + + @classmethod + async def create_preview_async( + cls, **params: Unpack["InvoiceCreatePreviewParams"] + ) -> "Invoice": + """ + At any time, you can preview the upcoming invoice for a subscription or subscription schedule. This will show you all the charges that are pending, including subscription renewal charges, invoice item charges, etc. It will also show you any discounts that are applicable to the invoice. + + You can also preview the effects of creating or updating a subscription or subscription schedule, including a preview of any prorations that will take place. To ensure that the actual proration is calculated exactly the same as the previewed proration, you should pass the subscription_details.proration_date parameter when doing the actual subscription update. + + The recommended way to get only the prorations being previewed on the invoice is to consider line items where parent.subscription_item_details.proration is true. + + Note that when you are viewing an upcoming invoice, you are simply viewing a preview – the invoice has not yet been created. As such, the upcoming invoice will not show up in invoice listing calls, and you cannot use the API to pay or edit the invoice. If you want to change the amount that your customer will be billed, you can add, remove, or update pending invoice items, or update the customer's discount. + + Note: Currency conversion calculations use the latest exchange rates. Exchange rates may vary between the time of the preview and the time of the actual invoice creation. [Learn more](https://docs.stripe.com/currencies/conversions) + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/create_preview", + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Invoice", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["InvoiceDeleteParams"]) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + ... + + @overload + def delete(self, **params: Unpack["InvoiceDeleteParams"]) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Invoice", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceDeleteParams"] + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def _cls_finalize_invoice( + cls, invoice: str, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def finalize_invoice( + invoice: str, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + ... + + @overload + def finalize_invoice( + self, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + ... + + @class_method_variant("_cls_finalize_invoice") + def finalize_invoice( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_finalize_invoice_async( + cls, invoice: str, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def finalize_invoice_async( + invoice: str, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + ... + + @overload + async def finalize_invoice_async( + self, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + ... + + @class_method_variant("_cls_finalize_invoice_async") + async def finalize_invoice_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceFinalizeInvoiceParams"] + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["InvoiceListParams"] + ) -> ListObject["Invoice"]: + """ + You can list all invoices, or list the invoices for a specific customer. The invoices are returned sorted by creation date, with the most recently created invoices appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["InvoiceListParams"] + ) -> ListObject["Invoice"]: + """ + You can list all invoices, or list the invoices for a specific customer. The invoices are returned sorted by creation date, with the most recently created invoices appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_mark_uncollectible( + cls, invoice: str, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def mark_uncollectible( + invoice: str, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + ... + + @overload + def mark_uncollectible( + self, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + ... + + @class_method_variant("_cls_mark_uncollectible") + def mark_uncollectible( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_mark_uncollectible_async( + cls, invoice: str, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def mark_uncollectible_async( + invoice: str, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + ... + + @overload + async def mark_uncollectible_async( + self, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + ... + + @class_method_variant("_cls_mark_uncollectible_async") + async def mark_uncollectible_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceMarkUncollectibleParams"] + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["InvoiceModifyParams"] + ) -> "Invoice": + """ + Draft invoices are fully editable. Once an invoice is [finalized](https://docs.stripe.com/docs/billing/invoices/workflow#finalized), + monetary values, as well as collection_method, become uneditable. + + If you would like to stop the Stripe Billing engine from automatically finalizing, reattempting payments on, + sending reminders for, or [automatically reconciling](https://docs.stripe.com/docs/billing/invoices/reconciliation) invoices, pass + auto_advance=false. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Invoice", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["InvoiceModifyParams"] + ) -> "Invoice": + """ + Draft invoices are fully editable. Once an invoice is [finalized](https://docs.stripe.com/docs/billing/invoices/workflow#finalized), + monetary values, as well as collection_method, become uneditable. + + If you would like to stop the Stripe Billing engine from automatically finalizing, reattempting payments on, + sending reminders for, or [automatically reconciling](https://docs.stripe.com/docs/billing/invoices/reconciliation) invoices, pass + auto_advance=false. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Invoice", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_pay( + cls, invoice: str, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def pay(invoice: str, **params: Unpack["InvoicePayParams"]) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + ... + + @overload + def pay(self, **params: Unpack["InvoicePayParams"]) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + ... + + @class_method_variant("_cls_pay") + def pay( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_pay_async( + cls, invoice: str, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def pay_async( + invoice: str, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + ... + + @overload + async def pay_async( + self, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + ... + + @class_method_variant("_cls_pay_async") + async def pay_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoicePayParams"] + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_remove_lines( + cls, invoice: str, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def remove_lines( + invoice: str, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + def remove_lines( + self, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_remove_lines") + def remove_lines( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_remove_lines_async( + cls, invoice: str, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def remove_lines_async( + invoice: str, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + async def remove_lines_async( + self, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_remove_lines_async") + async def remove_lines_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRemoveLinesParams"] + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["InvoiceRetrieveParams"] + ) -> "Invoice": + """ + Retrieves the invoice with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["InvoiceRetrieveParams"] + ) -> "Invoice": + """ + Retrieves the invoice with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_send_invoice( + cls, invoice: str, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def send_invoice( + invoice: str, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + ... + + @overload + def send_invoice( + self, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + ... + + @class_method_variant("_cls_send_invoice") + def send_invoice( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_send_invoice_async( + cls, invoice: str, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def send_invoice_async( + invoice: str, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + ... + + @overload + async def send_invoice_async( + self, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + ... + + @class_method_variant("_cls_send_invoice_async") + async def send_invoice_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceSendInvoiceParams"] + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_update_lines( + cls, invoice: str, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def update_lines( + invoice: str, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + def update_lines( + self, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_update_lines") + def update_lines( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_update_lines_async( + cls, invoice: str, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def update_lines_async( + invoice: str, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @overload + async def update_lines_async( + self, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + ... + + @class_method_variant("_cls_update_lines_async") + async def update_lines_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceUpdateLinesParams"] + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_void_invoice( + cls, invoice: str, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + cls._static_request( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + def void_invoice( + invoice: str, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + ... + + @overload + def void_invoice( + self, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + ... + + @class_method_variant("_cls_void_invoice") + def void_invoice( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_void_invoice_async( + cls, invoice: str, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + await cls._static_request_async( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def void_invoice_async( + invoice: str, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + ... + + @overload + async def void_invoice_async( + self, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + ... + + @class_method_variant("_cls_void_invoice_async") + async def void_invoice_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceVoidInvoiceParams"] + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def search( + cls, *args, **kwargs: Unpack["InvoiceSearchParams"] + ) -> SearchResultObject["Invoice"]: + """ + Search for invoices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search(search_url="/v1/invoices/search", *args, **kwargs) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["InvoiceSearchParams"] + ) -> SearchResultObject["Invoice"]: + """ + Search for invoices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/invoices/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["InvoiceSearchParams"] + ) -> Iterator["Invoice"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["InvoiceSearchParams"] + ) -> AsyncIterator["Invoice"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + @classmethod + def list_lines( + cls, invoice: str, **params: Unpack["InvoiceListLinesParams"] + ) -> ListObject["InvoiceLineItem"]: + """ + When retrieving an invoice, you'll get a lines property containing the total count of line items and the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["InvoiceLineItem"], + cls._static_request( + "get", + "/v1/invoices/{invoice}/lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + @classmethod + async def list_lines_async( + cls, invoice: str, **params: Unpack["InvoiceListLinesParams"] + ) -> ListObject["InvoiceLineItem"]: + """ + When retrieving an invoice, you'll get a lines property containing the total count of line items and the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["InvoiceLineItem"], + await cls._static_request_async( + "get", + "/v1/invoices/{invoice}/lines".format( + invoice=sanitize_id(invoice) + ), + params=params, + ), + ) + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "confirmation_secret": ConfirmationSecret, + "custom_fields": CustomField, + "customer_address": CustomerAddress, + "customer_shipping": CustomerShipping, + "customer_tax_ids": CustomerTaxId, + "from_invoice": FromInvoice, + "issuer": Issuer, + "last_finalization_error": LastFinalizationError, + "parent": Parent, + "payment_settings": PaymentSettings, + "rendering": Rendering, + "shipping_cost": ShippingCost, + "shipping_details": ShippingDetails, + "status_transitions": StatusTransitions, + "threshold_reason": ThresholdReason, + "total_discount_amounts": TotalDiscountAmount, + "total_pretax_credit_amounts": TotalPretaxCreditAmount, + "total_taxes": TotalTax, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item.py new file mode 100644 index 00000000..ab1b503e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item.py @@ -0,0 +1,438 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe._discount import Discount + from stripe._invoice import Invoice + from stripe._tax_rate import TaxRate + from stripe.params._invoice_item_create_params import ( + InvoiceItemCreateParams, + ) + from stripe.params._invoice_item_delete_params import ( + InvoiceItemDeleteParams, + ) + from stripe.params._invoice_item_list_params import InvoiceItemListParams + from stripe.params._invoice_item_modify_params import ( + InvoiceItemModifyParams, + ) + from stripe.params._invoice_item_retrieve_params import ( + InvoiceItemRetrieveParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class InvoiceItem( + CreateableAPIResource["InvoiceItem"], + DeletableAPIResource["InvoiceItem"], + ListableAPIResource["InvoiceItem"], + UpdateableAPIResource["InvoiceItem"], +): + """ + Invoice Items represent the component lines of an [invoice](https://stripe.com/docs/api/invoices). When you create an invoice item with an `invoice` field, it is attached to the specified invoice and included as [an invoice line item](https://stripe.com/docs/api/invoices/line_item) within [invoice.lines](https://stripe.com/docs/api/invoices/object#invoice_object-lines). + + Invoice Items can be created before you are ready to actually send the invoice. This can be particularly useful when combined + with a [subscription](https://stripe.com/docs/api/subscriptions). Sometimes you want to add a charge or credit to a customer, but actually charge + or credit the customer's card only at the end of a regular billing cycle. This is useful for combining several charges + (to minimize per-transaction fees), or for having Stripe tabulate your usage-based billing totals. + + Related guides: [Integrate with the Invoicing API](https://stripe.com/docs/invoicing/integration), [Subscription Invoices](https://stripe.com/docs/billing/invoices/subscription#adding-upcoming-invoice-items). + """ + + OBJECT_NAME: ClassVar[Literal["invoiceitem"]] = "invoiceitem" + + class Parent(StripeObject): + class SubscriptionDetails(StripeObject): + subscription: str + """ + The subscription that generated this invoice item + """ + subscription_item: Optional[str] + """ + The subscription item that generated this invoice item + """ + + subscription_details: Optional[SubscriptionDetails] + """ + Details about the subscription that generated this invoice item + """ + type: Literal["subscription_details"] + """ + The type of parent that generated this invoice item + """ + _inner_class_types = {"subscription_details": SubscriptionDetails} + + class Period(StripeObject): + end: int + """ + The end of the period, which must be greater than or equal to the start. This value is inclusive. + """ + start: int + """ + The start of the period. This value is inclusive. + """ + + class Pricing(StripeObject): + class PriceDetails(StripeObject): + price: str + """ + The ID of the price this item is associated with. + """ + product: str + """ + The ID of the product this item is associated with. + """ + + price_details: Optional[PriceDetails] + type: Literal["price_details"] + """ + The type of the pricing details. + """ + unit_amount_decimal: Optional[str] + """ + The unit amount (in the `currency` specified) of the item which contains a decimal value with at most 12 decimal places. + """ + _inner_class_types = {"price_details": PriceDetails} + + class ProrationDetails(StripeObject): + class DiscountAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the discount. + """ + discount: ExpandableField["Discount"] + """ + The discount that was applied to get this discount amount. + """ + + discount_amounts: List[DiscountAmount] + """ + Discount amounts applied when the proration was created. + """ + _inner_class_types = {"discount_amounts": DiscountAmount} + + amount: int + """ + Amount (in the `currency` specified) of the invoice item. This should always be equal to `unit_amount * quantity`. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: ExpandableField["Customer"] + """ + The ID of the customer who will be billed when this invoice item is billed. + """ + date: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + discountable: bool + """ + If true, discounts will apply to this invoice item. Always false for prorations. + """ + discounts: Optional[List[ExpandableField["Discount"]]] + """ + The discounts which apply to the invoice item. Item discounts are applied before invoice discounts. Use `expand[]=discounts` to expand each discount. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: Optional[ExpandableField["Invoice"]] + """ + The ID of the invoice this invoice item belongs to. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + net_amount: Optional[int] + """ + The amount after discounts, but before credits and taxes. This field is `null` for `discountable=true` items. + """ + object: Literal["invoiceitem"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + parent: Optional[Parent] + """ + The parent that generated this invoice item. + """ + period: Period + pricing: Optional[Pricing] + """ + The pricing information of the invoice item. + """ + proration: bool + """ + Whether the invoice item was created automatically as a proration adjustment when the customer switched plans. + """ + proration_details: Optional[ProrationDetails] + quantity: int + """ + Quantity of units for the invoice item. If the invoice item is a proration, the quantity of the subscription that the proration was computed for. + """ + tax_rates: Optional[List["TaxRate"]] + """ + The tax rates which apply to the invoice item. When set, the `default_tax_rates` on the invoice do not apply to this invoice item. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this invoice item belongs to. + """ + + @classmethod + def create( + cls, **params: Unpack["InvoiceItemCreateParams"] + ) -> "InvoiceItem": + """ + Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified. + """ + return cast( + "InvoiceItem", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["InvoiceItemCreateParams"] + ) -> "InvoiceItem": + """ + Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified. + """ + return cast( + "InvoiceItem", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "InvoiceItem", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + ... + + @overload + def delete( + self, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "InvoiceItem", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceItemDeleteParams"] + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["InvoiceItemListParams"] + ) -> ListObject["InvoiceItem"]: + """ + Returns a list of your invoice items. Invoice items are returned sorted by creation date, with the most recently created invoice items appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["InvoiceItemListParams"] + ) -> ListObject["InvoiceItem"]: + """ + Returns a list of your invoice items. Invoice items are returned sorted by creation date, with the most recently created invoice items appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["InvoiceItemModifyParams"] + ) -> "InvoiceItem": + """ + Updates the amount or description of an invoice item on an upcoming invoice. Updating an invoice item is only possible before the invoice it's attached to is closed. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "InvoiceItem", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["InvoiceItemModifyParams"] + ) -> "InvoiceItem": + """ + Updates the amount or description of an invoice item on an upcoming invoice. Updating an invoice item is only possible before the invoice it's attached to is closed. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "InvoiceItem", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["InvoiceItemRetrieveParams"] + ) -> "InvoiceItem": + """ + Retrieves the invoice item with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["InvoiceItemRetrieveParams"] + ) -> "InvoiceItem": + """ + Retrieves the invoice item with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "parent": Parent, + "period": Period, + "pricing": Pricing, + "proration_details": ProrationDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item_service.py new file mode 100644 index 00000000..1b8a8098 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_item_service.py @@ -0,0 +1,234 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice_item import InvoiceItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._invoice_item_create_params import ( + InvoiceItemCreateParams, + ) + from stripe.params._invoice_item_delete_params import ( + InvoiceItemDeleteParams, + ) + from stripe.params._invoice_item_list_params import InvoiceItemListParams + from stripe.params._invoice_item_retrieve_params import ( + InvoiceItemRetrieveParams, + ) + from stripe.params._invoice_item_update_params import ( + InvoiceItemUpdateParams, + ) + + +class InvoiceItemService(StripeService): + def delete( + self, + invoiceitem: str, + params: Optional["InvoiceItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + return cast( + "InvoiceItem", + self._request( + "delete", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + invoiceitem: str, + params: Optional["InvoiceItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Deletes an invoice item, removing it from an invoice. Deleting invoice items is only possible when they're not attached to invoices, or if it's attached to a draft invoice. + """ + return cast( + "InvoiceItem", + await self._request_async( + "delete", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + invoiceitem: str, + params: Optional["InvoiceItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Retrieves the invoice item with the given ID. + """ + return cast( + "InvoiceItem", + self._request( + "get", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + invoiceitem: str, + params: Optional["InvoiceItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Retrieves the invoice item with the given ID. + """ + return cast( + "InvoiceItem", + await self._request_async( + "get", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + invoiceitem: str, + params: Optional["InvoiceItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Updates the amount or description of an invoice item on an upcoming invoice. Updating an invoice item is only possible before the invoice it's attached to is closed. + """ + return cast( + "InvoiceItem", + self._request( + "post", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + invoiceitem: str, + params: Optional["InvoiceItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Updates the amount or description of an invoice item on an upcoming invoice. Updating an invoice item is only possible before the invoice it's attached to is closed. + """ + return cast( + "InvoiceItem", + await self._request_async( + "post", + "/v1/invoiceitems/{invoiceitem}".format( + invoiceitem=sanitize_id(invoiceitem), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["InvoiceItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceItem]": + """ + Returns a list of your invoice items. Invoice items are returned sorted by creation date, with the most recently created invoice items appearing first. + """ + return cast( + "ListObject[InvoiceItem]", + self._request( + "get", + "/v1/invoiceitems", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["InvoiceItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceItem]": + """ + Returns a list of your invoice items. Invoice items are returned sorted by creation date, with the most recently created invoice items appearing first. + """ + return cast( + "ListObject[InvoiceItem]", + await self._request_async( + "get", + "/v1/invoiceitems", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "InvoiceItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified. + """ + return cast( + "InvoiceItem", + self._request( + "post", + "/v1/invoiceitems", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "InvoiceItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "InvoiceItem": + """ + Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified. + """ + return cast( + "InvoiceItem", + await self._request_async( + "post", + "/v1/invoiceitems", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item.py new file mode 100644 index 00000000..b1462723 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item.py @@ -0,0 +1,350 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, List, Optional, cast +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._discount import Discount + from stripe._subscription import Subscription + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction, + ) + + +class InvoiceLineItem(UpdateableAPIResource["InvoiceLineItem"]): + """ + Invoice Line Items represent the individual lines within an [invoice](https://stripe.com/docs/api/invoices) and only exist within the context of an invoice. + + Each line item is backed by either an [invoice item](https://stripe.com/docs/api/invoiceitems) or a [subscription item](https://stripe.com/docs/api/subscription_items). + """ + + OBJECT_NAME: ClassVar[Literal["line_item"]] = "line_item" + + class DiscountAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the discount. + """ + discount: ExpandableField["Discount"] + """ + The discount that was applied to get this discount amount. + """ + + class Parent(StripeObject): + class InvoiceItemDetails(StripeObject): + class ProrationDetails(StripeObject): + class CreditedItems(StripeObject): + invoice: str + """ + Invoice containing the credited invoice line items + """ + invoice_line_items: List[str] + """ + Credited invoice line items + """ + + credited_items: Optional[CreditedItems] + """ + For a credit proration `line_item`, the original debit line_items to which the credit proration applies. + """ + _inner_class_types = {"credited_items": CreditedItems} + + invoice_item: str + """ + The invoice item that generated this line item + """ + proration: bool + """ + Whether this is a proration + """ + proration_details: Optional[ProrationDetails] + """ + Additional details for proration line items + """ + subscription: Optional[str] + """ + The subscription that the invoice item belongs to + """ + _inner_class_types = {"proration_details": ProrationDetails} + + class SubscriptionItemDetails(StripeObject): + class ProrationDetails(StripeObject): + class CreditedItems(StripeObject): + invoice: str + """ + Invoice containing the credited invoice line items + """ + invoice_line_items: List[str] + """ + Credited invoice line items + """ + + credited_items: Optional[CreditedItems] + """ + For a credit proration `line_item`, the original debit line_items to which the credit proration applies. + """ + _inner_class_types = {"credited_items": CreditedItems} + + invoice_item: Optional[str] + """ + The invoice item that generated this line item + """ + proration: bool + """ + Whether this is a proration + """ + proration_details: Optional[ProrationDetails] + """ + Additional details for proration line items + """ + subscription: Optional[str] + """ + The subscription that the subscription item belongs to + """ + subscription_item: str + """ + The subscription item that generated this line item + """ + _inner_class_types = {"proration_details": ProrationDetails} + + invoice_item_details: Optional[InvoiceItemDetails] + """ + Details about the invoice item that generated this line item + """ + subscription_item_details: Optional[SubscriptionItemDetails] + """ + Details about the subscription item that generated this line item + """ + type: Literal["invoice_item_details", "subscription_item_details"] + """ + The type of parent that generated this line item + """ + _inner_class_types = { + "invoice_item_details": InvoiceItemDetails, + "subscription_item_details": SubscriptionItemDetails, + } + + class Period(StripeObject): + end: int + """ + The end of the period, which must be greater than or equal to the start. This value is inclusive. + """ + start: int + """ + The start of the period. This value is inclusive. + """ + + class PretaxCreditAmount(StripeObject): + amount: int + """ + The amount, in cents (or local equivalent), of the pretax credit amount. + """ + credit_balance_transaction: Optional[ + ExpandableField["CreditBalanceTransaction"] + ] + """ + The credit balance transaction that was applied to get this pretax credit amount. + """ + discount: Optional[ExpandableField["Discount"]] + """ + The discount that was applied to get this pretax credit amount. + """ + type: Literal["credit_balance_transaction", "discount"] + """ + Type of the pretax credit amount referenced. + """ + + class Pricing(StripeObject): + class PriceDetails(StripeObject): + price: str + """ + The ID of the price this item is associated with. + """ + product: str + """ + The ID of the product this item is associated with. + """ + + price_details: Optional[PriceDetails] + type: Literal["price_details"] + """ + The type of the pricing details. + """ + unit_amount_decimal: Optional[str] + """ + The unit amount (in the `currency` specified) of the item which contains a decimal value with at most 12 decimal places. + """ + _inner_class_types = {"price_details": PriceDetails} + + class Tax(StripeObject): + class TaxRateDetails(StripeObject): + tax_rate: str + + amount: int + """ + The amount of the tax, in cents (or local equivalent). + """ + tax_behavior: Literal["exclusive", "inclusive"] + """ + Whether this tax is inclusive or exclusive. + """ + tax_rate_details: Optional[TaxRateDetails] + """ + Additional details about the tax rate. Only present when `type` is `tax_rate_details`. + """ + taxability_reason: Literal[ + "customer_exempt", + "not_available", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + type: Literal["tax_rate_details"] + """ + The type of tax information. + """ + _inner_class_types = {"tax_rate_details": TaxRateDetails} + + amount: int + """ + The amount, in cents (or local equivalent). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + discount_amounts: Optional[List[DiscountAmount]] + """ + The amount of discount calculated per discount for this line item. + """ + discountable: bool + """ + If true, discounts will apply to this line item. Always false for prorations. + """ + discounts: List[ExpandableField["Discount"]] + """ + The discounts applied to the invoice line item. Line item discounts are applied before invoice discounts. Use `expand[]=discounts` to expand each discount. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: Optional[str] + """ + The ID of the invoice that contains this line item. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Note that for line items with `type=subscription`, `metadata` reflects the current metadata from the subscription associated with the line item, unless the invoice line was directly updated with different metadata after creation. + """ + object: Literal["line_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + parent: Optional[Parent] + """ + The parent that generated this line item. + """ + period: Period + pretax_credit_amounts: Optional[List[PretaxCreditAmount]] + """ + Contains pretax credit amounts (ex: discount, credit grants, etc) that apply to this line item. + """ + pricing: Optional[Pricing] + """ + The pricing information of the line item. + """ + quantity: Optional[int] + """ + The quantity of the subscription, if the line item is a subscription or a proration. + """ + subscription: Optional[ExpandableField["Subscription"]] + taxes: Optional[List[Tax]] + """ + The tax information of the line item. + """ + + @classmethod + def modify( + cls, invoice: str, line_item_id: str, **params + ) -> "InvoiceLineItem": + """ + Updates an invoice's line item. Some fields, such as tax_amounts, only live on the invoice line item, + so they can only be updated through this endpoint. Other fields, such as amount, live on both the invoice + item and the invoice line item, so updates on this endpoint will propagate to the invoice item as well. + Updating an invoice's line item is only possible before the invoice is finalized. + """ + url = "/v1/invoices/%s/lines/%s" % ( + sanitize_id(invoice), + sanitize_id(line_item_id), + ) + return cast( + "InvoiceLineItem", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, invoice: str, line_item_id: str, **params + ) -> "InvoiceLineItem": + """ + Updates an invoice's line item. Some fields, such as tax_amounts, only live on the invoice line item, + so they can only be updated through this endpoint. Other fields, such as amount, live on both the invoice + item and the invoice line item, so updates on this endpoint will propagate to the invoice item as well. + Updating an invoice's line item is only possible before the invoice is finalized. + """ + url = "/v1/invoices/%s/lines/%s" % ( + sanitize_id(invoice), + sanitize_id(line_item_id), + ) + return cast( + "InvoiceLineItem", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + _inner_class_types = { + "discount_amounts": DiscountAmount, + "parent": Parent, + "period": Period, + "pretax_credit_amounts": PretaxCreditAmount, + "pricing": Pricing, + "taxes": Tax, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item_service.py new file mode 100644 index 00000000..fde1d01d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_line_item_service.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice_line_item import InvoiceLineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._invoice_line_item_list_params import ( + InvoiceLineItemListParams, + ) + from stripe.params._invoice_line_item_update_params import ( + InvoiceLineItemUpdateParams, + ) + + +class InvoiceLineItemService(StripeService): + def list( + self, + invoice: str, + params: Optional["InvoiceLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceLineItem]": + """ + When retrieving an invoice, you'll get a lines property containing the total count of line items and the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[InvoiceLineItem]", + self._request( + "get", + "/v1/invoices/{invoice}/lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + invoice: str, + params: Optional["InvoiceLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceLineItem]": + """ + When retrieving an invoice, you'll get a lines property containing the total count of line items and the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[InvoiceLineItem]", + await self._request_async( + "get", + "/v1/invoices/{invoice}/lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + invoice: str, + line_item_id: str, + params: Optional["InvoiceLineItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceLineItem": + """ + Updates an invoice's line item. Some fields, such as tax_amounts, only live on the invoice line item, + so they can only be updated through this endpoint. Other fields, such as amount, live on both the invoice + item and the invoice line item, so updates on this endpoint will propagate to the invoice item as well. + Updating an invoice's line item is only possible before the invoice is finalized. + """ + return cast( + "InvoiceLineItem", + self._request( + "post", + "/v1/invoices/{invoice}/lines/{line_item_id}".format( + invoice=sanitize_id(invoice), + line_item_id=sanitize_id(line_item_id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + invoice: str, + line_item_id: str, + params: Optional["InvoiceLineItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceLineItem": + """ + Updates an invoice's line item. Some fields, such as tax_amounts, only live on the invoice line item, + so they can only be updated through this endpoint. Other fields, such as amount, live on both the invoice + item and the invoice line item, so updates on this endpoint will propagate to the invoice item as well. + Updating an invoice's line item is only possible before the invoice is finalized. + """ + return cast( + "InvoiceLineItem", + await self._request_async( + "post", + "/v1/invoices/{invoice}/lines/{line_item_id}".format( + invoice=sanitize_id(invoice), + line_item_id=sanitize_id(line_item_id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment.py new file mode 100644 index 00000000..a66e0806 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._invoice import Invoice + from stripe._payment_intent import PaymentIntent + from stripe._payment_record import PaymentRecord + from stripe.params._invoice_payment_list_params import ( + InvoicePaymentListParams, + ) + from stripe.params._invoice_payment_retrieve_params import ( + InvoicePaymentRetrieveParams, + ) + + +class InvoicePayment(ListableAPIResource["InvoicePayment"]): + """ + Invoice Payments represent payments made against invoices. Invoice Payments can + be accessed in two ways: + 1. By expanding the `payments` field on the [Invoice](https://stripe.com/docs/api#invoice) resource. + 2. By using the Invoice Payment retrieve and list endpoints. + + Invoice Payments include the mapping between payment objects, such as Payment Intent, and Invoices. + This resource and its endpoints allows you to easily track if a payment is associated with a specific invoice and + monitor the allocation details of the payments. + """ + + OBJECT_NAME: ClassVar[Literal["invoice_payment"]] = "invoice_payment" + + class Payment(StripeObject): + charge: Optional[ExpandableField["Charge"]] + """ + ID of the successful charge for this payment when `type` is `charge`.Note: charge is only surfaced if the charge object is not associated with a payment intent. If the charge object does have a payment intent, the Invoice Payment surfaces the payment intent instead. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + ID of the PaymentIntent associated with this payment when `type` is `payment_intent`. Note: This property is only populated for invoices finalized on or after March 15th, 2019. + """ + payment_record: Optional[ExpandableField["PaymentRecord"]] + """ + ID of the PaymentRecord associated with this payment when `type` is `payment_record`. + """ + type: Literal["charge", "payment_intent", "payment_record"] + """ + Type of payment object associated with this invoice payment. + """ + + class StatusTransitions(StripeObject): + canceled_at: Optional[int] + """ + The time that the payment was canceled. + """ + paid_at: Optional[int] + """ + The time that the payment succeeded. + """ + + amount_paid: Optional[int] + """ + Amount that was actually paid for this invoice, in cents (or local equivalent). This field is null until the payment is `paid`. This amount can be less than the `amount_requested` if the PaymentIntent's `amount_received` is not sufficient to pay all of the invoices that it is attached to. + """ + amount_requested: int + """ + Amount intended to be paid toward this invoice, in cents (or local equivalent) + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + id: str + """ + Unique identifier for the object. + """ + invoice: ExpandableField["Invoice"] + """ + The invoice that was paid. + """ + is_default: bool + """ + Stripe automatically creates a default InvoicePayment when the invoice is finalized, and keeps it synchronized with the invoice's `amount_remaining`. The PaymentIntent associated with the default payment can't be edited or canceled directly. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["invoice_payment"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment: Payment + status: str + """ + The status of the payment, one of `open`, `paid`, or `canceled`. + """ + status_transitions: StatusTransitions + + @classmethod + def list( + cls, **params: Unpack["InvoicePaymentListParams"] + ) -> ListObject["InvoicePayment"]: + """ + When retrieving an invoice, there is an includable payments property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of payments. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["InvoicePaymentListParams"] + ) -> ListObject["InvoicePayment"]: + """ + When retrieving an invoice, there is an includable payments property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of payments. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["InvoicePaymentRetrieveParams"] + ) -> "InvoicePayment": + """ + Retrieves the invoice payment with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["InvoicePaymentRetrieveParams"] + ) -> "InvoicePayment": + """ + Retrieves the invoice payment with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "payment": Payment, + "status_transitions": StatusTransitions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment_service.py new file mode 100644 index 00000000..c7e998e3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_payment_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice_payment import InvoicePayment + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._invoice_payment_list_params import ( + InvoicePaymentListParams, + ) + from stripe.params._invoice_payment_retrieve_params import ( + InvoicePaymentRetrieveParams, + ) + + +class InvoicePaymentService(StripeService): + def list( + self, + params: Optional["InvoicePaymentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoicePayment]": + """ + When retrieving an invoice, there is an includable payments property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of payments. + """ + return cast( + "ListObject[InvoicePayment]", + self._request( + "get", + "/v1/invoice_payments", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["InvoicePaymentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoicePayment]": + """ + When retrieving an invoice, there is an includable payments property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of payments. + """ + return cast( + "ListObject[InvoicePayment]", + await self._request_async( + "get", + "/v1/invoice_payments", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + invoice_payment: str, + params: Optional["InvoicePaymentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoicePayment": + """ + Retrieves the invoice payment with the given ID. + """ + return cast( + "InvoicePayment", + self._request( + "get", + "/v1/invoice_payments/{invoice_payment}".format( + invoice_payment=sanitize_id(invoice_payment), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + invoice_payment: str, + params: Optional["InvoicePaymentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoicePayment": + """ + Retrieves the invoice payment with the given ID. + """ + return cast( + "InvoicePayment", + await self._request_async( + "get", + "/v1/invoice_payments/{invoice_payment}".format( + invoice_payment=sanitize_id(invoice_payment), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template.py new file mode 100644 index 00000000..93965201 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template.py @@ -0,0 +1,364 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._invoice_rendering_template_archive_params import ( + InvoiceRenderingTemplateArchiveParams, + ) + from stripe.params._invoice_rendering_template_list_params import ( + InvoiceRenderingTemplateListParams, + ) + from stripe.params._invoice_rendering_template_retrieve_params import ( + InvoiceRenderingTemplateRetrieveParams, + ) + from stripe.params._invoice_rendering_template_unarchive_params import ( + InvoiceRenderingTemplateUnarchiveParams, + ) + + +class InvoiceRenderingTemplate( + ListableAPIResource["InvoiceRenderingTemplate"] +): + """ + Invoice Rendering Templates are used to configure how invoices are rendered on surfaces like the PDF. Invoice Rendering Templates + can be created from within the Dashboard, and they can be used over the API when creating invoices. + """ + + OBJECT_NAME: ClassVar[Literal["invoice_rendering_template"]] = ( + "invoice_rendering_template" + ) + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + nickname: Optional[str] + """ + A brief description of the template, hidden from customers + """ + object: Literal["invoice_rendering_template"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "archived"] + """ + The status of the template, one of `active` or `archived`. + """ + version: int + """ + Version of this template; version increases by one when an update on the template changes any field that controls invoice rendering + """ + + @classmethod + def _cls_archive( + cls, + template: str, + **params: Unpack["InvoiceRenderingTemplateArchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + cls._static_request( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(template) + ), + params=params, + ), + ) + + @overload + @staticmethod + def archive( + template: str, + **params: Unpack["InvoiceRenderingTemplateArchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + ... + + @overload + def archive( + self, **params: Unpack["InvoiceRenderingTemplateArchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + ... + + @class_method_variant("_cls_archive") + def archive( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRenderingTemplateArchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + self._request( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_archive_async( + cls, + template: str, + **params: Unpack["InvoiceRenderingTemplateArchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + await cls._static_request_async( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(template) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def archive_async( + template: str, + **params: Unpack["InvoiceRenderingTemplateArchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + ... + + @overload + async def archive_async( + self, **params: Unpack["InvoiceRenderingTemplateArchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + ... + + @class_method_variant("_cls_archive_async") + async def archive_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRenderingTemplateArchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + await self._request_async( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["InvoiceRenderingTemplateListParams"] + ) -> ListObject["InvoiceRenderingTemplate"]: + """ + List all templates, ordered by creation date, with the most recently created template appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["InvoiceRenderingTemplateListParams"] + ) -> ListObject["InvoiceRenderingTemplate"]: + """ + List all templates, ordered by creation date, with the most recently created template appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, + id: str, + **params: Unpack["InvoiceRenderingTemplateRetrieveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Retrieves an invoice rendering template with the given ID. It by default returns the latest version of the template. Optionally, specify a version to see previous versions. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, + id: str, + **params: Unpack["InvoiceRenderingTemplateRetrieveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Retrieves an invoice rendering template with the given ID. It by default returns the latest version of the template. Optionally, specify a version to see previous versions. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_unarchive( + cls, + template: str, + **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + cls._static_request( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(template) + ), + params=params, + ), + ) + + @overload + @staticmethod + def unarchive( + template: str, + **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + ... + + @overload + def unarchive( + self, **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + ... + + @class_method_variant("_cls_unarchive") + def unarchive( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + self._request( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_unarchive_async( + cls, + template: str, + **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + await cls._static_request_async( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(template) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def unarchive_async( + template: str, + **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"], + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + ... + + @overload + async def unarchive_async( + self, **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + ... + + @class_method_variant("_cls_unarchive_async") + async def unarchive_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["InvoiceRenderingTemplateUnarchiveParams"] + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + await self._request_async( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(self.get("id")) + ), + params=params, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template_service.py new file mode 100644 index 00000000..674bc2b5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_rendering_template_service.py @@ -0,0 +1,195 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice_rendering_template import InvoiceRenderingTemplate + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._invoice_rendering_template_archive_params import ( + InvoiceRenderingTemplateArchiveParams, + ) + from stripe.params._invoice_rendering_template_list_params import ( + InvoiceRenderingTemplateListParams, + ) + from stripe.params._invoice_rendering_template_retrieve_params import ( + InvoiceRenderingTemplateRetrieveParams, + ) + from stripe.params._invoice_rendering_template_unarchive_params import ( + InvoiceRenderingTemplateUnarchiveParams, + ) + + +class InvoiceRenderingTemplateService(StripeService): + def list( + self, + params: Optional["InvoiceRenderingTemplateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceRenderingTemplate]": + """ + List all templates, ordered by creation date, with the most recently created template appearing first. + """ + return cast( + "ListObject[InvoiceRenderingTemplate]", + self._request( + "get", + "/v1/invoice_rendering_templates", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["InvoiceRenderingTemplateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[InvoiceRenderingTemplate]": + """ + List all templates, ordered by creation date, with the most recently created template appearing first. + """ + return cast( + "ListObject[InvoiceRenderingTemplate]", + await self._request_async( + "get", + "/v1/invoice_rendering_templates", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + template: str, + params: Optional["InvoiceRenderingTemplateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Retrieves an invoice rendering template with the given ID. It by default returns the latest version of the template. Optionally, specify a version to see previous versions. + """ + return cast( + "InvoiceRenderingTemplate", + self._request( + "get", + "/v1/invoice_rendering_templates/{template}".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + template: str, + params: Optional["InvoiceRenderingTemplateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Retrieves an invoice rendering template with the given ID. It by default returns the latest version of the template. Optionally, specify a version to see previous versions. + """ + return cast( + "InvoiceRenderingTemplate", + await self._request_async( + "get", + "/v1/invoice_rendering_templates/{template}".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def archive( + self, + template: str, + params: Optional["InvoiceRenderingTemplateArchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + self._request( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def archive_async( + self, + template: str, + params: Optional["InvoiceRenderingTemplateArchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Updates the status of an invoice rendering template to ‘archived' so no new Stripe objects (customers, invoices, etc.) can reference it. The template can also no longer be updated. However, if the template is already set on a Stripe object, it will continue to be applied on invoices generated by it. + """ + return cast( + "InvoiceRenderingTemplate", + await self._request_async( + "post", + "/v1/invoice_rendering_templates/{template}/archive".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def unarchive( + self, + template: str, + params: Optional["InvoiceRenderingTemplateUnarchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + self._request( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def unarchive_async( + self, + template: str, + params: Optional["InvoiceRenderingTemplateUnarchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "InvoiceRenderingTemplate": + """ + Unarchive an invoice rendering template so it can be used on new Stripe objects again. + """ + return cast( + "InvoiceRenderingTemplate", + await self._request_async( + "post", + "/v1/invoice_rendering_templates/{template}/unarchive".format( + template=sanitize_id(template), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_service.py new file mode 100644 index 00000000..e77cf596 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_invoice_service.py @@ -0,0 +1,802 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice import Invoice + from stripe._invoice_line_item_service import InvoiceLineItemService + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._invoice_add_lines_params import InvoiceAddLinesParams + from stripe.params._invoice_attach_payment_params import ( + InvoiceAttachPaymentParams, + ) + from stripe.params._invoice_create_params import InvoiceCreateParams + from stripe.params._invoice_create_preview_params import ( + InvoiceCreatePreviewParams, + ) + from stripe.params._invoice_delete_params import InvoiceDeleteParams + from stripe.params._invoice_finalize_invoice_params import ( + InvoiceFinalizeInvoiceParams, + ) + from stripe.params._invoice_list_params import InvoiceListParams + from stripe.params._invoice_mark_uncollectible_params import ( + InvoiceMarkUncollectibleParams, + ) + from stripe.params._invoice_pay_params import InvoicePayParams + from stripe.params._invoice_remove_lines_params import ( + InvoiceRemoveLinesParams, + ) + from stripe.params._invoice_retrieve_params import InvoiceRetrieveParams + from stripe.params._invoice_search_params import InvoiceSearchParams + from stripe.params._invoice_send_invoice_params import ( + InvoiceSendInvoiceParams, + ) + from stripe.params._invoice_update_lines_params import ( + InvoiceUpdateLinesParams, + ) + from stripe.params._invoice_update_params import InvoiceUpdateParams + from stripe.params._invoice_void_invoice_params import ( + InvoiceVoidInvoiceParams, + ) + +_subservices = { + "line_items": [ + "stripe._invoice_line_item_service", + "InvoiceLineItemService", + ], +} + + +class InvoiceService(StripeService): + line_items: "InvoiceLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def delete( + self, + invoice: str, + params: Optional["InvoiceDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + return cast( + "Invoice", + self._request( + "delete", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + invoice: str, + params: Optional["InvoiceDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to delete invoices that are no longer in a draft state will fail; once an invoice has been finalized or if an invoice is for a subscription, it must be [voided](https://docs.stripe.com/api#void_invoice). + """ + return cast( + "Invoice", + await self._request_async( + "delete", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + invoice: str, + params: Optional["InvoiceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Retrieves the invoice with the given ID. + """ + return cast( + "Invoice", + self._request( + "get", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + invoice: str, + params: Optional["InvoiceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Retrieves the invoice with the given ID. + """ + return cast( + "Invoice", + await self._request_async( + "get", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + invoice: str, + params: Optional["InvoiceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Draft invoices are fully editable. Once an invoice is [finalized](https://docs.stripe.com/docs/billing/invoices/workflow#finalized), + monetary values, as well as collection_method, become uneditable. + + If you would like to stop the Stripe Billing engine from automatically finalizing, reattempting payments on, + sending reminders for, or [automatically reconciling](https://docs.stripe.com/docs/billing/invoices/reconciliation) invoices, pass + auto_advance=false. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + invoice: str, + params: Optional["InvoiceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Draft invoices are fully editable. Once an invoice is [finalized](https://docs.stripe.com/docs/billing/invoices/workflow#finalized), + monetary values, as well as collection_method, become uneditable. + + If you would like to stop the Stripe Billing engine from automatically finalizing, reattempting payments on, + sending reminders for, or [automatically reconciling](https://docs.stripe.com/docs/billing/invoices/reconciliation) invoices, pass + auto_advance=false. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}".format(invoice=sanitize_id(invoice)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["InvoiceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Invoice]": + """ + You can list all invoices, or list the invoices for a specific customer. The invoices are returned sorted by creation date, with the most recently created invoices appearing first. + """ + return cast( + "ListObject[Invoice]", + self._request( + "get", + "/v1/invoices", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["InvoiceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Invoice]": + """ + You can list all invoices, or list the invoices for a specific customer. The invoices are returned sorted by creation date, with the most recently created invoices appearing first. + """ + return cast( + "ListObject[Invoice]", + await self._request_async( + "get", + "/v1/invoices", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["InvoiceCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + This endpoint creates a draft invoice for a given customer. The invoice remains a draft until you [finalize the invoice, which allows you to [pay](#pay_invoice) or send](https://docs.stripe.com/api#finalize_invoice) the invoice to your customers. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["InvoiceCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + This endpoint creates a draft invoice for a given customer. The invoice remains a draft until you [finalize the invoice, which allows you to [pay](#pay_invoice) or send](https://docs.stripe.com/api#finalize_invoice) the invoice to your customers. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices", + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "InvoiceSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Invoice]": + """ + Search for invoices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Invoice]", + self._request( + "get", + "/v1/invoices/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "InvoiceSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Invoice]": + """ + Search for invoices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Invoice]", + await self._request_async( + "get", + "/v1/invoices/search", + base_address="api", + params=params, + options=options, + ), + ) + + def add_lines( + self, + invoice: str, + params: "InvoiceAddLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def add_lines_async( + self, + invoice: str, + params: "InvoiceAddLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Adds multiple line items to an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/add_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def attach_payment( + self, + invoice: str, + params: Optional["InvoiceAttachPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def attach_payment_async( + self, + invoice: str, + params: Optional["InvoiceAttachPaymentParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Attaches a PaymentIntent or an Out of Band Payment to the invoice, adding it to the list of payments. + + For the PaymentIntent, when the PaymentIntent's status changes to succeeded, the payment is credited + to the invoice, increasing its amount_paid. When the invoice is fully paid, the + invoice's status becomes paid. + + If the PaymentIntent's status is already succeeded when it's attached, it's + credited to the invoice immediately. + + See: [Partial payments](https://docs.stripe.com/docs/invoicing/partial-payments) to learn more. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/attach_payment".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def finalize_invoice( + self, + invoice: str, + params: Optional["InvoiceFinalizeInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def finalize_invoice_async( + self, + invoice: str, + params: Optional["InvoiceFinalizeInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe automatically finalizes drafts before sending and attempting payment on invoices. However, if you'd like to finalize a draft invoice manually, you can do so using this method. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def mark_uncollectible( + self, + invoice: str, + params: Optional["InvoiceMarkUncollectibleParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def mark_uncollectible_async( + self, + invoice: str, + params: Optional["InvoiceMarkUncollectibleParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Marking an invoice as uncollectible is useful for keeping track of bad debts that can be written off for accounting purposes. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def pay( + self, + invoice: str, + params: Optional["InvoicePayParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def pay_async( + self, + invoice: str, + params: Optional["InvoicePayParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe automatically creates and then attempts to collect payment on invoices for customers on subscriptions according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to attempt payment on an invoice out of the normal collection schedule or for some other reason, you can do so. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def remove_lines( + self, + invoice: str, + params: "InvoiceRemoveLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def remove_lines_async( + self, + invoice: str, + params: "InvoiceRemoveLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Removes multiple line items from an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/remove_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def send_invoice( + self, + invoice: str, + params: Optional["InvoiceSendInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def send_invoice_async( + self, + invoice: str, + params: Optional["InvoiceSendInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Stripe will automatically send invoices to customers according to your [subscriptions settings](https://dashboard.stripe.com/account/billing/automatic). However, if you'd like to manually send an invoice to your customer out of the normal schedule, you can do so. When sending invoices that have already been paid, there will be no reference to the payment in the email. + + Requests made in test-mode result in no emails being sent, despite sending an invoice.sent event. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update_lines( + self, + invoice: str, + params: "InvoiceUpdateLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_lines_async( + self, + invoice: str, + params: "InvoiceUpdateLinesParams", + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Updates multiple line items on an invoice. This is only possible when an invoice is still a draft. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/update_lines".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def void_invoice( + self, + invoice: str, + params: Optional["InvoiceVoidInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def void_invoice_async( + self, + invoice: str, + params: Optional["InvoiceVoidInvoiceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is similar to [deletion](https://docs.stripe.com/api#delete_invoice), however it only applies to finalized invoices and maintains a papertrail where the invoice can still be found. + + Consult with local regulations to determine whether and how an invoice might be amended, canceled, or voided in the jurisdiction you're doing business in. You might need to [issue another invoice or credit note](https://docs.stripe.com/api#create_invoice) instead. Stripe recommends that you consult with your legal counsel for advice specific to your business. + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=sanitize_id(invoice), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create_preview( + self, + params: Optional["InvoiceCreatePreviewParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + At any time, you can preview the upcoming invoice for a subscription or subscription schedule. This will show you all the charges that are pending, including subscription renewal charges, invoice item charges, etc. It will also show you any discounts that are applicable to the invoice. + + You can also preview the effects of creating or updating a subscription or subscription schedule, including a preview of any prorations that will take place. To ensure that the actual proration is calculated exactly the same as the previewed proration, you should pass the subscription_details.proration_date parameter when doing the actual subscription update. + + The recommended way to get only the prorations being previewed on the invoice is to consider line items where parent.subscription_item_details.proration is true. + + Note that when you are viewing an upcoming invoice, you are simply viewing a preview – the invoice has not yet been created. As such, the upcoming invoice will not show up in invoice listing calls, and you cannot use the API to pay or edit the invoice. If you want to change the amount that your customer will be billed, you can add, remove, or update pending invoice items, or update the customer's discount. + + Note: Currency conversion calculations use the latest exchange rates. Exchange rates may vary between the time of the preview and the time of the actual invoice creation. [Learn more](https://docs.stripe.com/currencies/conversions) + """ + return cast( + "Invoice", + self._request( + "post", + "/v1/invoices/create_preview", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_preview_async( + self, + params: Optional["InvoiceCreatePreviewParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Invoice": + """ + At any time, you can preview the upcoming invoice for a subscription or subscription schedule. This will show you all the charges that are pending, including subscription renewal charges, invoice item charges, etc. It will also show you any discounts that are applicable to the invoice. + + You can also preview the effects of creating or updating a subscription or subscription schedule, including a preview of any prorations that will take place. To ensure that the actual proration is calculated exactly the same as the previewed proration, you should pass the subscription_details.proration_date parameter when doing the actual subscription update. + + The recommended way to get only the prorations being previewed on the invoice is to consider line items where parent.subscription_item_details.proration is true. + + Note that when you are viewing an upcoming invoice, you are simply viewing a preview – the invoice has not yet been created. As such, the upcoming invoice will not show up in invoice listing calls, and you cannot use the API to pay or edit the invoice. If you want to change the amount that your customer will be billed, you can add, remove, or update pending invoice items, or update the customer's discount. + + Note: Currency conversion calculations use the latest exchange rates. Exchange rates may vary between the time of the preview and the time of the actual invoice creation. [Learn more](https://docs.stripe.com/currencies/conversions) + """ + return cast( + "Invoice", + await self._request_async( + "post", + "/v1/invoices/create_preview", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_issuing_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_issuing_service.py new file mode 100644 index 00000000..50539d21 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_issuing_service.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._authorization_service import AuthorizationService + from stripe.issuing._card_service import CardService + from stripe.issuing._cardholder_service import CardholderService + from stripe.issuing._dispute_service import DisputeService + from stripe.issuing._personalization_design_service import ( + PersonalizationDesignService, + ) + from stripe.issuing._physical_bundle_service import PhysicalBundleService + from stripe.issuing._token_service import TokenService + from stripe.issuing._transaction_service import TransactionService + +_subservices = { + "authorizations": [ + "stripe.issuing._authorization_service", + "AuthorizationService", + ], + "cards": ["stripe.issuing._card_service", "CardService"], + "cardholders": ["stripe.issuing._cardholder_service", "CardholderService"], + "disputes": ["stripe.issuing._dispute_service", "DisputeService"], + "personalization_designs": [ + "stripe.issuing._personalization_design_service", + "PersonalizationDesignService", + ], + "physical_bundles": [ + "stripe.issuing._physical_bundle_service", + "PhysicalBundleService", + ], + "tokens": ["stripe.issuing._token_service", "TokenService"], + "transactions": [ + "stripe.issuing._transaction_service", + "TransactionService", + ], +} + + +class IssuingService(StripeService): + authorizations: "AuthorizationService" + cards: "CardService" + cardholders: "CardholderService" + disputes: "DisputeService" + personalization_designs: "PersonalizationDesignService" + physical_bundles: "PhysicalBundleService" + tokens: "TokenService" + transactions: "TransactionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_line_item.py new file mode 100644 index 00000000..1df60f0a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_line_item.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._discount import Discount as DiscountResource + from stripe._price import Price + from stripe._tax_rate import TaxRate + + +class LineItem(StripeObject): + """ + A line item. + """ + + OBJECT_NAME: ClassVar[Literal["item"]] = "item" + + class Discount(StripeObject): + amount: int + """ + The amount discounted. + """ + discount: "DiscountResource" + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + amount_discount: int + """ + Total discount amount applied. If no discounts were applied, defaults to 0. + """ + amount_subtotal: int + """ + Total before any discounts or taxes are applied. + """ + amount_tax: int + """ + Total tax amount applied. If no tax was applied, defaults to 0. + """ + amount_total: int + """ + Total after discounts and taxes. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. Defaults to product name. + """ + discounts: Optional[List[Discount]] + """ + The discounts applied to the line item. + """ + id: str + """ + Unique identifier for the object. + """ + object: Literal["item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + price: Optional["Price"] + """ + The price used to generate the line item. + """ + quantity: Optional[int] + """ + The quantity of products being purchased. + """ + taxes: Optional[List[Tax]] + """ + The taxes applied to the line item. + """ + _inner_class_types = {"discounts": Discount, "taxes": Tax} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_list_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/_list_object.py new file mode 100644 index 00000000..d2daa3b5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_list_object.py @@ -0,0 +1,257 @@ +# pyright: strict, reportUnnecessaryTypeIgnoreComment=false +# reportUnnecessaryTypeIgnoreComment is set to false because some type ignores are required in some +# python versions but not the others +from typing_extensions import Self, Unpack + +from typing import ( + Any, + AsyncIterator, + Iterator, + List, + Generic, + TypeVar, + cast, + Mapping, +) +from stripe._api_requestor import ( + _APIRequestor, # pyright: ignore[reportPrivateUsage] +) +from stripe._any_iterator import AnyIterator +from stripe._stripe_object import StripeObject +from stripe._request_options import RequestOptions, extract_options_from_dict + +from urllib.parse import quote_plus + + +T = TypeVar("T", bound=StripeObject) + + +class ListObject(StripeObject, Generic[T]): + OBJECT_NAME = "list" + data: List[T] + has_more: bool + url: str + + def _get_url_for_list(self) -> str: + url = self.get("url") + if not isinstance(url, str): + raise ValueError( + 'Cannot call .list on a list object without a string "url" property' + ) + return url + + def list(self, **params: Mapping[str, Any]) -> Self: + return cast( + Self, + self._request( + "get", + self._get_url_for_list(), + params=params, + base_address="api", + ), + ) + + async def list_async(self, **params: Mapping[str, Any]) -> Self: + return cast( + Self, + await self._request_async( + "get", + self._get_url_for_list(), + params=params, + base_address="api", + ), + ) + + def create(self, **params: Mapping[str, Any]) -> T: + url = self.get("url") + if not isinstance(url, str): + raise ValueError( + 'Cannot call .create on a list object for the collection of an object without a string "url" property' + ) + return cast( + T, + self._request( + "post", + url, + params=params, + base_address="api", + ), + ) + + def retrieve(self, id: str, **params: Mapping[str, Any]): + url = self.get("url") + if not isinstance(url, str): + raise ValueError( + 'Cannot call .retrieve on a list object for the collection of an object without a string "url" property' + ) + + url = "%s/%s" % (self.get("url"), quote_plus(id)) + return cast( + T, + self._request( + "get", + url, + params=params, + base_address="api", + ), + ) + + def __getitem__(self, k: str) -> T: + if isinstance(k, str): # pyright: ignore + return super(ListObject, self).__getitem__(k) + else: + raise KeyError( + "You tried to access the %s index, but ListObject types only " + "support string keys. (HINT: List calls return an object with " + "a 'data' (which is the data array). You likely want to call " + ".data[%s])" % (repr(k), repr(k)) + ) + + # Pyright doesn't like this because ListObject inherits from StripeObject inherits from Dict[str, Any] + # and so it wants the type of __iter__ to agree with __iter__ from Dict[str, Any] + # But we are iterating through "data", which is a List[T]. + def __iter__( # pyright: ignore + self, + ) -> Iterator[T]: + return getattr(self, "data", []).__iter__() + + def __len__(self) -> int: + return getattr(self, "data", []).__len__() + + def __reversed__(self) -> Iterator[T]: # pyright: ignore (see above) + return getattr(self, "data", []).__reversed__() + + def auto_paging_iter(self) -> AnyIterator[T]: + return AnyIterator( + self._auto_paging_iter(), + self._auto_paging_iter_async(), + ) + + def _auto_paging_iter(self) -> Iterator[T]: + page = self + + while True: + if ( + self._retrieve_params.get("ending_before") is not None + and self._retrieve_params.get("starting_after") is None + ): + for item in reversed(page): + yield item + page = page.previous_page() + else: + for item in page: + yield item + page = page.next_page() + + if page.is_empty: + break + + async def _auto_paging_iter_async(self) -> AsyncIterator[T]: + page = self + + while True: + if ( + self._retrieve_params.get("ending_before") is not None + and self._retrieve_params.get("starting_after") is None + ): + for item in reversed(page): + yield item + page = await page.previous_page_async() + else: + for item in page: + yield item + page = await page.next_page_async() + + if page.is_empty: + break + + @classmethod + def _empty_list( + cls, + **params: Unpack[RequestOptions], + ) -> Self: + return cls._construct_from( + values={"data": []}, + last_response=None, + requestor=_APIRequestor._global_with_options( # pyright: ignore[reportPrivateUsage] + **params, + ), + api_mode="V1", + ) + + @property + def is_empty(self) -> bool: + return not self.data + + def _get_filters_for_next_page( + self, params: RequestOptions + ) -> Mapping[str, Any]: + last_id = getattr(self.data[-1], "id") + if not last_id: + raise ValueError( + "Unexpected: element in .data of list object had no id" + ) + + params_with_filters = dict(self._retrieve_params) + params_with_filters.update({"starting_after": last_id}) + params_with_filters.update(params) + return params_with_filters + + def next_page(self, **params: Unpack[RequestOptions]) -> Self: + if not self.has_more: + request_options, _ = extract_options_from_dict(params) + return self._empty_list( + **request_options, + ) + return self.list( + **self._get_filters_for_next_page(params), + ) + + async def next_page_async(self, **params: Unpack[RequestOptions]) -> Self: + if not self.has_more: + request_options, _ = extract_options_from_dict(params) + return self._empty_list( + **request_options, + ) + + return await self.list_async(**self._get_filters_for_next_page(params)) + + def _get_filters_for_previous_page( + self, params: RequestOptions + ) -> Mapping[str, Any]: + first_id = getattr(self.data[0], "id") + if not first_id: + raise ValueError( + "Unexpected: element in .data of list object had no id" + ) + + params_with_filters = dict(self._retrieve_params) + params_with_filters.update({"ending_before": first_id}) + params_with_filters.update(params) + return params_with_filters + + def previous_page(self, **params: Unpack[RequestOptions]) -> Self: + if not self.has_more: + request_options, _ = extract_options_from_dict(params) + return self._empty_list( + **request_options, + ) + + result = self.list( + **self._get_filters_for_previous_page(params), + ) + return result + + async def previous_page_async( + self, **params: Unpack[RequestOptions] + ) -> Self: + if not self.has_more: + request_options, _ = extract_options_from_dict(params) + return self._empty_list( + **request_options, + ) + + result = await self.list_async( + **self._get_filters_for_previous_page(params) + ) + return result diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_listable_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_listable_api_resource.py new file mode 100644 index 00000000..ea2b4b8b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_listable_api_resource.py @@ -0,0 +1,31 @@ +from stripe._api_resource import APIResource +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from typing import TypeVar + +T = TypeVar("T", bound=StripeObject) + +# TODO(major): 1704 - remove this class and all internal usages. `.list` is already inlined into the resource classes. +# Although we should inline .auto_paging_iter into the resource classes as well. + + +class ListableAPIResource(APIResource[T]): + @classmethod + def auto_paging_iter(cls, **params): + return cls.list(**params).auto_paging_iter() + + @classmethod + def list(cls, **params) -> ListObject[T]: + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__,) + ) + + return result diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_login_link.py b/Backend/venv/lib/python3.12/site-packages/stripe/_login_link.py new file mode 100644 index 00000000..d3cc679d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_login_link.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal + + +class LoginLink(StripeObject): + """ + Login Links are single-use URLs that takes an Express account to the login page for their Stripe dashboard. + A Login Link differs from an [Account Link](https://stripe.com/docs/api/account_links) in that it takes the user directly to their [Express dashboard for the specified account](https://stripe.com/docs/connect/integrate-express-dashboard#create-login-link) + """ + + OBJECT_NAME: ClassVar[Literal["login_link"]] = "login_link" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + object: Literal["login_link"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + url: str + """ + The URL for the login link. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_mandate.py b/Backend/venv/lib/python3.12/site-packages/stripe/_mandate.py new file mode 100644 index 00000000..41cdf5f6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_mandate.py @@ -0,0 +1,268 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_resource import APIResource +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._payment_method import PaymentMethod + from stripe.params._mandate_retrieve_params import MandateRetrieveParams + + +class Mandate(APIResource["Mandate"]): + """ + A Mandate is a record of the permission that your customer gives you to debit their payment method. + """ + + OBJECT_NAME: ClassVar[Literal["mandate"]] = "mandate" + + class CustomerAcceptance(StripeObject): + class Offline(StripeObject): + pass + + class Online(StripeObject): + ip_address: Optional[str] + """ + The customer accepts the mandate from this IP address. + """ + user_agent: Optional[str] + """ + The customer accepts the mandate using the user agent of the browser. + """ + + accepted_at: Optional[int] + """ + The time that the customer accepts the mandate. + """ + offline: Optional[Offline] + online: Optional[Online] + type: Literal["offline", "online"] + """ + The mandate includes the type of customer acceptance information, such as: `online` or `offline`. + """ + _inner_class_types = {"offline": Offline, "online": Online} + + class MultiUse(StripeObject): + pass + + class PaymentMethodDetails(StripeObject): + class AcssDebit(StripeObject): + default_for: Optional[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: Optional[str] + """ + Description of the interval. Only required if the 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: Literal["combined", "interval", "sporadic"] + """ + Payment schedule for the mandate. + """ + transaction_type: Literal["business", "personal"] + """ + Transaction type of the mandate. + """ + + class AmazonPay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + url: str + """ + The URL of the mandate. This URL generally contains sensitive information about the customer and should be shared with them exclusively. + """ + + class BacsDebit(StripeObject): + network_status: Literal[ + "accepted", "pending", "refused", "revoked" + ] + """ + The status of the mandate on the Bacs network. Can be one of `pending`, `revoked`, `refused`, or `accepted`. + """ + reference: str + """ + The unique reference identifying the mandate on the Bacs network. + """ + revocation_reason: Optional[ + Literal[ + "account_closed", + "bank_account_restricted", + "bank_ownership_changed", + "could_not_process", + "debit_not_authorized", + ] + ] + """ + When the mandate is revoked on the Bacs network this field displays the reason for the revocation. + """ + url: str + """ + The URL that will contain the mandate that the customer has signed. + """ + + class Card(StripeObject): + pass + + class Cashapp(StripeObject): + pass + + class KakaoPay(StripeObject): + pass + + class Klarna(StripeObject): + pass + + class KrCard(StripeObject): + pass + + class Link(StripeObject): + pass + + class NaverPay(StripeObject): + pass + + class NzBankAccount(StripeObject): + pass + + class Paypal(StripeObject): + billing_agreement_id: Optional[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + + class RevolutPay(StripeObject): + pass + + class SepaDebit(StripeObject): + reference: str + """ + The unique reference of the mandate. + """ + url: str + """ + The URL of the mandate. This URL generally contains sensitive information about the customer and should be shared with them exclusively. + """ + + class UsBankAccount(StripeObject): + collection_method: Optional[Literal["paper"]] + """ + Mandate collection method + """ + + acss_debit: Optional[AcssDebit] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + card: Optional[Card] + cashapp: Optional[Cashapp] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + kr_card: Optional[KrCard] + link: Optional[Link] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + paypal: Optional[Paypal] + revolut_pay: Optional[RevolutPay] + sepa_debit: Optional[SepaDebit] + type: str + """ + This mandate corresponds with a specific payment method type. The `payment_method_details` includes an additional hash with the same name and contains mandate information that's specific to that payment method. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "card": Card, + "cashapp": Cashapp, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "kr_card": KrCard, + "link": Link, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "paypal": Paypal, + "revolut_pay": RevolutPay, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + + class SingleUse(StripeObject): + amount: int + """ + The amount of the payment on a single use mandate. + """ + currency: str + """ + The currency of the payment on a single use mandate. + """ + + customer_acceptance: CustomerAcceptance + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + multi_use: Optional[MultiUse] + object: Literal["mandate"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[str] + """ + The account (if any) that the mandate is intended for. + """ + payment_method: ExpandableField["PaymentMethod"] + """ + ID of the payment method associated with this mandate. + """ + payment_method_details: PaymentMethodDetails + single_use: Optional[SingleUse] + status: Literal["active", "inactive", "pending"] + """ + The mandate status indicates whether or not you can use it to initiate a payment. + """ + type: Literal["multi_use", "single_use"] + """ + The type of the mandate. + """ + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["MandateRetrieveParams"] + ) -> "Mandate": + """ + Retrieves a Mandate object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["MandateRetrieveParams"] + ) -> "Mandate": + """ + Retrieves a Mandate object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "customer_acceptance": CustomerAcceptance, + "multi_use": MultiUse, + "payment_method_details": PaymentMethodDetails, + "single_use": SingleUse, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_mandate_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_mandate_service.py new file mode 100644 index 00000000..265674ba --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_mandate_service.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe._request_options import RequestOptions + from stripe.params._mandate_retrieve_params import MandateRetrieveParams + + +class MandateService(StripeService): + def retrieve( + self, + mandate: str, + params: Optional["MandateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Mandate": + """ + Retrieves a Mandate object. + """ + return cast( + "Mandate", + self._request( + "get", + "/v1/mandates/{mandate}".format(mandate=sanitize_id(mandate)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + mandate: str, + params: Optional["MandateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Mandate": + """ + Retrieves a Mandate object. + """ + return cast( + "Mandate", + await self._request_async( + "get", + "/v1/mandates/{mandate}".format(mandate=sanitize_id(mandate)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_multipart_data_generator.py b/Backend/venv/lib/python3.12/site-packages/stripe/_multipart_data_generator.py new file mode 100644 index 00000000..1e0be2ba --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_multipart_data_generator.py @@ -0,0 +1,87 @@ +import random +import io + +from stripe._encode import _api_encode + + +class MultipartDataGenerator(object): + data: io.BytesIO + line_break: str + boundary: int + chunk_size: int + + def __init__(self, chunk_size: int = 1028): + self.data = io.BytesIO() + self.line_break = "\r\n" + self.boundary = self._initialize_boundary() + self.chunk_size = chunk_size + + def add_params(self, params): + # Flatten parameters first + + params = dict(_api_encode(params, "V1")) + + for key, value in params.items(): + if value is None: + continue + + self._write(self.param_header()) + self._write(self.line_break) + if hasattr(value, "read"): + filename = "blob" + if hasattr(value, "name"): + # Convert the filename to string, just in case it's not + # already one. E.g. `tempfile.TemporaryFile` has a `name` + # attribute but it's an `int`. + filename = str(value.name) + + self._write('Content-Disposition: form-data; name="') + self._write(key) + self._write('"; filename="') + self._write(filename) + self._write('"') + self._write(self.line_break) + self._write("Content-Type: application/octet-stream") + self._write(self.line_break) + self._write(self.line_break) + + self._write_file(value) + else: + self._write('Content-Disposition: form-data; name="') + self._write(key) + self._write('"') + self._write(self.line_break) + self._write(self.line_break) + self._write(str(value)) + + self._write(self.line_break) + + def param_header(self): + return "--%s" % self.boundary + + def get_post_data(self): + self._write("--%s--" % (self.boundary,)) + self._write(self.line_break) + return self.data.getvalue() + + def _write(self, value): + if isinstance(value, bytes): + array = bytearray(value) + elif isinstance(value, str): + array = bytearray(value, encoding="utf-8") + else: + raise TypeError( + "unexpected type: {value_type}".format(value_type=type(value)) + ) + + self.data.write(array) + + def _write_file(self, f): + while True: + file_contents = f.read(self.chunk_size) + if not file_contents: + break + self._write(file_contents) + + def _initialize_boundary(self): + return random.randint(0, 2**63) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_nested_resource_class_methods.py b/Backend/venv/lib/python3.12/site-packages/stripe/_nested_resource_class_methods.py new file mode 100644 index 00000000..5eeea6c4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_nested_resource_class_methods.py @@ -0,0 +1,118 @@ +from typing import List, Optional +from urllib.parse import quote_plus + +from stripe._api_resource import APIResource + + +# TODO(major): 1704. Remove this. It is no longer used except for "nested_resource_url" and "nested_resource_request", +# which are unnecessary and deprecated and should also be removed. +def nested_resource_class_methods( + resource: str, + path: Optional[str] = None, + operations: Optional[List[str]] = None, + resource_plural: Optional[str] = None, +): + if resource_plural is None: + resource_plural = "%ss" % resource + if path is None: + path = resource_plural + + def wrapper(cls): + def nested_resource_url(cls, id, nested_id=None): + url = "%s/%s/%s" % ( + cls.class_url(), + quote_plus(id), + quote_plus(path), + ) + if nested_id is not None: + url += "/%s" % quote_plus(nested_id) + return url + + resource_url_method = "%ss_url" % resource + setattr(cls, resource_url_method, classmethod(nested_resource_url)) + + def nested_resource_request(cls, method, url, **params): + return APIResource._static_request( + method, + url, + params=params, + ) + + resource_request_method = "%ss_request" % resource + setattr( + cls, resource_request_method, classmethod(nested_resource_request) + ) + + if operations is None: + return cls + + for operation in operations: + if operation == "create": + + def create_nested_resource(cls, id, **params): + url = getattr(cls, resource_url_method)(id) + return getattr(cls, resource_request_method)( + "post", url, **params + ) + + create_method = "create_%s" % resource + setattr( + cls, create_method, classmethod(create_nested_resource) + ) + + elif operation == "retrieve": + + def retrieve_nested_resource(cls, id, nested_id, **params): + url = getattr(cls, resource_url_method)(id, nested_id) + return getattr(cls, resource_request_method)( + "get", url, **params + ) + + retrieve_method = "retrieve_%s" % resource + setattr( + cls, retrieve_method, classmethod(retrieve_nested_resource) + ) + + elif operation == "update": + + def modify_nested_resource(cls, id, nested_id, **params): + url = getattr(cls, resource_url_method)(id, nested_id) + return getattr(cls, resource_request_method)( + "post", url, **params + ) + + modify_method = "modify_%s" % resource + setattr( + cls, modify_method, classmethod(modify_nested_resource) + ) + + elif operation == "delete": + + def delete_nested_resource(cls, id, nested_id, **params): + url = getattr(cls, resource_url_method)(id, nested_id) + return getattr(cls, resource_request_method)( + "delete", url, **params + ) + + delete_method = "delete_%s" % resource + setattr( + cls, delete_method, classmethod(delete_nested_resource) + ) + + elif operation == "list": + + def list_nested_resources(cls, id, **params): + url = getattr(cls, resource_url_method)(id) + return getattr(cls, resource_request_method)( + "get", url, **params + ) + + list_method = "list_%s" % resource_plural + setattr(cls, list_method, classmethod(list_nested_resources)) + + else: + raise ValueError("Unknown operation: %s" % operation) + + return cls + + return wrapper diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_oauth.py b/Backend/venv/lib/python3.12/site-packages/stripe/_oauth.py new file mode 100644 index 00000000..8f6b9d5d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_oauth.py @@ -0,0 +1,363 @@ +# Used for global variables +from stripe import connect_api_base +from stripe._error import AuthenticationError +from stripe._api_requestor import _APIRequestor +from stripe._encode import _api_encode +from urllib.parse import urlencode +from stripe._stripe_object import StripeObject + +from typing import List, cast, Optional +from typing_extensions import ( + Literal, + NotRequired, + TypedDict, + Unpack, + TYPE_CHECKING, +) + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + + +class OAuth(object): + class OAuthToken(StripeObject): + access_token: Optional[str] + """ + The access token you can use to make requests on behalf of this Stripe account. Use it as you would any Stripe secret API key. + This key does not expire, but may be revoked by the user at any time (you'll get a account.application.deauthorized webhook event when this happens). + """ + scope: Optional[str] + """ + The scope granted to the access token, depending on the scope of the authorization code and scope parameter. + """ + livemode: Optional[bool] + """ + The live mode indicator for the token. If true, the access_token can be used as a live secret key. If false, the access_token can be used as a test secret key. + Depends on the mode of the secret API key used to make the request. + """ + token_type: Optional[Literal["bearer"]] + """ + Will always have a value of bearer. + """ + refresh_token: Optional[str] + """ + Can be used to get a new access token of an equal or lesser scope, or of a different live mode (where applicable). + """ + stripe_user_id: Optional[str] + """ + The unique id of the account you have been granted access to, as a string. + """ + stripe_publishable_key: Optional[str] + """ + A publishable key that can be used with this account. Matches the mode—live or test—of the token. + """ + + class OAuthDeauthorization(StripeObject): + stripe_user_id: str + """ + The unique id of the account you have revoked access to, as a string. + This is the same as the stripe_user_id you passed in. + If this is returned, the revocation was successful. + """ + + class OAuthAuthorizeUrlParams(TypedDict): + client_id: NotRequired[str] + """ + The unique identifier provided to your application, found in your application settings. + """ + response_type: NotRequired[Literal["code"]] + """ + The only option at the moment is `'code'`. + """ + redirect_uri: NotRequired[str] + """ + The URL for the authorize response redirect. If provided, this must exactly match one of the comma-separated redirect_uri values in your application settings. + To protect yourself from certain forms of man-in-the-middle attacks, the live mode redirect_uri must use a secure HTTPS connection. + Defaults to the redirect_uri in your application settings if not provided. + """ + scope: NotRequired[str] + """ + read_write or read_only, depending on the level of access you need. + Defaults to read_only. + """ + state: NotRequired[str] + """ + An arbitrary string value we will pass back to you, useful for CSRF protection. + """ + stripe_landing: NotRequired[str] + """ + login or register, depending on what type of screen you want your users to see. Only override this to be login if you expect all your users to have Stripe accounts already (e.g., most read-only applications, like analytics dashboards or accounting software). + Defaults to login for scope read_only and register for scope read_write. + """ + always_prompt: NotRequired[bool] + """ + Boolean to indicate that the user should always be asked to connect, even if they're already connected. + Defaults to false. + """ + suggested_capabilities: NotRequired[List[str]] + """ + Express only + An array of capabilities to apply to the connected account. + """ + stripe_user: NotRequired["OAuth.OAuthAuthorizeUrlParamsStripeUser"] + """ + Stripe will use these to prefill details in the account form for new users. + Some prefilled fields (e.g., URL or product category) may be automatically hidden from the user's view. + Any parameters with invalid values will be silently ignored. + """ + + class OAuthAuthorizeUrlParamsStripeUser(TypedDict): + """ + A more detailed explanation of what it means for a field to be + required or optional can be found in our API documentation. + See `Account Creation (Overview)` and `Account Update` + """ + + email: NotRequired[str] + """ + Recommended + The user's email address. Must be a valid email format. + """ + url: NotRequired[str] + """ + Recommended + The URL for the user's business. This may be the user's website, a profile page within your application, or another publicly available profile for the business, such as a LinkedIn or Facebook profile. + Must be URL-encoded and include a scheme (http or https). + If you will be prefilling this field, we highly recommend that the linked page contain a description of the user's products or services and their contact information. If we don't have enough information, we'll have to reach out to the user directly before initiating payouts. + """ + country: NotRequired[str] + """ + Two-letter country code (e.g., US or CA). + Must be a country that Stripe currently supports. + """ + phone_number: NotRequired[str] + """ + The business phone number. Must be 10 digits only. + Must also prefill stripe_user[country] with the corresponding country. + """ + business_name: NotRequired[str] + """ + The legal name of the business, also used for the statement descriptor. + """ + business_type: NotRequired[str] + """ + The type of the business. + Must be one of sole_prop, corporation, non_profit, partnership, or llc. + """ + first_name: NotRequired[str] + """ + First name of the person who will be filling out a Stripe application. + """ + last_name: NotRequired[str] + """ + Last name of the person who will be filling out a Stripe application. + """ + dob_day: NotRequired[str] + """ + Day (0-31), month (1-12), and year (YYYY, greater than 1900) for the birth date of the person who will be filling out a Stripe application. + If you choose to pass these parameters, you must pass all three. + """ + dob_month: NotRequired[str] + """ + Day (0-31), month (1-12), and year (YYYY, greater than 1900) for the birth date of the person who will be filling out a Stripe application. + If you choose to pass these parameters, you must pass all three. + """ + dob_year: NotRequired[str] + """ + Day (0-31), month (1-12), and year (YYYY, greater than 1900) for the birth date of the person who will be filling out a Stripe application. + If you choose to pass these parameters, you must pass all three. + """ + street_address: NotRequired[str] + """ + Standard only + Street address of the business. + """ + city: NotRequired[str] + """ + Address city of the business. + We highly recommend that you also prefill stripe_user[country] with the corresponding country. + """ + state: NotRequired[str] + """ + Standard only + Address state of the business, must be the two-letter state or province code (e.g., NY for a U.S. business or AB for a Canadian one). + Must also prefill stripe_user[country] with the corresponding country. + """ + zip: NotRequired[str] + """ + Standard only + Address ZIP code of the business, must be a string. + We highly recommend that you also prefill stripe_user[country] with the corresponding country. + """ + physical_product: NotRequired[str] + """ + Standard only + A string: true if the user sells a physical product, false otherwise. + """ + product_description: NotRequired[str] + """ + A description of what the business is accepting payments for. + """ + currency: NotRequired[str] + """ + Standard only + Three-letter ISO code representing currency, in lowercase (e.g., usd or cad). + Must be a valid country and currency combination that Stripe supports. + Must prefill stripe_user[country] with the corresponding country. + """ + first_name_kana: NotRequired[str] + """ + The Kana variation of the first name of the person who will be filling out a Stripe application. + Must prefill stripe_user[country] with JP, as this parameter is only relevant for Japan. + """ + first_name_kanji: NotRequired[str] + """ + The Kanji variation of the first name of the person who will be filling out a Stripe application. + Must prefill stripe_user[country] with JP, as this parameter is only relevant for Japan. + """ + last_name_kana: NotRequired[str] + """ + The Kana variation of the last name of the person who will be filling out a Stripe application. + Must prefill stripe_user[country] with JP, as this parameter is only relevant for Japan. + """ + last_name_kanji: NotRequired[str] + """ + The Kanji variation of the last name of the person who will be filling out a Stripe application. + Must prefill stripe_user[country] with JP, as this parameter is only relevant for Japan. + """ + gender: NotRequired[str] + """ + The gender of the person who will be filling out a Stripe application. (International regulations require either male or female.) + Must prefill stripe_user[country] with JP, as this parameter is only relevant for Japan. + """ + block_kana: NotRequired[str] + """ + Standard only + The Kana variation of the address block. + This parameter is only relevant for Japan. You must prefill stripe_user[country] with JP and stripe_user[zip] with a valid Japanese postal code to use this parameter. + """ + block_kanji: NotRequired[str] + """ + Standard only + The Kanji variation of the address block. + This parameter is only relevant for Japan. You must prefill stripe_user[country] with JP and stripe_user[zip] with a valid Japanese postal code to use this parameter. + """ + building_kana: NotRequired[str] + """ + Standard only + The Kana variation of the address building. + This parameter is only relevant for Japan. You must prefill stripe_user[country] with JP and stripe_user[zip] with a valid Japanese postal code to use this parameter. + """ + building_kanji: NotRequired[str] + """ + Standard only + The Kanji variation of the address building. + This parameter is only relevant for Japan. You must prefill stripe_user[country] with JP and stripe_user[zip] with a valid Japanese postal code to use this parameter. + """ + + class OAuthTokenParams(TypedDict): + grant_type: Literal["authorization_code", "refresh_token"] + """ + `'authorization_code'` when turning an authorization code into an access token, or `'refresh_token'` when using a refresh token to get a new access token. + """ + code: NotRequired[str] + """ + The value of the code or refresh_token, depending on the grant_type. + """ + refresh_token: NotRequired[str] + """ + The value of the code or refresh_token, depending on the grant_type. + """ + scope: NotRequired[str] + """ + When requesting a new access token from a refresh token, any scope that has an equal or lesser scope as the refresh token. Has no effect when requesting an access token from an authorization code. + Defaults to the scope of the refresh token. + """ + assert_capabilities: NotRequired[List[str]] + """ + Express only + Check whether the suggested_capabilities were applied to the connected account. + """ + + class OAuthDeauthorizeParams(TypedDict): + client_id: NotRequired[str] + """ + The client_id of the application that you'd like to disconnect the account from. + The account must be connected to this application. + """ + stripe_user_id: str + """ + The account you'd like to disconnect from. + """ + + @staticmethod + def _set_client_id(params): + if "client_id" in params: + return + + from stripe import client_id + + if client_id: + params["client_id"] = client_id + return + + raise AuthenticationError( + "No client_id provided. (HINT: set your client_id using " + '"stripe.client_id = "). You can find your client_ids ' + "in your Stripe dashboard at " + "https://dashboard.stripe.com/account/applications/settings, " + "after registering your account as a platform. See " + "https://stripe.com/docs/connect/standalone-accounts for details, " + "or email support@stripe.com if you have any questions." + ) + + @staticmethod + def authorize_url( + express: bool = False, **params: Unpack[OAuthAuthorizeUrlParams] + ) -> str: + if express is False: + path = "/oauth/authorize" + else: + path = "/express/oauth/authorize" + + OAuth._set_client_id(params) + if "response_type" not in params: + params["response_type"] = "code" + query = urlencode(list(_api_encode(params, "V1"))) + url = connect_api_base + path + "?" + query + return url + + @staticmethod + def token( + api_key: Optional[str] = None, **params: Unpack[OAuthTokenParams] + ) -> OAuthToken: + options: "RequestOptions" = {"api_key": api_key} + requestor = _APIRequestor._global_instance() + return cast( + "OAuth.OAuthToken", + requestor.request( + "post", + "/oauth/token", + params=params, + options=options, + base_address="connect", + ), + ) + + @staticmethod + def deauthorize( + api_key: Optional[str] = None, **params: Unpack[OAuthDeauthorizeParams] + ) -> OAuthDeauthorization: + options: "RequestOptions" = {"api_key": api_key} + requestor = _APIRequestor._global_instance() + OAuth._set_client_id(params) + return cast( + "OAuth.OAuthDeauthorization", + requestor.request( + "post", + "/oauth/deauthorize", + params=params, + options=options, + base_address="connect", + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_oauth_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_oauth_service.py new file mode 100644 index 00000000..3744f953 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_oauth_service.py @@ -0,0 +1,112 @@ +from stripe._stripe_service import StripeService +from stripe._error import AuthenticationError +from stripe._encode import _api_encode +from urllib.parse import urlencode + +from typing import cast, Optional +from typing_extensions import NotRequired, TypedDict, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._client_options import _ClientOptions + from stripe._request_options import RequestOptions + from stripe._oauth import OAuth + + +class OAuthService(StripeService): + _options: Optional["_ClientOptions"] + + def __init__(self, client, options=None): + super(OAuthService, self).__init__(client) + self._options = options + + class OAuthAuthorizeUrlOptions(TypedDict): + express: NotRequired[bool] + """ + Express only + Boolean to indicate that the user should be sent to the express onboarding flow instead of the standard onboarding flow. + """ + + def _set_client_id(self, params): + if "client_id" in params: + return + + client_id = self._options and self._options.client_id + + if client_id: + params["client_id"] = client_id + return + + raise AuthenticationError( + "No client_id provided. (HINT: set your client_id when configuring " + 'your StripeClient: "stripe.StripeClient(..., client_id=)"). ' + "You can find your client_ids in your Stripe dashboard at " + "https://dashboard.stripe.com/account/applications/settings, " + "after registering your account as a platform. See " + "https://stripe.com/docs/connect/standalone-accounts for details, " + "or email support@stripe.com if you have any questions." + ) + + def authorize_url( + self, + params: Optional["OAuth.OAuthAuthorizeUrlParams"] = None, + options: Optional[OAuthAuthorizeUrlOptions] = None, + ) -> str: + if params is None: + params = {} + if options is None: + options = {} + + if options.get("express"): + path = "/express/oauth/authorize" + else: + path = "/oauth/authorize" + + self._set_client_id(params) + if "response_type" not in params: + params["response_type"] = "code" + query = urlencode(list(_api_encode(params, "V1"))) + + # connect_api_base will be always set to stripe.DEFAULT_CONNECT_API_BASE + # if it is not overridden on the client explicitly. + connect_api_base = self._requestor.base_addresses.get("connect") + assert connect_api_base is not None + + url = connect_api_base + path + "?" + query + return url + + def token( + self, + params: "OAuth.OAuthTokenParams", + options: Optional["RequestOptions"] = None, + ) -> "OAuth.OAuthToken": + if options is None: + options = {} + return cast( + "OAuth.OAuthToken", + self._requestor.request( + "post", + "/oauth/token", + params=params, + options=options, + base_address="connect", + ), + ) + + def deauthorize( + self, + params: "OAuth.OAuthDeauthorizeParams", + options: Optional["RequestOptions"] = None, + ) -> "OAuth.OAuthDeauthorization": + if options is None: + options = {} + self._set_client_id(params) + return cast( + "OAuth.OAuthDeauthorization", + self._requestor.request( + "post", + "/oauth/deauthorize", + params=params, + options=options, + base_address="connect", + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_object_classes.py b/Backend/venv/lib/python3.12/site-packages/stripe/_object_classes.py new file mode 100644 index 00000000..a6b062dd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_object_classes.py @@ -0,0 +1,348 @@ +# -*- coding: utf-8 -*- +from importlib import import_module +from typing import Dict, Tuple +from typing_extensions import TYPE_CHECKING, Type + +from stripe._stripe_object import StripeObject + +if TYPE_CHECKING: + from stripe._api_mode import ApiMode + +OBJECT_CLASSES: Dict[str, Tuple[str, str]] = { + # data structures + "list": ("stripe._list_object", "ListObject"), + "search_result": ("stripe._search_result_object", "SearchResultObject"), + "file": ("stripe._file", "File"), + # there's also an alt name for compatibility + "file_upload": ("stripe._file", "File"), + # Object classes: The beginning of the section generated from our OpenAPI spec + "account": ("stripe._account", "Account"), + "account_link": ("stripe._account_link", "AccountLink"), + "account_session": ("stripe._account_session", "AccountSession"), + "apple_pay_domain": ("stripe._apple_pay_domain", "ApplePayDomain"), + "application": ("stripe._application", "Application"), + "application_fee": ("stripe._application_fee", "ApplicationFee"), + "fee_refund": ("stripe._application_fee_refund", "ApplicationFeeRefund"), + "apps.secret": ("stripe.apps._secret", "Secret"), + "balance": ("stripe._balance", "Balance"), + "balance_settings": ("stripe._balance_settings", "BalanceSettings"), + "balance_transaction": ( + "stripe._balance_transaction", + "BalanceTransaction", + ), + "bank_account": ("stripe._bank_account", "BankAccount"), + "billing_portal.configuration": ( + "stripe.billing_portal._configuration", + "Configuration", + ), + "billing_portal.session": ("stripe.billing_portal._session", "Session"), + "billing.alert": ("stripe.billing._alert", "Alert"), + "billing.alert_triggered": ( + "stripe.billing._alert_triggered", + "AlertTriggered", + ), + "billing.credit_balance_summary": ( + "stripe.billing._credit_balance_summary", + "CreditBalanceSummary", + ), + "billing.credit_balance_transaction": ( + "stripe.billing._credit_balance_transaction", + "CreditBalanceTransaction", + ), + "billing.credit_grant": ("stripe.billing._credit_grant", "CreditGrant"), + "billing.meter": ("stripe.billing._meter", "Meter"), + "billing.meter_event": ("stripe.billing._meter_event", "MeterEvent"), + "billing.meter_event_adjustment": ( + "stripe.billing._meter_event_adjustment", + "MeterEventAdjustment", + ), + "billing.meter_event_summary": ( + "stripe.billing._meter_event_summary", + "MeterEventSummary", + ), + "capability": ("stripe._capability", "Capability"), + "card": ("stripe._card", "Card"), + "cash_balance": ("stripe._cash_balance", "CashBalance"), + "charge": ("stripe._charge", "Charge"), + "checkout.session": ("stripe.checkout._session", "Session"), + "climate.order": ("stripe.climate._order", "Order"), + "climate.product": ("stripe.climate._product", "Product"), + "climate.supplier": ("stripe.climate._supplier", "Supplier"), + "confirmation_token": ("stripe._confirmation_token", "ConfirmationToken"), + "connect_collection_transfer": ( + "stripe._connect_collection_transfer", + "ConnectCollectionTransfer", + ), + "country_spec": ("stripe._country_spec", "CountrySpec"), + "coupon": ("stripe._coupon", "Coupon"), + "credit_note": ("stripe._credit_note", "CreditNote"), + "credit_note_line_item": ( + "stripe._credit_note_line_item", + "CreditNoteLineItem", + ), + "customer": ("stripe._customer", "Customer"), + "customer_balance_transaction": ( + "stripe._customer_balance_transaction", + "CustomerBalanceTransaction", + ), + "customer_cash_balance_transaction": ( + "stripe._customer_cash_balance_transaction", + "CustomerCashBalanceTransaction", + ), + "customer_session": ("stripe._customer_session", "CustomerSession"), + "discount": ("stripe._discount", "Discount"), + "dispute": ("stripe._dispute", "Dispute"), + "entitlements.active_entitlement": ( + "stripe.entitlements._active_entitlement", + "ActiveEntitlement", + ), + "entitlements.active_entitlement_summary": ( + "stripe.entitlements._active_entitlement_summary", + "ActiveEntitlementSummary", + ), + "entitlements.feature": ("stripe.entitlements._feature", "Feature"), + "ephemeral_key": ("stripe._ephemeral_key", "EphemeralKey"), + "event": ("stripe._event", "Event"), + "exchange_rate": ("stripe._exchange_rate", "ExchangeRate"), + "file": ("stripe._file", "File"), + "file_link": ("stripe._file_link", "FileLink"), + "financial_connections.account": ( + "stripe.financial_connections._account", + "Account", + ), + "financial_connections.account_owner": ( + "stripe.financial_connections._account_owner", + "AccountOwner", + ), + "financial_connections.account_ownership": ( + "stripe.financial_connections._account_ownership", + "AccountOwnership", + ), + "financial_connections.session": ( + "stripe.financial_connections._session", + "Session", + ), + "financial_connections.transaction": ( + "stripe.financial_connections._transaction", + "Transaction", + ), + "forwarding.request": ("stripe.forwarding._request", "Request"), + "funding_instructions": ( + "stripe._funding_instructions", + "FundingInstructions", + ), + "identity.verification_report": ( + "stripe.identity._verification_report", + "VerificationReport", + ), + "identity.verification_session": ( + "stripe.identity._verification_session", + "VerificationSession", + ), + "invoice": ("stripe._invoice", "Invoice"), + "invoiceitem": ("stripe._invoice_item", "InvoiceItem"), + "line_item": ("stripe._invoice_line_item", "InvoiceLineItem"), + "invoice_payment": ("stripe._invoice_payment", "InvoicePayment"), + "invoice_rendering_template": ( + "stripe._invoice_rendering_template", + "InvoiceRenderingTemplate", + ), + "issuing.authorization": ( + "stripe.issuing._authorization", + "Authorization", + ), + "issuing.card": ("stripe.issuing._card", "Card"), + "issuing.cardholder": ("stripe.issuing._cardholder", "Cardholder"), + "issuing.dispute": ("stripe.issuing._dispute", "Dispute"), + "issuing.personalization_design": ( + "stripe.issuing._personalization_design", + "PersonalizationDesign", + ), + "issuing.physical_bundle": ( + "stripe.issuing._physical_bundle", + "PhysicalBundle", + ), + "issuing.token": ("stripe.issuing._token", "Token"), + "issuing.transaction": ("stripe.issuing._transaction", "Transaction"), + "item": ("stripe._line_item", "LineItem"), + "login_link": ("stripe._login_link", "LoginLink"), + "mandate": ("stripe._mandate", "Mandate"), + "payment_attempt_record": ( + "stripe._payment_attempt_record", + "PaymentAttemptRecord", + ), + "payment_intent": ("stripe._payment_intent", "PaymentIntent"), + "payment_intent_amount_details_line_item": ( + "stripe._payment_intent_amount_details_line_item", + "PaymentIntentAmountDetailsLineItem", + ), + "payment_link": ("stripe._payment_link", "PaymentLink"), + "payment_method": ("stripe._payment_method", "PaymentMethod"), + "payment_method_configuration": ( + "stripe._payment_method_configuration", + "PaymentMethodConfiguration", + ), + "payment_method_domain": ( + "stripe._payment_method_domain", + "PaymentMethodDomain", + ), + "payment_record": ("stripe._payment_record", "PaymentRecord"), + "payout": ("stripe._payout", "Payout"), + "person": ("stripe._person", "Person"), + "plan": ("stripe._plan", "Plan"), + "price": ("stripe._price", "Price"), + "product": ("stripe._product", "Product"), + "product_feature": ("stripe._product_feature", "ProductFeature"), + "promotion_code": ("stripe._promotion_code", "PromotionCode"), + "quote": ("stripe._quote", "Quote"), + "radar.early_fraud_warning": ( + "stripe.radar._early_fraud_warning", + "EarlyFraudWarning", + ), + "radar.value_list": ("stripe.radar._value_list", "ValueList"), + "radar.value_list_item": ( + "stripe.radar._value_list_item", + "ValueListItem", + ), + "refund": ("stripe._refund", "Refund"), + "reporting.report_run": ("stripe.reporting._report_run", "ReportRun"), + "reporting.report_type": ("stripe.reporting._report_type", "ReportType"), + "reserve_transaction": ( + "stripe._reserve_transaction", + "ReserveTransaction", + ), + "transfer_reversal": ("stripe._reversal", "Reversal"), + "review": ("stripe._review", "Review"), + "setup_attempt": ("stripe._setup_attempt", "SetupAttempt"), + "setup_intent": ("stripe._setup_intent", "SetupIntent"), + "shipping_rate": ("stripe._shipping_rate", "ShippingRate"), + "scheduled_query_run": ( + "stripe.sigma._scheduled_query_run", + "ScheduledQueryRun", + ), + "source": ("stripe._source", "Source"), + "source_mandate_notification": ( + "stripe._source_mandate_notification", + "SourceMandateNotification", + ), + "source_transaction": ("stripe._source_transaction", "SourceTransaction"), + "subscription": ("stripe._subscription", "Subscription"), + "subscription_item": ("stripe._subscription_item", "SubscriptionItem"), + "subscription_schedule": ( + "stripe._subscription_schedule", + "SubscriptionSchedule", + ), + "tax.calculation": ("stripe.tax._calculation", "Calculation"), + "tax.calculation_line_item": ( + "stripe.tax._calculation_line_item", + "CalculationLineItem", + ), + "tax.registration": ("stripe.tax._registration", "Registration"), + "tax.settings": ("stripe.tax._settings", "Settings"), + "tax.transaction": ("stripe.tax._transaction", "Transaction"), + "tax.transaction_line_item": ( + "stripe.tax._transaction_line_item", + "TransactionLineItem", + ), + "tax_code": ("stripe._tax_code", "TaxCode"), + "tax_deducted_at_source": ( + "stripe._tax_deducted_at_source", + "TaxDeductedAtSource", + ), + "tax_id": ("stripe._tax_id", "TaxId"), + "tax_rate": ("stripe._tax_rate", "TaxRate"), + "terminal.configuration": ( + "stripe.terminal._configuration", + "Configuration", + ), + "terminal.connection_token": ( + "stripe.terminal._connection_token", + "ConnectionToken", + ), + "terminal.location": ("stripe.terminal._location", "Location"), + "terminal.reader": ("stripe.terminal._reader", "Reader"), + "test_helpers.test_clock": ( + "stripe.test_helpers._test_clock", + "TestClock", + ), + "token": ("stripe._token", "Token"), + "topup": ("stripe._topup", "Topup"), + "transfer": ("stripe._transfer", "Transfer"), + "treasury.credit_reversal": ( + "stripe.treasury._credit_reversal", + "CreditReversal", + ), + "treasury.debit_reversal": ( + "stripe.treasury._debit_reversal", + "DebitReversal", + ), + "treasury.financial_account": ( + "stripe.treasury._financial_account", + "FinancialAccount", + ), + "treasury.financial_account_features": ( + "stripe.treasury._financial_account_features", + "FinancialAccountFeatures", + ), + "treasury.inbound_transfer": ( + "stripe.treasury._inbound_transfer", + "InboundTransfer", + ), + "treasury.outbound_payment": ( + "stripe.treasury._outbound_payment", + "OutboundPayment", + ), + "treasury.outbound_transfer": ( + "stripe.treasury._outbound_transfer", + "OutboundTransfer", + ), + "treasury.received_credit": ( + "stripe.treasury._received_credit", + "ReceivedCredit", + ), + "treasury.received_debit": ( + "stripe.treasury._received_debit", + "ReceivedDebit", + ), + "treasury.transaction": ("stripe.treasury._transaction", "Transaction"), + "treasury.transaction_entry": ( + "stripe.treasury._transaction_entry", + "TransactionEntry", + ), + "webhook_endpoint": ("stripe._webhook_endpoint", "WebhookEndpoint"), + # Object classes: The end of the section generated from our OpenAPI spec +} + +V2_OBJECT_CLASSES: Dict[str, Tuple[str, str]] = { + # V2 Object classes: The beginning of the section generated from our OpenAPI spec + "v2.billing.meter_event": ("stripe.v2.billing._meter_event", "MeterEvent"), + "v2.billing.meter_event_adjustment": ( + "stripe.v2.billing._meter_event_adjustment", + "MeterEventAdjustment", + ), + "v2.billing.meter_event_session": ( + "stripe.v2.billing._meter_event_session", + "MeterEventSession", + ), + "v2.core.event": ("stripe.v2.core._event", "Event"), + "v2.core.event_destination": ( + "stripe.v2.core._event_destination", + "EventDestination", + ), + # V2 Object classes: The end of the section generated from our OpenAPI spec +} + + +def get_object_class( + api_mode: "ApiMode", object_name: str +) -> Type[StripeObject]: + mapping = OBJECT_CLASSES if api_mode == "V1" else V2_OBJECT_CLASSES + + if object_name not in mapping: + return StripeObject + + import_path, class_name = mapping[object_name] + return getattr( + import_module(import_path), + class_name, + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record.py new file mode 100644 index 00000000..c323e329 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record.py @@ -0,0 +1,1994 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe._payment_method import PaymentMethod + from stripe.params._payment_attempt_record_list_params import ( + PaymentAttemptRecordListParams, + ) + from stripe.params._payment_attempt_record_retrieve_params import ( + PaymentAttemptRecordRetrieveParams, + ) + + +class PaymentAttemptRecord(ListableAPIResource["PaymentAttemptRecord"]): + """ + A Payment Attempt Record represents an individual attempt at making a payment, on or off Stripe. + Each payment attempt tries to collect a fixed amount of money from a fixed customer and payment + method. Payment Attempt Records are attached to Payment Records. Only one attempt per Payment Record + can have guaranteed funds. + """ + + OBJECT_NAME: ClassVar[Literal["payment_attempt_record"]] = ( + "payment_attempt_record" + ) + + class Amount(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountAuthorized(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountCanceled(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountFailed(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountGuaranteed(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountRefunded(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountRequested(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class CustomerDetails(StripeObject): + customer: Optional[str] + """ + ID of the Stripe Customer associated with this payment. + """ + email: Optional[str] + """ + The customer's email address. + """ + name: Optional[str] + """ + The customer's name. + """ + phone: Optional[str] + """ + The customer's phone number. + """ + + class PaymentMethodDetails(StripeObject): + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + """ + Account number to transfer funds to. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the routing number. + """ + routing_number: Optional[str] + """ + Routing transit number for the bank account to transfer funds to. + """ + swift_code: Optional[str] + """ + SWIFT code of the bank associated with the routing number. + """ + + class AchDebit(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Type of entity that holds the account. This can be either `individual` or `company`. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + routing_number: Optional[str] + """ + Routing transit number of the bank account. + """ + + class AcssDebit(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + institution_number: Optional[str] + """ + Institution number of the bank account + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + transit_number: Optional[str] + """ + Transit number of the bank account. + """ + + class Affirm(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + The Affirm transaction ID associated with this payment. + """ + + class AfterpayClearpay(StripeObject): + order_id: Optional[str] + """ + The Afterpay order ID associated with this payment intent. + """ + reference: Optional[str] + """ + Order identifier shown to the merchant in Afterpay's online portal. + """ + + class Alipay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular Alipay transaction. + """ + + class Alma(StripeObject): + class Installments(StripeObject): + count: int + """ + The number of installments. + """ + + installments: Optional[Installments] + transaction_id: Optional[str] + """ + The Alma transaction ID associated with this payment. + """ + _inner_class_types = {"installments": Installments} + + class AmazonPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Amazon Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + """ + Bank-State-Branch number of the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + sort_code: Optional[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + class Bancontact(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + Can be one of `en`, `de`, `fr`, or `nl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Bancontact directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class Billie(StripeObject): + transaction_id: Optional[str] + """ + The Billie transaction ID associated with this payment. + """ + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + """ + A representation of a physical address. + """ + email: Optional[str] + """ + The billing email associated with the method of payment. + """ + name: Optional[str] + """ + The billing name associated with the method of payment. + """ + phone: Optional[str] + """ + The billing phone number associated with the method of payment. + """ + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by BLIK to every buyer. + """ + + class Boleto(StripeObject): + tax_id: str + """ + The tax ID of the customer (CPF for individuals consumers or CNPJ for businesses consumers) + """ + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + address_postal_code_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + cvc_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + + class NetworkToken(StripeObject): + used: bool + """ + Indicates if Stripe used a network token, either user provided or Stripe managed when processing the transaction. + """ + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + + class Wallet(StripeObject): + class ApplePay(StripeObject): + type: str + """ + Type of the apple_pay transaction, one of `apple_pay` or `apple_pay_later`. + """ + + class GooglePay(StripeObject): + pass + + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + google_pay: Optional[GooglePay] + type: str + """ + The type of the card wallet, one of `apple_pay` or `google_pay`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + _inner_class_types = { + "apple_pay": ApplePay, + "google_pay": GooglePay, + } + + brand: Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp at which the charge will be automatically refunded if uncaptured. + """ + checks: Optional[Checks] + """ + Check results by Card networks on Card address and CVC at time of payment. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Literal["credit", "debit", "prepaid", "unknown"] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: str + """ + The last four digits of the card. + """ + moto: Optional[bool] + """ + True if this payment was marked as MOTO and out of scope for SCA. + """ + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_token: Optional[NetworkToken] + """ + If this card has network token credentials, this contains the details of the network token credentials. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + three_d_secure: Optional[ThreeDSecure] + """ + Populated if this transaction used 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "network_token": NetworkToken, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "credit", "prepaid", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", "google_pay", "samsung_pay", "unknown" + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + amount_authorized: Optional[int] + """ + The authorized amount + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization_supported: bool + """ + Whether this [PaymentIntent](https://stripe.com/docs/api/payment_intents) is eligible for incremental authorizations. Request support using [request_incremental_authorization_support](https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + overcapture_supported: bool + """ + Defines whether the authorized amount can be over-captured or not + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "offline": Offline, + "receipt": Receipt, + "wallet": Wallet, + } + + class Cashapp(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by Cash App to every buyer. + """ + cashtag: Optional[str] + """ + A public identifier for buyers using Cash App. + """ + transaction_id: Optional[str] + """ + A unique and immutable identifier of payments assigned by Cash App + """ + + class Crypto(StripeObject): + buyer_address: Optional[str] + """ + The wallet address of the customer. + """ + network: Optional[Literal["base", "ethereum", "polygon", "solana"]] + """ + The blockchain network that the transaction was sent on. + """ + token_currency: Optional[Literal["usdc", "usdg", "usdp"]] + """ + The token currency that the transaction was sent with. + """ + transaction_hash: Optional[str] + """ + The blockchain transaction hash of the crypto payment. + """ + + class Custom(StripeObject): + display_name: str + """ + Display name for the custom (user-defined) payment method type used to make this payment. + """ + type: Optional[str] + """ + The custom payment method type associated with this payment. + """ + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. Should be one of `arzte_und_apotheker_bank`, `austrian_anadi_bank_ag`, `bank_austria`, `bankhaus_carl_spangler`, `bankhaus_schelhammer_und_schattera_ag`, `bawag_psk_ag`, `bks_bank_ag`, `brull_kallmus_bank_ag`, `btv_vier_lander_bank`, `capital_bank_grawe_gruppe_ag`, `deutsche_bank_ag`, `dolomitenbank`, `easybank_ag`, `erste_bank_und_sparkassen`, `hypo_alpeadriabank_international_ag`, `hypo_noe_lb_fur_niederosterreich_u_wien`, `hypo_oberosterreich_salzburg_steiermark`, `hypo_tirol_bank_ag`, `hypo_vorarlberg_bank_ag`, `hypo_bank_burgenland_aktiengesellschaft`, `marchfelder_bank`, `oberbank_ag`, `raiffeisen_bankengruppe_osterreich`, `schoellerbank_ag`, `sparda_bank_wien`, `volksbank_gruppe`, `volkskreditbank_ag`, or `vr_bank_braunau`. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by EPS directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + EPS rarely provides this information so the attribute is usually empty. + """ + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type, if provided. Can be one of `individual` or `company`. + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. Can be one of `affin_bank`, `agrobank`, `alliance_bank`, `ambank`, `bank_islam`, `bank_muamalat`, `bank_rakyat`, `bsn`, `cimb`, `hong_leong_bank`, `hsbc`, `kfh`, `maybank2u`, `ocbc`, `public_bank`, `rhb`, `standard_chartered`, `uob`, `deutsche_bank`, `maybank2e`, `pb_enterprise`, or `bank_of_china`. + """ + transaction_id: Optional[str] + """ + Unique transaction id generated by FPX for every request from the merchant + """ + + class Giropay(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Giropay directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Giropay rarely provides this information so the attribute is usually empty. + """ + + class Grabpay(StripeObject): + transaction_id: Optional[str] + """ + Unique transaction id generated by GrabPay + """ + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by iDEAL directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class InteracPresent(StripeObject): + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "savings", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + brand: Optional[str] + """ + Card brand. Can be `interac`, `mastercard` or `visa`. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + _inner_class_types = {"receipt": Receipt} + + class KakaoPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Kakao Pay transaction ID associated with this payment. + """ + + class Klarna(StripeObject): + class PayerDetails(StripeObject): + class Address(StripeObject): + country: Optional[str] + """ + The payer address country + """ + + address: Optional[Address] + """ + The payer's address + """ + _inner_class_types = {"address": Address} + + payer_details: Optional[PayerDetails] + """ + The payer details for this transaction. + """ + payment_method_category: Optional[str] + """ + The Klarna payment method used for this transaction. + Can be one of `pay_later`, `pay_now`, `pay_with_financing`, or `pay_in_installments` + """ + preferred_locale: Optional[str] + """ + Preferred language of the Klarna authorization page that the customer is redirected to. + Can be one of `de-AT`, `en-AT`, `nl-BE`, `fr-BE`, `en-BE`, `de-DE`, `en-DE`, `da-DK`, `en-DK`, `es-ES`, `en-ES`, `fi-FI`, `sv-FI`, `en-FI`, `en-GB`, `en-IE`, `it-IT`, `en-IT`, `nl-NL`, `en-NL`, `nb-NO`, `en-NO`, `sv-SE`, `en-SE`, `en-US`, `es-US`, `fr-FR`, `en-FR`, `cs-CZ`, `en-CZ`, `ro-RO`, `en-RO`, `el-GR`, `en-GR`, `en-AU`, `en-NZ`, `en-CA`, `fr-CA`, `pl-PL`, `en-PL`, `pt-PT`, `en-PT`, `de-CH`, `fr-CH`, `it-CH`, or `en-CH` + """ + _inner_class_types = {"payer_details": PayerDetails} + + class Konbini(StripeObject): + class Store(StripeObject): + chain: Optional[ + Literal["familymart", "lawson", "ministop", "seicomart"] + ] + """ + The name of the convenience store chain where the payment was completed. + """ + + store: Optional[Store] + """ + If the payment succeeded, this contains the details of the convenience store where the payment was completed. + """ + _inner_class_types = {"store": Store} + + class KrCard(StripeObject): + brand: Optional[ + Literal[ + "bc", + "citi", + "hana", + "hyundai", + "jeju", + "jeonbuk", + "kakaobank", + "kbank", + "kdbbank", + "kookmin", + "kwangju", + "lotte", + "mg", + "nh", + "post", + "samsung", + "savingsbank", + "shinhan", + "shinhyup", + "suhyup", + "tossbank", + "woori", + ] + ] + """ + The local credit or debit card brand. + """ + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + last4: Optional[str] + """ + The last four digits of the card. This may not be present for American Express cards. + """ + transaction_id: Optional[str] + """ + The Korean Card transaction ID associated with this payment. + """ + + class Link(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the funding source country beneath the Link payment. + You could use this attribute to get a sense of international fees. + """ + + class MbWay(StripeObject): + pass + + class Mobilepay(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Brand of the card used in the transaction + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card + """ + exp_month: Optional[int] + """ + Two digit number representing the card's expiration month + """ + exp_year: Optional[int] + """ + Two digit number representing the card's expiration year + """ + last4: Optional[str] + """ + The last 4 digits of the card + """ + + card: Optional[Card] + """ + Internal card details + """ + _inner_class_types = {"card": Card} + + class Multibanco(StripeObject): + entity: Optional[str] + """ + Entity number associated with this Multibanco payment. + """ + reference: Optional[str] + """ + Reference number associated with this Multibanco payment. + """ + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Naver Pay transaction ID associated with this payment. + """ + + class NzBankAccount(StripeObject): + account_holder_name: Optional[str] + """ + The name on the bank account. Only present if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + bank_name: str + """ + The name of the bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + last4: str + """ + Last four digits of the bank account number. + """ + suffix: Optional[str] + """ + The suffix of the bank account number. + """ + + class Oxxo(StripeObject): + number: Optional[str] + """ + OXXO reference number + """ + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. Can be one of `ing`, `citi_handlowy`, `tmobile_usbugi_bankowe`, `plus_bank`, `etransfer_pocztowy24`, `banki_spbdzielcze`, `bank_nowy_bfg_sa`, `getin_bank`, `velobank`, `blik`, `noble_pay`, `ideabank`, `envelobank`, `santander_przelew24`, `nest_przelew`, `mbank_mtransfer`, `inteligo`, `pbac_z_ipko`, `bnp_paribas`, `credit_agricole`, `toyota_bank`, `bank_pekao_sa`, `volkswagen_bank`, `bank_millennium`, `alior_bank`, or `boz`. + """ + reference: Optional[str] + """ + Unique reference for this Przelewy24 payment. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Przelewy24 directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Przelewy24 rarely provides this information so the attribute is usually empty. + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Payco transaction ID associated with this payment. + """ + + class Paynow(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + reference: Optional[str] + """ + Reference number associated with this PayNow payment + """ + + class Paypal(StripeObject): + class SellerProtection(StripeObject): + dispute_categories: Optional[ + List[Literal["fraudulent", "product_not_received"]] + ] + """ + An array of conditions that are covered for the transaction, if applicable. + """ + status: Literal[ + "eligible", "not_eligible", "partially_eligible" + ] + """ + Indicates whether the transaction is eligible for PayPal's seller protection. + """ + + country: Optional[str] + """ + Two-letter ISO code representing the buyer's country. Values are provided by PayPal directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_email: Optional[str] + """ + Owner's email. Values are provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + payer_name: Optional[str] + """ + Owner's full name. Values provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + seller_protection: Optional[SellerProtection] + """ + The level of protection offered as defined by PayPal Seller Protection for Merchants, for this transaction. + """ + transaction_id: Optional[str] + """ + A unique ID generated by PayPal for this transaction. + """ + _inner_class_types = {"seller_protection": SellerProtection} + + class Pix(StripeObject): + bank_transaction_id: Optional[str] + """ + Unique transaction id generated by BCB + """ + + class Promptpay(StripeObject): + reference: Optional[str] + """ + Bill reference generated by PromptPay + """ + + class RevolutPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Revolut Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class SamsungPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Samsung Pay transaction ID associated with this payment. + """ + + class Satispay(StripeObject): + transaction_id: Optional[str] + """ + The Satispay transaction ID associated with this payment. + """ + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + iban: Optional[str] + """ + IBAN of the bank account to transfer funds to. + """ + + class SepaDebit(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + branch_code: Optional[str] + """ + Branch code of bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four characters of the IBAN. + """ + mandate: Optional[str] + """ + Find the ID of the mandate used for this payment under the [payment_method_details.sepa_debit.mandate](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-sepa_debit-mandate) property on the Charge. Use this mandate ID to [retrieve the Mandate](https://stripe.com/docs/api/mandates/retrieve). + """ + + class Sofort(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + """ + Preferred language of the SOFORT authorization page that the customer is redirected to. + Can be one of `de`, `en`, `es`, `fr`, `it`, `nl`, or `pl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by SOFORT directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class StripeAccount(StripeObject): + pass + + class Swish(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies the payer's Swish account. You can use this attribute to check whether two Swish transactions were paid for by the same payer + """ + payment_reference: Optional[str] + """ + Payer bank reference number for the payment + """ + verified_phone_last4: Optional[str] + """ + The last four digits of the Swish account phone number + """ + + class Twint(StripeObject): + pass + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + payment_reference: Optional[str] + """ + Reference number to locate ACH payments with customer's bank. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + class Wechat(StripeObject): + pass + + class WechatPay(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular WeChat Pay account. You can use this attribute to check whether two WeChat accounts are the same. + """ + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular WeChat Pay transaction. + """ + + class Zip(StripeObject): + pass + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + billing_details: Optional[BillingDetails] + """ + The billing details associated with the method of payment. + """ + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + """ + Details of the card used for this payment attempt. + """ + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + custom: Optional[Custom] + """ + Custom Payment Methods represent Payment Method types not modeled directly in + the Stripe API. This resource consists of details about the custom payment method + used for this payment attempt. + """ + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + payment_method: Optional[str] + """ + ID of the Stripe PaymentMethod used to make this payment. + """ + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + stripe_account: Optional[StripeAccount] + swish: Optional[Swish] + twint: Optional[Twint] + type: str + """ + The type of transaction-specific details of the payment method used in the payment. See [PaymentMethod.type](https://stripe.com/docs/api/payment_methods/object#payment_method_object-type) for the full list of possible types. + An additional hash is included on `payment_method_details` with a name matching this value. + It contains information specific to the payment method. + """ + us_bank_account: Optional[UsBankAccount] + """ + Details of the US Bank Account used for this payment attempt. + """ + wechat: Optional[Wechat] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "custom": Custom, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "stripe_account": StripeAccount, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat": Wechat, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class ProcessorDetails(StripeObject): + class Custom(StripeObject): + payment_reference: Optional[str] + """ + An opaque string for manual reconciliation of this payment, for example a check number or a payment processor ID. + """ + + custom: Optional[Custom] + """ + Custom processors represent payment processors not modeled directly in + the Stripe API. This resource consists of details about the custom processor + used for this payment attempt. + """ + type: Literal["custom"] + """ + The processor used for this payment attempt. + """ + _inner_class_types = {"custom": Custom} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + """ + A representation of a physical address. + """ + name: Optional[str] + """ + The shipping recipient's name. + """ + phone: Optional[str] + """ + The shipping recipient's phone number. + """ + _inner_class_types = {"address": Address} + + amount: Amount + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_authorized: AmountAuthorized + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_canceled: AmountCanceled + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_failed: AmountFailed + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_guaranteed: AmountGuaranteed + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_refunded: AmountRefunded + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_requested: AmountRequested + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + application: Optional[str] + """ + ID of the Connect application that created the PaymentAttemptRecord. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer_details: Optional[CustomerDetails] + """ + Customer information for this payment. + """ + customer_presence: Optional[Literal["off_session", "on_session"]] + """ + Indicates whether the customer was present in your checkout flow during this payment. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["payment_attempt_record"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_method_details: Optional[PaymentMethodDetails] + """ + Information about the Payment Method debited for this payment. + """ + payment_record: Optional[str] + """ + ID of the Payment Record this Payment Attempt Record belongs to. + """ + processor_details: ProcessorDetails + """ + Processor information associated with this payment. + """ + reported_by: Literal["self", "stripe"] + """ + Indicates who reported the payment. + """ + shipping_details: Optional[ShippingDetails] + """ + Shipping information for this payment. + """ + + @classmethod + def list( + cls, **params: Unpack["PaymentAttemptRecordListParams"] + ) -> ListObject["PaymentAttemptRecord"]: + """ + List all the Payment Attempt Records attached to the specified Payment Record. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentAttemptRecordListParams"] + ) -> ListObject["PaymentAttemptRecord"]: + """ + List all the Payment Attempt Records attached to the specified Payment Record. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentAttemptRecordRetrieveParams"] + ) -> "PaymentAttemptRecord": + """ + Retrieves a Payment Attempt Record with the given ID + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentAttemptRecordRetrieveParams"] + ) -> "PaymentAttemptRecord": + """ + Retrieves a Payment Attempt Record with the given ID + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "amount": Amount, + "amount_authorized": AmountAuthorized, + "amount_canceled": AmountCanceled, + "amount_failed": AmountFailed, + "amount_guaranteed": AmountGuaranteed, + "amount_refunded": AmountRefunded, + "amount_requested": AmountRequested, + "customer_details": CustomerDetails, + "payment_method_details": PaymentMethodDetails, + "processor_details": ProcessorDetails, + "shipping_details": ShippingDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record_service.py new file mode 100644 index 00000000..0ee17d35 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_attempt_record_service.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_attempt_record import PaymentAttemptRecord + from stripe._request_options import RequestOptions + from stripe.params._payment_attempt_record_list_params import ( + PaymentAttemptRecordListParams, + ) + from stripe.params._payment_attempt_record_retrieve_params import ( + PaymentAttemptRecordRetrieveParams, + ) + + +class PaymentAttemptRecordService(StripeService): + def list( + self, + params: "PaymentAttemptRecordListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentAttemptRecord]": + """ + List all the Payment Attempt Records attached to the specified Payment Record. + """ + return cast( + "ListObject[PaymentAttemptRecord]", + self._request( + "get", + "/v1/payment_attempt_records", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "PaymentAttemptRecordListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentAttemptRecord]": + """ + List all the Payment Attempt Records attached to the specified Payment Record. + """ + return cast( + "ListObject[PaymentAttemptRecord]", + await self._request_async( + "get", + "/v1/payment_attempt_records", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["PaymentAttemptRecordRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentAttemptRecord": + """ + Retrieves a Payment Attempt Record with the given ID + """ + return cast( + "PaymentAttemptRecord", + self._request( + "get", + "/v1/payment_attempt_records/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["PaymentAttemptRecordRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentAttemptRecord": + """ + Retrieves a Payment Attempt Record with the given ID + """ + return cast( + "PaymentAttemptRecord", + await self._request_async( + "get", + "/v1/payment_attempt_records/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent.py new file mode 100644 index 00000000..1fcf76a0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent.py @@ -0,0 +1,4362 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + Union, + cast, + overload, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._charge import Charge + from stripe._customer import Customer + from stripe._payment_intent_amount_details_line_item import ( + PaymentIntentAmountDetailsLineItem, + ) + from stripe._payment_method import PaymentMethod + from stripe._review import Review + from stripe._setup_intent import SetupIntent + from stripe._source import Source + from stripe.params._payment_intent_apply_customer_balance_params import ( + PaymentIntentApplyCustomerBalanceParams, + ) + from stripe.params._payment_intent_cancel_params import ( + PaymentIntentCancelParams, + ) + from stripe.params._payment_intent_capture_params import ( + PaymentIntentCaptureParams, + ) + from stripe.params._payment_intent_confirm_params import ( + PaymentIntentConfirmParams, + ) + from stripe.params._payment_intent_create_params import ( + PaymentIntentCreateParams, + ) + from stripe.params._payment_intent_increment_authorization_params import ( + PaymentIntentIncrementAuthorizationParams, + ) + from stripe.params._payment_intent_list_amount_details_line_items_params import ( + PaymentIntentListAmountDetailsLineItemsParams, + ) + from stripe.params._payment_intent_list_params import ( + PaymentIntentListParams, + ) + from stripe.params._payment_intent_modify_params import ( + PaymentIntentModifyParams, + ) + from stripe.params._payment_intent_retrieve_params import ( + PaymentIntentRetrieveParams, + ) + from stripe.params._payment_intent_search_params import ( + PaymentIntentSearchParams, + ) + from stripe.params._payment_intent_verify_microdeposits_params import ( + PaymentIntentVerifyMicrodepositsParams, + ) + from typing import Any + + +@nested_resource_class_methods("amount_details_line_item") +class PaymentIntent( + CreateableAPIResource["PaymentIntent"], + ListableAPIResource["PaymentIntent"], + SearchableAPIResource["PaymentIntent"], + UpdateableAPIResource["PaymentIntent"], +): + """ + A PaymentIntent guides you through the process of collecting a payment from your customer. + We recommend that you create exactly one PaymentIntent for each order or + customer session in your system. You can reference the PaymentIntent later to + see the history of payment attempts for a particular session. + + A PaymentIntent transitions through + [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) + throughout its lifetime as it interfaces with Stripe.js to perform + authentication flows and ultimately creates at most one successful charge. + + Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents) + """ + + OBJECT_NAME: ClassVar[Literal["payment_intent"]] = "payment_intent" + + class AmountDetails(StripeObject): + class Shipping(StripeObject): + amount: Optional[int] + """ + If a physical good is being shipped, the cost of shipping represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). An integer greater than or equal to 0. + """ + from_postal_code: Optional[str] + """ + If a physical good is being shipped, the postal code of where it is being shipped from. At most 10 alphanumeric characters long, hyphens are allowed. + """ + to_postal_code: Optional[str] + """ + If a physical good is being shipped, the postal code of where it is being shipped to. At most 10 alphanumeric characters long, hyphens are allowed. + """ + + class Tax(StripeObject): + total_tax_amount: Optional[int] + """ + The total amount of tax on the transaction represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Required for L2 rates. An integer greater than or equal to 0. + + This field is mutually exclusive with the `amount_details[line_items][#][tax][total_tax_amount]` field. + """ + + class Tip(StripeObject): + amount: Optional[int] + """ + Portion of the amount that corresponds to a tip. + """ + + discount_amount: Optional[int] + """ + The total discount applied on the transaction represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). An integer greater than 0. + + This field is mutually exclusive with the `amount_details[line_items][#][discount_amount]` field. + """ + line_items: Optional[ListObject["PaymentIntentAmountDetailsLineItem"]] + """ + A list of line items, each containing information about a product in the PaymentIntent. There is a maximum of 100 line items. + """ + shipping: Optional[Shipping] + tax: Optional[Tax] + tip: Optional[Tip] + _inner_class_types = {"shipping": Shipping, "tax": Tax, "tip": Tip} + + class AutomaticPaymentMethods(StripeObject): + allow_redirects: Optional[Literal["always", "never"]] + """ + Controls whether this PaymentIntent will accept redirect-based payment methods. + + Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/payment_intents/confirm) this PaymentIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the payment. + """ + enabled: bool + """ + Automatically calculates compatible payment methods + """ + + class LastPaymentError(StripeObject): + advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one. + """ + charge: Optional[str] + """ + For card errors, the ID of the failed charge. + """ + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "balance_invalid_parameter", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_exceeds_transaction_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "customer_session_expired", + "customer_tax_location_invalid", + "debit_not_authorized", + "email_invalid", + "expired_card", + "financial_connections_account_inactive", + "financial_connections_account_pending_account_numbers", + "financial_connections_account_unavailable_account_numbers", + "financial_connections_no_successful_transaction_refresh", + "forwarding_api_inactive", + "forwarding_api_invalid_parameter", + "forwarding_api_retryable_upstream_error", + "forwarding_api_upstream_connection_error", + "forwarding_api_upstream_connection_timeout", + "forwarding_api_upstream_error", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "india_recurring_payment_mandate_canceled", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_mandate_reference_prefix_format", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_rate_limit_exceeded", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_mobile_wallet_unsupported", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_address_invalid", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "tax_id_prohibited", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_hardware_fault", + "terminal_reader_invalid_location_for_activation", + "terminal_reader_invalid_location_for_payment", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_card_network_invalid", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + """ + For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported. + """ + decline_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one. + """ + doc_url: Optional[str] + """ + A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported. + """ + message: Optional[str] + """ + A human-readable message providing more details about the error. For card errors, these messages can be shown to your users. + """ + network_advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error. + """ + network_decline_code: Optional[str] + """ + For payments declined by the network, an alphanumeric code which indicates the reason the payment failed. + """ + param: Optional[str] + """ + If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field. + """ + payment_intent: Optional["PaymentIntent"] + """ + A PaymentIntent guides you through the process of collecting a payment from your customer. + We recommend that you create exactly one PaymentIntent for each order or + customer session in your system. You can reference the PaymentIntent later to + see the history of payment attempts for a particular session. + + A PaymentIntent transitions through + [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) + throughout its lifetime as it interfaces with Stripe.js to perform + authentication flows and ultimately creates at most one successful charge. + + Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents) + """ + payment_method: Optional["PaymentMethod"] + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + payment_method_type: Optional[str] + """ + If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors. + """ + request_log_url: Optional[str] + """ + A URL to the request log entry in your dashboard. + """ + setup_intent: Optional["SetupIntent"] + """ + A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. + For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. + Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. + + Create a SetupIntent when you're ready to collect your customer's payment credentials. + Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. + The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides + you through the setup process. + + Successful SetupIntents result in payment credentials that are optimized for future payments. + For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through + [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection + to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). + If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), + it automatically attaches the resulting payment method to that Customer after successful setup. + We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on + PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. + + By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. + + Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents) + """ + source: Optional[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + """ + The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error` + """ + + class NextAction(StripeObject): + class AlipayHandleRedirect(StripeObject): + native_data: Optional[str] + """ + The native data to be used with Alipay SDK you must redirect your customer to in order to authenticate the payment in an Android App. + """ + native_url: Optional[str] + """ + The native URL you must redirect your customer to in order to authenticate the payment in an iOS App. + """ + return_url: Optional[str] + """ + If the customer does not exit their browser while authenticating, they will be redirected to this specified URL after completion. + """ + url: Optional[str] + """ + The URL you must redirect your customer to in order to authenticate the payment. + """ + + class BoletoDisplayDetails(StripeObject): + expires_at: Optional[int] + """ + The timestamp after which the boleto expires. + """ + hosted_voucher_url: Optional[str] + """ + The URL to the hosted boleto voucher page, which allows customers to view the boleto voucher. + """ + number: Optional[str] + """ + The boleto number. + """ + pdf: Optional[str] + """ + The URL to the downloadable boleto voucher PDF. + """ + + class CardAwaitNotification(StripeObject): + charge_attempt_at: Optional[int] + """ + The time that payment will be attempted. If customer approval is required, they need to provide approval before this time. + """ + customer_approval_required: Optional[bool] + """ + For payments greater than INR 15000, the customer must provide explicit approval of the payment with their bank. For payments of lower amount, no customer action is required. + """ + + class CashappHandleRedirectOrDisplayQrCode(StripeObject): + class QrCode(StripeObject): + expires_at: int + """ + The date (unix timestamp) when the QR code expires. + """ + image_url_png: str + """ + The image_url_png string used to render QR code + """ + image_url_svg: str + """ + The image_url_svg string used to render QR code + """ + + hosted_instructions_url: str + """ + The URL to the hosted Cash App Pay instructions page, which allows customers to view the QR code, and supports QR code refreshing on expiration. + """ + mobile_auth_url: str + """ + The url for mobile redirect based auth + """ + qr_code: QrCode + _inner_class_types = {"qr_code": QrCode} + + class DisplayBankTransferInstructions(StripeObject): + class FinancialAddress(StripeObject): + class Aba(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + account_number: str + """ + The ABA account number + """ + account_type: str + """ + The account type + """ + bank_address: BankAddress + bank_name: str + """ + The bank name + """ + routing_number: str + """ + The ABA routing number + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Iban(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The name of the person or business that owns the bank account + """ + bank_address: BankAddress + bic: str + """ + The BIC/SWIFT code of the account. + """ + country: str + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + iban: str + """ + The IBAN of the account. + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class SortCode(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The name of the person or business that owns the bank account + """ + account_number: str + """ + The account number + """ + bank_address: BankAddress + sort_code: str + """ + The six-digit sort code + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Spei(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + bank_address: BankAddress + bank_code: str + """ + The three-digit bank code + """ + bank_name: str + """ + The short banking institution name + """ + clabe: str + """ + The CLABE number + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Swift(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: str + """ + The account holder name + """ + account_number: str + """ + The account number + """ + account_type: str + """ + The account type + """ + bank_address: BankAddress + bank_name: str + """ + The bank name + """ + swift_code: str + """ + The SWIFT code + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + class Zengin(StripeObject): + class AccountHolderAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class BankAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + account_holder_address: AccountHolderAddress + account_holder_name: Optional[str] + """ + The account holder name + """ + account_number: Optional[str] + """ + The account number + """ + account_type: Optional[str] + """ + The bank account type. In Japan, this can only be `futsu` or `toza`. + """ + bank_address: BankAddress + bank_code: Optional[str] + """ + The bank code of the account + """ + bank_name: Optional[str] + """ + The bank name of the account + """ + branch_code: Optional[str] + """ + The branch code of the account + """ + branch_name: Optional[str] + """ + The branch name of the account + """ + _inner_class_types = { + "account_holder_address": AccountHolderAddress, + "bank_address": BankAddress, + } + + aba: Optional[Aba] + """ + ABA Records contain U.S. bank account details per the ABA format. + """ + iban: Optional[Iban] + """ + Iban Records contain E.U. bank account details per the SEPA format. + """ + sort_code: Optional[SortCode] + """ + Sort Code Records contain U.K. bank account details per the sort code format. + """ + spei: Optional[Spei] + """ + SPEI Records contain Mexico bank account details per the SPEI format. + """ + supported_networks: Optional[ + List[ + Literal[ + "ach", + "bacs", + "domestic_wire_us", + "fps", + "sepa", + "spei", + "swift", + "zengin", + ] + ] + ] + """ + The payment networks supported by this FinancialAddress + """ + swift: Optional[Swift] + """ + SWIFT Records contain U.S. bank account details per the SWIFT format. + """ + type: Literal[ + "aba", "iban", "sort_code", "spei", "swift", "zengin" + ] + """ + The type of financial address + """ + zengin: Optional[Zengin] + """ + Zengin Records contain Japan bank account details per the Zengin format. + """ + _inner_class_types = { + "aba": Aba, + "iban": Iban, + "sort_code": SortCode, + "spei": Spei, + "swift": Swift, + "zengin": Zengin, + } + + amount_remaining: Optional[int] + """ + The remaining amount that needs to be transferred to complete the payment. + """ + currency: Optional[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + financial_addresses: Optional[List[FinancialAddress]] + """ + A list of financial addresses that can be used to fund the customer balance + """ + hosted_instructions_url: Optional[str] + """ + A link to a hosted page that guides your customer through completing the transfer. + """ + reference: Optional[str] + """ + A string identifying this payment. Instruct your customer to include this code in the reference or memo field of their bank transfer. + """ + type: Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + """ + Type of bank transfer + """ + _inner_class_types = {"financial_addresses": FinancialAddress} + + class KonbiniDisplayDetails(StripeObject): + class Stores(StripeObject): + class Familymart(StripeObject): + confirmation_number: Optional[str] + """ + The confirmation number. + """ + payment_code: str + """ + The payment code. + """ + + class Lawson(StripeObject): + confirmation_number: Optional[str] + """ + The confirmation number. + """ + payment_code: str + """ + The payment code. + """ + + class Ministop(StripeObject): + confirmation_number: Optional[str] + """ + The confirmation number. + """ + payment_code: str + """ + The payment code. + """ + + class Seicomart(StripeObject): + confirmation_number: Optional[str] + """ + The confirmation number. + """ + payment_code: str + """ + The payment code. + """ + + familymart: Optional[Familymart] + """ + FamilyMart instruction details. + """ + lawson: Optional[Lawson] + """ + Lawson instruction details. + """ + ministop: Optional[Ministop] + """ + Ministop instruction details. + """ + seicomart: Optional[Seicomart] + """ + Seicomart instruction details. + """ + _inner_class_types = { + "familymart": Familymart, + "lawson": Lawson, + "ministop": Ministop, + "seicomart": Seicomart, + } + + expires_at: int + """ + The timestamp at which the pending Konbini payment expires. + """ + hosted_voucher_url: Optional[str] + """ + The URL for the Konbini payment instructions page, which allows customers to view and print a Konbini voucher. + """ + stores: Stores + _inner_class_types = {"stores": Stores} + + class MultibancoDisplayDetails(StripeObject): + entity: Optional[str] + """ + Entity number associated with this Multibanco payment. + """ + expires_at: Optional[int] + """ + The timestamp at which the Multibanco voucher expires. + """ + hosted_voucher_url: Optional[str] + """ + The URL for the hosted Multibanco voucher page, which allows customers to view a Multibanco voucher. + """ + reference: Optional[str] + """ + Reference number associated with this Multibanco payment. + """ + + class OxxoDisplayDetails(StripeObject): + expires_after: Optional[int] + """ + The timestamp after which the OXXO voucher expires. + """ + hosted_voucher_url: Optional[str] + """ + The URL for the hosted OXXO voucher page, which allows customers to view and print an OXXO voucher. + """ + number: Optional[str] + """ + OXXO reference number. + """ + + class PaynowDisplayQrCode(StripeObject): + data: str + """ + The raw data string used to generate QR code, it should be used together with QR code library. + """ + hosted_instructions_url: Optional[str] + """ + The URL to the hosted PayNow instructions page, which allows customers to view the PayNow QR code. + """ + image_url_png: str + """ + The image_url_png string used to render QR code + """ + image_url_svg: str + """ + The image_url_svg string used to render QR code + """ + + class PixDisplayQrCode(StripeObject): + data: Optional[str] + """ + The raw data string used to generate QR code, it should be used together with QR code library. + """ + expires_at: Optional[int] + """ + The date (unix timestamp) when the PIX expires. + """ + hosted_instructions_url: Optional[str] + """ + The URL to the hosted pix instructions page, which allows customers to view the pix QR code. + """ + image_url_png: Optional[str] + """ + The image_url_png string used to render png QR code + """ + image_url_svg: Optional[str] + """ + The image_url_svg string used to render svg QR code + """ + + class PromptpayDisplayQrCode(StripeObject): + data: str + """ + The raw data string used to generate QR code, it should be used together with QR code library. + """ + hosted_instructions_url: str + """ + The URL to the hosted PromptPay instructions page, which allows customers to view the PromptPay QR code. + """ + image_url_png: str + """ + The PNG path used to render the QR code, can be used as the source in an HTML img tag + """ + image_url_svg: str + """ + The SVG path used to render the QR code, can be used as the source in an HTML img tag + """ + + class RedirectToUrl(StripeObject): + return_url: Optional[str] + """ + If the customer does not exit their browser while authenticating, they will be redirected to this specified URL after completion. + """ + url: Optional[str] + """ + The URL you must redirect your customer to in order to authenticate the payment. + """ + + class SwishHandleRedirectOrDisplayQrCode(StripeObject): + class QrCode(StripeObject): + data: str + """ + The raw data string used to generate QR code, it should be used together with QR code library. + """ + image_url_png: str + """ + The image_url_png string used to render QR code + """ + image_url_svg: str + """ + The image_url_svg string used to render QR code + """ + + hosted_instructions_url: str + """ + The URL to the hosted Swish instructions page, which allows customers to view the QR code. + """ + mobile_auth_url: str + """ + The url for mobile redirect based auth (for internal use only and not typically available in standard API requests). + """ + qr_code: QrCode + _inner_class_types = {"qr_code": QrCode} + + class VerifyWithMicrodeposits(StripeObject): + arrival_date: int + """ + The timestamp when the microdeposits are expected to land. + """ + hosted_verification_url: str + """ + The URL for the hosted verification page, which allows customers to verify their bank account. + """ + microdeposit_type: Optional[Literal["amounts", "descriptor_code"]] + """ + The type of the microdeposit sent to the customer. Used to distinguish between different verification methods. + """ + + class WechatPayDisplayQrCode(StripeObject): + data: str + """ + The data being used to generate QR code + """ + hosted_instructions_url: str + """ + The URL to the hosted WeChat Pay instructions page, which allows customers to view the WeChat Pay QR code. + """ + image_data_url: str + """ + The base64 image data for a pre-generated QR code + """ + image_url_png: str + """ + The image_url_png string used to render QR code + """ + image_url_svg: str + """ + The image_url_svg string used to render QR code + """ + + class WechatPayRedirectToAndroidApp(StripeObject): + app_id: str + """ + app_id is the APP ID registered on WeChat open platform + """ + nonce_str: str + """ + nonce_str is a random string + """ + package: str + """ + package is static value + """ + partner_id: str + """ + an unique merchant ID assigned by WeChat Pay + """ + prepay_id: str + """ + an unique trading ID assigned by WeChat Pay + """ + sign: str + """ + A signature + """ + timestamp: str + """ + Specifies the current time in epoch format + """ + + class WechatPayRedirectToIosApp(StripeObject): + native_url: str + """ + An universal link that redirect to WeChat Pay app + """ + + alipay_handle_redirect: Optional[AlipayHandleRedirect] + boleto_display_details: Optional[BoletoDisplayDetails] + card_await_notification: Optional[CardAwaitNotification] + cashapp_handle_redirect_or_display_qr_code: Optional[ + CashappHandleRedirectOrDisplayQrCode + ] + display_bank_transfer_instructions: Optional[ + DisplayBankTransferInstructions + ] + konbini_display_details: Optional[KonbiniDisplayDetails] + multibanco_display_details: Optional[MultibancoDisplayDetails] + oxxo_display_details: Optional[OxxoDisplayDetails] + paynow_display_qr_code: Optional[PaynowDisplayQrCode] + pix_display_qr_code: Optional[PixDisplayQrCode] + promptpay_display_qr_code: Optional[PromptpayDisplayQrCode] + redirect_to_url: Optional[RedirectToUrl] + swish_handle_redirect_or_display_qr_code: Optional[ + SwishHandleRedirectOrDisplayQrCode + ] + type: str + """ + Type of the next action to perform. Refer to the other child attributes under `next_action` for available values. Examples include: `redirect_to_url`, `use_stripe_sdk`, `alipay_handle_redirect`, `oxxo_display_details`, or `verify_with_microdeposits`. + """ + use_stripe_sdk: Optional[Dict[str, "Any"]] + """ + When confirming a PaymentIntent with Stripe.js, Stripe.js depends on the contents of this dictionary to invoke authentication flows. The shape of the contents is subject to change and is only intended to be used by Stripe.js. + """ + verify_with_microdeposits: Optional[VerifyWithMicrodeposits] + wechat_pay_display_qr_code: Optional[WechatPayDisplayQrCode] + wechat_pay_redirect_to_android_app: Optional[ + WechatPayRedirectToAndroidApp + ] + wechat_pay_redirect_to_ios_app: Optional[WechatPayRedirectToIosApp] + _inner_class_types = { + "alipay_handle_redirect": AlipayHandleRedirect, + "boleto_display_details": BoletoDisplayDetails, + "card_await_notification": CardAwaitNotification, + "cashapp_handle_redirect_or_display_qr_code": CashappHandleRedirectOrDisplayQrCode, + "display_bank_transfer_instructions": DisplayBankTransferInstructions, + "konbini_display_details": KonbiniDisplayDetails, + "multibanco_display_details": MultibancoDisplayDetails, + "oxxo_display_details": OxxoDisplayDetails, + "paynow_display_qr_code": PaynowDisplayQrCode, + "pix_display_qr_code": PixDisplayQrCode, + "promptpay_display_qr_code": PromptpayDisplayQrCode, + "redirect_to_url": RedirectToUrl, + "swish_handle_redirect_or_display_qr_code": SwishHandleRedirectOrDisplayQrCode, + "verify_with_microdeposits": VerifyWithMicrodeposits, + "wechat_pay_display_qr_code": WechatPayDisplayQrCode, + "wechat_pay_redirect_to_android_app": WechatPayRedirectToAndroidApp, + "wechat_pay_redirect_to_ios_app": WechatPayRedirectToIosApp, + } + + class PaymentDetails(StripeObject): + customer_reference: Optional[str] + """ + A unique value to identify the customer. This field is available only for card payments. + + This field is truncated to 25 alphanumeric characters, excluding spaces, before being sent to card networks. + """ + order_reference: Optional[str] + """ + A unique value assigned by the business to identify the transaction. Required for L2 and L3 rates. + + Required when the Payment Method Types array contains `card`, including when [automatic_payment_methods.enabled](https://docs.stripe.com/api/payment_intents/create#create_payment_intent-automatic_payment_methods-enabled) is set to `true`. + + For Cards, this field is truncated to 25 alphanumeric characters, excluding spaces, before being sent to card networks. For Klarna, this field is truncated to 255 characters and is visible to customers when they view the order in the Klarna app. + """ + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + """ + ID of the payment method configuration used. + """ + parent: Optional[str] + """ + ID of the parent payment method configuration used. + """ + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + """ + A URL for custom mandate text + """ + interval_description: Optional[str] + """ + Description of the interval. Only required if the 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + """ + Payment schedule for the mandate. + """ + transaction_type: Optional[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Affirm(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + preferred_locale: Optional[str] + """ + Preferred language of the Affirm authorization page that the customer is redirected to. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class AfterpayClearpay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + reference: Optional[str] + """ + An internal identifier or reference that this payment corresponds to. You must limit the identifier to 128 characters, and it can only contain letters, numbers, underscores, backslashes, and dashes. + This field differs from the statement descriptor and item name. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Alipay(StripeObject): + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Alma(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class AmazonPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class AuBecsDebit(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + class BacsDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Billie(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Blik(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Boleto(StripeObject): + expires_after_days: int + """ + The number of calendar days before a Boleto voucher expires. For example, if you create a Boleto voucher on Monday and you set expires_after_days to 2, the Boleto voucher will expire on Wednesday at 23:59 America/Sao_Paulo time. + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Card(StripeObject): + class Installments(StripeObject): + class AvailablePlan(StripeObject): + count: Optional[int] + """ + For `fixed_count` installment plans, this is the number of installment payments your customer will make to their credit card. + """ + interval: Optional[Literal["month"]] + """ + For `fixed_count` installment plans, this is the interval between installment payments your customer will make to their credit card. + One of `month`. + """ + type: Literal["bonus", "fixed_count", "revolving"] + """ + Type of installment plan, one of `fixed_count`, `bonus`, or `revolving`. + """ + + class Plan(StripeObject): + count: Optional[int] + """ + For `fixed_count` installment plans, this is the number of installment payments your customer will make to their credit card. + """ + interval: Optional[Literal["month"]] + """ + For `fixed_count` installment plans, this is the interval between installment payments your customer will make to their credit card. + One of `month`. + """ + type: Literal["bonus", "fixed_count", "revolving"] + """ + Type of installment plan, one of `fixed_count`, `bonus`, or `revolving`. + """ + + available_plans: Optional[List[AvailablePlan]] + """ + Installment plans that may be selected for this PaymentIntent. + """ + enabled: bool + """ + Whether Installments are enabled for this PaymentIntent. + """ + plan: Optional[Plan] + """ + Installment plan selected for this PaymentIntent. + """ + _inner_class_types = { + "available_plans": AvailablePlan, + "plan": Plan, + } + + class MandateOptions(StripeObject): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + description: Optional[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: Optional[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: Optional[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: Optional[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + installments: Optional[Installments] + """ + Installment details for this payment. + + For more information, see the [installments integration guide](https://stripe.com/docs/payments/installments). + """ + mandate_options: Optional[MandateOptions] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this payment intent on. Depends on the available networks of the card attached to the payment intent. Can be only set confirm-time. + """ + request_extended_authorization: Optional[ + Literal["if_available", "never"] + ] + """ + Request ability to [capture beyond the standard authorization validity window](https://stripe.com/docs/payments/extended-authorization) for this PaymentIntent. + """ + request_incremental_authorization: Optional[ + Literal["if_available", "never"] + ] + """ + Request ability to [increment the authorization](https://stripe.com/docs/payments/incremental-authorization) for this PaymentIntent. + """ + request_multicapture: Optional[Literal["if_available", "never"]] + """ + Request ability to make [multiple captures](https://stripe.com/docs/payments/multicapture) for this PaymentIntent. + """ + request_overcapture: Optional[Literal["if_available", "never"]] + """ + Request ability to [overcapture](https://stripe.com/docs/payments/overcapture) for this PaymentIntent. + """ + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + require_cvc_recollection: Optional[bool] + """ + When enabled, using a card that is attached to a customer will require the CVC to be provided again (i.e. using the cvc_token parameter). + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + statement_descriptor_suffix_kana: Optional[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kana prefix (shortened Kana descriptor) or Kana statement descriptor that's set on the account to form the complete statement descriptor. Maximum 22 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 22 characters. + """ + statement_descriptor_suffix_kanji: Optional[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kanji prefix (shortened Kanji descriptor) or Kanji statement descriptor that's set on the account to form the complete statement descriptor. Maximum 17 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 17 characters. + """ + _inner_class_types = { + "installments": Installments, + "mandate_options": MandateOptions, + } + + class CardPresent(StripeObject): + class Routing(StripeObject): + requested_priority: Optional[ + Literal["domestic", "international"] + ] + """ + Requested routing priority + """ + + capture_method: Optional[Literal["manual", "manual_preferred"]] + """ + Controls when the funds will be captured from the customer's account. + """ + request_extended_authorization: Optional[bool] + """ + Request ability to capture this payment beyond the standard [authorization validity window](https://stripe.com/docs/terminal/features/extended-authorizations#authorization-validity) + """ + request_incremental_authorization_support: Optional[bool] + """ + Request ability to [increment](https://stripe.com/docs/terminal/features/incremental-authorizations) this PaymentIntent if the combination of MCC and card brand is eligible. Check [incremental_authorization_supported](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) in the [Confirm](https://stripe.com/docs/api/payment_intents/confirm) response to verify support. + """ + routing: Optional[Routing] + _inner_class_types = {"routing": Routing} + + class Cashapp(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Crypto(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + eu_bank_transfer: Optional[EuBankTransfer] + requested_address_types: Optional[ + List[ + Literal[ + "aba", + "iban", + "sepa", + "sort_code", + "spei", + "swift", + "zengin", + ] + ] + ] + """ + List of address types that should be returned in the financial_addresses response. If not specified, all valid types will be returned. + + Permitted values include: `sort_code`, `zengin`, `iban`, or `spei`. + """ + type: Optional[ + Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + ] + """ + The bank transfer type that this PaymentIntent is allowed to use for funding Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + _inner_class_types = {"bank_transfer": BankTransfer} + + class Eps(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Fpx(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Giropay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Grabpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Ideal(StripeObject): + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class InteracPresent(StripeObject): + pass + + class KakaoPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Klarna(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + preferred_locale: Optional[str] + """ + Preferred locale of the Klarna checkout page that the customer is redirected to. + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Konbini(StripeObject): + confirmation_number: Optional[str] + """ + An optional 10 to 11 digit numeric-only string determining the confirmation code at applicable convenience stores. + """ + expires_after_days: Optional[int] + """ + The number of calendar days (between 1 and 60) after which Konbini payment instructions will expire. For example, if a PaymentIntent is confirmed with Konbini and `expires_after_days` set to 2 on Monday JST, the instructions will expire on Wednesday 23:59:59 JST. + """ + expires_at: Optional[int] + """ + The timestamp at which the Konbini payment instructions will expire. Only one of `expires_after_days` or `expires_at` may be set. + """ + product_description: Optional[str] + """ + A product descriptor of up to 22 characters, which will appear to customers at the convenience store. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class KrCard(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Link(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + persistent_token: Optional[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class MbWay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Mobilepay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Multibanco(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class NaverPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class NzBankAccount(StripeObject): + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + class Oxxo(StripeObject): + expires_after_days: int + """ + The number of calendar days before an OXXO invoice expires. For example, if you create an OXXO invoice on Monday and you set expires_after_days to 2, the OXXO invoice will expire on Wednesday at 23:59 America/Mexico_City time. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class P24(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Paynow(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Paypal(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + preferred_locale: Optional[str] + """ + Preferred locale of the PayPal checkout page that the customer is redirected to. + """ + reference: Optional[str] + """ + A reference of the PayPal transaction visible to customer which is mapped to PayPal's invoice ID. This must be a globally unique ID if you have configured in your PayPal settings to block multiple payments per invoice ID. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Pix(StripeObject): + amount_includes_iof: Optional[Literal["always", "never"]] + """ + Determines if the amount includes the IOF tax. + """ + expires_after_seconds: Optional[int] + """ + The number of seconds (between 10 and 1209600) after which Pix payment will expire. + """ + expires_at: Optional[int] + """ + The timestamp at which the Pix expires. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Promptpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class RevolutPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class SamsungPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Satispay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Sofort(StripeObject): + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + """ + Preferred language of the SOFORT authorization page that the customer is redirected to. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Swish(StripeObject): + reference: Optional[str] + """ + A reference for this payment to be displayed in the Swish app. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Twint(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class Filters(StripeObject): + account_subcategories: Optional[ + List[Literal["checking", "savings"]] + ] + """ + The account subcategories to use to filter for possible accounts to link. Valid subcategories are `checking` and `savings`. + """ + + filters: Optional[Filters] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + """ + The list of permissions to request. The `payment_method` permission must be included. + """ + prefetch: Optional[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + Data features requested to be retrieved upon account creation. + """ + return_url: Optional[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + _inner_class_types = {"filters": Filters} + + class MandateOptions(StripeObject): + collection_method: Optional[Literal["paper"]] + """ + Mandate collection method + """ + + financial_connections: Optional[FinancialConnections] + mandate_options: Optional[MandateOptions] + preferred_settlement_speed: Optional[ + Literal["fastest", "standard"] + ] + """ + Preferred transaction settlement speed + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = { + "financial_connections": FinancialConnections, + "mandate_options": MandateOptions, + } + + class WechatPay(StripeObject): + app_id: Optional[str] + """ + The app ID registered with WeChat Pay. Only required when client is ios or android. + """ + client: Optional[Literal["android", "ios", "web"]] + """ + The client type that the end customer will pay from + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Zip(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + swish: Optional[Swish] + twint: Optional[Twint] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class PresentmentDetails(StripeObject): + presentment_amount: int + """ + Amount intended to be collected by this payment, denominated in `presentment_currency`. + """ + presentment_currency: str + """ + Currency presented to the customer during payment. + """ + + class Processing(StripeObject): + class Card(StripeObject): + class CustomerNotification(StripeObject): + approval_requested: Optional[bool] + """ + Whether customer approval has been requested for this payment. For payments greater than INR 15000 or mandate amount, the customer must provide explicit approval of the payment with their bank. + """ + completes_at: Optional[int] + """ + If customer approval is required, they need to provide approval before this time. + """ + + customer_notification: Optional[CustomerNotification] + _inner_class_types = { + "customer_notification": CustomerNotification + } + + card: Optional[Card] + type: Literal["card"] + """ + Type of the payment method for which payment is in `processing` state, one of `card`. + """ + _inner_class_types = {"card": Card} + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + class TransferData(StripeObject): + amount: Optional[int] + """ + The amount transferred to the destination account. This transfer will occur automatically after the payment succeeds. If no amount is specified, by default the entire payment amount is transferred to the destination account. + The amount must be less than or equal to the [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount), and must be a positive integer + representing how much to transfer in the smallest currency unit (e.g., 100 cents to charge $1.00). + """ + destination: ExpandableField["Account"] + """ + The account (if any) that the payment is attributed to for tax reporting, and where funds from the payment are transferred to after payment success. + """ + + amount: int + """ + Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). + """ + amount_capturable: int + """ + Amount that can be captured from this PaymentIntent. + """ + amount_details: Optional[AmountDetails] + amount_received: int + """ + Amount that this PaymentIntent collects. + """ + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect application that created the PaymentIntent. + """ + application_fee_amount: Optional[int] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total amount captured. For more information, see the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts). + """ + automatic_payment_methods: Optional[AutomaticPaymentMethods] + """ + Settings to configure compatible payment methods from the [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods) + """ + canceled_at: Optional[int] + """ + Populated when `status` is `canceled`, this is the time at which the PaymentIntent was canceled. Measured in seconds since the Unix epoch. + """ + cancellation_reason: Optional[ + Literal[ + "abandoned", + "automatic", + "duplicate", + "expired", + "failed_invoice", + "fraudulent", + "requested_by_customer", + "void_invoice", + ] + ] + """ + Reason for cancellation of this PaymentIntent, either user-provided (`duplicate`, `fraudulent`, `requested_by_customer`, or `abandoned`) or generated by Stripe internally (`failed_invoice`, `void_invoice`, `automatic`, or `expired`). + """ + capture_method: Literal["automatic", "automatic_async", "manual"] + """ + Controls when the funds will be captured from the customer's account. + """ + client_secret: Optional[str] + """ + The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key. + + The client secret can be used to complete a payment from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret. + + Refer to our docs to [accept a payment](https://stripe.com/docs/payments/accept-a-payment?ui=elements) and learn about how `client_secret` should be handled. + """ + confirmation_method: Literal["automatic", "manual"] + """ + Describes whether we can confirm this PaymentIntent automatically, or if it requires customer action to confirm the payment. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the Customer this PaymentIntent belongs to, if one exists. + + Payment methods attached to other Customers cannot be used with this PaymentIntent. + + If [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) is set and this PaymentIntent's payment method is not `card_present`, then the payment method attaches to the Customer after the PaymentIntent has been confirmed and any required actions from the user are complete. If the payment method is `card_present` and isn't a digital wallet, then a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card is created and attached to the Customer instead. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + excluded_payment_method_types: Optional[ + List[ + Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + The list of payment method types to exclude from use with this payment. + """ + id: str + """ + Unique identifier for the object. + """ + last_payment_error: Optional[LastPaymentError] + """ + The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason. + """ + latest_charge: Optional[ExpandableField["Charge"]] + """ + ID of the latest [Charge object](https://stripe.com/docs/api/charges) created by this PaymentIntent. This property is `null` until PaymentIntent confirmation is attempted. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Learn more about [storing information in metadata](https://stripe.com/docs/payments/payment-intents/creating-payment-intents#storing-information-in-metadata). + """ + next_action: Optional[NextAction] + """ + If present, this property tells you what actions you need to take in order for your customer to fulfill a payment using the provided source. + """ + object: Literal["payment_intent"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) for which the funds of the PaymentIntent are intended. See the PaymentIntents [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts) for details. + """ + payment_details: Optional[PaymentDetails] + payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the payment method used in this PaymentIntent. + """ + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + """ + Information about the [payment method configuration](https://stripe.com/docs/api/payment_method_configurations) used for this PaymentIntent. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment-method-specific configuration for this PaymentIntent. + """ + payment_method_types: List[str] + """ + The list of payment method types (e.g. card) that this PaymentIntent is allowed to use. A comprehensive list of valid payment method types can be found [here](https://docs.stripe.com/api/payment_methods/object#payment_method_object-type). + """ + presentment_details: Optional[PresentmentDetails] + processing: Optional[Processing] + """ + If present, this property tells you about the processing state of the payment. + """ + receipt_email: Optional[str] + """ + Email address that the receipt for the resulting payment will be sent to. If `receipt_email` is specified for a payment in live mode, a receipt will be sent regardless of your [email settings](https://dashboard.stripe.com/account/emails). + """ + review: Optional[ExpandableField["Review"]] + """ + ID of the review associated with this PaymentIntent, if any. + """ + setup_future_usage: Optional[Literal["off_session", "on_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + shipping: Optional[Shipping] + """ + Shipping information for this PaymentIntent. + """ + source: Optional[ + ExpandableField[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + ] + """ + This is a legacy field that will be removed in the future. It is the ID of the Source object that is associated with this PaymentIntent, if one was supplied. + """ + statement_descriptor: Optional[str] + """ + Text that appears on the customer's statement as the statement descriptor for a non-card charge. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see [the Statement Descriptor docs](https://docs.stripe.com/get-started/account/statement-descriptors). + + Setting this value for a card charge returns an error. For card charges, set the [statement_descriptor_suffix](https://docs.stripe.com/get-started/account/statement-descriptors#dynamic) instead. + """ + statement_descriptor_suffix: Optional[str] + """ + Provides information about a card charge. Concatenated to the account's [statement descriptor prefix](https://docs.stripe.com/get-started/account/statement-descriptors#static) to form the complete statement descriptor that appears on the customer's statement. + """ + status: Literal[ + "canceled", + "processing", + "requires_action", + "requires_capture", + "requires_confirmation", + "requires_payment_method", + "succeeded", + ] + """ + Status of this PaymentIntent, one of `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `requires_capture`, `canceled`, or `succeeded`. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses). + """ + transfer_data: Optional[TransferData] + """ + The data that automatically creates a Transfer after the payment finalizes. Learn more about the [use case for connected accounts](https://stripe.com/docs/payments/connected-accounts). + """ + transfer_group: Optional[str] + """ + A string that identifies the resulting payment as part of a group. Learn more about the [use case for connected accounts](https://stripe.com/docs/connect/separate-charges-and-transfers). + """ + + @classmethod + def _cls_apply_customer_balance( + cls, + intent: str, + **params: Unpack["PaymentIntentApplyCustomerBalanceParams"], + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def apply_customer_balance( + intent: str, + **params: Unpack["PaymentIntentApplyCustomerBalanceParams"], + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + ... + + @overload + def apply_customer_balance( + self, **params: Unpack["PaymentIntentApplyCustomerBalanceParams"] + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + ... + + @class_method_variant("_cls_apply_customer_balance") + def apply_customer_balance( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentApplyCustomerBalanceParams"] + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_apply_customer_balance_async( + cls, + intent: str, + **params: Unpack["PaymentIntentApplyCustomerBalanceParams"], + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def apply_customer_balance_async( + intent: str, + **params: Unpack["PaymentIntentApplyCustomerBalanceParams"], + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + ... + + @overload + async def apply_customer_balance_async( + self, **params: Unpack["PaymentIntentApplyCustomerBalanceParams"] + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + ... + + @class_method_variant("_cls_apply_customer_balance_async") + async def apply_customer_balance_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentApplyCustomerBalanceParams"] + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_cancel( + cls, intent: str, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + intent: str, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @overload + def cancel( + self, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, intent: str, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + intent: str, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentCancelParams"] + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_capture( + cls, intent: str, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def capture( + intent: str, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + ... + + @overload + def capture( + self, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + ... + + @class_method_variant("_cls_capture") + def capture( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_capture_async( + cls, intent: str, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def capture_async( + intent: str, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + ... + + @overload + async def capture_async( + self, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + ... + + @class_method_variant("_cls_capture_async") + async def capture_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentCaptureParams"] + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_confirm( + cls, intent: str, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def confirm( + intent: str, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + ... + + @overload + def confirm( + self, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + ... + + @class_method_variant("_cls_confirm") + def confirm( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_confirm_async( + cls, intent: str, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def confirm_async( + intent: str, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + ... + + @overload + async def confirm_async( + self, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + ... + + @class_method_variant("_cls_confirm_async") + async def confirm_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentConfirmParams"] + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["PaymentIntentCreateParams"] + ) -> "PaymentIntent": + """ + Creates a PaymentIntent object. + + After the PaymentIntent is created, attach a payment method and [confirm](https://docs.stripe.com/docs/api/payment_intents/confirm) + to continue the payment. Learn more about the available payment flows + with the Payment Intents API. + + When you use confirm=true during creation, it's equivalent to creating + and confirming the PaymentIntent in the same call. You can use any parameters + available in the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) when you supply + confirm=true. + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PaymentIntentCreateParams"] + ) -> "PaymentIntent": + """ + Creates a PaymentIntent object. + + After the PaymentIntent is created, attach a payment method and [confirm](https://docs.stripe.com/docs/api/payment_intents/confirm) + to continue the payment. Learn more about the available payment flows + with the Payment Intents API. + + When you use confirm=true during creation, it's equivalent to creating + and confirming the PaymentIntent in the same call. You can use any parameters + available in the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) when you supply + confirm=true. + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_increment_authorization( + cls, + intent: str, + **params: Unpack["PaymentIntentIncrementAuthorizationParams"], + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def increment_authorization( + intent: str, + **params: Unpack["PaymentIntentIncrementAuthorizationParams"], + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + ... + + @overload + def increment_authorization( + self, **params: Unpack["PaymentIntentIncrementAuthorizationParams"] + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + ... + + @class_method_variant("_cls_increment_authorization") + def increment_authorization( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentIncrementAuthorizationParams"] + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_increment_authorization_async( + cls, + intent: str, + **params: Unpack["PaymentIntentIncrementAuthorizationParams"], + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def increment_authorization_async( + intent: str, + **params: Unpack["PaymentIntentIncrementAuthorizationParams"], + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + ... + + @overload + async def increment_authorization_async( + self, **params: Unpack["PaymentIntentIncrementAuthorizationParams"] + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + ... + + @class_method_variant("_cls_increment_authorization_async") + async def increment_authorization_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentIncrementAuthorizationParams"] + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PaymentIntentListParams"] + ) -> ListObject["PaymentIntent"]: + """ + Returns a list of PaymentIntents. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentIntentListParams"] + ) -> ListObject["PaymentIntent"]: + """ + Returns a list of PaymentIntents. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PaymentIntentModifyParams"] + ) -> "PaymentIntent": + """ + Updates properties on a PaymentIntent object without confirming. + + Depending on which properties you update, you might need to confirm the + PaymentIntent again. For example, updating the payment_method + always requires you to confirm the PaymentIntent again. If you prefer to + update and confirm at the same time, we recommend updating properties through + the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentIntent", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PaymentIntentModifyParams"] + ) -> "PaymentIntent": + """ + Updates properties on a PaymentIntent object without confirming. + + Depending on which properties you update, you might need to confirm the + PaymentIntent again. For example, updating the payment_method + always requires you to confirm the PaymentIntent again. If you prefer to + update and confirm at the same time, we recommend updating properties through + the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentIntentRetrieveParams"] + ) -> "PaymentIntent": + """ + Retrieves the details of a PaymentIntent that has previously been created. + + You can retrieve a PaymentIntent client-side using a publishable key when the client_secret is in the query string. + + If you retrieve a PaymentIntent with a publishable key, it only returns a subset of properties. Refer to the [payment intent](https://docs.stripe.com/api#payment_intent_object) object reference for more details. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentIntentRetrieveParams"] + ) -> "PaymentIntent": + """ + Retrieves the details of a PaymentIntent that has previously been created. + + You can retrieve a PaymentIntent client-side using a publishable key when the client_secret is in the query string. + + If you retrieve a PaymentIntent with a publishable key, it only returns a subset of properties. Refer to the [payment intent](https://docs.stripe.com/api#payment_intent_object) object reference for more details. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_verify_microdeposits( + cls, + intent: str, + **params: Unpack["PaymentIntentVerifyMicrodepositsParams"], + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + cls._static_request( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def verify_microdeposits( + intent: str, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + ... + + @overload + def verify_microdeposits( + self, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + ... + + @class_method_variant("_cls_verify_microdeposits") + def verify_microdeposits( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_verify_microdeposits_async( + cls, + intent: str, + **params: Unpack["PaymentIntentVerifyMicrodepositsParams"], + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + await cls._static_request_async( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def verify_microdeposits_async( + intent: str, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + ... + + @overload + async def verify_microdeposits_async( + self, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + ... + + @class_method_variant("_cls_verify_microdeposits_async") + async def verify_microdeposits_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentIntentVerifyMicrodepositsParams"] + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def search( + cls, *args, **kwargs: Unpack["PaymentIntentSearchParams"] + ) -> SearchResultObject["PaymentIntent"]: + """ + Search for PaymentIntents you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search( + search_url="/v1/payment_intents/search", *args, **kwargs + ) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["PaymentIntentSearchParams"] + ) -> SearchResultObject["PaymentIntent"]: + """ + Search for PaymentIntents you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/payment_intents/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["PaymentIntentSearchParams"] + ) -> Iterator["PaymentIntent"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["PaymentIntentSearchParams"] + ) -> AsyncIterator["PaymentIntent"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + @classmethod + def list_amount_details_line_items( + cls, + intent: str, + **params: Unpack["PaymentIntentListAmountDetailsLineItemsParams"], + ) -> ListObject["PaymentIntentAmountDetailsLineItem"]: + """ + Lists all LineItems of a given PaymentIntent. + """ + return cast( + ListObject["PaymentIntentAmountDetailsLineItem"], + cls._static_request( + "get", + "/v1/payment_intents/{intent}/amount_details_line_items".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @classmethod + async def list_amount_details_line_items_async( + cls, + intent: str, + **params: Unpack["PaymentIntentListAmountDetailsLineItemsParams"], + ) -> ListObject["PaymentIntentAmountDetailsLineItem"]: + """ + Lists all LineItems of a given PaymentIntent. + """ + return cast( + ListObject["PaymentIntentAmountDetailsLineItem"], + await cls._static_request_async( + "get", + "/v1/payment_intents/{intent}/amount_details_line_items".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + _inner_class_types = { + "amount_details": AmountDetails, + "automatic_payment_methods": AutomaticPaymentMethods, + "last_payment_error": LastPaymentError, + "next_action": NextAction, + "payment_details": PaymentDetails, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + "presentment_details": PresentmentDetails, + "processing": Processing, + "shipping": Shipping, + "transfer_data": TransferData, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item.py new file mode 100644 index 00000000..2c1e291f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal + + +class PaymentIntentAmountDetailsLineItem(StripeObject): + OBJECT_NAME: ClassVar[ + Literal["payment_intent_amount_details_line_item"] + ] = "payment_intent_amount_details_line_item" + + class PaymentMethodOptions(StripeObject): + class Card(StripeObject): + commodity_code: Optional[str] + + class CardPresent(StripeObject): + commodity_code: Optional[str] + + class Klarna(StripeObject): + image_url: Optional[str] + product_url: Optional[str] + reference: Optional[str] + subscription_reference: Optional[str] + + class Paypal(StripeObject): + category: Optional[ + Literal["digital_goods", "donation", "physical_goods"] + ] + """ + Type of the line item. + """ + description: Optional[str] + """ + Description of the line item. + """ + sold_by: Optional[str] + """ + The Stripe account ID of the connected account that sells the item. This is only needed when using [Separate Charges and Transfers](https://docs.stripe.com/connect/separate-charges-and-transfers). + """ + + card: Optional[Card] + card_present: Optional[CardPresent] + klarna: Optional[Klarna] + paypal: Optional[Paypal] + _inner_class_types = { + "card": Card, + "card_present": CardPresent, + "klarna": Klarna, + "paypal": Paypal, + } + + class Tax(StripeObject): + total_tax_amount: int + """ + The total amount of tax on the transaction represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Required for L2 rates. An integer greater than or equal to 0. + + This field is mutually exclusive with the `amount_details[line_items][#][tax][total_tax_amount]` field. + """ + + discount_amount: Optional[int] + """ + The discount applied on this line item represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). An integer greater than 0. + + This field is mutually exclusive with the `amount_details[discount_amount]` field. + """ + id: str + """ + Unique identifier for the object. + """ + object: Literal["payment_intent_amount_details_line_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment method-specific information for line items. + """ + product_code: Optional[str] + """ + The product code of the line item, such as an SKU. Required for L3 rates. At most 12 characters long. + """ + product_name: str + """ + The product name of the line item. Required for L3 rates. At most 1024 characters long. + + For Cards, this field is truncated to 26 alphanumeric characters before being sent to the card networks. For Paypal, this field is truncated to 127 characters. + """ + quantity: int + """ + The quantity of items. Required for L3 rates. An integer greater than 0. + """ + tax: Optional[Tax] + """ + Contains information about the tax on the item. + """ + unit_cost: int + """ + The unit cost of the line item represented in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Required for L3 rates. An integer greater than or equal to 0. + """ + unit_of_measure: Optional[str] + """ + A unit of measure for the line item, such as gallons, feet, meters, etc. Required for L3 rates. At most 12 alphanumeric characters long. + """ + _inner_class_types = { + "payment_method_options": PaymentMethodOptions, + "tax": Tax, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item_service.py new file mode 100644 index 00000000..a8ac4bc1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_amount_details_line_item_service.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_intent_amount_details_line_item import ( + PaymentIntentAmountDetailsLineItem, + ) + from stripe._request_options import RequestOptions + from stripe.params._payment_intent_amount_details_line_item_list_params import ( + PaymentIntentAmountDetailsLineItemListParams, + ) + + +class PaymentIntentAmountDetailsLineItemService(StripeService): + def list( + self, + intent: str, + params: Optional[ + "PaymentIntentAmountDetailsLineItemListParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentIntentAmountDetailsLineItem]": + """ + Lists all LineItems of a given PaymentIntent. + """ + return cast( + "ListObject[PaymentIntentAmountDetailsLineItem]", + self._request( + "get", + "/v1/payment_intents/{intent}/amount_details_line_items".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + intent: str, + params: Optional[ + "PaymentIntentAmountDetailsLineItemListParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentIntentAmountDetailsLineItem]": + """ + Lists all LineItems of a given PaymentIntent. + """ + return cast( + "ListObject[PaymentIntentAmountDetailsLineItem]", + await self._request_async( + "get", + "/v1/payment_intents/{intent}/amount_details_line_items".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_service.py new file mode 100644 index 00000000..8c55091f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_intent_service.py @@ -0,0 +1,709 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_intent import PaymentIntent + from stripe._payment_intent_amount_details_line_item_service import ( + PaymentIntentAmountDetailsLineItemService, + ) + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._payment_intent_apply_customer_balance_params import ( + PaymentIntentApplyCustomerBalanceParams, + ) + from stripe.params._payment_intent_cancel_params import ( + PaymentIntentCancelParams, + ) + from stripe.params._payment_intent_capture_params import ( + PaymentIntentCaptureParams, + ) + from stripe.params._payment_intent_confirm_params import ( + PaymentIntentConfirmParams, + ) + from stripe.params._payment_intent_create_params import ( + PaymentIntentCreateParams, + ) + from stripe.params._payment_intent_increment_authorization_params import ( + PaymentIntentIncrementAuthorizationParams, + ) + from stripe.params._payment_intent_list_params import ( + PaymentIntentListParams, + ) + from stripe.params._payment_intent_retrieve_params import ( + PaymentIntentRetrieveParams, + ) + from stripe.params._payment_intent_search_params import ( + PaymentIntentSearchParams, + ) + from stripe.params._payment_intent_update_params import ( + PaymentIntentUpdateParams, + ) + from stripe.params._payment_intent_verify_microdeposits_params import ( + PaymentIntentVerifyMicrodepositsParams, + ) + +_subservices = { + "amount_details_line_items": [ + "stripe._payment_intent_amount_details_line_item_service", + "PaymentIntentAmountDetailsLineItemService", + ], +} + + +class PaymentIntentService(StripeService): + amount_details_line_items: "PaymentIntentAmountDetailsLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["PaymentIntentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentIntent]": + """ + Returns a list of PaymentIntents. + """ + return cast( + "ListObject[PaymentIntent]", + self._request( + "get", + "/v1/payment_intents", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PaymentIntentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentIntent]": + """ + Returns a list of PaymentIntents. + """ + return cast( + "ListObject[PaymentIntent]", + await self._request_async( + "get", + "/v1/payment_intents", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PaymentIntentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Creates a PaymentIntent object. + + After the PaymentIntent is created, attach a payment method and [confirm](https://docs.stripe.com/docs/api/payment_intents/confirm) + to continue the payment. Learn more about the available payment flows + with the Payment Intents API. + + When you use confirm=true during creation, it's equivalent to creating + and confirming the PaymentIntent in the same call. You can use any parameters + available in the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) when you supply + confirm=true. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PaymentIntentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Creates a PaymentIntent object. + + After the PaymentIntent is created, attach a payment method and [confirm](https://docs.stripe.com/docs/api/payment_intents/confirm) + to continue the payment. Learn more about the available payment flows + with the Payment Intents API. + + When you use confirm=true during creation, it's equivalent to creating + and confirming the PaymentIntent in the same call. You can use any parameters + available in the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) when you supply + confirm=true. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + intent: str, + params: Optional["PaymentIntentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Retrieves the details of a PaymentIntent that has previously been created. + + You can retrieve a PaymentIntent client-side using a publishable key when the client_secret is in the query string. + + If you retrieve a PaymentIntent with a publishable key, it only returns a subset of properties. Refer to the [payment intent](https://docs.stripe.com/api#payment_intent_object) object reference for more details. + """ + return cast( + "PaymentIntent", + self._request( + "get", + "/v1/payment_intents/{intent}".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + intent: str, + params: Optional["PaymentIntentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Retrieves the details of a PaymentIntent that has previously been created. + + You can retrieve a PaymentIntent client-side using a publishable key when the client_secret is in the query string. + + If you retrieve a PaymentIntent with a publishable key, it only returns a subset of properties. Refer to the [payment intent](https://docs.stripe.com/api#payment_intent_object) object reference for more details. + """ + return cast( + "PaymentIntent", + await self._request_async( + "get", + "/v1/payment_intents/{intent}".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + intent: str, + params: Optional["PaymentIntentUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Updates properties on a PaymentIntent object without confirming. + + Depending on which properties you update, you might need to confirm the + PaymentIntent again. For example, updating the payment_method + always requires you to confirm the PaymentIntent again. If you prefer to + update and confirm at the same time, we recommend updating properties through + the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) instead. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + intent: str, + params: Optional["PaymentIntentUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Updates properties on a PaymentIntent object without confirming. + + Depending on which properties you update, you might need to confirm the + PaymentIntent again. For example, updating the payment_method + always requires you to confirm the PaymentIntent again. If you prefer to + update and confirm at the same time, we recommend updating properties through + the [confirm API](https://docs.stripe.com/docs/api/payment_intents/confirm) instead. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "PaymentIntentSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[PaymentIntent]": + """ + Search for PaymentIntents you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[PaymentIntent]", + self._request( + "get", + "/v1/payment_intents/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "PaymentIntentSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[PaymentIntent]": + """ + Search for PaymentIntents you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[PaymentIntent]", + await self._request_async( + "get", + "/v1/payment_intents/search", + base_address="api", + params=params, + options=options, + ), + ) + + def apply_customer_balance( + self, + intent: str, + params: Optional["PaymentIntentApplyCustomerBalanceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def apply_customer_balance_async( + self, + intent: str, + params: Optional["PaymentIntentApplyCustomerBalanceParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Manually reconcile the remaining amount for a customer_balance PaymentIntent. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + intent: str, + params: Optional["PaymentIntentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + intent: str, + params: Optional["PaymentIntentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://docs.stripe.com/docs/payments/intents), processing. + + After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded. + + You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def capture( + self, + intent: str, + params: Optional["PaymentIntentCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def capture_async( + self, + intent: str, + params: Optional["PaymentIntentCaptureParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture. + + Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation. + + Learn more about [separate authorization and capture](https://docs.stripe.com/docs/payments/capture-later). + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def confirm( + self, + intent: str, + params: Optional["PaymentIntentConfirmParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def confirm_async( + self, + intent: str, + params: Optional["PaymentIntentConfirmParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Confirm that your customer intends to pay with current or provided + payment method. Upon confirmation, the PaymentIntent will attempt to initiate + a payment. + + If the selected payment method requires additional authentication steps, the + PaymentIntent will transition to the requires_action status and + suggest additional actions via next_action. If payment fails, + the PaymentIntent transitions to the requires_payment_method status or the + canceled status if the confirmation limit is reached. If + payment succeeds, the PaymentIntent will transition to the succeeded + status (or requires_capture, if capture_method is set to manual). + + If the confirmation_method is automatic, payment may be attempted + using our [client SDKs](https://docs.stripe.com/docs/stripe-js/reference#stripe-handle-card-payment) + and the PaymentIntent's [client_secret](https://docs.stripe.com/api#payment_intent_object-client_secret). + After next_actions are handled by the client, no additional + confirmation is required to complete the payment. + + If the confirmation_method is manual, all payment attempts must be + initiated using a secret key. + + If any actions are required for the payment, the PaymentIntent will + return to the requires_confirmation state + after those actions are completed. Your server needs to then + explicitly re-confirm the PaymentIntent to initiate the next payment + attempt. + + There is a variable upper limit on how many times a PaymentIntent can be confirmed. + After this limit is reached, any further calls to this endpoint will + transition the PaymentIntent to the canceled state. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def increment_authorization( + self, + intent: str, + params: "PaymentIntentIncrementAuthorizationParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def increment_authorization_async( + self, + intent: str, + params: "PaymentIntentIncrementAuthorizationParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Perform an incremental authorization on an eligible + [PaymentIntent](https://docs.stripe.com/docs/api/payment_intents/object). To be eligible, the + PaymentIntent's status must be requires_capture and + [incremental_authorization_supported](https://docs.stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported) + must be true. + + Incremental authorizations attempt to increase the authorized amount on + your customer's card to the new, higher amount provided. Similar to the + initial authorization, incremental authorizations can be declined. A + single PaymentIntent can call this endpoint multiple times to further + increase the authorized amount. + + If the incremental authorization succeeds, the PaymentIntent object + returns with the updated + [amount](https://docs.stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). + If the incremental authorization fails, a + [card_declined](https://docs.stripe.com/docs/error-codes#card-declined) error returns, and no other + fields on the PaymentIntent or Charge update. The PaymentIntent + object remains capturable for the previously authorized amount. + + Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines. + After it's captured, a PaymentIntent can no longer be incremented. + + Learn more about [incremental authorizations](https://docs.stripe.com/docs/terminal/features/incremental-authorizations). + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def verify_microdeposits( + self, + intent: str, + params: Optional["PaymentIntentVerifyMicrodepositsParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + self._request( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def verify_microdeposits_async( + self, + intent: str, + params: Optional["PaymentIntentVerifyMicrodepositsParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentIntent": + """ + Verifies microdeposits on a PaymentIntent object. + """ + return cast( + "PaymentIntent", + await self._request_async( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link.py new file mode 100644 index 00000000..2a89ae8a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link.py @@ -0,0 +1,1174 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._line_item import LineItem + from stripe._shipping_rate import ShippingRate + from stripe._tax_id import TaxId + from stripe.params._payment_link_create_params import ( + PaymentLinkCreateParams, + ) + from stripe.params._payment_link_list_line_items_params import ( + PaymentLinkListLineItemsParams, + ) + from stripe.params._payment_link_list_params import PaymentLinkListParams + from stripe.params._payment_link_modify_params import ( + PaymentLinkModifyParams, + ) + from stripe.params._payment_link_retrieve_params import ( + PaymentLinkRetrieveParams, + ) + + +class PaymentLink( + CreateableAPIResource["PaymentLink"], + ListableAPIResource["PaymentLink"], + UpdateableAPIResource["PaymentLink"], +): + """ + A payment link is a shareable URL that will take your customers to a hosted payment page. A payment link can be shared and used multiple times. + + When a customer opens a payment link it will open a new [checkout session](https://stripe.com/docs/api/checkout/sessions) to render the payment page. You can use [checkout session events](https://stripe.com/docs/api/events/types#event_types-checkout.session.completed) to track payments through payment links. + + Related guide: [Payment Links API](https://stripe.com/docs/payment-links) + """ + + OBJECT_NAME: ClassVar[Literal["payment_link"]] = "payment_link" + + class AfterCompletion(StripeObject): + class HostedConfirmation(StripeObject): + custom_message: Optional[str] + """ + The custom message that is displayed to the customer after the purchase is complete. + """ + + class Redirect(StripeObject): + url: str + """ + The URL the customer will be redirected to after the purchase is complete. + """ + + hosted_confirmation: Optional[HostedConfirmation] + redirect: Optional[Redirect] + type: Literal["hosted_confirmation", "redirect"] + """ + The specified behavior after the purchase is complete. + """ + _inner_class_types = { + "hosted_confirmation": HostedConfirmation, + "redirect": Redirect, + } + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + enabled: bool + """ + If `true`, tax will be calculated automatically using the customer's location. + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + _inner_class_types = {"liability": Liability} + + class ConsentCollection(StripeObject): + class PaymentMethodReuseAgreement(StripeObject): + position: Literal["auto", "hidden"] + """ + Determines the position and visibility of the payment method reuse agreement in the UI. When set to `auto`, Stripe's defaults will be used. + + When set to `hidden`, the payment method reuse agreement text will always be hidden in the UI. + """ + + payment_method_reuse_agreement: Optional[PaymentMethodReuseAgreement] + """ + Settings related to the payment method reuse text shown in the Checkout UI. + """ + promotions: Optional[Literal["auto", "none"]] + """ + If set to `auto`, enables the collection of customer consent for promotional communications. + """ + terms_of_service: Optional[Literal["none", "required"]] + """ + If set to `required`, it requires cutomers to accept the terms of service before being able to pay. If set to `none`, customers won't be shown a checkbox to accept the terms of service. + """ + _inner_class_types = { + "payment_method_reuse_agreement": PaymentMethodReuseAgreement, + } + + class CustomField(StripeObject): + class Dropdown(StripeObject): + class Option(StripeObject): + label: str + """ + The label for the option, displayed to the customer. Up to 100 characters. + """ + value: str + """ + The value for this option, not displayed to the customer, used by your integration to reconcile the option selected by the customer. Must be unique to this option, alphanumeric, and up to 100 characters. + """ + + default_value: Optional[str] + """ + The value that will pre-fill on the payment page. + """ + options: List[Option] + """ + The options available for the customer to select. Up to 200 options allowed. + """ + _inner_class_types = {"options": Option} + + class Label(StripeObject): + custom: Optional[str] + """ + Custom text for the label, displayed to the customer. Up to 50 characters. + """ + type: Literal["custom"] + """ + The type of the label. + """ + + class Numeric(StripeObject): + default_value: Optional[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: Optional[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: Optional[int] + """ + The minimum character length requirement for the customer's input. + """ + + class Text(StripeObject): + default_value: Optional[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: Optional[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: Optional[int] + """ + The minimum character length requirement for the customer's input. + """ + + dropdown: Optional[Dropdown] + key: str + """ + String of your choice that your integration can use to reconcile this field. Must be unique to this field, alphanumeric, and up to 200 characters. + """ + label: Label + numeric: Optional[Numeric] + optional: bool + """ + Whether the customer is required to complete the field before completing the Checkout Session. Defaults to `false`. + """ + text: Optional[Text] + type: Literal["dropdown", "numeric", "text"] + """ + The type of the field. + """ + _inner_class_types = { + "dropdown": Dropdown, + "label": Label, + "numeric": Numeric, + "text": Text, + } + + class CustomText(StripeObject): + class AfterSubmit(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class ShippingAddress(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class Submit(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class TermsOfServiceAcceptance(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + after_submit: Optional[AfterSubmit] + """ + Custom text that should be displayed after the payment confirmation button. + """ + shipping_address: Optional[ShippingAddress] + """ + Custom text that should be displayed alongside shipping address collection. + """ + submit: Optional[Submit] + """ + Custom text that should be displayed alongside the payment confirmation button. + """ + terms_of_service_acceptance: Optional[TermsOfServiceAcceptance] + """ + Custom text that should be displayed in place of the default terms of service agreement text. + """ + _inner_class_types = { + "after_submit": AfterSubmit, + "shipping_address": ShippingAddress, + "submit": Submit, + "terms_of_service_acceptance": TermsOfServiceAcceptance, + } + + class InvoiceCreation(StripeObject): + class InvoiceData(StripeObject): + class CustomField(StripeObject): + name: str + """ + The name of the custom field. + """ + value: str + """ + The value of the custom field. + """ + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + """ + How line-item prices and amounts will be displayed with respect to tax on invoice PDFs. + """ + template: Optional[str] + """ + ID of the invoice rendering template to be used for the generated invoice. + """ + + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + """ + The account tax IDs associated with the invoice. + """ + custom_fields: Optional[List[CustomField]] + """ + A list of up to 4 custom fields to be displayed on the invoice. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + footer: Optional[str] + """ + Footer to be displayed on the invoice. + """ + issuer: Optional[Issuer] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + rendering_options: Optional[RenderingOptions] + """ + Options for invoice PDF rendering. + """ + _inner_class_types = { + "custom_fields": CustomField, + "issuer": Issuer, + "rendering_options": RenderingOptions, + } + + enabled: bool + """ + Enable creating an invoice on successful payment. + """ + invoice_data: Optional[InvoiceData] + """ + Configuration for the invoice. Default invoice values will be used if unspecified. + """ + _inner_class_types = {"invoice_data": InvoiceData} + + class NameCollection(StripeObject): + class Business(StripeObject): + enabled: bool + """ + Indicates whether business name collection is enabled for the payment link. + """ + optional: bool + """ + Whether the customer is required to complete the field before checking out. Defaults to `false`. + """ + + class Individual(StripeObject): + enabled: bool + """ + Indicates whether individual name collection is enabled for the payment link. + """ + optional: bool + """ + Whether the customer is required to complete the field before checking out. Defaults to `false`. + """ + + business: Optional[Business] + individual: Optional[Individual] + _inner_class_types = {"business": Business, "individual": Individual} + + class OptionalItem(StripeObject): + class AdjustableQuantity(StripeObject): + enabled: bool + """ + Set to true if the quantity can be adjusted to any non-negative integer. + """ + maximum: Optional[int] + """ + The maximum quantity of this item the customer can purchase. By default this value is 99. + """ + minimum: Optional[int] + """ + The minimum quantity of this item the customer must purchase, if they choose to purchase it. Because this item is optional, the customer will always be able to remove it from their order, even if the `minimum` configured here is greater than 0. By default this value is 0. + """ + + adjustable_quantity: Optional[AdjustableQuantity] + price: str + quantity: int + _inner_class_types = {"adjustable_quantity": AdjustableQuantity} + + class PaymentIntentData(StripeObject): + capture_method: Optional[ + Literal["automatic", "automatic_async", "manual"] + ] + """ + Indicates when the funds will be captured from the customer's account. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on [Payment Intents](https://stripe.com/docs/api/payment_intents) generated from this payment link. + """ + setup_future_usage: Optional[Literal["off_session", "on_session"]] + """ + Indicates that you intend to make future payments with the payment method collected during checkout. + """ + statement_descriptor: Optional[str] + """ + For a non-card payment, information about the charge that appears on the customer's statement when this payment succeeds in creating a charge. + """ + statement_descriptor_suffix: Optional[str] + """ + For a card payment, information about the charge that appears on the customer's statement when this payment succeeds in creating a charge. Concatenated with the account's statement descriptor prefix to form the complete statement descriptor. + """ + transfer_group: Optional[str] + """ + A string that identifies the resulting payment as part of a group. See the PaymentIntents [use case for connected accounts](https://stripe.com/docs/connect/separate-charges-and-transfers) for details. + """ + + class PhoneNumberCollection(StripeObject): + enabled: bool + """ + If `true`, a phone number will be collected during checkout. + """ + + class Restrictions(StripeObject): + class CompletedSessions(StripeObject): + count: int + """ + The current number of checkout sessions that have been completed on the payment link which count towards the `completed_sessions` restriction to be met. + """ + limit: int + """ + The maximum number of checkout sessions that can be completed for the `completed_sessions` restriction to be met. + """ + + completed_sessions: CompletedSessions + _inner_class_types = {"completed_sessions": CompletedSessions} + + class ShippingAddressCollection(StripeObject): + allowed_countries: List[ + Literal[ + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CV", + "CW", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MK", + "ML", + "MM", + "MN", + "MO", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + "ZZ", + ] + ] + """ + An array of two-letter ISO country codes representing which countries Checkout should provide as options for shipping locations. Unsupported country codes: `AS, CX, CC, CU, HM, IR, KP, MH, FM, NF, MP, PW, SD, SY, UM, VI`. + """ + + class ShippingOption(StripeObject): + shipping_amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + shipping_rate: ExpandableField["ShippingRate"] + """ + The ID of the Shipping Rate to use for this shipping option. + """ + + class SubscriptionData(StripeObject): + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + issuer: Issuer + _inner_class_types = {"issuer": Issuer} + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + missing_payment_method: Literal[ + "cancel", "create_invoice", "pause" + ] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ + + end_behavior: EndBehavior + """ + Defines how a subscription behaves when a free trial ends. + """ + _inner_class_types = {"end_behavior": EndBehavior} + + description: Optional[str] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + invoice_settings: InvoiceSettings + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on [Subscriptions](https://stripe.com/docs/api/subscriptions) generated from this payment link. + """ + trial_period_days: Optional[int] + """ + Integer representing the number of trial period days before the customer is charged for the first time. + """ + trial_settings: Optional[TrialSettings] + """ + Settings related to subscription trials. + """ + _inner_class_types = { + "invoice_settings": InvoiceSettings, + "trial_settings": TrialSettings, + } + + class TaxIdCollection(StripeObject): + enabled: bool + """ + Indicates whether tax ID collection is enabled for the session. + """ + required: Literal["if_supported", "never"] + + class TransferData(StripeObject): + amount: Optional[int] + """ + The amount in cents (or local equivalent) that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: ExpandableField["Account"] + """ + The connected account receiving the transfer. + """ + + active: bool + """ + Whether the payment link's `url` is active. If `false`, customers visiting the URL will be shown a page saying that the link has been deactivated. + """ + after_completion: AfterCompletion + allow_promotion_codes: bool + """ + Whether user redeemable promotion codes are enabled. + """ + application: Optional[ExpandableField["Application"]] + """ + The ID of the Connect application that created the Payment Link. + """ + application_fee_amount: Optional[int] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. + """ + application_fee_percent: Optional[float] + """ + This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. + """ + automatic_tax: AutomaticTax + billing_address_collection: Literal["auto", "required"] + """ + Configuration for collecting the customer's billing address. Defaults to `auto`. + """ + consent_collection: Optional[ConsentCollection] + """ + When set, provides configuration to gather active consent from customers. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + custom_fields: List[CustomField] + """ + Collect additional information from your customer using custom fields. Up to 3 fields are supported. + """ + custom_text: CustomText + customer_creation: Literal["always", "if_required"] + """ + Configuration for Customer creation during checkout. + """ + id: str + """ + Unique identifier for the object. + """ + inactive_message: Optional[str] + """ + The custom message to be displayed to a customer when a payment link is no longer active. + """ + invoice_creation: Optional[InvoiceCreation] + """ + Configuration for creating invoice for payment mode payment links. + """ + line_items: Optional[ListObject["LineItem"]] + """ + The line items representing what is being sold. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name_collection: Optional[NameCollection] + object: Literal["payment_link"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account on behalf of which to charge. See the [Connect documentation](https://support.stripe.com/questions/sending-invoices-on-behalf-of-connected-accounts) for details. + """ + optional_items: Optional[List[OptionalItem]] + """ + The optional items presented to the customer at checkout. + """ + payment_intent_data: Optional[PaymentIntentData] + """ + Indicates the parameters to be passed to PaymentIntent creation during checkout. + """ + payment_method_collection: Literal["always", "if_required"] + """ + Configuration for collecting a payment method during checkout. Defaults to `always`. + """ + payment_method_types: Optional[ + List[ + Literal[ + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "klarna", + "konbini", + "link", + "mb_way", + "mobilepay", + "multibanco", + "oxxo", + "p24", + "pay_by_bank", + "paynow", + "paypal", + "pix", + "promptpay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + The list of payment method types that customers can use. When `null`, Stripe will dynamically show relevant payment methods you've enabled in your [payment method settings](https://dashboard.stripe.com/settings/payment_methods). + """ + phone_number_collection: PhoneNumberCollection + restrictions: Optional[Restrictions] + """ + Settings that restrict the usage of a payment link. + """ + shipping_address_collection: Optional[ShippingAddressCollection] + """ + Configuration for collecting the customer's shipping address. + """ + shipping_options: List[ShippingOption] + """ + The shipping rate options applied to the session. + """ + submit_type: Literal["auto", "book", "donate", "pay", "subscribe"] + """ + Indicates the type of transaction being performed which customizes relevant text on the page, such as the submit button. + """ + subscription_data: Optional[SubscriptionData] + """ + When creating a subscription, the specified configuration data will be used. There must be at least one line item with a recurring price to use `subscription_data`. + """ + tax_id_collection: TaxIdCollection + transfer_data: Optional[TransferData] + """ + The account (if any) the payments will be attributed to for tax reporting, and where funds from each payment will be transferred to. + """ + url: str + """ + The public URL that can be shared with customers. + """ + + @classmethod + def create( + cls, **params: Unpack["PaymentLinkCreateParams"] + ) -> "PaymentLink": + """ + Creates a payment link. + """ + return cast( + "PaymentLink", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PaymentLinkCreateParams"] + ) -> "PaymentLink": + """ + Creates a payment link. + """ + return cast( + "PaymentLink", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PaymentLinkListParams"] + ) -> ListObject["PaymentLink"]: + """ + Returns a list of your payment links. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentLinkListParams"] + ) -> ListObject["PaymentLink"]: + """ + Returns a list of your payment links. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_list_line_items( + cls, + payment_link: str, + **params: Unpack["PaymentLinkListLineItemsParams"], + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + cls._static_request( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(payment_link) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_line_items( + payment_link: str, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + def list_line_items( + self, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items") + def list_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + self._request( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_line_items_async( + cls, + payment_link: str, + **params: Unpack["PaymentLinkListLineItemsParams"], + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await cls._static_request_async( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(payment_link) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_line_items_async( + payment_link: str, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + async def list_line_items_async( + self, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items_async") + async def list_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentLinkListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await self._request_async( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["PaymentLinkModifyParams"] + ) -> "PaymentLink": + """ + Updates a payment link. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentLink", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PaymentLinkModifyParams"] + ) -> "PaymentLink": + """ + Updates a payment link. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentLink", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentLinkRetrieveParams"] + ) -> "PaymentLink": + """ + Retrieve a payment link. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentLinkRetrieveParams"] + ) -> "PaymentLink": + """ + Retrieve a payment link. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "after_completion": AfterCompletion, + "automatic_tax": AutomaticTax, + "consent_collection": ConsentCollection, + "custom_fields": CustomField, + "custom_text": CustomText, + "invoice_creation": InvoiceCreation, + "name_collection": NameCollection, + "optional_items": OptionalItem, + "payment_intent_data": PaymentIntentData, + "phone_number_collection": PhoneNumberCollection, + "restrictions": Restrictions, + "shipping_address_collection": ShippingAddressCollection, + "shipping_options": ShippingOption, + "subscription_data": SubscriptionData, + "tax_id_collection": TaxIdCollection, + "transfer_data": TransferData, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_line_item_service.py new file mode 100644 index 00000000..d480f536 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._line_item import LineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._payment_link_line_item_list_params import ( + PaymentLinkLineItemListParams, + ) + + +class PaymentLinkLineItemService(StripeService): + def list( + self, + payment_link: str, + params: Optional["PaymentLinkLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + self._request( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + payment_link: str, + params: Optional["PaymentLinkLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a payment link, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + await self._request_async( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_service.py new file mode 100644 index 00000000..0fc67347 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_link_service.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_link import PaymentLink + from stripe._payment_link_line_item_service import ( + PaymentLinkLineItemService, + ) + from stripe._request_options import RequestOptions + from stripe.params._payment_link_create_params import ( + PaymentLinkCreateParams, + ) + from stripe.params._payment_link_list_params import PaymentLinkListParams + from stripe.params._payment_link_retrieve_params import ( + PaymentLinkRetrieveParams, + ) + from stripe.params._payment_link_update_params import ( + PaymentLinkUpdateParams, + ) + +_subservices = { + "line_items": [ + "stripe._payment_link_line_item_service", + "PaymentLinkLineItemService", + ], +} + + +class PaymentLinkService(StripeService): + line_items: "PaymentLinkLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["PaymentLinkListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentLink]": + """ + Returns a list of your payment links. + """ + return cast( + "ListObject[PaymentLink]", + self._request( + "get", + "/v1/payment_links", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PaymentLinkListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentLink]": + """ + Returns a list of your payment links. + """ + return cast( + "ListObject[PaymentLink]", + await self._request_async( + "get", + "/v1/payment_links", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PaymentLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Creates a payment link. + """ + return cast( + "PaymentLink", + self._request( + "post", + "/v1/payment_links", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PaymentLinkCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Creates a payment link. + """ + return cast( + "PaymentLink", + await self._request_async( + "post", + "/v1/payment_links", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + payment_link: str, + params: Optional["PaymentLinkRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Retrieve a payment link. + """ + return cast( + "PaymentLink", + self._request( + "get", + "/v1/payment_links/{payment_link}".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + payment_link: str, + params: Optional["PaymentLinkRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Retrieve a payment link. + """ + return cast( + "PaymentLink", + await self._request_async( + "get", + "/v1/payment_links/{payment_link}".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + payment_link: str, + params: Optional["PaymentLinkUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Updates a payment link. + """ + return cast( + "PaymentLink", + self._request( + "post", + "/v1/payment_links/{payment_link}".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + payment_link: str, + params: Optional["PaymentLinkUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentLink": + """ + Updates a payment link. + """ + return cast( + "PaymentLink", + await self._request_async( + "post", + "/v1/payment_links/{payment_link}".format( + payment_link=sanitize_id(payment_link), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method.py new file mode 100644 index 00000000..274aaa39 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method.py @@ -0,0 +1,2030 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._customer import Customer + from stripe._setup_attempt import SetupAttempt + from stripe.params._payment_method_attach_params import ( + PaymentMethodAttachParams, + ) + from stripe.params._payment_method_create_params import ( + PaymentMethodCreateParams, + ) + from stripe.params._payment_method_detach_params import ( + PaymentMethodDetachParams, + ) + from stripe.params._payment_method_list_params import ( + PaymentMethodListParams, + ) + from stripe.params._payment_method_modify_params import ( + PaymentMethodModifyParams, + ) + from stripe.params._payment_method_retrieve_params import ( + PaymentMethodRetrieveParams, + ) + + +class PaymentMethod( + CreateableAPIResource["PaymentMethod"], + ListableAPIResource["PaymentMethod"], + UpdateableAPIResource["PaymentMethod"], +): + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + + OBJECT_NAME: ClassVar[Literal["payment_method"]] = "payment_method" + + class AcssDebit(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + institution_number: Optional[str] + """ + Institution number of the bank account. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + transit_number: Optional[str] + """ + Transit number of the bank account. + """ + + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + pass + + class Alipay(StripeObject): + pass + + class Alma(StripeObject): + pass + + class AmazonPay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + """ + Six-digit number identifying bank and branch associated with this bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + sort_code: Optional[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + class Bancontact(StripeObject): + pass + + class Billie(StripeObject): + pass + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + """ + Billing address. + """ + email: Optional[str] + """ + Email address. + """ + name: Optional[str] + """ + Full name. + """ + phone: Optional[str] + """ + Billing phone number (including extension). + """ + tax_id: Optional[str] + """ + Taxpayer identification number. Used only for transactions between LATAM buyers and non-LATAM sellers. + """ + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + pass + + class Boleto(StripeObject): + tax_id: str + """ + Uniquely identifies the customer tax id (CNPJ or CPF) + """ + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + """ + If a address line1 was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + address_postal_code_check: Optional[str] + """ + If a address postal code was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + cvc_check: Optional[str] + """ + If a CVC was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + + class GeneratedFrom(StripeObject): + class PaymentMethodDetails(StripeObject): + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "credit", "prepaid", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", "google_pay", "samsung_pay", "unknown" + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + amount_authorized: Optional[int] + """ + The authorized amount + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization_supported: bool + """ + Whether this [PaymentIntent](https://stripe.com/docs/api/payment_intents) is eligible for incremental authorizations. Request support using [request_incremental_authorization_support](https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + overcapture_supported: bool + """ + Defines whether the authorized amount can be over-captured or not + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "offline": Offline, + "receipt": Receipt, + "wallet": Wallet, + } + + card_present: Optional[CardPresent] + type: str + """ + The type of payment method transaction-specific details from the transaction that generated this `card` payment method. Always `card_present`. + """ + _inner_class_types = {"card_present": CardPresent} + + charge: Optional[str] + """ + The charge that created this object. + """ + payment_method_details: Optional[PaymentMethodDetails] + """ + Transaction-specific details of the payment method used in the payment. + """ + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + """ + The ID of the SetupAttempt that generated this PaymentMethod, if any. + """ + _inner_class_types = { + "payment_method_details": PaymentMethodDetails, + } + + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for co-branded cards. Can be `cartes_bancaires`, `mastercard`, `visa` or `invalid_preference` if requested network is not valid for the card. + """ + + class ThreeDSecureUsage(StripeObject): + supported: bool + """ + Whether 3D Secure is supported on this card. + """ + + class Wallet(StripeObject): + class AmexExpressCheckout(StripeObject): + pass + + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + class Link(StripeObject): + pass + + class Masterpass(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + class SamsungPay(StripeObject): + pass + + class VisaCheckout(StripeObject): + class BillingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class ShippingAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + billing_address: Optional[BillingAddress] + """ + Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + email: Optional[str] + """ + Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + shipping_address: Optional[ShippingAddress] + """ + Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "billing_address": BillingAddress, + "shipping_address": ShippingAddress, + } + + amex_express_checkout: Optional[AmexExpressCheckout] + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + google_pay: Optional[GooglePay] + link: Optional[Link] + masterpass: Optional[Masterpass] + samsung_pay: Optional[SamsungPay] + type: Literal[ + "amex_express_checkout", + "apple_pay", + "google_pay", + "link", + "masterpass", + "samsung_pay", + "visa_checkout", + ] + """ + The type of the card wallet, one of `amex_express_checkout`, `apple_pay`, `google_pay`, `masterpass`, `samsung_pay`, `visa_checkout`, or `link`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + visa_checkout: Optional[VisaCheckout] + _inner_class_types = { + "amex_express_checkout": AmexExpressCheckout, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "link": Link, + "masterpass": Masterpass, + "samsung_pay": SamsungPay, + "visa_checkout": VisaCheckout, + } + + brand: str + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + checks: Optional[Checks] + """ + Checks on Card address and CVC if provided. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + display_brand: Optional[str] + """ + The brand to use when displaying the card, this accounts for customer's brand choice on dual-branded cards. Can be `american_express`, `cartes_bancaires`, `diners_club`, `discover`, `eftpos_australia`, `interac`, `jcb`, `mastercard`, `union_pay`, `visa`, or `other` and may contain more values in the future. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: str + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_from: Optional[GeneratedFrom] + """ + Details of the original PaymentMethod that created this object. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: str + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + regulated_status: Optional[Literal["regulated", "unregulated"]] + """ + Status of a card based on the card issuer. + """ + three_d_secure_usage: Optional[ThreeDSecureUsage] + """ + Contains details on how this Card may be used for 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "generated_from": GeneratedFrom, + "networks": Networks, + "three_d_secure_usage": ThreeDSecureUsage, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for the card. + """ + + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Wallet(StripeObject): + type: Literal["apple_pay", "google_pay", "samsung_pay", "unknown"] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + offline: Optional[Offline] + """ + Details about payment methods collected offline. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "networks": Networks, + "offline": Offline, + "wallet": Wallet, + } + + class Cashapp(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by Cash App to every buyer. + """ + cashtag: Optional[str] + """ + A public identifier for buyers using Cash App. + """ + + class Crypto(StripeObject): + pass + + class Custom(StripeObject): + class Logo(StripeObject): + content_type: Optional[str] + """ + Content type of the Dashboard-only CustomPaymentMethodType logo. + """ + url: str + """ + URL of the Dashboard-only CustomPaymentMethodType logo. + """ + + display_name: Optional[str] + """ + Display name of the Dashboard-only CustomPaymentMethodType. + """ + logo: Optional[Logo] + """ + Contains information about the Dashboard-only CustomPaymentMethodType logo. + """ + type: str + """ + ID of the Dashboard-only CustomPaymentMethodType. Not expandable. + """ + _inner_class_types = {"logo": Logo} + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. Should be one of `arzte_und_apotheker_bank`, `austrian_anadi_bank_ag`, `bank_austria`, `bankhaus_carl_spangler`, `bankhaus_schelhammer_und_schattera_ag`, `bawag_psk_ag`, `bks_bank_ag`, `brull_kallmus_bank_ag`, `btv_vier_lander_bank`, `capital_bank_grawe_gruppe_ag`, `deutsche_bank_ag`, `dolomitenbank`, `easybank_ag`, `erste_bank_und_sparkassen`, `hypo_alpeadriabank_international_ag`, `hypo_noe_lb_fur_niederosterreich_u_wien`, `hypo_oberosterreich_salzburg_steiermark`, `hypo_tirol_bank_ag`, `hypo_vorarlberg_bank_ag`, `hypo_bank_burgenland_aktiengesellschaft`, `marchfelder_bank`, `oberbank_ag`, `raiffeisen_bankengruppe_osterreich`, `schoellerbank_ag`, `sparda_bank_wien`, `volksbank_gruppe`, `volkskreditbank_ag`, or `vr_bank_braunau`. + """ + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type, if provided. Can be one of `individual` or `company`. + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank, if provided. Can be one of `affin_bank`, `agrobank`, `alliance_bank`, `ambank`, `bank_islam`, `bank_muamalat`, `bank_rakyat`, `bsn`, `cimb`, `hong_leong_bank`, `hsbc`, `kfh`, `maybank2u`, `ocbc`, `public_bank`, `rhb`, `standard_chartered`, `uob`, `deutsche_bank`, `maybank2e`, `pb_enterprise`, or `bank_of_china`. + """ + + class Giropay(StripeObject): + pass + + class Grabpay(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank, if provided. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank, if the bank was provided. + """ + + class InteracPresent(StripeObject): + class Networks(StripeObject): + available: List[str] + """ + All networks available for selection via [payment_method_options.card.network](https://docs.stripe.com/api/payment_intents/confirm#confirm_payment_intent-payment_method_options-card-network). + """ + preferred: Optional[str] + """ + The preferred network for the card. + """ + + brand: Optional[str] + """ + Card brand. Can be `interac`, `mastercard` or `visa`. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + networks: Optional[Networks] + """ + Contains information about card networks that can be used to process the payment. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + _inner_class_types = {"networks": Networks} + + class KakaoPay(StripeObject): + pass + + class Klarna(StripeObject): + class Dob(StripeObject): + day: Optional[int] + """ + The day of birth, between 1 and 31. + """ + month: Optional[int] + """ + The month of birth, between 1 and 12. + """ + year: Optional[int] + """ + The four-digit year of birth. + """ + + dob: Optional[Dob] + """ + The customer's date of birth, if provided. + """ + _inner_class_types = {"dob": Dob} + + class Konbini(StripeObject): + pass + + class KrCard(StripeObject): + brand: Optional[ + Literal[ + "bc", + "citi", + "hana", + "hyundai", + "jeju", + "jeonbuk", + "kakaobank", + "kbank", + "kdbbank", + "kookmin", + "kwangju", + "lotte", + "mg", + "nh", + "post", + "samsung", + "savingsbank", + "shinhan", + "shinhyup", + "suhyup", + "tossbank", + "woori", + ] + ] + """ + The local credit or debit card brand. + """ + last4: Optional[str] + """ + The last four digits of the card. This may not be present for American Express cards. + """ + + class Link(StripeObject): + email: Optional[str] + """ + Account owner's email address. + """ + persistent_token: Optional[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + class MbWay(StripeObject): + pass + + class Mobilepay(StripeObject): + pass + + class Multibanco(StripeObject): + pass + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Naver Pay account. You can use this attribute to check whether two Naver Pay accounts are the same. + """ + funding: Literal["card", "points"] + """ + Whether to fund this transaction with Naver Pay points or a card. + """ + + class NzBankAccount(StripeObject): + account_holder_name: Optional[str] + """ + The name on the bank account. Only present if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + bank_name: str + """ + The name of the bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + last4: str + """ + Last four digits of the bank account number. + """ + suffix: Optional[str] + """ + The suffix of the bank account number. + """ + + class Oxxo(StripeObject): + pass + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank, if provided. + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + pass + + class Paynow(StripeObject): + pass + + class Paypal(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the buyer's country. Values are provided by PayPal directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_email: Optional[str] + """ + Owner's email. Values are provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + + class Pix(StripeObject): + pass + + class Promptpay(StripeObject): + pass + + class RadarOptions(StripeObject): + session: Optional[str] + """ + A [Radar Session](https://stripe.com/docs/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments. + """ + + class RevolutPay(StripeObject): + pass + + class SamsungPay(StripeObject): + pass + + class Satispay(StripeObject): + pass + + class SepaDebit(StripeObject): + class GeneratedFrom(StripeObject): + charge: Optional[ExpandableField["Charge"]] + """ + The ID of the Charge that generated this PaymentMethod, if any. + """ + setup_attempt: Optional[ExpandableField["SetupAttempt"]] + """ + The ID of the SetupAttempt that generated this PaymentMethod, if any. + """ + + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + branch_code: Optional[str] + """ + Branch code of bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + generated_from: Optional[GeneratedFrom] + """ + Information about the object that generated this PaymentMethod. + """ + last4: Optional[str] + """ + Last four characters of the IBAN. + """ + _inner_class_types = {"generated_from": GeneratedFrom} + + class Sofort(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + + class Swish(StripeObject): + pass + + class Twint(StripeObject): + pass + + class UsBankAccount(StripeObject): + class Networks(StripeObject): + preferred: Optional[str] + """ + The preferred network. + """ + supported: List[Literal["ach", "us_domestic_wire"]] + """ + All supported networks. + """ + + class StatusDetails(StripeObject): + class Blocked(StripeObject): + network_code: Optional[ + Literal[ + "R02", + "R03", + "R04", + "R05", + "R07", + "R08", + "R10", + "R11", + "R16", + "R20", + "R29", + "R31", + ] + ] + """ + The ACH network code that resulted in this block. + """ + reason: Optional[ + Literal[ + "bank_account_closed", + "bank_account_frozen", + "bank_account_invalid_details", + "bank_account_restricted", + "bank_account_unusable", + "debit_not_authorized", + ] + ] + """ + The reason why this PaymentMethod's fingerprint has been blocked + """ + + blocked: Optional[Blocked] + _inner_class_types = {"blocked": Blocked} + + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type: individual or company. + """ + account_type: Optional[Literal["checking", "savings"]] + """ + Account type: checkings or savings. Defaults to checking if omitted. + """ + bank_name: Optional[str] + """ + The name of the bank. + """ + financial_connections_account: Optional[str] + """ + The ID of the Financial Connections Account used to create the payment method. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + networks: Optional[Networks] + """ + Contains information about US bank account networks that can be used. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + status_details: Optional[StatusDetails] + """ + Contains information about the future reusability of this PaymentMethod. + """ + _inner_class_types = { + "networks": Networks, + "status_details": StatusDetails, + } + + class WechatPay(StripeObject): + pass + + class Zip(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + allow_redisplay: Optional[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to “unspecified”. + """ + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + billing_details: BillingDetails + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + crypto: Optional[Crypto] + custom: Optional[Custom] + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the Customer to which this PaymentMethod is saved. This will not be set when the PaymentMethod has not been saved to a Customer. + """ + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + id: str + """ + Unique identifier for the object. + """ + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + mb_way: Optional[MbWay] + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + object: Literal["payment_method"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + radar_options: Optional[RadarOptions] + """ + Options to configure Radar. See [Radar Session](https://stripe.com/docs/radar/radar-session) for more information. + """ + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + swish: Optional[Swish] + twint: Optional[Twint] + type: Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "card_present", + "cashapp", + "crypto", + "custom", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "interac_present", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + """ + The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. + """ + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + + @classmethod + def _cls_attach( + cls, payment_method: str, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + cls._static_request( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(payment_method) + ), + params=params, + ), + ) + + @overload + @staticmethod + def attach( + payment_method: str, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + ... + + @overload + def attach( + self, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + ... + + @class_method_variant("_cls_attach") + def attach( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_attach_async( + cls, payment_method: str, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + await cls._static_request_async( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(payment_method) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def attach_async( + payment_method: str, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + ... + + @overload + async def attach_async( + self, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + ... + + @class_method_variant("_cls_attach_async") + async def attach_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodAttachParams"] + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["PaymentMethodCreateParams"] + ) -> "PaymentMethod": + """ + Creates a PaymentMethod object. Read the [Stripe.js reference](https://docs.stripe.com/docs/stripe-js/reference#stripe-create-payment-method) to learn how to create PaymentMethods via Stripe.js. + + Instead of creating a PaymentMethod directly, we recommend using the [PaymentIntents API to accept a payment immediately or the SetupIntent](https://docs.stripe.com/docs/payments/accept-a-payment) API to collect payment method details ahead of a future payment. + """ + return cast( + "PaymentMethod", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PaymentMethodCreateParams"] + ) -> "PaymentMethod": + """ + Creates a PaymentMethod object. Read the [Stripe.js reference](https://docs.stripe.com/docs/stripe-js/reference#stripe-create-payment-method) to learn how to create PaymentMethods via Stripe.js. + + Instead of creating a PaymentMethod directly, we recommend using the [PaymentIntents API to accept a payment immediately or the SetupIntent](https://docs.stripe.com/docs/payments/accept-a-payment) API to collect payment method details ahead of a future payment. + """ + return cast( + "PaymentMethod", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_detach( + cls, payment_method: str, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + cls._static_request( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(payment_method) + ), + params=params, + ), + ) + + @overload + @staticmethod + def detach( + payment_method: str, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + ... + + @overload + def detach( + self, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + ... + + @class_method_variant("_cls_detach") + def detach( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_detach_async( + cls, payment_method: str, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + await cls._static_request_async( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(payment_method) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def detach_async( + payment_method: str, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + ... + + @overload + async def detach_async( + self, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + ... + + @class_method_variant("_cls_detach_async") + async def detach_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodDetachParams"] + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PaymentMethodListParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for Treasury flows. If you want to list the PaymentMethods attached to a Customer for payments, you should use the [List a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer_list) API instead. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentMethodListParams"] + ) -> ListObject["PaymentMethod"]: + """ + Returns a list of PaymentMethods for Treasury flows. If you want to list the PaymentMethods attached to a Customer for payments, you should use the [List a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer_list) API instead. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PaymentMethodModifyParams"] + ) -> "PaymentMethod": + """ + Updates a PaymentMethod object. A PaymentMethod must be attached to a customer to be updated. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethod", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PaymentMethodModifyParams"] + ) -> "PaymentMethod": + """ + Updates a PaymentMethod object. A PaymentMethod must be attached to a customer to be updated. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethod", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentMethodRetrieveParams"] + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a payment method attached to a Customer, you should use [Retrieve a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer) + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentMethodRetrieveParams"] + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a payment method attached to a Customer, you should use [Retrieve a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer) + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "custom": Custom, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "radar_options": RadarOptions, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration.py new file mode 100644 index 00000000..0ecd5efb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration.py @@ -0,0 +1,1495 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._payment_method_configuration_create_params import ( + PaymentMethodConfigurationCreateParams, + ) + from stripe.params._payment_method_configuration_list_params import ( + PaymentMethodConfigurationListParams, + ) + from stripe.params._payment_method_configuration_modify_params import ( + PaymentMethodConfigurationModifyParams, + ) + from stripe.params._payment_method_configuration_retrieve_params import ( + PaymentMethodConfigurationRetrieveParams, + ) + + +class PaymentMethodConfiguration( + CreateableAPIResource["PaymentMethodConfiguration"], + ListableAPIResource["PaymentMethodConfiguration"], + UpdateableAPIResource["PaymentMethodConfiguration"], +): + """ + PaymentMethodConfigurations control which payment methods are displayed to your customers when you don't explicitly specify payment method types. You can have multiple configurations with different sets of payment methods for different scenarios. + + There are two types of PaymentMethodConfigurations. Which is used depends on the [charge type](https://stripe.com/docs/connect/charges): + + **Direct** configurations apply to payments created on your account, including Connect destination charges, Connect separate charges and transfers, and payments not involving Connect. + + **Child** configurations apply to payments created on your connected accounts using direct charges, and charges with the on_behalf_of parameter. + + Child configurations have a `parent` that sets default values and controls which settings connected accounts may override. You can specify a parent ID at payment time, and Stripe will automatically resolve the connected account's associated child configuration. Parent configurations are [managed in the dashboard](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) and are not available in this API. + + Related guides: + - [Payment Method Configurations API](https://stripe.com/docs/connect/payment-method-configurations) + - [Multiple configurations on dynamic payment methods](https://stripe.com/docs/payments/multiple-payment-method-configs) + - [Multiple configurations for your Connect accounts](https://stripe.com/docs/connect/multiple-payment-method-configurations) + """ + + OBJECT_NAME: ClassVar[Literal["payment_method_configuration"]] = ( + "payment_method_configuration" + ) + + class AcssDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Affirm(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class AfterpayClearpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Alipay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Alma(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class AmazonPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class ApplePay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class AuBecsDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class BacsDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Bancontact(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Billie(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Blik(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Boleto(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Card(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class CartesBancaires(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Cashapp(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Crypto(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class CustomerBalance(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Eps(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Fpx(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Giropay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class GooglePay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Grabpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Ideal(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Jcb(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class KakaoPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Klarna(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Konbini(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class KrCard(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Link(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class MbWay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Mobilepay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Multibanco(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class NaverPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class NzBankAccount(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Oxxo(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class P24(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class PayByBank(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Payco(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Paynow(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Paypal(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Pix(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Promptpay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class RevolutPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class SamsungPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Satispay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class SepaDebit(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Sofort(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Swish(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Twint(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class UsBankAccount(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class WechatPay(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + class Zip(StripeObject): + class DisplayPreference(StripeObject): + overridable: Optional[bool] + """ + For child configs, whether or not the account's preference will be observed. If `false`, the parent configuration's default is used. + """ + preference: Literal["none", "off", "on"] + """ + The account's display preference. + """ + value: Literal["off", "on"] + """ + The effective display preference value. + """ + + available: bool + """ + Whether this payment method may be offered at checkout. True if `display_preference` is `on` and the payment method's capability is active. + """ + display_preference: DisplayPreference + _inner_class_types = {"display_preference": DisplayPreference} + + acss_debit: Optional[AcssDebit] + active: bool + """ + Whether the configuration can be used for new payments. + """ + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + apple_pay: Optional[ApplePay] + application: Optional[str] + """ + For child configs, the Connect application associated with the configuration. + """ + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + cartes_bancaires: Optional[CartesBancaires] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + google_pay: Optional[GooglePay] + grabpay: Optional[Grabpay] + id: str + """ + Unique identifier for the object. + """ + ideal: Optional[Ideal] + is_default: bool + """ + The default configuration is used whenever a payment method configuration is not specified. + """ + jcb: Optional[Jcb] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + name: str + """ + The configuration's name. + """ + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + object: Literal["payment_method_configuration"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + oxxo: Optional[Oxxo] + p24: Optional[P24] + parent: Optional[str] + """ + For child configs, the configuration's parent configuration. + """ + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + swish: Optional[Swish] + twint: Optional[Twint] + us_bank_account: Optional[UsBankAccount] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + + @classmethod + def create( + cls, **params: Unpack["PaymentMethodConfigurationCreateParams"] + ) -> "PaymentMethodConfiguration": + """ + Creates a payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PaymentMethodConfigurationCreateParams"] + ) -> "PaymentMethodConfiguration": + """ + Creates a payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PaymentMethodConfigurationListParams"] + ) -> ListObject["PaymentMethodConfiguration"]: + """ + List payment method configurations + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentMethodConfigurationListParams"] + ) -> ListObject["PaymentMethodConfiguration"]: + """ + List payment method configurations + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, + id: str, + **params: Unpack["PaymentMethodConfigurationModifyParams"], + ) -> "PaymentMethodConfiguration": + """ + Update payment method configuration + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethodConfiguration", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, + id: str, + **params: Unpack["PaymentMethodConfigurationModifyParams"], + ) -> "PaymentMethodConfiguration": + """ + Update payment method configuration + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethodConfiguration", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, + id: str, + **params: Unpack["PaymentMethodConfigurationRetrieveParams"], + ) -> "PaymentMethodConfiguration": + """ + Retrieve payment method configuration + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, + id: str, + **params: Unpack["PaymentMethodConfigurationRetrieveParams"], + ) -> "PaymentMethodConfiguration": + """ + Retrieve payment method configuration + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "apple_pay": ApplePay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "cartes_bancaires": CartesBancaires, + "cashapp": Cashapp, + "crypto": Crypto, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "google_pay": GooglePay, + "grabpay": Grabpay, + "ideal": Ideal, + "jcb": Jcb, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat_pay": WechatPay, + "zip": Zip, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration_service.py new file mode 100644 index 00000000..e8421f11 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_configuration_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_method_configuration import PaymentMethodConfiguration + from stripe._request_options import RequestOptions + from stripe.params._payment_method_configuration_create_params import ( + PaymentMethodConfigurationCreateParams, + ) + from stripe.params._payment_method_configuration_list_params import ( + PaymentMethodConfigurationListParams, + ) + from stripe.params._payment_method_configuration_retrieve_params import ( + PaymentMethodConfigurationRetrieveParams, + ) + from stripe.params._payment_method_configuration_update_params import ( + PaymentMethodConfigurationUpdateParams, + ) + + +class PaymentMethodConfigurationService(StripeService): + def list( + self, + params: Optional["PaymentMethodConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethodConfiguration]": + """ + List payment method configurations + """ + return cast( + "ListObject[PaymentMethodConfiguration]", + self._request( + "get", + "/v1/payment_method_configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PaymentMethodConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethodConfiguration]": + """ + List payment method configurations + """ + return cast( + "ListObject[PaymentMethodConfiguration]", + await self._request_async( + "get", + "/v1/payment_method_configurations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["PaymentMethodConfigurationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Creates a payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + self._request( + "post", + "/v1/payment_method_configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["PaymentMethodConfigurationCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Creates a payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + await self._request_async( + "post", + "/v1/payment_method_configurations", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + configuration: str, + params: Optional["PaymentMethodConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Retrieve payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + self._request( + "get", + "/v1/payment_method_configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + configuration: str, + params: Optional["PaymentMethodConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Retrieve payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + await self._request_async( + "get", + "/v1/payment_method_configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + configuration: str, + params: Optional["PaymentMethodConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Update payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + self._request( + "post", + "/v1/payment_method_configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + configuration: str, + params: Optional["PaymentMethodConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodConfiguration": + """ + Update payment method configuration + """ + return cast( + "PaymentMethodConfiguration", + await self._request_async( + "post", + "/v1/payment_method_configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain.py new file mode 100644 index 00000000..bf61a3fc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain.py @@ -0,0 +1,488 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._payment_method_domain_create_params import ( + PaymentMethodDomainCreateParams, + ) + from stripe.params._payment_method_domain_list_params import ( + PaymentMethodDomainListParams, + ) + from stripe.params._payment_method_domain_modify_params import ( + PaymentMethodDomainModifyParams, + ) + from stripe.params._payment_method_domain_retrieve_params import ( + PaymentMethodDomainRetrieveParams, + ) + from stripe.params._payment_method_domain_validate_params import ( + PaymentMethodDomainValidateParams, + ) + + +class PaymentMethodDomain( + CreateableAPIResource["PaymentMethodDomain"], + ListableAPIResource["PaymentMethodDomain"], + UpdateableAPIResource["PaymentMethodDomain"], +): + """ + A payment method domain represents a web domain that you have registered with Stripe. + Stripe Elements use registered payment method domains to control where certain payment methods are shown. + + Related guide: [Payment method domains](https://stripe.com/docs/payments/payment-methods/pmd-registration). + """ + + OBJECT_NAME: ClassVar[Literal["payment_method_domain"]] = ( + "payment_method_domain" + ) + + class AmazonPay(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + class ApplePay(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + class GooglePay(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + class Klarna(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + class Link(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + class Paypal(StripeObject): + class StatusDetails(StripeObject): + error_message: str + """ + The error message associated with the status of the payment method on the domain. + """ + + status: Literal["active", "inactive"] + """ + The status of the payment method on the domain. + """ + status_details: Optional[StatusDetails] + """ + Contains additional details about the status of a payment method for a specific payment method domain. + """ + _inner_class_types = {"status_details": StatusDetails} + + amazon_pay: AmazonPay + """ + Indicates the status of a specific payment method on a payment method domain. + """ + apple_pay: ApplePay + """ + Indicates the status of a specific payment method on a payment method domain. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + domain_name: str + """ + The domain name that this payment method domain object represents. + """ + enabled: bool + """ + Whether this payment method domain is enabled. If the domain is not enabled, payment methods that require a payment method domain will not appear in Elements. + """ + google_pay: GooglePay + """ + Indicates the status of a specific payment method on a payment method domain. + """ + id: str + """ + Unique identifier for the object. + """ + klarna: Klarna + """ + Indicates the status of a specific payment method on a payment method domain. + """ + link: Link + """ + Indicates the status of a specific payment method on a payment method domain. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["payment_method_domain"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + paypal: Paypal + """ + Indicates the status of a specific payment method on a payment method domain. + """ + + @classmethod + def create( + cls, **params: Unpack["PaymentMethodDomainCreateParams"] + ) -> "PaymentMethodDomain": + """ + Creates a payment method domain. + """ + return cast( + "PaymentMethodDomain", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PaymentMethodDomainCreateParams"] + ) -> "PaymentMethodDomain": + """ + Creates a payment method domain. + """ + return cast( + "PaymentMethodDomain", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PaymentMethodDomainListParams"] + ) -> ListObject["PaymentMethodDomain"]: + """ + Lists the details of existing payment method domains. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PaymentMethodDomainListParams"] + ) -> ListObject["PaymentMethodDomain"]: + """ + Lists the details of existing payment method domains. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PaymentMethodDomainModifyParams"] + ) -> "PaymentMethodDomain": + """ + Updates an existing payment method domain. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethodDomain", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PaymentMethodDomainModifyParams"] + ) -> "PaymentMethodDomain": + """ + Updates an existing payment method domain. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PaymentMethodDomain", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentMethodDomainRetrieveParams"] + ) -> "PaymentMethodDomain": + """ + Retrieves the details of an existing payment method domain. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentMethodDomainRetrieveParams"] + ) -> "PaymentMethodDomain": + """ + Retrieves the details of an existing payment method domain. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_validate( + cls, + payment_method_domain: str, + **params: Unpack["PaymentMethodDomainValidateParams"], + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + cls._static_request( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(payment_method_domain) + ), + params=params, + ), + ) + + @overload + @staticmethod + def validate( + payment_method_domain: str, + **params: Unpack["PaymentMethodDomainValidateParams"], + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + ... + + @overload + def validate( + self, **params: Unpack["PaymentMethodDomainValidateParams"] + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + ... + + @class_method_variant("_cls_validate") + def validate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodDomainValidateParams"] + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + self._request( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_validate_async( + cls, + payment_method_domain: str, + **params: Unpack["PaymentMethodDomainValidateParams"], + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + await cls._static_request_async( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(payment_method_domain) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def validate_async( + payment_method_domain: str, + **params: Unpack["PaymentMethodDomainValidateParams"], + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + ... + + @overload + async def validate_async( + self, **params: Unpack["PaymentMethodDomainValidateParams"] + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + ... + + @class_method_variant("_cls_validate_async") + async def validate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentMethodDomainValidateParams"] + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + await self._request_async( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = { + "amazon_pay": AmazonPay, + "apple_pay": ApplePay, + "google_pay": GooglePay, + "klarna": Klarna, + "link": Link, + "paypal": Paypal, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain_service.py new file mode 100644 index 00000000..122bb45a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_domain_service.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_method_domain import PaymentMethodDomain + from stripe._request_options import RequestOptions + from stripe.params._payment_method_domain_create_params import ( + PaymentMethodDomainCreateParams, + ) + from stripe.params._payment_method_domain_list_params import ( + PaymentMethodDomainListParams, + ) + from stripe.params._payment_method_domain_retrieve_params import ( + PaymentMethodDomainRetrieveParams, + ) + from stripe.params._payment_method_domain_update_params import ( + PaymentMethodDomainUpdateParams, + ) + from stripe.params._payment_method_domain_validate_params import ( + PaymentMethodDomainValidateParams, + ) + + +class PaymentMethodDomainService(StripeService): + def list( + self, + params: Optional["PaymentMethodDomainListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethodDomain]": + """ + Lists the details of existing payment method domains. + """ + return cast( + "ListObject[PaymentMethodDomain]", + self._request( + "get", + "/v1/payment_method_domains", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PaymentMethodDomainListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethodDomain]": + """ + Lists the details of existing payment method domains. + """ + return cast( + "ListObject[PaymentMethodDomain]", + await self._request_async( + "get", + "/v1/payment_method_domains", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PaymentMethodDomainCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Creates a payment method domain. + """ + return cast( + "PaymentMethodDomain", + self._request( + "post", + "/v1/payment_method_domains", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PaymentMethodDomainCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Creates a payment method domain. + """ + return cast( + "PaymentMethodDomain", + await self._request_async( + "post", + "/v1/payment_method_domains", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Retrieves the details of an existing payment method domain. + """ + return cast( + "PaymentMethodDomain", + self._request( + "get", + "/v1/payment_method_domains/{payment_method_domain}".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Retrieves the details of an existing payment method domain. + """ + return cast( + "PaymentMethodDomain", + await self._request_async( + "get", + "/v1/payment_method_domains/{payment_method_domain}".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Updates an existing payment method domain. + """ + return cast( + "PaymentMethodDomain", + self._request( + "post", + "/v1/payment_method_domains/{payment_method_domain}".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Updates an existing payment method domain. + """ + return cast( + "PaymentMethodDomain", + await self._request_async( + "post", + "/v1/payment_method_domains/{payment_method_domain}".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def validate( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainValidateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + self._request( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def validate_async( + self, + payment_method_domain: str, + params: Optional["PaymentMethodDomainValidateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethodDomain": + """ + Some payment methods might require additional steps to register a domain. If the requirements weren't satisfied when the domain was created, the payment method will be inactive on the domain. + The payment method doesn't appear in Elements or Embedded Checkout for this domain until it is active. + + To activate a payment method on an existing payment method domain, complete the required registration steps specific to the payment method, and then validate the payment method domain with this endpoint. + + Related guides: [Payment method domains](https://docs.stripe.com/docs/payments/payment-methods/pmd-registration). + """ + return cast( + "PaymentMethodDomain", + await self._request_async( + "post", + "/v1/payment_method_domains/{payment_method_domain}/validate".format( + payment_method_domain=sanitize_id(payment_method_domain), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_service.py new file mode 100644 index 00000000..34d867ef --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_method_service.py @@ -0,0 +1,311 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payment_method import PaymentMethod + from stripe._request_options import RequestOptions + from stripe.params._payment_method_attach_params import ( + PaymentMethodAttachParams, + ) + from stripe.params._payment_method_create_params import ( + PaymentMethodCreateParams, + ) + from stripe.params._payment_method_detach_params import ( + PaymentMethodDetachParams, + ) + from stripe.params._payment_method_list_params import ( + PaymentMethodListParams, + ) + from stripe.params._payment_method_retrieve_params import ( + PaymentMethodRetrieveParams, + ) + from stripe.params._payment_method_update_params import ( + PaymentMethodUpdateParams, + ) + + +class PaymentMethodService(StripeService): + def list( + self, + params: Optional["PaymentMethodListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethod]": + """ + Returns a list of PaymentMethods for Treasury flows. If you want to list the PaymentMethods attached to a Customer for payments, you should use the [List a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer_list) API instead. + """ + return cast( + "ListObject[PaymentMethod]", + self._request( + "get", + "/v1/payment_methods", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PaymentMethodListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PaymentMethod]": + """ + Returns a list of PaymentMethods for Treasury flows. If you want to list the PaymentMethods attached to a Customer for payments, you should use the [List a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer_list) API instead. + """ + return cast( + "ListObject[PaymentMethod]", + await self._request_async( + "get", + "/v1/payment_methods", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["PaymentMethodCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Creates a PaymentMethod object. Read the [Stripe.js reference](https://docs.stripe.com/docs/stripe-js/reference#stripe-create-payment-method) to learn how to create PaymentMethods via Stripe.js. + + Instead of creating a PaymentMethod directly, we recommend using the [PaymentIntents API to accept a payment immediately or the SetupIntent](https://docs.stripe.com/docs/payments/accept-a-payment) API to collect payment method details ahead of a future payment. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["PaymentMethodCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Creates a PaymentMethod object. Read the [Stripe.js reference](https://docs.stripe.com/docs/stripe-js/reference#stripe-create-payment-method) to learn how to create PaymentMethods via Stripe.js. + + Instead of creating a PaymentMethod directly, we recommend using the [PaymentIntents API to accept a payment immediately or the SetupIntent](https://docs.stripe.com/docs/payments/accept-a-payment) API to collect payment method details ahead of a future payment. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + payment_method: str, + params: Optional["PaymentMethodRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a payment method attached to a Customer, you should use [Retrieve a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer) + """ + return cast( + "PaymentMethod", + self._request( + "get", + "/v1/payment_methods/{payment_method}".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + payment_method: str, + params: Optional["PaymentMethodRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a payment method attached to a Customer, you should use [Retrieve a Customer's PaymentMethods](https://docs.stripe.com/docs/api/payment_methods/customer) + """ + return cast( + "PaymentMethod", + await self._request_async( + "get", + "/v1/payment_methods/{payment_method}".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + payment_method: str, + params: Optional["PaymentMethodUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Updates a PaymentMethod object. A PaymentMethod must be attached to a customer to be updated. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods/{payment_method}".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + payment_method: str, + params: Optional["PaymentMethodUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Updates a PaymentMethod object. A PaymentMethod must be attached to a customer to be updated. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods/{payment_method}".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def attach( + self, + payment_method: str, + params: "PaymentMethodAttachParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def attach_async( + self, + payment_method: str, + params: "PaymentMethodAttachParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Attaches a PaymentMethod object to a Customer. + + To attach a new PaymentMethod to a customer for future payments, we recommend you use a [SetupIntent](https://docs.stripe.com/docs/api/setup_intents) + or a PaymentIntent with [setup_future_usage](https://docs.stripe.com/docs/api/payment_intents/create#create_payment_intent-setup_future_usage). + These approaches will perform any necessary steps to set up the PaymentMethod for future payments. Using the /v1/payment_methods/:id/attach + endpoint without first using a SetupIntent or PaymentIntent with setup_future_usage does not optimize the PaymentMethod for + future use, which makes later declines and payment friction more likely. + See [Optimizing cards for future payments](https://docs.stripe.com/docs/payments/payment-intents#future-usage) for more information about setting up + future payments. + + To use this PaymentMethod as the default for invoice or subscription payments, + set [invoice_settings.default_payment_method](https://docs.stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method), + on the Customer to the PaymentMethod's ID. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def detach( + self, + payment_method: str, + params: Optional["PaymentMethodDetachParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + self._request( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def detach_async( + self, + payment_method: str, + params: Optional["PaymentMethodDetachParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentMethod": + """ + Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer. + """ + return cast( + "PaymentMethod", + await self._request_async( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=sanitize_id(payment_method), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record.py new file mode 100644 index 00000000..4ac97c65 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record.py @@ -0,0 +1,2758 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_resource import APIResource +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._mandate import Mandate + from stripe._payment_method import PaymentMethod + from stripe.params._payment_record_report_payment_attempt_canceled_params import ( + PaymentRecordReportPaymentAttemptCanceledParams, + ) + from stripe.params._payment_record_report_payment_attempt_failed_params import ( + PaymentRecordReportPaymentAttemptFailedParams, + ) + from stripe.params._payment_record_report_payment_attempt_guaranteed_params import ( + PaymentRecordReportPaymentAttemptGuaranteedParams, + ) + from stripe.params._payment_record_report_payment_attempt_informational_params import ( + PaymentRecordReportPaymentAttemptInformationalParams, + ) + from stripe.params._payment_record_report_payment_attempt_params import ( + PaymentRecordReportPaymentAttemptParams, + ) + from stripe.params._payment_record_report_payment_params import ( + PaymentRecordReportPaymentParams, + ) + from stripe.params._payment_record_report_refund_params import ( + PaymentRecordReportRefundParams, + ) + from stripe.params._payment_record_retrieve_params import ( + PaymentRecordRetrieveParams, + ) + + +class PaymentRecord(APIResource["PaymentRecord"]): + """ + A Payment Record is a resource that allows you to represent payments that occur on- or off-Stripe. + For example, you can create a Payment Record to model a payment made on a different payment processor, + in order to mark an Invoice as paid and a Subscription as active. Payment Records consist of one or + more Payment Attempt Records, which represent individual attempts made on a payment network. + """ + + OBJECT_NAME: ClassVar[Literal["payment_record"]] = "payment_record" + + class Amount(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountAuthorized(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountCanceled(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountFailed(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountGuaranteed(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountRefunded(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class AmountRequested(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount in the currency's [minor unit](https://stripe.com/docs/currencies#zero-decimal). For example, `100` can represent 1 USD or 100 JPY. + """ + + class CustomerDetails(StripeObject): + customer: Optional[str] + """ + ID of the Stripe Customer associated with this payment. + """ + email: Optional[str] + """ + The customer's email address. + """ + name: Optional[str] + """ + The customer's name. + """ + phone: Optional[str] + """ + The customer's phone number. + """ + + class PaymentMethodDetails(StripeObject): + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + """ + Account number to transfer funds to. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the routing number. + """ + routing_number: Optional[str] + """ + Routing transit number for the bank account to transfer funds to. + """ + swift_code: Optional[str] + """ + SWIFT code of the bank associated with the routing number. + """ + + class AchDebit(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Type of entity that holds the account. This can be either `individual` or `company`. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + routing_number: Optional[str] + """ + Routing transit number of the bank account. + """ + + class AcssDebit(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + institution_number: Optional[str] + """ + Institution number of the bank account + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + transit_number: Optional[str] + """ + Transit number of the bank account. + """ + + class Affirm(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + The Affirm transaction ID associated with this payment. + """ + + class AfterpayClearpay(StripeObject): + order_id: Optional[str] + """ + The Afterpay order ID associated with this payment intent. + """ + reference: Optional[str] + """ + Order identifier shown to the merchant in Afterpay's online portal. + """ + + class Alipay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular Alipay account. You can use this attribute to check whether two Alipay accounts are the same. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular Alipay transaction. + """ + + class Alma(StripeObject): + class Installments(StripeObject): + count: int + """ + The number of installments. + """ + + installments: Optional[Installments] + transaction_id: Optional[str] + """ + The Alma transaction ID associated with this payment. + """ + _inner_class_types = {"installments": Installments} + + class AmazonPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Amazon Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + """ + Bank-State-Branch number of the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + + class BacsDebit(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[str] + """ + ID of the mandate used to make this payment. + """ + sort_code: Optional[str] + """ + Sort code of the bank account. (e.g., `10-20-30`) + """ + + class Bancontact(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + Can be one of `en`, `de`, `fr`, or `nl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Bancontact directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class Billie(StripeObject): + transaction_id: Optional[str] + """ + The Billie transaction ID associated with this payment. + """ + + class BillingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + """ + A representation of a physical address. + """ + email: Optional[str] + """ + The billing email associated with the method of payment. + """ + name: Optional[str] + """ + The billing name associated with the method of payment. + """ + phone: Optional[str] + """ + The billing phone number associated with the method of payment. + """ + _inner_class_types = {"address": Address} + + class Blik(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by BLIK to every buyer. + """ + + class Boleto(StripeObject): + tax_id: str + """ + The tax ID of the customer (CPF for individuals consumers or CNPJ for businesses consumers) + """ + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + address_postal_code_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + cvc_check: Optional[ + Literal["fail", "pass", "unavailable", "unchecked"] + ] + + class NetworkToken(StripeObject): + used: bool + """ + Indicates if Stripe used a network token, either user provided or Stripe managed when processing the transaction. + """ + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + + class Wallet(StripeObject): + class ApplePay(StripeObject): + type: str + """ + Type of the apple_pay transaction, one of `apple_pay` or `apple_pay_later`. + """ + + class GooglePay(StripeObject): + pass + + apple_pay: Optional[ApplePay] + dynamic_last4: Optional[str] + """ + (For tokenized numbers only.) The last four digits of the device account number. + """ + google_pay: Optional[GooglePay] + type: str + """ + The type of the card wallet, one of `apple_pay` or `google_pay`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + _inner_class_types = { + "apple_pay": ApplePay, + "google_pay": GooglePay, + } + + brand: Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp at which the charge will be automatically refunded if uncaptured. + """ + checks: Optional[Checks] + """ + Check results by Card networks on Card address and CVC at time of payment. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Literal["credit", "debit", "prepaid", "unknown"] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: str + """ + The last four digits of the card. + """ + moto: Optional[bool] + """ + True if this payment was marked as MOTO and out of scope for SCA. + """ + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_token: Optional[NetworkToken] + """ + If this card has network token credentials, this contains the details of the network token credentials. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + three_d_secure: Optional[ThreeDSecure] + """ + Populated if this transaction used 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "network_token": NetworkToken, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "credit", "prepaid", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + class Wallet(StripeObject): + type: Literal[ + "apple_pay", "google_pay", "samsung_pay", "unknown" + ] + """ + The type of mobile wallet, one of `apple_pay`, `google_pay`, `samsung_pay`, or `unknown`. + """ + + amount_authorized: Optional[int] + """ + The authorized amount + """ + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + brand_product: Optional[str] + """ + The [product code](https://stripe.com/docs/card-product-codes) that identifies the specific program or product associated with a card. + """ + capture_before: Optional[int] + """ + When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + incremental_authorization_supported: bool + """ + Whether this [PaymentIntent](https://stripe.com/docs/api/payment_intents) is eligible for incremental authorizations. Request support using [request_incremental_authorization_support](https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support). + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + overcapture_supported: bool + """ + Defines whether the authorized amount can be over-captured or not + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + wallet: Optional[Wallet] + _inner_class_types = { + "offline": Offline, + "receipt": Receipt, + "wallet": Wallet, + } + + class Cashapp(StripeObject): + buyer_id: Optional[str] + """ + A unique and immutable identifier assigned by Cash App to every buyer. + """ + cashtag: Optional[str] + """ + A public identifier for buyers using Cash App. + """ + transaction_id: Optional[str] + """ + A unique and immutable identifier of payments assigned by Cash App + """ + + class Crypto(StripeObject): + buyer_address: Optional[str] + """ + The wallet address of the customer. + """ + network: Optional[Literal["base", "ethereum", "polygon", "solana"]] + """ + The blockchain network that the transaction was sent on. + """ + token_currency: Optional[Literal["usdc", "usdg", "usdp"]] + """ + The token currency that the transaction was sent with. + """ + transaction_hash: Optional[str] + """ + The blockchain transaction hash of the crypto payment. + """ + + class Custom(StripeObject): + display_name: str + """ + Display name for the custom (user-defined) payment method type used to make this payment. + """ + type: Optional[str] + """ + The custom payment method type associated with this payment. + """ + + class CustomerBalance(StripeObject): + pass + + class Eps(StripeObject): + bank: Optional[ + Literal[ + "arzte_und_apotheker_bank", + "austrian_anadi_bank_ag", + "bank_austria", + "bankhaus_carl_spangler", + "bankhaus_schelhammer_und_schattera_ag", + "bawag_psk_ag", + "bks_bank_ag", + "brull_kallmus_bank_ag", + "btv_vier_lander_bank", + "capital_bank_grawe_gruppe_ag", + "deutsche_bank_ag", + "dolomitenbank", + "easybank_ag", + "erste_bank_und_sparkassen", + "hypo_alpeadriabank_international_ag", + "hypo_bank_burgenland_aktiengesellschaft", + "hypo_noe_lb_fur_niederosterreich_u_wien", + "hypo_oberosterreich_salzburg_steiermark", + "hypo_tirol_bank_ag", + "hypo_vorarlberg_bank_ag", + "marchfelder_bank", + "oberbank_ag", + "raiffeisen_bankengruppe_osterreich", + "schoellerbank_ag", + "sparda_bank_wien", + "volksbank_gruppe", + "volkskreditbank_ag", + "vr_bank_braunau", + ] + ] + """ + The customer's bank. Should be one of `arzte_und_apotheker_bank`, `austrian_anadi_bank_ag`, `bank_austria`, `bankhaus_carl_spangler`, `bankhaus_schelhammer_und_schattera_ag`, `bawag_psk_ag`, `bks_bank_ag`, `brull_kallmus_bank_ag`, `btv_vier_lander_bank`, `capital_bank_grawe_gruppe_ag`, `deutsche_bank_ag`, `dolomitenbank`, `easybank_ag`, `erste_bank_und_sparkassen`, `hypo_alpeadriabank_international_ag`, `hypo_noe_lb_fur_niederosterreich_u_wien`, `hypo_oberosterreich_salzburg_steiermark`, `hypo_tirol_bank_ag`, `hypo_vorarlberg_bank_ag`, `hypo_bank_burgenland_aktiengesellschaft`, `marchfelder_bank`, `oberbank_ag`, `raiffeisen_bankengruppe_osterreich`, `schoellerbank_ag`, `sparda_bank_wien`, `volksbank_gruppe`, `volkskreditbank_ag`, or `vr_bank_braunau`. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by EPS directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + EPS rarely provides this information so the attribute is usually empty. + """ + + class Fpx(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + """ + Account holder type, if provided. Can be one of `individual` or `company`. + """ + bank: Literal[ + "affin_bank", + "agrobank", + "alliance_bank", + "ambank", + "bank_islam", + "bank_muamalat", + "bank_of_china", + "bank_rakyat", + "bsn", + "cimb", + "deutsche_bank", + "hong_leong_bank", + "hsbc", + "kfh", + "maybank2e", + "maybank2u", + "ocbc", + "pb_enterprise", + "public_bank", + "rhb", + "standard_chartered", + "uob", + ] + """ + The customer's bank. Can be one of `affin_bank`, `agrobank`, `alliance_bank`, `ambank`, `bank_islam`, `bank_muamalat`, `bank_rakyat`, `bsn`, `cimb`, `hong_leong_bank`, `hsbc`, `kfh`, `maybank2u`, `ocbc`, `public_bank`, `rhb`, `standard_chartered`, `uob`, `deutsche_bank`, `maybank2e`, `pb_enterprise`, or `bank_of_china`. + """ + transaction_id: Optional[str] + """ + Unique transaction id generated by FPX for every request from the merchant + """ + + class Giropay(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Giropay directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Giropay rarely provides this information so the attribute is usually empty. + """ + + class Grabpay(StripeObject): + transaction_id: Optional[str] + """ + Unique transaction id generated by GrabPay + """ + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by iDEAL directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class InteracPresent(StripeObject): + class Receipt(StripeObject): + account_type: Optional[ + Literal["checking", "savings", "unknown"] + ] + """ + The type of account being debited or credited + """ + application_cryptogram: Optional[str] + """ + The Application Cryptogram, a unique value generated by the card to authenticate the transaction with issuers. + """ + application_preferred_name: Optional[str] + """ + The Application Identifier (AID) on the card used to determine which networks are eligible to process the transaction. Referenced from EMV tag 9F12, data encoded on the card's chip. + """ + authorization_code: Optional[str] + """ + Identifier for this transaction. + """ + authorization_response_code: Optional[str] + """ + EMV tag 8A. A code returned by the card issuer. + """ + cardholder_verification_method: Optional[str] + """ + Describes the method used by the cardholder to verify ownership of the card. One of the following: `approval`, `failure`, `none`, `offline_pin`, `offline_pin_and_signature`, `online_pin`, or `signature`. + """ + dedicated_file_name: Optional[str] + """ + Similar to the application_preferred_name, identifying the applications (AIDs) available on the card. Referenced from EMV tag 84. + """ + terminal_verification_results: Optional[str] + """ + A 5-byte string that records the checks and validations that occur between the card and the terminal. These checks determine how the terminal processes the transaction and what risk tolerance is acceptable. Referenced from EMV Tag 95. + """ + transaction_status_information: Optional[str] + """ + An indication of which steps were completed during the card read process. Referenced from EMV Tag 9B. + """ + + brand: Optional[str] + """ + Card brand. Can be `interac`, `mastercard` or `visa`. + """ + cardholder_name: Optional[str] + """ + The cardholder name as read from the card, in [ISO 7813](https://en.wikipedia.org/wiki/ISO/IEC_7813) format. May include alphanumeric characters, special characters and first/last name separator (`/`). In some cases, the cardholder name may not be available depending on how the issuer has configured the card. Cardholder name is typically not available on swipe or contactless payments, such as those made with Apple Pay and Google Pay. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + emv_auth_data: Optional[str] + """ + Authorization response cryptogram. + """ + exp_month: int + """ + Two-digit number representing the card's expiration month. + """ + exp_year: int + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + generated_card: Optional[str] + """ + ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + network_transaction_id: Optional[str] + """ + This is used by the financial networks to identify a transaction. Visa calls this the Transaction ID, Mastercard calls this the Trace ID, and American Express calls this the Acquirer Reference Data. This value will be present if it is returned by the financial network in the authorization response, and null otherwise. + """ + preferred_locales: Optional[List[str]] + """ + The languages that the issuing bank recommends using for localizing any customer-facing text, as read from the card. Referenced from EMV tag 5F2D, data encoded on the card's chip. + """ + read_method: Optional[ + Literal[ + "contact_emv", + "contactless_emv", + "contactless_magstripe_mode", + "magnetic_stripe_fallback", + "magnetic_stripe_track2", + ] + ] + """ + How card details were read in this transaction. + """ + receipt: Optional[Receipt] + """ + A collection of fields required to be displayed on receipts. Only required for EMV transactions. + """ + _inner_class_types = {"receipt": Receipt} + + class KakaoPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Kakao Pay transaction ID associated with this payment. + """ + + class Klarna(StripeObject): + class PayerDetails(StripeObject): + class Address(StripeObject): + country: Optional[str] + """ + The payer address country + """ + + address: Optional[Address] + """ + The payer's address + """ + _inner_class_types = {"address": Address} + + payer_details: Optional[PayerDetails] + """ + The payer details for this transaction. + """ + payment_method_category: Optional[str] + """ + The Klarna payment method used for this transaction. + Can be one of `pay_later`, `pay_now`, `pay_with_financing`, or `pay_in_installments` + """ + preferred_locale: Optional[str] + """ + Preferred language of the Klarna authorization page that the customer is redirected to. + Can be one of `de-AT`, `en-AT`, `nl-BE`, `fr-BE`, `en-BE`, `de-DE`, `en-DE`, `da-DK`, `en-DK`, `es-ES`, `en-ES`, `fi-FI`, `sv-FI`, `en-FI`, `en-GB`, `en-IE`, `it-IT`, `en-IT`, `nl-NL`, `en-NL`, `nb-NO`, `en-NO`, `sv-SE`, `en-SE`, `en-US`, `es-US`, `fr-FR`, `en-FR`, `cs-CZ`, `en-CZ`, `ro-RO`, `en-RO`, `el-GR`, `en-GR`, `en-AU`, `en-NZ`, `en-CA`, `fr-CA`, `pl-PL`, `en-PL`, `pt-PT`, `en-PT`, `de-CH`, `fr-CH`, `it-CH`, or `en-CH` + """ + _inner_class_types = {"payer_details": PayerDetails} + + class Konbini(StripeObject): + class Store(StripeObject): + chain: Optional[ + Literal["familymart", "lawson", "ministop", "seicomart"] + ] + """ + The name of the convenience store chain where the payment was completed. + """ + + store: Optional[Store] + """ + If the payment succeeded, this contains the details of the convenience store where the payment was completed. + """ + _inner_class_types = {"store": Store} + + class KrCard(StripeObject): + brand: Optional[ + Literal[ + "bc", + "citi", + "hana", + "hyundai", + "jeju", + "jeonbuk", + "kakaobank", + "kbank", + "kdbbank", + "kookmin", + "kwangju", + "lotte", + "mg", + "nh", + "post", + "samsung", + "savingsbank", + "shinhan", + "shinhyup", + "suhyup", + "tossbank", + "woori", + ] + ] + """ + The local credit or debit card brand. + """ + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + last4: Optional[str] + """ + The last four digits of the card. This may not be present for American Express cards. + """ + transaction_id: Optional[str] + """ + The Korean Card transaction ID associated with this payment. + """ + + class Link(StripeObject): + country: Optional[str] + """ + Two-letter ISO code representing the funding source country beneath the Link payment. + You could use this attribute to get a sense of international fees. + """ + + class MbWay(StripeObject): + pass + + class Mobilepay(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Brand of the card used in the transaction + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card + """ + exp_month: Optional[int] + """ + Two digit number representing the card's expiration month + """ + exp_year: Optional[int] + """ + Two digit number representing the card's expiration year + """ + last4: Optional[str] + """ + The last 4 digits of the card + """ + + card: Optional[Card] + """ + Internal card details + """ + _inner_class_types = {"card": Card} + + class Multibanco(StripeObject): + entity: Optional[str] + """ + Entity number associated with this Multibanco payment. + """ + reference: Optional[str] + """ + Reference number associated with this Multibanco payment. + """ + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Naver Pay transaction ID associated with this payment. + """ + + class NzBankAccount(StripeObject): + account_holder_name: Optional[str] + """ + The name on the bank account. Only present if the account holder name is different from the name of the authorized signatory collected in the PaymentMethod's billing details. + """ + bank_code: str + """ + The numeric code for the bank account's bank. + """ + bank_name: str + """ + The name of the bank. + """ + branch_code: str + """ + The numeric code for the bank account's bank branch. + """ + last4: str + """ + Last four digits of the bank account number. + """ + suffix: Optional[str] + """ + The suffix of the bank account number. + """ + + class Oxxo(StripeObject): + number: Optional[str] + """ + OXXO reference number + """ + + class P24(StripeObject): + bank: Optional[ + Literal[ + "alior_bank", + "bank_millennium", + "bank_nowy_bfg_sa", + "bank_pekao_sa", + "banki_spbdzielcze", + "blik", + "bnp_paribas", + "boz", + "citi_handlowy", + "credit_agricole", + "envelobank", + "etransfer_pocztowy24", + "getin_bank", + "ideabank", + "ing", + "inteligo", + "mbank_mtransfer", + "nest_przelew", + "noble_pay", + "pbac_z_ipko", + "plus_bank", + "santander_przelew24", + "tmobile_usbugi_bankowe", + "toyota_bank", + "velobank", + "volkswagen_bank", + ] + ] + """ + The customer's bank. Can be one of `ing`, `citi_handlowy`, `tmobile_usbugi_bankowe`, `plus_bank`, `etransfer_pocztowy24`, `banki_spbdzielcze`, `bank_nowy_bfg_sa`, `getin_bank`, `velobank`, `blik`, `noble_pay`, `ideabank`, `envelobank`, `santander_przelew24`, `nest_przelew`, `mbank_mtransfer`, `inteligo`, `pbac_z_ipko`, `bnp_paribas`, `credit_agricole`, `toyota_bank`, `bank_pekao_sa`, `volkswagen_bank`, `bank_millennium`, `alior_bank`, or `boz`. + """ + reference: Optional[str] + """ + Unique reference for this Przelewy24 payment. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Przelewy24 directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + Przelewy24 rarely provides this information so the attribute is usually empty. + """ + + class PayByBank(StripeObject): + pass + + class Payco(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Payco transaction ID associated with this payment. + """ + + class Paynow(StripeObject): + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + reference: Optional[str] + """ + Reference number associated with this PayNow payment + """ + + class Paypal(StripeObject): + class SellerProtection(StripeObject): + dispute_categories: Optional[ + List[Literal["fraudulent", "product_not_received"]] + ] + """ + An array of conditions that are covered for the transaction, if applicable. + """ + status: Literal[ + "eligible", "not_eligible", "partially_eligible" + ] + """ + Indicates whether the transaction is eligible for PayPal's seller protection. + """ + + country: Optional[str] + """ + Two-letter ISO code representing the buyer's country. Values are provided by PayPal directly (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_email: Optional[str] + """ + Owner's email. Values are provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + payer_id: Optional[str] + """ + PayPal account PayerID. This identifier uniquely identifies the PayPal customer. + """ + payer_name: Optional[str] + """ + Owner's full name. Values provided by PayPal directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + seller_protection: Optional[SellerProtection] + """ + The level of protection offered as defined by PayPal Seller Protection for Merchants, for this transaction. + """ + transaction_id: Optional[str] + """ + A unique ID generated by PayPal for this transaction. + """ + _inner_class_types = {"seller_protection": SellerProtection} + + class Pix(StripeObject): + bank_transaction_id: Optional[str] + """ + Unique transaction id generated by BCB + """ + + class Promptpay(StripeObject): + reference: Optional[str] + """ + Bill reference generated by PromptPay + """ + + class RevolutPay(StripeObject): + class Funding(StripeObject): + class Card(StripeObject): + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + + card: Optional[Card] + type: Optional[Literal["card"]] + """ + funding type of the underlying payment method. + """ + _inner_class_types = {"card": Card} + + funding: Optional[Funding] + transaction_id: Optional[str] + """ + The Revolut Pay transaction ID associated with this payment. + """ + _inner_class_types = {"funding": Funding} + + class SamsungPay(StripeObject): + buyer_id: Optional[str] + """ + A unique identifier for the buyer as determined by the local payment processor. + """ + transaction_id: Optional[str] + """ + The Samsung Pay transaction ID associated with this payment. + """ + + class Satispay(StripeObject): + transaction_id: Optional[str] + """ + The Satispay transaction ID associated with this payment. + """ + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + iban: Optional[str] + """ + IBAN of the bank account to transfer funds to. + """ + + class SepaDebit(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + branch_code: Optional[str] + """ + Branch code of bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four characters of the IBAN. + """ + mandate: Optional[str] + """ + Find the ID of the mandate used for this payment under the [payment_method_details.sepa_debit.mandate](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-sepa_debit-mandate) property on the Charge. Use this mandate ID to [retrieve the Mandate](https://stripe.com/docs/api/mandates/retrieve). + """ + + class Sofort(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country the bank account is located in. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[ + Literal["de", "en", "es", "fr", "it", "nl", "pl"] + ] + """ + Preferred language of the SOFORT authorization page that the customer is redirected to. + Can be one of `de`, `en`, `es`, `fr`, `it`, `nl`, or `pl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by SOFORT directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class StripeAccount(StripeObject): + pass + + class Swish(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies the payer's Swish account. You can use this attribute to check whether two Swish transactions were paid for by the same payer + """ + payment_reference: Optional[str] + """ + Payer bank reference number for the payment + """ + verified_phone_last4: Optional[str] + """ + The last four digits of the Swish account phone number + """ + + class Twint(StripeObject): + pass + + class UsBankAccount(StripeObject): + account_holder_type: Optional[Literal["company", "individual"]] + account_type: Optional[Literal["checking", "savings"]] + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. + """ + last4: Optional[str] + """ + Last four digits of the bank account number. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the mandate used to make this payment. + """ + payment_reference: Optional[str] + """ + Reference number to locate ACH payments with customer's bank. + """ + routing_number: Optional[str] + """ + Routing number of the bank account. + """ + + class Wechat(StripeObject): + pass + + class WechatPay(StripeObject): + fingerprint: Optional[str] + """ + Uniquely identifies this particular WeChat Pay account. You can use this attribute to check whether two WeChat accounts are the same. + """ + location: Optional[str] + """ + ID of the [location](https://stripe.com/docs/api/terminal/locations) that this transaction's reader is assigned to. + """ + reader: Optional[str] + """ + ID of the [reader](https://stripe.com/docs/api/terminal/readers) this transaction was made on. + """ + transaction_id: Optional[str] + """ + Transaction ID of this particular WeChat Pay transaction. + """ + + class Zip(StripeObject): + pass + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + billing_details: Optional[BillingDetails] + """ + The billing details associated with the method of payment. + """ + blik: Optional[Blik] + boleto: Optional[Boleto] + card: Optional[Card] + """ + Details of the card used for this payment attempt. + """ + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + custom: Optional[Custom] + """ + Custom Payment Methods represent Payment Method types not modeled directly in + the Stripe API. This resource consists of details about the custom payment method + used for this payment attempt. + """ + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + interac_present: Optional[InteracPresent] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mb_way: Optional[MbWay] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + oxxo: Optional[Oxxo] + p24: Optional[P24] + pay_by_bank: Optional[PayByBank] + payco: Optional[Payco] + payment_method: Optional[str] + """ + ID of the Stripe PaymentMethod used to make this payment. + """ + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + promptpay: Optional[Promptpay] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + stripe_account: Optional[StripeAccount] + swish: Optional[Swish] + twint: Optional[Twint] + type: str + """ + The type of transaction-specific details of the payment method used in the payment. See [PaymentMethod.type](https://stripe.com/docs/api/payment_methods/object#payment_method_object-type) for the full list of possible types. + An additional hash is included on `payment_method_details` with a name matching this value. + It contains information specific to the payment method. + """ + us_bank_account: Optional[UsBankAccount] + """ + Details of the US Bank Account used for this payment attempt. + """ + wechat: Optional[Wechat] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "billing_details": BillingDetails, + "blik": Blik, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "crypto": Crypto, + "custom": Custom, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "interac_present": InteracPresent, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mb_way": MbWay, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "oxxo": Oxxo, + "p24": P24, + "pay_by_bank": PayByBank, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "promptpay": Promptpay, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "stripe_account": StripeAccount, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + "wechat": Wechat, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class ProcessorDetails(StripeObject): + class Custom(StripeObject): + payment_reference: Optional[str] + """ + An opaque string for manual reconciliation of this payment, for example a check number or a payment processor ID. + """ + + custom: Optional[Custom] + """ + Custom processors represent payment processors not modeled directly in + the Stripe API. This resource consists of details about the custom processor + used for this payment attempt. + """ + type: Literal["custom"] + """ + The processor used for this payment attempt. + """ + _inner_class_types = {"custom": Custom} + + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + """ + A representation of a physical address. + """ + name: Optional[str] + """ + The shipping recipient's name. + """ + phone: Optional[str] + """ + The shipping recipient's phone number. + """ + _inner_class_types = {"address": Address} + + amount: Amount + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_authorized: AmountAuthorized + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_canceled: AmountCanceled + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_failed: AmountFailed + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_guaranteed: AmountGuaranteed + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_refunded: AmountRefunded + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + amount_requested: AmountRequested + """ + A representation of an amount of money, consisting of an amount and a currency. + """ + application: Optional[str] + """ + ID of the Connect application that created the PaymentRecord. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer_details: Optional[CustomerDetails] + """ + Customer information for this payment. + """ + customer_presence: Optional[Literal["off_session", "on_session"]] + """ + Indicates whether the customer was present in your checkout flow during this payment. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + id: str + """ + Unique identifier for the object. + """ + latest_payment_attempt_record: Optional[str] + """ + ID of the latest Payment Attempt Record attached to this Payment Record. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["payment_record"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_method_details: Optional[PaymentMethodDetails] + """ + Information about the Payment Method debited for this payment. + """ + processor_details: ProcessorDetails + """ + Processor information associated with this payment. + """ + shipping_details: Optional[ShippingDetails] + """ + Shipping information for this payment. + """ + + @classmethod + def report_payment( + cls, **params: Unpack["PaymentRecordReportPaymentParams"] + ) -> "PaymentRecord": + """ + Report a new Payment Record. You may report a Payment Record as it is + initialized and later report updates through the other report_* methods, or report Payment + Records in a terminal state directly, through this method. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/report_payment", + params=params, + ), + ) + + @classmethod + async def report_payment_async( + cls, **params: Unpack["PaymentRecordReportPaymentParams"] + ) -> "PaymentRecord": + """ + Report a new Payment Record. You may report a Payment Record as it is + initialized and later report updates through the other report_* methods, or report Payment + Records in a terminal state directly, through this method. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/report_payment", + params=params, + ), + ) + + @classmethod + def _cls_report_payment_attempt( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptParams"], + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_payment_attempt( + id: str, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + ... + + @overload + def report_payment_attempt( + self, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + ... + + @class_method_variant("_cls_report_payment_attempt") + def report_payment_attempt( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_payment_attempt_async( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptParams"], + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_payment_attempt_async( + id: str, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + ... + + @overload + async def report_payment_attempt_async( + self, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_async") + async def report_payment_attempt_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportPaymentAttemptParams"] + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_report_payment_attempt_canceled( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_payment_attempt_canceled( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + ... + + @overload + def report_payment_attempt_canceled( + self, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_canceled") + def report_payment_attempt_canceled( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_payment_attempt_canceled_async( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_payment_attempt_canceled_async( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + ... + + @overload + async def report_payment_attempt_canceled_async( + self, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_canceled_async") + async def report_payment_attempt_canceled_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["PaymentRecordReportPaymentAttemptCanceledParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_report_payment_attempt_failed( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_payment_attempt_failed( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + ... + + @overload + def report_payment_attempt_failed( + self, **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_failed") + def report_payment_attempt_failed( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_payment_attempt_failed_async( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_payment_attempt_failed_async( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + ... + + @overload + async def report_payment_attempt_failed_async( + self, **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_failed_async") + async def report_payment_attempt_failed_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportPaymentAttemptFailedParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_report_payment_attempt_guaranteed( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_payment_attempt_guaranteed( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + ... + + @overload + def report_payment_attempt_guaranteed( + self, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_guaranteed") + def report_payment_attempt_guaranteed( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_payment_attempt_guaranteed_async( + cls, + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_payment_attempt_guaranteed_async( + id: str, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + ... + + @overload + async def report_payment_attempt_guaranteed_async( + self, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_guaranteed_async") + async def report_payment_attempt_guaranteed_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack["PaymentRecordReportPaymentAttemptGuaranteedParams"], + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_report_payment_attempt_informational( + cls, + id: str, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_payment_attempt_informational( + id: str, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + ... + + @overload + def report_payment_attempt_informational( + self, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_informational") + def report_payment_attempt_informational( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_payment_attempt_informational_async( + cls, + id: str, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_payment_attempt_informational_async( + id: str, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + ... + + @overload + async def report_payment_attempt_informational_async( + self, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + ... + + @class_method_variant("_cls_report_payment_attempt_informational_async") + async def report_payment_attempt_informational_async( # pyright: ignore[reportGeneralTypeIssues] + self, + **params: Unpack[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ], + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_report_refund( + cls, id: str, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + cls._static_request( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def report_refund( + id: str, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + ... + + @overload + def report_refund( + self, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + ... + + @class_method_variant("_cls_report_refund") + def report_refund( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_report_refund_async( + cls, id: str, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + await cls._static_request_async( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def report_refund_async( + id: str, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + ... + + @overload + async def report_refund_async( + self, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + ... + + @class_method_variant("_cls_report_refund_async") + async def report_refund_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PaymentRecordReportRefundParams"] + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PaymentRecordRetrieveParams"] + ) -> "PaymentRecord": + """ + Retrieves a Payment Record with the given ID + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PaymentRecordRetrieveParams"] + ) -> "PaymentRecord": + """ + Retrieves a Payment Record with the given ID + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "amount": Amount, + "amount_authorized": AmountAuthorized, + "amount_canceled": AmountCanceled, + "amount_failed": AmountFailed, + "amount_guaranteed": AmountGuaranteed, + "amount_refunded": AmountRefunded, + "amount_requested": AmountRequested, + "customer_details": CustomerDetails, + "payment_method_details": PaymentMethodDetails, + "processor_details": ProcessorDetails, + "shipping_details": ShippingDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record_service.py new file mode 100644 index 00000000..ef6eb9d0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payment_record_service.py @@ -0,0 +1,396 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._payment_record import PaymentRecord + from stripe._request_options import RequestOptions + from stripe.params._payment_record_report_payment_attempt_canceled_params import ( + PaymentRecordReportPaymentAttemptCanceledParams, + ) + from stripe.params._payment_record_report_payment_attempt_failed_params import ( + PaymentRecordReportPaymentAttemptFailedParams, + ) + from stripe.params._payment_record_report_payment_attempt_guaranteed_params import ( + PaymentRecordReportPaymentAttemptGuaranteedParams, + ) + from stripe.params._payment_record_report_payment_attempt_informational_params import ( + PaymentRecordReportPaymentAttemptInformationalParams, + ) + from stripe.params._payment_record_report_payment_attempt_params import ( + PaymentRecordReportPaymentAttemptParams, + ) + from stripe.params._payment_record_report_payment_params import ( + PaymentRecordReportPaymentParams, + ) + from stripe.params._payment_record_report_refund_params import ( + PaymentRecordReportRefundParams, + ) + from stripe.params._payment_record_retrieve_params import ( + PaymentRecordRetrieveParams, + ) + + +class PaymentRecordService(StripeService): + def retrieve( + self, + id: str, + params: Optional["PaymentRecordRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Retrieves a Payment Record with the given ID + """ + return cast( + "PaymentRecord", + self._request( + "get", + "/v1/payment_records/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["PaymentRecordRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Retrieves a Payment Record with the given ID + """ + return cast( + "PaymentRecord", + await self._request_async( + "get", + "/v1/payment_records/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment_attempt( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_attempt_async( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report a new payment attempt on the specified Payment Record. A new payment + attempt can only be specified if all other payment attempts are canceled or failed. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment_attempt_canceled( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptCanceledParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_attempt_canceled_async( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptCanceledParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was canceled. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_canceled".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment_attempt_failed( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptFailedParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_attempt_failed_async( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptFailedParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + failed or errored. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_failed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment_attempt_guaranteed( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptGuaranteedParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_attempt_guaranteed_async( + self, + id: str, + params: "PaymentRecordReportPaymentAttemptGuaranteedParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was guaranteed. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_guaranteed".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment_attempt_informational( + self, + id: str, + params: Optional[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_attempt_informational_async( + self, + id: str, + params: Optional[ + "PaymentRecordReportPaymentAttemptInformationalParams" + ] = None, + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report informational updates on the specified Payment Record. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_payment_attempt_informational".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_refund( + self, + id: str, + params: "PaymentRecordReportRefundParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def report_refund_async( + self, + id: str, + params: "PaymentRecordReportRefundParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report that the most recent payment attempt on the specified Payment Record + was refunded. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/{id}/report_refund".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def report_payment( + self, + params: "PaymentRecordReportPaymentParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report a new Payment Record. You may report a Payment Record as it is + initialized and later report updates through the other report_* methods, or report Payment + Records in a terminal state directly, through this method. + """ + return cast( + "PaymentRecord", + self._request( + "post", + "/v1/payment_records/report_payment", + base_address="api", + params=params, + options=options, + ), + ) + + async def report_payment_async( + self, + params: "PaymentRecordReportPaymentParams", + options: Optional["RequestOptions"] = None, + ) -> "PaymentRecord": + """ + Report a new Payment Record. You may report a Payment Record as it is + initialized and later report updates through the other report_* methods, or report Payment + Records in a terminal state directly, through this method. + """ + return cast( + "PaymentRecord", + await self._request_async( + "post", + "/v1/payment_records/report_payment", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payout.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payout.py new file mode 100644 index 00000000..e707c2e2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payout.py @@ -0,0 +1,533 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, Union, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._application_fee import ApplicationFee + from stripe._balance_transaction import BalanceTransaction + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe.params._payout_cancel_params import PayoutCancelParams + from stripe.params._payout_create_params import PayoutCreateParams + from stripe.params._payout_list_params import PayoutListParams + from stripe.params._payout_modify_params import PayoutModifyParams + from stripe.params._payout_retrieve_params import PayoutRetrieveParams + from stripe.params._payout_reverse_params import PayoutReverseParams + + +class Payout( + CreateableAPIResource["Payout"], + ListableAPIResource["Payout"], + UpdateableAPIResource["Payout"], +): + """ + A `Payout` object is created when you receive funds from Stripe, or when you + initiate a payout to either a bank account or debit card of a [connected + Stripe account](https://docs.stripe.com/docs/connect/bank-debit-card-payouts). You can retrieve individual payouts, + and list all payouts. Payouts are made on [varying + schedules](https://docs.stripe.com/docs/connect/manage-payout-schedule), depending on your country and + industry. + + Related guide: [Receiving payouts](https://stripe.com/docs/payouts) + """ + + OBJECT_NAME: ClassVar[Literal["payout"]] = "payout" + + class TraceId(StripeObject): + status: str + """ + Possible values are `pending`, `supported`, and `unsupported`. When `payout.status` is `pending` or `in_transit`, this will be `pending`. When the payout transitions to `paid`, `failed`, or `canceled`, this status will become `supported` or `unsupported` shortly after in most cases. In some cases, this may appear as `pending` for up to 10 days after `arrival_date` until transitioning to `supported` or `unsupported`. + """ + value: Optional[str] + """ + The trace ID value if `trace_id.status` is `supported`, otherwise `nil`. + """ + + amount: int + """ + The amount (in cents (or local equivalent)) that transfers to your bank account or debit card. + """ + application_fee: Optional[ExpandableField["ApplicationFee"]] + """ + The application fee (if any) for the payout. [See the Connect documentation](https://stripe.com/docs/connect/instant-payouts#monetization-and-fees) for details. + """ + application_fee_amount: Optional[int] + """ + The amount of the application fee (if any) requested for the payout. [See the Connect documentation](https://stripe.com/docs/connect/instant-payouts#monetization-and-fees) for details. + """ + arrival_date: int + """ + Date that you can expect the payout to arrive in the bank. This factors in delays to account for weekends or bank holidays. + """ + automatic: bool + """ + Returns `true` if the payout is created by an [automated payout schedule](https://stripe.com/docs/payouts#payout-schedule) and `false` if it's [requested manually](https://stripe.com/docs/payouts#manual-payouts). + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + ID of the balance transaction that describes the impact of this payout on your account balance. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination: Optional[ExpandableField[Union["BankAccount", "Card"]]] + """ + ID of the bank account or card the payout is sent to. + """ + failure_balance_transaction: Optional[ + ExpandableField["BalanceTransaction"] + ] + """ + If the payout fails or cancels, this is the ID of the balance transaction that reverses the initial balance transaction and returns the funds from the failed payout back in your balance. + """ + failure_code: Optional[str] + """ + Error code that provides a reason for a payout failure, if available. View our [list of failure codes](https://stripe.com/docs/api#payout_failures). + """ + failure_message: Optional[str] + """ + Message that provides the reason for a payout failure, if available. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + method: str + """ + The method used to send this payout, which can be `standard` or `instant`. `instant` is supported for payouts to debit cards and bank accounts in certain countries. Learn more about [bank support for Instant Payouts](https://stripe.com/docs/payouts/instant-payouts-banks). + """ + object: Literal["payout"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + original_payout: Optional[ExpandableField["Payout"]] + """ + If the payout reverses another, this is the ID of the original payout. + """ + payout_method: Optional[str] + """ + ID of the v2 FinancialAccount the funds are sent to. + """ + reconciliation_status: Literal[ + "completed", "in_progress", "not_applicable" + ] + """ + If `completed`, you can use the [Balance Transactions API](https://stripe.com/docs/api/balance_transactions/list#balance_transaction_list-payout) to list all balance transactions that are paid out in this payout. + """ + reversed_by: Optional[ExpandableField["Payout"]] + """ + If the payout reverses, this is the ID of the payout that reverses this payout. + """ + source_type: str + """ + The source balance this payout came from, which can be one of the following: `card`, `fpx`, or `bank_account`. + """ + statement_descriptor: Optional[str] + """ + Extra information about a payout that displays on the user's bank statement. + """ + status: str + """ + Current status of the payout: `paid`, `pending`, `in_transit`, `canceled` or `failed`. A payout is `pending` until it's submitted to the bank, when it becomes `in_transit`. The status changes to `paid` if the transaction succeeds, or to `failed` or `canceled` (within 5 business days). Some payouts that fail might initially show as `paid`, then change to `failed`. + """ + trace_id: Optional[TraceId] + """ + A value that generates from the beneficiary's bank that allows users to track payouts with their bank. Banks might call this a "reference number" or something similar. + """ + type: Literal["bank_account", "card"] + """ + Can be `bank_account` or `card`. + """ + + @classmethod + def _cls_cancel( + cls, payout: str, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + cls._static_request( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(payout) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + payout: str, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + ... + + @overload + def cancel(self, **params: Unpack["PayoutCancelParams"]) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, payout: str, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + await cls._static_request_async( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(payout) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + payout: str, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PayoutCancelParams"] + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["PayoutCreateParams"]) -> "Payout": + """ + To send funds to your own bank account, create a new payout object. Your [Stripe balance](https://docs.stripe.com/api#balance) must cover the payout amount. If it doesn't, you receive an “Insufficient Funds” error. + + If your API key is in test mode, money won't actually be sent, though every other action occurs as if you're in live mode. + + If you create a manual payout on a Stripe account that uses multiple payment source types, you need to specify the source type balance that the payout draws from. The [balance object](https://docs.stripe.com/api#balance_object) details available and pending amounts by source type. + """ + return cast( + "Payout", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PayoutCreateParams"] + ) -> "Payout": + """ + To send funds to your own bank account, create a new payout object. Your [Stripe balance](https://docs.stripe.com/api#balance) must cover the payout amount. If it doesn't, you receive an “Insufficient Funds” error. + + If your API key is in test mode, money won't actually be sent, though every other action occurs as if you're in live mode. + + If you create a manual payout on a Stripe account that uses multiple payment source types, you need to specify the source type balance that the payout draws from. The [balance object](https://docs.stripe.com/api#balance_object) details available and pending amounts by source type. + """ + return cast( + "Payout", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PayoutListParams"] + ) -> ListObject["Payout"]: + """ + Returns a list of existing payouts sent to third-party bank accounts or payouts that Stripe sent to you. The payouts return in sorted order, with the most recently created payouts appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PayoutListParams"] + ) -> ListObject["Payout"]: + """ + Returns a list of existing payouts sent to third-party bank accounts or payouts that Stripe sent to you. The payouts return in sorted order, with the most recently created payouts appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PayoutModifyParams"] + ) -> "Payout": + """ + Updates the specified payout by setting the values of the parameters you pass. We don't change parameters that you don't provide. This request only accepts the metadata as arguments. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Payout", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PayoutModifyParams"] + ) -> "Payout": + """ + Updates the specified payout by setting the values of the parameters you pass. We don't change parameters that you don't provide. This request only accepts the metadata as arguments. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Payout", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PayoutRetrieveParams"] + ) -> "Payout": + """ + Retrieves the details of an existing payout. Supply the unique payout ID from either a payout creation request or the payout list. Stripe returns the corresponding payout information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PayoutRetrieveParams"] + ) -> "Payout": + """ + Retrieves the details of an existing payout. Supply the unique payout ID from either a payout creation request or the payout list. Stripe returns the corresponding payout information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_reverse( + cls, payout: str, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + cls._static_request( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(payout) + ), + params=params, + ), + ) + + @overload + @staticmethod + def reverse( + payout: str, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + ... + + @overload + def reverse(self, **params: Unpack["PayoutReverseParams"]) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + ... + + @class_method_variant("_cls_reverse") + def reverse( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_reverse_async( + cls, payout: str, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + await cls._static_request_async( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(payout) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def reverse_async( + payout: str, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + ... + + @overload + async def reverse_async( + self, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + ... + + @class_method_variant("_cls_reverse_async") + async def reverse_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PayoutReverseParams"] + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = {"trace_id": TraceId} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_payout_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_payout_service.py new file mode 100644 index 00000000..db8177c5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_payout_service.py @@ -0,0 +1,275 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._payout import Payout + from stripe._request_options import RequestOptions + from stripe.params._payout_cancel_params import PayoutCancelParams + from stripe.params._payout_create_params import PayoutCreateParams + from stripe.params._payout_list_params import PayoutListParams + from stripe.params._payout_retrieve_params import PayoutRetrieveParams + from stripe.params._payout_reverse_params import PayoutReverseParams + from stripe.params._payout_update_params import PayoutUpdateParams + + +class PayoutService(StripeService): + def list( + self, + params: Optional["PayoutListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Payout]": + """ + Returns a list of existing payouts sent to third-party bank accounts or payouts that Stripe sent to you. The payouts return in sorted order, with the most recently created payouts appearing first. + """ + return cast( + "ListObject[Payout]", + self._request( + "get", + "/v1/payouts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PayoutListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Payout]": + """ + Returns a list of existing payouts sent to third-party bank accounts or payouts that Stripe sent to you. The payouts return in sorted order, with the most recently created payouts appearing first. + """ + return cast( + "ListObject[Payout]", + await self._request_async( + "get", + "/v1/payouts", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PayoutCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + To send funds to your own bank account, create a new payout object. Your [Stripe balance](https://docs.stripe.com/api#balance) must cover the payout amount. If it doesn't, you receive an “Insufficient Funds” error. + + If your API key is in test mode, money won't actually be sent, though every other action occurs as if you're in live mode. + + If you create a manual payout on a Stripe account that uses multiple payment source types, you need to specify the source type balance that the payout draws from. The [balance object](https://docs.stripe.com/api#balance_object) details available and pending amounts by source type. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PayoutCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + To send funds to your own bank account, create a new payout object. Your [Stripe balance](https://docs.stripe.com/api#balance) must cover the payout amount. If it doesn't, you receive an “Insufficient Funds” error. + + If your API key is in test mode, money won't actually be sent, though every other action occurs as if you're in live mode. + + If you create a manual payout on a Stripe account that uses multiple payment source types, you need to specify the source type balance that the payout draws from. The [balance object](https://docs.stripe.com/api#balance_object) details available and pending amounts by source type. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + payout: str, + params: Optional["PayoutRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Retrieves the details of an existing payout. Supply the unique payout ID from either a payout creation request or the payout list. Stripe returns the corresponding payout information. + """ + return cast( + "Payout", + self._request( + "get", + "/v1/payouts/{payout}".format(payout=sanitize_id(payout)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + payout: str, + params: Optional["PayoutRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Retrieves the details of an existing payout. Supply the unique payout ID from either a payout creation request or the payout list. Stripe returns the corresponding payout information. + """ + return cast( + "Payout", + await self._request_async( + "get", + "/v1/payouts/{payout}".format(payout=sanitize_id(payout)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + payout: str, + params: Optional["PayoutUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Updates the specified payout by setting the values of the parameters you pass. We don't change parameters that you don't provide. This request only accepts the metadata as arguments. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts/{payout}".format(payout=sanitize_id(payout)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + payout: str, + params: Optional["PayoutUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Updates the specified payout by setting the values of the parameters you pass. We don't change parameters that you don't provide. This request only accepts the metadata as arguments. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts/{payout}".format(payout=sanitize_id(payout)), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + payout: str, + params: Optional["PayoutCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(payout), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + payout: str, + params: Optional["PayoutCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + You can cancel a previously created payout if its status is pending. Stripe refunds the funds to your available balance. You can't cancel automatic Stripe payouts. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=sanitize_id(payout), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def reverse( + self, + payout: str, + params: Optional["PayoutReverseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + self._request( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(payout), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def reverse_async( + self, + payout: str, + params: Optional["PayoutReverseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Payout": + """ + Reverses a payout by debiting the destination bank account. At this time, you can only reverse payouts for connected accounts to US and Canadian bank accounts. If the payout is manual and in the pending status, use /v1/payouts/:id/cancel instead. + + By requesting a reversal through /v1/payouts/:id/reverse, you confirm that the authorized signatory of the selected bank account authorizes the debit on the bank account and that no other authorization is required. + """ + return cast( + "Payout", + await self._request_async( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=sanitize_id(payout), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_person.py b/Backend/venv/lib/python3.12/site-packages/stripe/_person.py new file mode 100644 index 00000000..6c9e2a76 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_person.py @@ -0,0 +1,795 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +import stripe +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, List, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + + +class Person(UpdateableAPIResource["Person"]): + """ + This is an object representing a person associated with a Stripe account. + + A platform can only access a subset of data in a person for an account where [account.controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`, which includes Standard and Express accounts, after creating an Account Link or Account Session to start Connect onboarding. + + See the [Standard onboarding](https://docs.stripe.com/connect/standard-accounts) or [Express onboarding](https://docs.stripe.com/connect/express-accounts) documentation for information about prefilling information and account onboarding steps. Learn more about [handling identity verification with the API](https://docs.stripe.com/connect/handling-api-verification#person-information). + """ + + OBJECT_NAME: ClassVar[Literal["person"]] = "person" + + class AdditionalTosAcceptances(StripeObject): + class Account(StripeObject): + date: Optional[int] + """ + The Unix timestamp marking when the legal guardian accepted the service agreement. + """ + ip: Optional[str] + """ + The IP address from which the legal guardian accepted the service agreement. + """ + user_agent: Optional[str] + """ + The user agent of the browser from which the legal guardian accepted the service agreement. + """ + + account: Optional[Account] + """ + Details on the legal guardian's acceptance of the main Stripe service agreement. + """ + _inner_class_types = {"account": Account} + + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class AddressKana(StripeObject): + city: Optional[str] + """ + City/Ward. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Block/Building number. + """ + line2: Optional[str] + """ + Building details. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + Prefecture. + """ + town: Optional[str] + """ + Town/cho-me. + """ + + class AddressKanji(StripeObject): + city: Optional[str] + """ + City/Ward. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Block/Building number. + """ + line2: Optional[str] + """ + Building details. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + Prefecture. + """ + town: Optional[str] + """ + Town/cho-me. + """ + + class Dob(StripeObject): + day: Optional[int] + """ + The day of birth, between 1 and 31. + """ + month: Optional[int] + """ + The month of birth, between 1 and 12. + """ + year: Optional[int] + """ + The four-digit year of birth. + """ + + class FutureRequirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + """ + Fields that can be provided to satisfy all fields in `original_fields_due`. + """ + original_fields_due: List[str] + """ + Fields that are due and can be satisfied by providing all fields in `alternative_fields_due`. + """ + + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + alternatives: Optional[List[Alternative]] + """ + Fields that are due and can be satisfied by providing the corresponding alternative fields instead. + """ + currently_due: List[str] + """ + Fields that need to be collected to keep the person's account enabled. If not collected by the account's `future_requirements[current_deadline]`, these fields will transition to the main `requirements` hash, and may immediately become `past_due`, but the account may also be given a grace period depending on the account's enablement state prior to transition. + """ + errors: List[Error] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + eventually_due: List[str] + """ + Fields you must collect when all thresholds are reached. As they become required, they appear in `currently_due` as well, and the account's `future_requirements[current_deadline]` becomes set. + """ + past_due: List[str] + """ + Fields that weren't collected by the account's `requirements.current_deadline`. These fields need to be collected to enable the person's account. New fields will never appear here; `future_requirements.past_due` will always be a subset of `requirements.past_due`. + """ + pending_verification: List[str] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due` or `currently_due`. Fields might appear in `eventually_due` or `currently_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class RegisteredAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class Relationship(StripeObject): + authorizer: Optional[bool] + """ + Whether the person is the authorizer of the account's representative. + """ + director: Optional[bool] + """ + Whether the person is a director of the account's legal entity. Directors are typically members of the governing board of the company, or responsible for ensuring the company meets its regulatory obligations. + """ + executive: Optional[bool] + """ + Whether the person has significant responsibility to control, manage, or direct the organization. + """ + legal_guardian: Optional[bool] + """ + Whether the person is the legal guardian of the account's representative. + """ + owner: Optional[bool] + """ + Whether the person is an owner of the account's legal entity. + """ + percent_ownership: Optional[float] + """ + The percent owned by the person of the account's legal entity. + """ + representative: Optional[bool] + """ + Whether the person is authorized as the primary representative of the account. This is the person nominated by the business to provide information about themselves, and general information about the account. There can only be one representative at any given time. At the time the account is created, this person should be set to the person responsible for opening the account. + """ + title: Optional[str] + """ + The person's title (e.g., CEO, Support Engineer). + """ + + class Requirements(StripeObject): + class Alternative(StripeObject): + alternative_fields_due: List[str] + """ + Fields that can be provided to satisfy all fields in `original_fields_due`. + """ + original_fields_due: List[str] + """ + Fields that are due and can be satisfied by providing all fields in `alternative_fields_due`. + """ + + class Error(StripeObject): + code: Literal[ + "external_request", + "information_missing", + "invalid_address_city_state_postal_code", + "invalid_address_highway_contract_box", + "invalid_address_private_mailbox", + "invalid_business_profile_name", + "invalid_business_profile_name_denylisted", + "invalid_company_name_denylisted", + "invalid_dob_age_over_maximum", + "invalid_dob_age_under_18", + "invalid_dob_age_under_minimum", + "invalid_product_description_length", + "invalid_product_description_url_match", + "invalid_representative_country", + "invalid_signator", + "invalid_statement_descriptor_business_mismatch", + "invalid_statement_descriptor_denylisted", + "invalid_statement_descriptor_length", + "invalid_statement_descriptor_prefix_denylisted", + "invalid_statement_descriptor_prefix_mismatch", + "invalid_street_address", + "invalid_tax_id", + "invalid_tax_id_format", + "invalid_tos_acceptance", + "invalid_url_denylisted", + "invalid_url_format", + "invalid_url_length", + "invalid_url_web_presence_detected", + "invalid_url_website_business_information_mismatch", + "invalid_url_website_empty", + "invalid_url_website_inaccessible", + "invalid_url_website_inaccessible_geoblocked", + "invalid_url_website_inaccessible_password_protected", + "invalid_url_website_incomplete", + "invalid_url_website_incomplete_cancellation_policy", + "invalid_url_website_incomplete_customer_service_details", + "invalid_url_website_incomplete_legal_restrictions", + "invalid_url_website_incomplete_refund_policy", + "invalid_url_website_incomplete_return_policy", + "invalid_url_website_incomplete_terms_and_conditions", + "invalid_url_website_incomplete_under_construction", + "invalid_url_website_other", + "invalid_value_other", + "unsupported_business_type", + "verification_directors_mismatch", + "verification_document_address_mismatch", + "verification_document_address_missing", + "verification_document_corrupt", + "verification_document_country_not_supported", + "verification_document_directors_mismatch", + "verification_document_dob_mismatch", + "verification_document_duplicate_type", + "verification_document_expired", + "verification_document_failed_copy", + "verification_document_failed_greyscale", + "verification_document_failed_other", + "verification_document_failed_test_mode", + "verification_document_fraudulent", + "verification_document_id_number_mismatch", + "verification_document_id_number_missing", + "verification_document_incomplete", + "verification_document_invalid", + "verification_document_issue_or_expiry_date_missing", + "verification_document_manipulated", + "verification_document_missing_back", + "verification_document_missing_front", + "verification_document_name_mismatch", + "verification_document_name_missing", + "verification_document_nationality_mismatch", + "verification_document_not_readable", + "verification_document_not_signed", + "verification_document_not_uploaded", + "verification_document_photo_mismatch", + "verification_document_too_large", + "verification_document_type_not_supported", + "verification_extraneous_directors", + "verification_failed_address_match", + "verification_failed_authorizer_authority", + "verification_failed_business_iec_number", + "verification_failed_document_match", + "verification_failed_id_number_match", + "verification_failed_keyed_identity", + "verification_failed_keyed_match", + "verification_failed_name_match", + "verification_failed_other", + "verification_failed_representative_authority", + "verification_failed_residential_address", + "verification_failed_tax_id_match", + "verification_failed_tax_id_not_issued", + "verification_legal_entity_structure_mismatch", + "verification_missing_directors", + "verification_missing_executives", + "verification_missing_owners", + "verification_rejected_ownership_exemption_reason", + "verification_requires_additional_memorandum_of_associations", + "verification_requires_additional_proof_of_registration", + "verification_supportability", + ] + """ + The code for the type of error. + """ + reason: str + """ + An informative message that indicates the error type and provides additional details about the error. + """ + requirement: str + """ + The specific user onboarding requirement field (in the requirements hash) that needs to be resolved. + """ + + alternatives: Optional[List[Alternative]] + """ + Fields that are due and can be satisfied by providing the corresponding alternative fields instead. + """ + currently_due: List[str] + """ + Fields that need to be collected to keep the person's account enabled. If not collected by the account's `current_deadline`, these fields appear in `past_due` as well, and the account is disabled. + """ + errors: List[Error] + """ + Fields that are `currently_due` and need to be collected again because validation or verification failed. + """ + eventually_due: List[str] + """ + Fields you must collect when all thresholds are reached. As they become required, they appear in `currently_due` as well, and the account's `current_deadline` becomes set. + """ + past_due: List[str] + """ + Fields that weren't collected by the account's `current_deadline`. These fields need to be collected to enable the person's account. + """ + pending_verification: List[str] + """ + Fields that might become required depending on the results of verification or review. It's an empty array unless an asynchronous verification is pending. If verification fails, these fields move to `eventually_due`, `currently_due`, or `past_due`. Fields might appear in `eventually_due`, `currently_due`, or `past_due` and in `pending_verification` if verification fails but another verification is still pending. + """ + _inner_class_types = {"alternatives": Alternative, "errors": Error} + + class UsCfpbData(StripeObject): + class EthnicityDetails(StripeObject): + ethnicity: Optional[ + List[ + Literal[ + "cuban", + "hispanic_or_latino", + "mexican", + "not_hispanic_or_latino", + "other_hispanic_or_latino", + "prefer_not_to_answer", + "puerto_rican", + ] + ] + ] + """ + The persons ethnicity + """ + ethnicity_other: Optional[str] + """ + Please specify your origin, when other is selected. + """ + + class RaceDetails(StripeObject): + race: Optional[ + List[ + Literal[ + "african_american", + "american_indian_or_alaska_native", + "asian", + "asian_indian", + "black_or_african_american", + "chinese", + "ethiopian", + "filipino", + "guamanian_or_chamorro", + "haitian", + "jamaican", + "japanese", + "korean", + "native_hawaiian", + "native_hawaiian_or_other_pacific_islander", + "nigerian", + "other_asian", + "other_black_or_african_american", + "other_pacific_islander", + "prefer_not_to_answer", + "samoan", + "somali", + "vietnamese", + "white", + ] + ] + ] + """ + The persons race. + """ + race_other: Optional[str] + """ + Please specify your race, when other is selected. + """ + + ethnicity_details: Optional[EthnicityDetails] + """ + The persons ethnicity details + """ + race_details: Optional[RaceDetails] + """ + The persons race details + """ + self_identified_gender: Optional[str] + """ + The persons self-identified gender + """ + _inner_class_types = { + "ethnicity_details": EthnicityDetails, + "race_details": RaceDetails, + } + + class Verification(StripeObject): + class AdditionalDocument(StripeObject): + back: Optional[ExpandableField["File"]] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + details: Optional[str] + """ + A user-displayable string describing the verification state of this document. For example, if a document is uploaded and the picture is too fuzzy, this may say "Identity document is too unclear to read". + """ + details_code: Optional[str] + """ + One of `document_corrupt`, `document_country_not_supported`, `document_expired`, `document_failed_copy`, `document_failed_other`, `document_failed_test_mode`, `document_fraudulent`, `document_failed_greyscale`, `document_incomplete`, `document_invalid`, `document_manipulated`, `document_missing_back`, `document_missing_front`, `document_not_readable`, `document_not_uploaded`, `document_photo_mismatch`, `document_too_large`, or `document_type_not_supported`. A machine-readable code specifying the verification state for this document. + """ + front: Optional[ExpandableField["File"]] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + + class Document(StripeObject): + back: Optional[ExpandableField["File"]] + """ + The back of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + details: Optional[str] + """ + A user-displayable string describing the verification state of this document. For example, if a document is uploaded and the picture is too fuzzy, this may say "Identity document is too unclear to read". + """ + details_code: Optional[str] + """ + One of `document_corrupt`, `document_country_not_supported`, `document_expired`, `document_failed_copy`, `document_failed_other`, `document_failed_test_mode`, `document_fraudulent`, `document_failed_greyscale`, `document_incomplete`, `document_invalid`, `document_manipulated`, `document_missing_back`, `document_missing_front`, `document_not_readable`, `document_not_uploaded`, `document_photo_mismatch`, `document_too_large`, or `document_type_not_supported`. A machine-readable code specifying the verification state for this document. + """ + front: Optional[ExpandableField["File"]] + """ + The front of an ID returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + + additional_document: Optional[AdditionalDocument] + """ + A document showing address, either a passport, local ID card, or utility bill from a well-known utility company. + """ + details: Optional[str] + """ + A user-displayable string describing the verification state for the person. For example, this may say "Provided identity information could not be verified". + """ + details_code: Optional[str] + """ + One of `document_address_mismatch`, `document_dob_mismatch`, `document_duplicate_type`, `document_id_number_mismatch`, `document_name_mismatch`, `document_nationality_mismatch`, `failed_keyed_identity`, or `failed_other`. A machine-readable code specifying the verification state for the person. + """ + document: Optional[Document] + status: str + """ + The state of verification for the person. Possible values are `unverified`, `pending`, or `verified`. Please refer [guide](https://stripe.com/docs/connect/handling-api-verification) to handle verification updates. + """ + _inner_class_types = { + "additional_document": AdditionalDocument, + "document": Document, + } + + account: Optional[str] + """ + The account the person is associated with. + """ + additional_tos_acceptances: Optional[AdditionalTosAcceptances] + address: Optional[Address] + address_kana: Optional[AddressKana] + """ + The Kana variation of the person's address (Japan only). + """ + address_kanji: Optional[AddressKanji] + """ + The Kanji variation of the person's address (Japan only). + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + dob: Optional[Dob] + email: Optional[str] + """ + The person's email address. Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + first_name: Optional[str] + """ + The person's first name. Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + first_name_kana: Optional[str] + """ + The Kana variation of the person's first name (Japan only). Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + first_name_kanji: Optional[str] + """ + The Kanji variation of the person's first name (Japan only). Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + full_name_aliases: Optional[List[str]] + """ + A list of alternate names or aliases that the person is known by. Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + future_requirements: Optional[FutureRequirements] + """ + Information about the [upcoming new requirements for this person](https://stripe.com/docs/connect/custom-accounts/future-requirements), including what information needs to be collected, and by when. + """ + gender: Optional[str] + """ + The person's gender. + """ + id: str + """ + Unique identifier for the object. + """ + id_number_provided: Optional[bool] + """ + Whether the person's `id_number` was provided. True if either the full ID number was provided or if only the required part of the ID number was provided (ex. last four of an individual's SSN for the US indicated by `ssn_last_4_provided`). + """ + id_number_secondary_provided: Optional[bool] + """ + Whether the person's `id_number_secondary` was provided. + """ + last_name: Optional[str] + """ + The person's last name. Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + last_name_kana: Optional[str] + """ + The Kana variation of the person's last name (Japan only). Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + last_name_kanji: Optional[str] + """ + The Kanji variation of the person's last name (Japan only). Also available for accounts where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is `stripe`. + """ + maiden_name: Optional[str] + """ + The person's maiden name. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + nationality: Optional[str] + """ + The country where the person is a national. + """ + object: Literal["person"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + phone: Optional[str] + """ + The person's phone number. + """ + political_exposure: Optional[Literal["existing", "none"]] + """ + Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction. + """ + registered_address: Optional[RegisteredAddress] + relationship: Optional[Relationship] + requirements: Optional[Requirements] + """ + Information about the requirements for this person, including what information needs to be collected, and by when. + """ + ssn_last_4_provided: Optional[bool] + """ + Whether the last four digits of the person's Social Security number have been provided (U.S. only). + """ + us_cfpb_data: Optional[UsCfpbData] + """ + Demographic data related to the person. + """ + verification: Optional[Verification] + + def instance_url(self): + token = self.id + account = self.account + base = stripe.Account.class_url() + assert account is not None + acct_extn = sanitize_id(account) + extn = sanitize_id(token) + return "%s/%s/persons/%s" % (base, acct_extn, extn) + + @classmethod + def modify(cls, sid, **params): + raise NotImplementedError( + "Can't modify a person without an account ID. " + "Use stripe.Account.modify_person('account_id', 'person_id', ...) " + "(see https://stripe.com/docs/api/persons/update)." + ) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a person without an account ID. " + "Use stripe.Account.retrieve_person('account_id', 'person_id') " + "(see https://stripe.com/docs/api/persons/retrieve)." + ) + + _inner_class_types = { + "additional_tos_acceptances": AdditionalTosAcceptances, + "address": Address, + "address_kana": AddressKana, + "address_kanji": AddressKanji, + "dob": Dob, + "future_requirements": FutureRequirements, + "registered_address": RegisteredAddress, + "relationship": Relationship, + "requirements": Requirements, + "us_cfpb_data": UsCfpbData, + "verification": Verification, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_plan.py b/Backend/venv/lib/python3.12/site-packages/stripe/_plan.py new file mode 100644 index 00000000..644a5838 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_plan.py @@ -0,0 +1,375 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._product import Product + from stripe.params._plan_create_params import PlanCreateParams + from stripe.params._plan_delete_params import PlanDeleteParams + from stripe.params._plan_list_params import PlanListParams + from stripe.params._plan_modify_params import PlanModifyParams + from stripe.params._plan_retrieve_params import PlanRetrieveParams + + +class Plan( + CreateableAPIResource["Plan"], + DeletableAPIResource["Plan"], + ListableAPIResource["Plan"], + UpdateableAPIResource["Plan"], +): + """ + You can now model subscriptions more flexibly using the [Prices API](https://stripe.com/docs/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + + Plans define the base price, currency, and billing cycle for recurring purchases of products. + [Products](https://stripe.com/docs/api#products) help you track inventory or provisioning, and plans help you track pricing. Different physical goods or levels of service should be represented by products, and pricing options should be represented by plans. This approach lets you change prices without having to change your provisioning scheme. + + For example, you might have a single "gold" product that has plans for $10/month, $100/year, €9/month, and €90/year. + + Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription) and more about [products and prices](https://stripe.com/docs/products-prices/overview). + """ + + OBJECT_NAME: ClassVar[Literal["plan"]] = "plan" + + class Tier(StripeObject): + flat_amount: Optional[int] + """ + Price for the entire tier. + """ + flat_amount_decimal: Optional[str] + """ + Same as `flat_amount`, but contains a decimal value with at most 12 decimal places. + """ + unit_amount: Optional[int] + """ + Per unit price for units relevant to the tier. + """ + unit_amount_decimal: Optional[str] + """ + Same as `unit_amount`, but contains a decimal value with at most 12 decimal places. + """ + up_to: Optional[int] + """ + Up to and including to this quantity will be contained in the tier. + """ + + class TransformUsage(StripeObject): + divide_by: int + """ + Divide usage by this number. + """ + round: Literal["down", "up"] + """ + After division, either round the result `up` or `down`. + """ + + active: bool + """ + Whether the plan can be used for new purchases. + """ + amount: Optional[int] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a whole integer if possible. Only set if `billing_scheme=per_unit`. + """ + amount_decimal: Optional[str] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a decimal string with at most 12 decimal places. Only set if `billing_scheme=per_unit`. + """ + billing_scheme: Literal["per_unit", "tiered"] + """ + Describes how to compute the price per period. Either `per_unit` or `tiered`. `per_unit` indicates that the fixed amount (specified in `amount`) will be charged per unit in `quantity` (for plans with `usage_type=licensed`), or per unit of total usage (for plans with `usage_type=metered`). `tiered` indicates that the unit pricing will be computed using a tiering strategy as defined using the `tiers` and `tiers_mode` attributes. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + interval: Literal["day", "month", "week", "year"] + """ + The frequency at which a subscription is billed. One of `day`, `week`, `month` or `year`. + """ + interval_count: int + """ + The number of intervals (specified in the `interval` attribute) between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + meter: Optional[str] + """ + The meter tracking the usage of a metered price + """ + nickname: Optional[str] + """ + A brief description of the plan, hidden from customers. + """ + object: Literal["plan"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + product: Optional[ExpandableField["Product"]] + """ + The product whose pricing this plan determines. + """ + tiers: Optional[List[Tier]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + tiers_mode: Optional[Literal["graduated", "volume"]] + """ + Defines if the tiering price should be `graduated` or `volume` based. In `volume`-based tiering, the maximum quantity within a period determines the per unit price. In `graduated` tiering, pricing can change as the quantity grows. + """ + transform_usage: Optional[TransformUsage] + """ + Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with `tiers`. + """ + trial_period_days: Optional[int] + """ + Default number of trial days when subscribing a customer to this plan using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan). + """ + usage_type: Literal["licensed", "metered"] + """ + Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`. + """ + + @classmethod + def create(cls, **params: Unpack["PlanCreateParams"]) -> "Plan": + """ + You can now model subscriptions more flexibly using the [Prices API](https://docs.stripe.com/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + """ + return cast( + "Plan", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PlanCreateParams"] + ) -> "Plan": + """ + You can now model subscriptions more flexibly using the [Prices API](https://docs.stripe.com/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + """ + return cast( + "Plan", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Plan", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["PlanDeleteParams"]) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + ... + + @overload + def delete(self, **params: Unpack["PlanDeleteParams"]) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Plan", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PlanDeleteParams"] + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list(cls, **params: Unpack["PlanListParams"]) -> ListObject["Plan"]: + """ + Returns a list of your plans. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PlanListParams"] + ) -> ListObject["Plan"]: + """ + Returns a list of your plans. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["PlanModifyParams"]) -> "Plan": + """ + Updates the specified plan by setting the values of the parameters passed. Any parameters not provided are left unchanged. By design, you cannot change a plan's ID, amount, currency, or billing cycle. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Plan", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PlanModifyParams"] + ) -> "Plan": + """ + Updates the specified plan by setting the values of the parameters passed. Any parameters not provided are left unchanged. By design, you cannot change a plan's ID, amount, currency, or billing cycle. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Plan", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PlanRetrieveParams"] + ) -> "Plan": + """ + Retrieves the plan with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PlanRetrieveParams"] + ) -> "Plan": + """ + Retrieves the plan with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"tiers": Tier, "transform_usage": TransformUsage} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_plan_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_plan_service.py new file mode 100644 index 00000000..8bbdf730 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_plan_service.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._plan import Plan + from stripe._request_options import RequestOptions + from stripe.params._plan_create_params import PlanCreateParams + from stripe.params._plan_delete_params import PlanDeleteParams + from stripe.params._plan_list_params import PlanListParams + from stripe.params._plan_retrieve_params import PlanRetrieveParams + from stripe.params._plan_update_params import PlanUpdateParams + + +class PlanService(StripeService): + def delete( + self, + plan: str, + params: Optional["PlanDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + return cast( + "Plan", + self._request( + "delete", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + plan: str, + params: Optional["PlanDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Deleting plans means new subscribers can't be added. Existing subscribers aren't affected. + """ + return cast( + "Plan", + await self._request_async( + "delete", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + plan: str, + params: Optional["PlanRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Retrieves the plan with the given ID. + """ + return cast( + "Plan", + self._request( + "get", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + plan: str, + params: Optional["PlanRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Retrieves the plan with the given ID. + """ + return cast( + "Plan", + await self._request_async( + "get", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + plan: str, + params: Optional["PlanUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Updates the specified plan by setting the values of the parameters passed. Any parameters not provided are left unchanged. By design, you cannot change a plan's ID, amount, currency, or billing cycle. + """ + return cast( + "Plan", + self._request( + "post", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + plan: str, + params: Optional["PlanUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + Updates the specified plan by setting the values of the parameters passed. Any parameters not provided are left unchanged. By design, you cannot change a plan's ID, amount, currency, or billing cycle. + """ + return cast( + "Plan", + await self._request_async( + "post", + "/v1/plans/{plan}".format(plan=sanitize_id(plan)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["PlanListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Plan]": + """ + Returns a list of your plans. + """ + return cast( + "ListObject[Plan]", + self._request( + "get", + "/v1/plans", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PlanListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Plan]": + """ + Returns a list of your plans. + """ + return cast( + "ListObject[Plan]", + await self._request_async( + "get", + "/v1/plans", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PlanCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + You can now model subscriptions more flexibly using the [Prices API](https://docs.stripe.com/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + """ + return cast( + "Plan", + self._request( + "post", + "/v1/plans", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PlanCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Plan": + """ + You can now model subscriptions more flexibly using the [Prices API](https://docs.stripe.com/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + """ + return cast( + "Plan", + await self._request_async( + "post", + "/v1/plans", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_price.py b/Backend/venv/lib/python3.12/site-packages/stripe/_price.py new file mode 100644 index 00000000..5ba57213 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_price.py @@ -0,0 +1,436 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + cast, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._product import Product + from stripe.params._price_create_params import PriceCreateParams + from stripe.params._price_list_params import PriceListParams + from stripe.params._price_modify_params import PriceModifyParams + from stripe.params._price_retrieve_params import PriceRetrieveParams + from stripe.params._price_search_params import PriceSearchParams + + +class Price( + CreateableAPIResource["Price"], + ListableAPIResource["Price"], + SearchableAPIResource["Price"], + UpdateableAPIResource["Price"], +): + """ + Prices define the unit cost, currency, and (optional) billing cycle for both recurring and one-time purchases of products. + [Products](https://stripe.com/docs/api#products) help you track inventory or provisioning, and prices help you track payment terms. Different physical goods or levels of service should be represented by products, and pricing options should be represented by prices. This approach lets you change prices without having to change your provisioning scheme. + + For example, you might have a single "gold" product that has prices for $10/month, $100/year, and €9 once. + + Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription), [create an invoice](https://stripe.com/docs/billing/invoices/create), and more about [products and prices](https://stripe.com/docs/products-prices/overview). + """ + + OBJECT_NAME: ClassVar[Literal["price"]] = "price" + + class CurrencyOptions(StripeObject): + class CustomUnitAmount(StripeObject): + maximum: Optional[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: Optional[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: Optional[int] + """ + The starting unit amount which can be updated by the customer. + """ + + class Tier(StripeObject): + flat_amount: Optional[int] + """ + Price for the entire tier. + """ + flat_amount_decimal: Optional[str] + """ + Same as `flat_amount`, but contains a decimal value with at most 12 decimal places. + """ + unit_amount: Optional[int] + """ + Per unit price for units relevant to the tier. + """ + unit_amount_decimal: Optional[str] + """ + Same as `unit_amount`, but contains a decimal value with at most 12 decimal places. + """ + up_to: Optional[int] + """ + Up to and including to this quantity will be contained in the tier. + """ + + custom_unit_amount: Optional[CustomUnitAmount] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + tax_behavior: Optional[ + Literal["exclusive", "inclusive", "unspecified"] + ] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: Optional[List[Tier]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + unit_amount: Optional[int] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a whole integer if possible. Only set if `billing_scheme=per_unit`. + """ + unit_amount_decimal: Optional[str] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a decimal string with at most 12 decimal places. Only set if `billing_scheme=per_unit`. + """ + _inner_class_types = { + "custom_unit_amount": CustomUnitAmount, + "tiers": Tier, + } + + class CustomUnitAmount(StripeObject): + maximum: Optional[int] + """ + The maximum unit amount the customer can specify for this item. + """ + minimum: Optional[int] + """ + The minimum unit amount the customer can specify for this item. Must be at least the minimum charge amount. + """ + preset: Optional[int] + """ + The starting unit amount which can be updated by the customer. + """ + + class Recurring(StripeObject): + interval: Literal["day", "month", "week", "year"] + """ + The frequency at which a subscription is billed. One of `day`, `week`, `month` or `year`. + """ + interval_count: int + """ + The number of intervals (specified in the `interval` attribute) between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. + """ + meter: Optional[str] + """ + The meter tracking the usage of a metered price + """ + trial_period_days: Optional[int] + """ + Default number of trial days when subscribing a customer to this price using [`trial_from_plan=true`](https://stripe.com/docs/api#create_subscription-trial_from_plan). + """ + usage_type: Literal["licensed", "metered"] + """ + Configures how the quantity per period should be determined. Can be either `metered` or `licensed`. `licensed` automatically bills the `quantity` set when adding it to a subscription. `metered` aggregates the total usage based on usage records. Defaults to `licensed`. + """ + + class Tier(StripeObject): + flat_amount: Optional[int] + """ + Price for the entire tier. + """ + flat_amount_decimal: Optional[str] + """ + Same as `flat_amount`, but contains a decimal value with at most 12 decimal places. + """ + unit_amount: Optional[int] + """ + Per unit price for units relevant to the tier. + """ + unit_amount_decimal: Optional[str] + """ + Same as `unit_amount`, but contains a decimal value with at most 12 decimal places. + """ + up_to: Optional[int] + """ + Up to and including to this quantity will be contained in the tier. + """ + + class TransformQuantity(StripeObject): + divide_by: int + """ + Divide usage by this number. + """ + round: Literal["down", "up"] + """ + After division, either round the result `up` or `down`. + """ + + active: bool + """ + Whether the price can be used for new purchases. + """ + billing_scheme: Literal["per_unit", "tiered"] + """ + Describes how to compute the price per period. Either `per_unit` or `tiered`. `per_unit` indicates that the fixed amount (specified in `unit_amount` or `unit_amount_decimal`) will be charged per unit in `quantity` (for prices with `usage_type=licensed`), or per unit of total usage (for prices with `usage_type=metered`). `tiered` indicates that the unit pricing will be computed using a tiering strategy as defined using the `tiers` and `tiers_mode` attributes. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: Optional[Dict[str, CurrencyOptions]] + """ + Prices defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + custom_unit_amount: Optional[CustomUnitAmount] + """ + When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + lookup_key: Optional[str] + """ + A lookup key used to retrieve prices dynamically from a static string. This may be up to 200 characters. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + nickname: Optional[str] + """ + A brief description of the price, hidden from customers. + """ + object: Literal["price"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + product: ExpandableField["Product"] + """ + The ID of the product this price is associated with. + """ + recurring: Optional[Recurring] + """ + The recurring components of a price such as `interval` and `usage_type`. + """ + tax_behavior: Optional[Literal["exclusive", "inclusive", "unspecified"]] + """ + Only required if a [default tax behavior](https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)) was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. Once specified as either `inclusive` or `exclusive`, it cannot be changed. + """ + tiers: Optional[List[Tier]] + """ + Each element represents a pricing tier. This parameter requires `billing_scheme` to be set to `tiered`. See also the documentation for `billing_scheme`. + """ + tiers_mode: Optional[Literal["graduated", "volume"]] + """ + Defines if the tiering price should be `graduated` or `volume` based. In `volume`-based tiering, the maximum quantity within a period determines the per unit price. In `graduated` tiering, pricing can change as the quantity grows. + """ + transform_quantity: Optional[TransformQuantity] + """ + Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with `tiers`. + """ + type: Literal["one_time", "recurring"] + """ + One of `one_time` or `recurring` depending on whether the price is for a one-time purchase or a recurring (subscription) purchase. + """ + unit_amount: Optional[int] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a whole integer if possible. Only set if `billing_scheme=per_unit`. + """ + unit_amount_decimal: Optional[str] + """ + The unit amount in cents (or local equivalent) to be charged, represented as a decimal string with at most 12 decimal places. Only set if `billing_scheme=per_unit`. + """ + + @classmethod + def create(cls, **params: Unpack["PriceCreateParams"]) -> "Price": + """ + Creates a new [Price for an existing Product](https://docs.stripe.com/api/prices). The Price can be recurring or one-time. + """ + return cast( + "Price", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PriceCreateParams"] + ) -> "Price": + """ + Creates a new [Price for an existing Product](https://docs.stripe.com/api/prices). The Price can be recurring or one-time. + """ + return cast( + "Price", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["PriceListParams"]) -> ListObject["Price"]: + """ + Returns a list of your active prices, excluding [inline prices](https://docs.stripe.com/docs/products-prices/pricing-models#inline-pricing). For the list of inactive prices, set active to false. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PriceListParams"] + ) -> ListObject["Price"]: + """ + Returns a list of your active prices, excluding [inline prices](https://docs.stripe.com/docs/products-prices/pricing-models#inline-pricing). For the list of inactive prices, set active to false. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["PriceModifyParams"]) -> "Price": + """ + Updates the specified price by setting the values of the parameters passed. Any parameters not provided are left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Price", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PriceModifyParams"] + ) -> "Price": + """ + Updates the specified price by setting the values of the parameters passed. Any parameters not provided are left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Price", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PriceRetrieveParams"] + ) -> "Price": + """ + Retrieves the price with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PriceRetrieveParams"] + ) -> "Price": + """ + Retrieves the price with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def search( + cls, *args, **kwargs: Unpack["PriceSearchParams"] + ) -> SearchResultObject["Price"]: + """ + Search for prices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search(search_url="/v1/prices/search", *args, **kwargs) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["PriceSearchParams"] + ) -> SearchResultObject["Price"]: + """ + Search for prices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/prices/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["PriceSearchParams"] + ) -> Iterator["Price"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["PriceSearchParams"] + ) -> AsyncIterator["Price"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + _inner_class_types = { + "currency_options": CurrencyOptions, + "custom_unit_amount": CustomUnitAmount, + "recurring": Recurring, + "tiers": Tier, + "transform_quantity": TransformQuantity, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_price_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_price_service.py new file mode 100644 index 00000000..5207dda3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_price_service.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._price import Price + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._price_create_params import PriceCreateParams + from stripe.params._price_list_params import PriceListParams + from stripe.params._price_retrieve_params import PriceRetrieveParams + from stripe.params._price_search_params import PriceSearchParams + from stripe.params._price_update_params import PriceUpdateParams + + +class PriceService(StripeService): + def list( + self, + params: Optional["PriceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Price]": + """ + Returns a list of your active prices, excluding [inline prices](https://docs.stripe.com/docs/products-prices/pricing-models#inline-pricing). For the list of inactive prices, set active to false. + """ + return cast( + "ListObject[Price]", + self._request( + "get", + "/v1/prices", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PriceListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Price]": + """ + Returns a list of your active prices, excluding [inline prices](https://docs.stripe.com/docs/products-prices/pricing-models#inline-pricing). For the list of inactive prices, set active to false. + """ + return cast( + "ListObject[Price]", + await self._request_async( + "get", + "/v1/prices", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PriceCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Creates a new [Price for an existing Product](https://docs.stripe.com/api/prices). The Price can be recurring or one-time. + """ + return cast( + "Price", + self._request( + "post", + "/v1/prices", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PriceCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Creates a new [Price for an existing Product](https://docs.stripe.com/api/prices). The Price can be recurring or one-time. + """ + return cast( + "Price", + await self._request_async( + "post", + "/v1/prices", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + price: str, + params: Optional["PriceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Retrieves the price with the given ID. + """ + return cast( + "Price", + self._request( + "get", + "/v1/prices/{price}".format(price=sanitize_id(price)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + price: str, + params: Optional["PriceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Retrieves the price with the given ID. + """ + return cast( + "Price", + await self._request_async( + "get", + "/v1/prices/{price}".format(price=sanitize_id(price)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + price: str, + params: Optional["PriceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Updates the specified price by setting the values of the parameters passed. Any parameters not provided are left unchanged. + """ + return cast( + "Price", + self._request( + "post", + "/v1/prices/{price}".format(price=sanitize_id(price)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + price: str, + params: Optional["PriceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Price": + """ + Updates the specified price by setting the values of the parameters passed. Any parameters not provided are left unchanged. + """ + return cast( + "Price", + await self._request_async( + "post", + "/v1/prices/{price}".format(price=sanitize_id(price)), + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "PriceSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Price]": + """ + Search for prices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Price]", + self._request( + "get", + "/v1/prices/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "PriceSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Price]": + """ + Search for prices you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Price]", + await self._request_async( + "get", + "/v1/prices/search", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_product.py b/Backend/venv/lib/python3.12/site-packages/stripe/_product.py new file mode 100644 index 00000000..aa29a9ea --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_product.py @@ -0,0 +1,593 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + cast, + overload, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._price import Price + from stripe._product_feature import ProductFeature + from stripe._tax_code import TaxCode + from stripe.params._product_create_feature_params import ( + ProductCreateFeatureParams, + ) + from stripe.params._product_create_params import ProductCreateParams + from stripe.params._product_delete_feature_params import ( + ProductDeleteFeatureParams, + ) + from stripe.params._product_delete_params import ProductDeleteParams + from stripe.params._product_list_features_params import ( + ProductListFeaturesParams, + ) + from stripe.params._product_list_params import ProductListParams + from stripe.params._product_modify_params import ProductModifyParams + from stripe.params._product_retrieve_feature_params import ( + ProductRetrieveFeatureParams, + ) + from stripe.params._product_retrieve_params import ProductRetrieveParams + from stripe.params._product_search_params import ProductSearchParams + + +@nested_resource_class_methods("feature") +class Product( + CreateableAPIResource["Product"], + DeletableAPIResource["Product"], + ListableAPIResource["Product"], + SearchableAPIResource["Product"], + UpdateableAPIResource["Product"], +): + """ + Products describe the specific goods or services you offer to your customers. + For example, you might offer a Standard and Premium version of your goods or service; each version would be a separate Product. + They can be used in conjunction with [Prices](https://stripe.com/docs/api#prices) to configure pricing in Payment Links, Checkout, and Subscriptions. + + Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription), + [share a Payment Link](https://stripe.com/docs/payment-links), + [accept payments with Checkout](https://stripe.com/docs/payments/accept-a-payment#create-product-prices-upfront), + and more about [Products and Prices](https://stripe.com/docs/products-prices/overview) + """ + + OBJECT_NAME: ClassVar[Literal["product"]] = "product" + + class MarketingFeature(StripeObject): + name: Optional[str] + """ + The marketing feature name. Up to 80 characters long. + """ + + class PackageDimensions(StripeObject): + height: float + """ + Height, in inches. + """ + length: float + """ + Length, in inches. + """ + weight: float + """ + Weight, in ounces. + """ + width: float + """ + Width, in inches. + """ + + active: bool + """ + Whether the product is currently available for purchase. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + default_price: Optional[ExpandableField["Price"]] + """ + The ID of the [Price](https://stripe.com/docs/api/prices) object that is the default price for this product. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + description: Optional[str] + """ + The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. + """ + id: str + """ + Unique identifier for the object. + """ + images: List[str] + """ + A list of up to 8 URLs of images for this product, meant to be displayable to the customer. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + marketing_features: List[MarketingFeature] + """ + A list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://stripe.com/docs/payments/checkout/pricing-table). + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: str + """ + The product's name, meant to be displayable to the customer. + """ + object: Literal["product"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + package_dimensions: Optional[PackageDimensions] + """ + The dimensions of this product for shipping purposes. + """ + shippable: Optional[bool] + """ + Whether this product is shipped (i.e., physical goods). + """ + statement_descriptor: Optional[str] + """ + Extra information about a product which will appear on your customer's credit card statement. In the case that multiple products are billed at once, the first statement descriptor will be used. Only used for subscription payments. + """ + tax_code: Optional[ExpandableField["TaxCode"]] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. + """ + type: Literal["good", "service"] + """ + The type of the product. The product is either of type `good`, which is eligible for use with Orders and SKUs, or `service`, which is eligible for use with Subscriptions and Plans. + """ + unit_label: Optional[str] + """ + A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. + """ + updated: int + """ + Time at which the object was last updated. Measured in seconds since the Unix epoch. + """ + url: Optional[str] + """ + A URL of a publicly-accessible webpage for this product. + """ + + @classmethod + def create(cls, **params: Unpack["ProductCreateParams"]) -> "Product": + """ + Creates a new product object. + """ + return cast( + "Product", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ProductCreateParams"] + ) -> "Product": + """ + Creates a new product object. + """ + return cast( + "Product", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Product", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["ProductDeleteParams"]) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + ... + + @overload + def delete(self, **params: Unpack["ProductDeleteParams"]) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "Product", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ProductDeleteParams"] + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["ProductListParams"] + ) -> ListObject["Product"]: + """ + Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ProductListParams"] + ) -> ListObject["Product"]: + """ + Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ProductModifyParams"] + ) -> "Product": + """ + Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Product", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ProductModifyParams"] + ) -> "Product": + """ + Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Product", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ProductRetrieveParams"] + ) -> "Product": + """ + Retrieves the details of an existing product. Supply the unique product ID from either a product creation request or the product list, and Stripe will return the corresponding product information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ProductRetrieveParams"] + ) -> "Product": + """ + Retrieves the details of an existing product. Supply the unique product ID from either a product creation request or the product list, and Stripe will return the corresponding product information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def search( + cls, *args, **kwargs: Unpack["ProductSearchParams"] + ) -> SearchResultObject["Product"]: + """ + Search for products you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search(search_url="/v1/products/search", *args, **kwargs) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["ProductSearchParams"] + ) -> SearchResultObject["Product"]: + """ + Search for products you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/products/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["ProductSearchParams"] + ) -> Iterator["Product"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["ProductSearchParams"] + ) -> AsyncIterator["Product"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + @classmethod + def delete_feature( + cls, + product: str, + id: str, + **params: Unpack["ProductDeleteFeatureParams"], + ) -> "ProductFeature": + """ + Deletes the feature attachment to a product + """ + return cast( + "ProductFeature", + cls._static_request( + "delete", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def delete_feature_async( + cls, + product: str, + id: str, + **params: Unpack["ProductDeleteFeatureParams"], + ) -> "ProductFeature": + """ + Deletes the feature attachment to a product + """ + return cast( + "ProductFeature", + await cls._static_request_async( + "delete", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def retrieve_feature( + cls, + product: str, + id: str, + **params: Unpack["ProductRetrieveFeatureParams"], + ) -> "ProductFeature": + """ + Retrieves a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + cls._static_request( + "get", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_feature_async( + cls, + product: str, + id: str, + **params: Unpack["ProductRetrieveFeatureParams"], + ) -> "ProductFeature": + """ + Retrieves a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + await cls._static_request_async( + "get", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def list_features( + cls, product: str, **params: Unpack["ProductListFeaturesParams"] + ) -> ListObject["ProductFeature"]: + """ + Retrieve a list of features for a product + """ + return cast( + ListObject["ProductFeature"], + cls._static_request( + "get", + "/v1/products/{product}/features".format( + product=sanitize_id(product) + ), + params=params, + ), + ) + + @classmethod + async def list_features_async( + cls, product: str, **params: Unpack["ProductListFeaturesParams"] + ) -> ListObject["ProductFeature"]: + """ + Retrieve a list of features for a product + """ + return cast( + ListObject["ProductFeature"], + await cls._static_request_async( + "get", + "/v1/products/{product}/features".format( + product=sanitize_id(product) + ), + params=params, + ), + ) + + @classmethod + def create_feature( + cls, product: str, **params: Unpack["ProductCreateFeatureParams"] + ) -> "ProductFeature": + """ + Creates a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + cls._static_request( + "post", + "/v1/products/{product}/features".format( + product=sanitize_id(product) + ), + params=params, + ), + ) + + @classmethod + async def create_feature_async( + cls, product: str, **params: Unpack["ProductCreateFeatureParams"] + ) -> "ProductFeature": + """ + Creates a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + await cls._static_request_async( + "post", + "/v1/products/{product}/features".format( + product=sanitize_id(product) + ), + params=params, + ), + ) + + _inner_class_types = { + "marketing_features": MarketingFeature, + "package_dimensions": PackageDimensions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature.py b/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature.py new file mode 100644 index 00000000..322a8367 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.entitlements._feature import Feature + + +class ProductFeature(StripeObject): + """ + A product_feature represents an attachment between a feature and a product. + When a product is purchased that has a feature attached, Stripe will create an entitlement to the feature for the purchasing customer. + """ + + OBJECT_NAME: ClassVar[Literal["product_feature"]] = "product_feature" + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + entitlement_feature: "Feature" + """ + A feature represents a monetizable ability or functionality in your system. + Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["product_feature"] + """ + String representing the object's type. Objects of the same type share the same value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature_service.py new file mode 100644 index 00000000..3eeba56f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_product_feature_service.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._product_feature import ProductFeature + from stripe._request_options import RequestOptions + from stripe.params._product_feature_create_params import ( + ProductFeatureCreateParams, + ) + from stripe.params._product_feature_delete_params import ( + ProductFeatureDeleteParams, + ) + from stripe.params._product_feature_list_params import ( + ProductFeatureListParams, + ) + from stripe.params._product_feature_retrieve_params import ( + ProductFeatureRetrieveParams, + ) + + +class ProductFeatureService(StripeService): + def delete( + self, + product: str, + id: str, + params: Optional["ProductFeatureDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Deletes the feature attachment to a product + """ + return cast( + "ProductFeature", + self._request( + "delete", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + product: str, + id: str, + params: Optional["ProductFeatureDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Deletes the feature attachment to a product + """ + return cast( + "ProductFeature", + await self._request_async( + "delete", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + product: str, + id: str, + params: Optional["ProductFeatureRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Retrieves a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + self._request( + "get", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + product: str, + id: str, + params: Optional["ProductFeatureRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Retrieves a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + await self._request_async( + "get", + "/v1/products/{product}/features/{id}".format( + product=sanitize_id(product), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + product: str, + params: Optional["ProductFeatureListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ProductFeature]": + """ + Retrieve a list of features for a product + """ + return cast( + "ListObject[ProductFeature]", + self._request( + "get", + "/v1/products/{product}/features".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + product: str, + params: Optional["ProductFeatureListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ProductFeature]": + """ + Retrieve a list of features for a product + """ + return cast( + "ListObject[ProductFeature]", + await self._request_async( + "get", + "/v1/products/{product}/features".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + product: str, + params: "ProductFeatureCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Creates a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + self._request( + "post", + "/v1/products/{product}/features".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + product: str, + params: "ProductFeatureCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ProductFeature": + """ + Creates a product_feature, which represents a feature attachment to a product + """ + return cast( + "ProductFeature", + await self._request_async( + "post", + "/v1/products/{product}/features".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_product_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_product_service.py new file mode 100644 index 00000000..c5eebca3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_product_service.py @@ -0,0 +1,287 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._product import Product + from stripe._product_feature_service import ProductFeatureService + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe.params._product_create_params import ProductCreateParams + from stripe.params._product_delete_params import ProductDeleteParams + from stripe.params._product_list_params import ProductListParams + from stripe.params._product_retrieve_params import ProductRetrieveParams + from stripe.params._product_search_params import ProductSearchParams + from stripe.params._product_update_params import ProductUpdateParams + +_subservices = { + "features": ["stripe._product_feature_service", "ProductFeatureService"], +} + + +class ProductService(StripeService): + features: "ProductFeatureService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def delete( + self, + id: str, + params: Optional["ProductDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + return cast( + "Product", + self._request( + "delete", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + id: str, + params: Optional["ProductDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Delete a product. Deleting a product is only possible if it has no prices associated with it. Additionally, deleting a product with type=good is only possible if it has no SKUs associated with it. + """ + return cast( + "Product", + await self._request_async( + "delete", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["ProductRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Retrieves the details of an existing product. Supply the unique product ID from either a product creation request or the product list, and Stripe will return the corresponding product information. + """ + return cast( + "Product", + self._request( + "get", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["ProductRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Retrieves the details of an existing product. Supply the unique product ID from either a product creation request or the product list, and Stripe will return the corresponding product information. + """ + return cast( + "Product", + await self._request_async( + "get", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["ProductUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Product", + self._request( + "post", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["ProductUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Updates the specific product by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Product", + await self._request_async( + "post", + "/v1/products/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["ProductListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Product]": + """ + Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first. + """ + return cast( + "ListObject[Product]", + self._request( + "get", + "/v1/products", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ProductListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Product]": + """ + Returns a list of your products. The products are returned sorted by creation date, with the most recently created products appearing first. + """ + return cast( + "ListObject[Product]", + await self._request_async( + "get", + "/v1/products", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ProductCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Creates a new product object. + """ + return cast( + "Product", + self._request( + "post", + "/v1/products", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ProductCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Creates a new product object. + """ + return cast( + "Product", + await self._request_async( + "post", + "/v1/products", + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "ProductSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Product]": + """ + Search for products you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Product]", + self._request( + "get", + "/v1/products/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "ProductSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Product]": + """ + Search for products you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Product]", + await self._request_async( + "get", + "/v1/products/search", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code.py b/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code.py new file mode 100644 index 00000000..d97e75de --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code.py @@ -0,0 +1,256 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._coupon import Coupon + from stripe._customer import Customer + from stripe.params._promotion_code_create_params import ( + PromotionCodeCreateParams, + ) + from stripe.params._promotion_code_list_params import ( + PromotionCodeListParams, + ) + from stripe.params._promotion_code_modify_params import ( + PromotionCodeModifyParams, + ) + from stripe.params._promotion_code_retrieve_params import ( + PromotionCodeRetrieveParams, + ) + + +class PromotionCode( + CreateableAPIResource["PromotionCode"], + ListableAPIResource["PromotionCode"], + UpdateableAPIResource["PromotionCode"], +): + """ + A Promotion Code represents a customer-redeemable code for an underlying promotion. + You can create multiple codes for a single promotion. + + If you enable promotion codes in your [customer portal configuration](https://stripe.com/docs/customer-management/configure-portal), then customers can redeem a code themselves when updating a subscription in the portal. + Customers can also view the currently active promotion codes and coupons on each of their subscriptions in the portal. + """ + + OBJECT_NAME: ClassVar[Literal["promotion_code"]] = "promotion_code" + + class Promotion(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + If promotion `type` is `coupon`, the coupon for this promotion. + """ + type: Literal["coupon"] + """ + The type of promotion. + """ + + class Restrictions(StripeObject): + class CurrencyOptions(StripeObject): + minimum_amount: int + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ + + currency_options: Optional[Dict[str, CurrencyOptions]] + """ + Promotion code restrictions defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + first_time_transaction: bool + """ + A Boolean indicating if the Promotion Code should only be redeemed for Customers without any successful payments or invoices + """ + minimum_amount: Optional[int] + """ + Minimum amount required to redeem this Promotion Code into a Coupon (e.g., a purchase must be $100 or more to work). + """ + minimum_amount_currency: Optional[str] + """ + Three-letter [ISO code](https://stripe.com/docs/currencies) for minimum_amount + """ + _inner_class_types = {"currency_options": CurrencyOptions} + _inner_class_dicts = ["currency_options"] + + active: bool + """ + Whether the promotion code is currently active. A promotion code is only active if the coupon is also valid. + """ + code: str + """ + The customer-facing code. Regardless of case, this code must be unique across all active promotion codes for each customer. Valid characters are lower case letters (a-z), upper case letters (A-Z), and digits (0-9). + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The customer that this promotion code can be used by. + """ + expires_at: Optional[int] + """ + Date at which the promotion code can no longer be redeemed. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + max_redemptions: Optional[int] + """ + Maximum number of times this promotion code can be redeemed. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["promotion_code"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + promotion: Promotion + restrictions: Restrictions + times_redeemed: int + """ + Number of times this promotion code has been used. + """ + + @classmethod + def create( + cls, **params: Unpack["PromotionCodeCreateParams"] + ) -> "PromotionCode": + """ + A promotion code points to an underlying promotion. You can optionally restrict the code to a specific customer, redemption limit, and expiration date. + """ + return cast( + "PromotionCode", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PromotionCodeCreateParams"] + ) -> "PromotionCode": + """ + A promotion code points to an underlying promotion. You can optionally restrict the code to a specific customer, redemption limit, and expiration date. + """ + return cast( + "PromotionCode", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PromotionCodeListParams"] + ) -> ListObject["PromotionCode"]: + """ + Returns a list of your promotion codes. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PromotionCodeListParams"] + ) -> ListObject["PromotionCode"]: + """ + Returns a list of your promotion codes. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PromotionCodeModifyParams"] + ) -> "PromotionCode": + """ + Updates the specified promotion code by setting the values of the parameters passed. Most fields are, by design, not editable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PromotionCode", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PromotionCodeModifyParams"] + ) -> "PromotionCode": + """ + Updates the specified promotion code by setting the values of the parameters passed. Most fields are, by design, not editable. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PromotionCode", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PromotionCodeRetrieveParams"] + ) -> "PromotionCode": + """ + Retrieves the promotion code with the given ID. In order to retrieve a promotion code by the customer-facing code use [list](https://docs.stripe.com/docs/api/promotion_codes/list) with the desired code. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PromotionCodeRetrieveParams"] + ) -> "PromotionCode": + """ + Retrieves the promotion code with the given ID. In order to retrieve a promotion code by the customer-facing code use [list](https://docs.stripe.com/docs/api/promotion_codes/list) with the desired code. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"promotion": Promotion, "restrictions": Restrictions} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code_service.py new file mode 100644 index 00000000..b8aaa445 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_promotion_code_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._promotion_code import PromotionCode + from stripe._request_options import RequestOptions + from stripe.params._promotion_code_create_params import ( + PromotionCodeCreateParams, + ) + from stripe.params._promotion_code_list_params import ( + PromotionCodeListParams, + ) + from stripe.params._promotion_code_retrieve_params import ( + PromotionCodeRetrieveParams, + ) + from stripe.params._promotion_code_update_params import ( + PromotionCodeUpdateParams, + ) + + +class PromotionCodeService(StripeService): + def list( + self, + params: Optional["PromotionCodeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PromotionCode]": + """ + Returns a list of your promotion codes. + """ + return cast( + "ListObject[PromotionCode]", + self._request( + "get", + "/v1/promotion_codes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PromotionCodeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PromotionCode]": + """ + Returns a list of your promotion codes. + """ + return cast( + "ListObject[PromotionCode]", + await self._request_async( + "get", + "/v1/promotion_codes", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PromotionCodeCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + A promotion code points to an underlying promotion. You can optionally restrict the code to a specific customer, redemption limit, and expiration date. + """ + return cast( + "PromotionCode", + self._request( + "post", + "/v1/promotion_codes", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PromotionCodeCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + A promotion code points to an underlying promotion. You can optionally restrict the code to a specific customer, redemption limit, and expiration date. + """ + return cast( + "PromotionCode", + await self._request_async( + "post", + "/v1/promotion_codes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + promotion_code: str, + params: Optional["PromotionCodeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + Retrieves the promotion code with the given ID. In order to retrieve a promotion code by the customer-facing code use [list](https://docs.stripe.com/docs/api/promotion_codes/list) with the desired code. + """ + return cast( + "PromotionCode", + self._request( + "get", + "/v1/promotion_codes/{promotion_code}".format( + promotion_code=sanitize_id(promotion_code), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + promotion_code: str, + params: Optional["PromotionCodeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + Retrieves the promotion code with the given ID. In order to retrieve a promotion code by the customer-facing code use [list](https://docs.stripe.com/docs/api/promotion_codes/list) with the desired code. + """ + return cast( + "PromotionCode", + await self._request_async( + "get", + "/v1/promotion_codes/{promotion_code}".format( + promotion_code=sanitize_id(promotion_code), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + promotion_code: str, + params: Optional["PromotionCodeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + Updates the specified promotion code by setting the values of the parameters passed. Most fields are, by design, not editable. + """ + return cast( + "PromotionCode", + self._request( + "post", + "/v1/promotion_codes/{promotion_code}".format( + promotion_code=sanitize_id(promotion_code), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + promotion_code: str, + params: Optional["PromotionCodeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PromotionCode": + """ + Updates the specified promotion code by setting the values of the parameters passed. Most fields are, by design, not editable. + """ + return cast( + "PromotionCode", + await self._request_async( + "post", + "/v1/promotion_codes/{promotion_code}".format( + promotion_code=sanitize_id(promotion_code), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_quote.py b/Backend/venv/lib/python3.12/site-packages/stripe/_quote.py new file mode 100644 index 00000000..7319501a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_quote.py @@ -0,0 +1,1344 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import Any, ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._customer import Customer + from stripe._discount import Discount as DiscountResource + from stripe._invoice import Invoice + from stripe._line_item import LineItem + from stripe._subscription import Subscription + from stripe._subscription_schedule import SubscriptionSchedule + from stripe._tax_rate import TaxRate + from stripe.params._quote_accept_params import QuoteAcceptParams + from stripe.params._quote_cancel_params import QuoteCancelParams + from stripe.params._quote_create_params import QuoteCreateParams + from stripe.params._quote_finalize_quote_params import ( + QuoteFinalizeQuoteParams, + ) + from stripe.params._quote_list_computed_upfront_line_items_params import ( + QuoteListComputedUpfrontLineItemsParams, + ) + from stripe.params._quote_list_line_items_params import ( + QuoteListLineItemsParams, + ) + from stripe.params._quote_list_params import QuoteListParams + from stripe.params._quote_modify_params import QuoteModifyParams + from stripe.params._quote_pdf_params import QuotePdfParams + from stripe.params._quote_retrieve_params import QuoteRetrieveParams + from stripe.test_helpers._test_clock import TestClock + + +class Quote( + CreateableAPIResource["Quote"], + ListableAPIResource["Quote"], + UpdateableAPIResource["Quote"], +): + """ + A Quote is a way to model prices that you'd like to provide to a customer. + Once accepted, it will automatically create an invoice, subscription or subscription schedule. + """ + + OBJECT_NAME: ClassVar[Literal["quote"]] = "quote" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + enabled: bool + """ + Automatically calculate taxes + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + provider: Optional[str] + """ + The tax provider powering automatic tax. + """ + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + """ + The status of the most recent automated tax calculation for this quote. + """ + _inner_class_types = {"liability": Liability} + + class Computed(StripeObject): + class Recurring(StripeObject): + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + """ + The amount discounted. + """ + discount: "DiscountResource" + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + discounts: List[Discount] + """ + The aggregated discounts. + """ + taxes: List[Tax] + """ + The aggregated tax amounts by rate. + """ + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + """ + This is the sum of all the discounts. + """ + amount_shipping: Optional[int] + """ + This is the sum of all the shipping amounts. + """ + amount_tax: int + """ + This is the sum of all the tax amounts. + """ + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + amount_subtotal: int + """ + Total before any discounts or taxes are applied. + """ + amount_total: int + """ + Total after discounts and taxes are applied. + """ + interval: Literal["day", "month", "week", "year"] + """ + The frequency at which a subscription is billed. One of `day`, `week`, `month` or `year`. + """ + interval_count: int + """ + The number of intervals (specified in the `interval` attribute) between subscription billings. For example, `interval=month` and `interval_count=3` bills every 3 months. + """ + total_details: TotalDetails + _inner_class_types = {"total_details": TotalDetails} + + class Upfront(StripeObject): + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + """ + The amount discounted. + """ + discount: "DiscountResource" + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + discounts: List[Discount] + """ + The aggregated discounts. + """ + taxes: List[Tax] + """ + The aggregated tax amounts by rate. + """ + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + """ + This is the sum of all the discounts. + """ + amount_shipping: Optional[int] + """ + This is the sum of all the shipping amounts. + """ + amount_tax: int + """ + This is the sum of all the tax amounts. + """ + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + amount_subtotal: int + """ + Total before any discounts or taxes are applied. + """ + amount_total: int + """ + Total after discounts and taxes are applied. + """ + line_items: Optional[ListObject["LineItem"]] + """ + The line items that will appear on the next invoice after this quote is accepted. This does not include pending invoice items that exist on the customer but may still be included in the next invoice. + """ + total_details: TotalDetails + _inner_class_types = {"total_details": TotalDetails} + + recurring: Optional[Recurring] + """ + The definitive totals and line items the customer will be charged on a recurring basis. Takes into account the line items with recurring prices and discounts with `duration=forever` coupons only. Defaults to `null` if no inputted line items with recurring prices. + """ + upfront: Upfront + _inner_class_types = {"recurring": Recurring, "upfront": Upfront} + + class FromQuote(StripeObject): + is_revision: bool + """ + Whether this quote is a revision of a different quote. + """ + quote: ExpandableField["Quote"] + """ + The quote that was cloned. + """ + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + days_until_due: Optional[int] + """ + Number of days within which a customer must pay invoices generated by this quote. This value will be `null` for quotes where `collection_method=charge_automatically`. + """ + issuer: Issuer + _inner_class_types = {"issuer": Issuer} + + class StatusTransitions(StripeObject): + accepted_at: Optional[int] + """ + The time that the quote was accepted. Measured in seconds since Unix epoch. + """ + canceled_at: Optional[int] + """ + The time that the quote was canceled. Measured in seconds since Unix epoch. + """ + finalized_at: Optional[int] + """ + The time that the quote was finalized. Measured in seconds since Unix epoch. + """ + + class SubscriptionData(StripeObject): + class BillingMode(StripeObject): + class Flexible(StripeObject): + proration_discounts: Optional[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + flexible: Optional[Flexible] + type: Literal["classic", "flexible"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + _inner_class_types = {"flexible": Flexible} + + billing_mode: BillingMode + """ + The billing mode of the quote. + """ + description: Optional[str] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + effective_date: Optional[int] + """ + When creating a new subscription, the date of which the subscription schedule will start after the quote is accepted. This date is ignored if it is in the past when the quote is accepted. Measured in seconds since the Unix epoch. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that will set metadata on the subscription or subscription schedule when the quote is accepted. If a recurring price is included in `line_items`, this field will be passed to the resulting subscription's `metadata` field. If `subscription_data.effective_date` is used, this field will be passed to the resulting subscription schedule's `phases.metadata` field. Unlike object-level metadata, this field is declarative. Updates will clear prior values. + """ + trial_period_days: Optional[int] + """ + Integer representing the number of trial period days before the customer is charged for the first time. + """ + _inner_class_types = {"billing_mode": BillingMode} + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + """ + The amount discounted. + """ + discount: "DiscountResource" + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + discounts: List[Discount] + """ + The aggregated discounts. + """ + taxes: List[Tax] + """ + The aggregated tax amounts by rate. + """ + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + """ + This is the sum of all the discounts. + """ + amount_shipping: Optional[int] + """ + This is the sum of all the shipping amounts. + """ + amount_tax: int + """ + This is the sum of all the tax amounts. + """ + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + class TransferData(StripeObject): + amount: Optional[int] + """ + The amount in cents (or local equivalent) that will be transferred to the destination account when the invoice is paid. By default, the entire amount is transferred to the destination. + """ + amount_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount will be transferred to the destination. + """ + destination: ExpandableField["Account"] + """ + The account where funds from the payment will be transferred to upon payment success. + """ + + amount_subtotal: int + """ + Total before any discounts or taxes are applied. + """ + amount_total: int + """ + Total after discounts and taxes are applied. + """ + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect Application that created the quote. + """ + application_fee_amount: Optional[int] + """ + The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. Only applicable if there are no line items with recurring prices on the quote. + """ + application_fee_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. Only applicable if there are line items with recurring prices on the quote. + """ + automatic_tax: AutomaticTax + collection_method: Literal["charge_automatically", "send_invoice"] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay invoices at the end of the subscription cycle or on finalization using the default payment method attached to the subscription or customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. Defaults to `charge_automatically`. + """ + computed: Computed + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: Optional[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: Optional[ExpandableField["Customer"]] + """ + The customer which this quote belongs to. A customer is required before finalizing the quote. Once specified, it cannot be changed. + """ + default_tax_rates: Optional[List[ExpandableField["TaxRate"]]] + """ + The tax rates applied to this quote. + """ + description: Optional[str] + """ + A description that will be displayed on the quote PDF. + """ + discounts: List[ExpandableField["DiscountResource"]] + """ + The discounts applied to this quote. + """ + expires_at: int + """ + The date on which the quote will be canceled if in `open` or `draft` status. Measured in seconds since the Unix epoch. + """ + footer: Optional[str] + """ + A footer that will be displayed on the quote PDF. + """ + from_quote: Optional[FromQuote] + """ + Details of the quote that was cloned. See the [cloning documentation](https://stripe.com/docs/quotes/clone) for more details. + """ + header: Optional[str] + """ + A header that will be displayed on the quote PDF. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: Optional[ExpandableField["Invoice"]] + """ + The invoice that was created from this quote. + """ + invoice_settings: InvoiceSettings + line_items: Optional[ListObject["LineItem"]] + """ + A list of items the customer is being quoted for. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + number: Optional[str] + """ + A unique number that identifies this particular quote. This number is assigned once the quote is [finalized](https://stripe.com/docs/quotes/overview#finalize). + """ + object: Literal["quote"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account on behalf of which to charge. See the [Connect documentation](https://support.stripe.com/questions/sending-invoices-on-behalf-of-connected-accounts) for details. + """ + status: Literal["accepted", "canceled", "draft", "open"] + """ + The status of the quote. + """ + status_transitions: StatusTransitions + subscription: Optional[ExpandableField["Subscription"]] + """ + The subscription that was created or updated from this quote. + """ + subscription_data: SubscriptionData + subscription_schedule: Optional[ExpandableField["SubscriptionSchedule"]] + """ + The subscription schedule that was created or updated from this quote. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this quote belongs to. + """ + total_details: TotalDetails + transfer_data: Optional[TransferData] + """ + The account (if any) the payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the invoices. + """ + + @classmethod + def _cls_accept( + cls, quote: str, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + cls._static_request( + "post", + "/v1/quotes/{quote}/accept".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + def accept(quote: str, **params: Unpack["QuoteAcceptParams"]) -> "Quote": + """ + Accepts the specified quote. + """ + ... + + @overload + def accept(self, **params: Unpack["QuoteAcceptParams"]) -> "Quote": + """ + Accepts the specified quote. + """ + ... + + @class_method_variant("_cls_accept") + def accept( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/accept".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_accept_async( + cls, quote: str, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + await cls._static_request_async( + "post", + "/v1/quotes/{quote}/accept".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + async def accept_async( + quote: str, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + ... + + @overload + async def accept_async( + self, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + ... + + @class_method_variant("_cls_accept_async") + async def accept_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteAcceptParams"] + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/accept".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_cancel( + cls, quote: str, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + cls._static_request( + "post", + "/v1/quotes/{quote}/cancel".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + def cancel(quote: str, **params: Unpack["QuoteCancelParams"]) -> "Quote": + """ + Cancels the quote. + """ + ... + + @overload + def cancel(self, **params: Unpack["QuoteCancelParams"]) -> "Quote": + """ + Cancels the quote. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/cancel".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, quote: str, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + await cls._static_request_async( + "post", + "/v1/quotes/{quote}/cancel".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + quote: str, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteCancelParams"] + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/cancel".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["QuoteCreateParams"]) -> "Quote": + """ + A quote models prices and services for a customer. Default options for header, description, footer, and expires_at can be set in the dashboard via the [quote template](https://dashboard.stripe.com/settings/billing/quote). + """ + return cast( + "Quote", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["QuoteCreateParams"] + ) -> "Quote": + """ + A quote models prices and services for a customer. Default options for header, description, footer, and expires_at can be set in the dashboard via the [quote template](https://dashboard.stripe.com/settings/billing/quote). + """ + return cast( + "Quote", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_finalize_quote( + cls, quote: str, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + cls._static_request( + "post", + "/v1/quotes/{quote}/finalize".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + def finalize_quote( + quote: str, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + ... + + @overload + def finalize_quote( + self, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + ... + + @class_method_variant("_cls_finalize_quote") + def finalize_quote( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/finalize".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_finalize_quote_async( + cls, quote: str, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + await cls._static_request_async( + "post", + "/v1/quotes/{quote}/finalize".format(quote=sanitize_id(quote)), + params=params, + ), + ) + + @overload + @staticmethod + async def finalize_quote_async( + quote: str, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + ... + + @overload + async def finalize_quote_async( + self, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + ... + + @class_method_variant("_cls_finalize_quote_async") + async def finalize_quote_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteFinalizeQuoteParams"] + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/finalize".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["QuoteListParams"]) -> ListObject["Quote"]: + """ + Returns a list of your quotes. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["QuoteListParams"] + ) -> ListObject["Quote"]: + """ + Returns a list of your quotes. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_list_computed_upfront_line_items( + cls, + quote: str, + **params: Unpack["QuoteListComputedUpfrontLineItemsParams"], + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + ListObject["LineItem"], + cls._static_request( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(quote) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_computed_upfront_line_items( + quote: str, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + ... + + @overload + def list_computed_upfront_line_items( + self, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + ... + + @class_method_variant("_cls_list_computed_upfront_line_items") + def list_computed_upfront_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + ListObject["LineItem"], + self._request( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_computed_upfront_line_items_async( + cls, + quote: str, + **params: Unpack["QuoteListComputedUpfrontLineItemsParams"], + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + ListObject["LineItem"], + await cls._static_request_async( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(quote) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_computed_upfront_line_items_async( + quote: str, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + ... + + @overload + async def list_computed_upfront_line_items_async( + self, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + ... + + @class_method_variant("_cls_list_computed_upfront_line_items_async") + async def list_computed_upfront_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteListComputedUpfrontLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + ListObject["LineItem"], + await self._request_async( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_list_line_items( + cls, quote: str, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + cls._static_request( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(quote) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_line_items( + quote: str, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + def list_line_items( + self, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items") + def list_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + self._request( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_line_items_async( + cls, quote: str, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await cls._static_request_async( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(quote) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_line_items_async( + quote: str, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + async def list_line_items_async( + self, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items_async") + async def list_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuoteListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await self._request_async( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify(cls, id: str, **params: Unpack["QuoteModifyParams"]) -> "Quote": + """ + A quote models prices and services for a customer. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Quote", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["QuoteModifyParams"] + ) -> "Quote": + """ + A quote models prices and services for a customer. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Quote", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_pdf(cls, quote: str, **params: Unpack["QuotePdfParams"]) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + Any, + cls._static_request_stream( + "get", + "/v1/quotes/{quote}/pdf".format(quote=sanitize_id(quote)), + params=params, + base_address="files", + ), + ) + + @overload + @staticmethod + def pdf(quote: str, **params: Unpack["QuotePdfParams"]) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + ... + + @overload + def pdf(self, **params: Unpack["QuotePdfParams"]) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + ... + + @class_method_variant("_cls_pdf") + def pdf( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuotePdfParams"] + ) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + Any, + self._request_stream( + "get", + "/v1/quotes/{quote}/pdf".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + base_address="files", + ), + ) + + @classmethod + async def _cls_pdf_async( + cls, quote: str, **params: Unpack["QuotePdfParams"] + ) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + Any, + await cls._static_request_stream_async( + "get", + "/v1/quotes/{quote}/pdf".format(quote=sanitize_id(quote)), + params=params, + base_address="files", + ), + ) + + @overload + @staticmethod + async def pdf_async(quote: str, **params: Unpack["QuotePdfParams"]) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + ... + + @overload + async def pdf_async(self, **params: Unpack["QuotePdfParams"]) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + ... + + @class_method_variant("_cls_pdf_async") + async def pdf_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["QuotePdfParams"] + ) -> Any: + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + Any, + await self._request_stream_async( + "get", + "/v1/quotes/{quote}/pdf".format( + quote=sanitize_id(self.get("id")) + ), + params=params, + base_address="files", + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["QuoteRetrieveParams"] + ) -> "Quote": + """ + Retrieves the quote with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["QuoteRetrieveParams"] + ) -> "Quote": + """ + Retrieves the quote with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "computed": Computed, + "from_quote": FromQuote, + "invoice_settings": InvoiceSettings, + "status_transitions": StatusTransitions, + "subscription_data": SubscriptionData, + "total_details": TotalDetails, + "transfer_data": TransferData, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_quote_computed_upfront_line_items_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_computed_upfront_line_items_service.py new file mode 100644 index 00000000..a9f5cf4d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_computed_upfront_line_items_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._line_item import LineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._quote_computed_upfront_line_items_list_params import ( + QuoteComputedUpfrontLineItemsListParams, + ) + + +class QuoteComputedUpfrontLineItemsService(StripeService): + def list( + self, + quote: str, + params: Optional["QuoteComputedUpfrontLineItemsListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + "ListObject[LineItem]", + self._request( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(quote), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + quote: str, + params: Optional["QuoteComputedUpfrontLineItemsListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a quote, there is an includable [computed.upfront.line_items](https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items) property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of upfront line items. + """ + return cast( + "ListObject[LineItem]", + await self._request_async( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=sanitize_id(quote), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_quote_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_line_item_service.py new file mode 100644 index 00000000..ca557180 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._line_item import LineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params._quote_line_item_list_params import ( + QuoteLineItemListParams, + ) + + +class QuoteLineItemService(StripeService): + def list( + self, + quote: str, + params: Optional["QuoteLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + self._request( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(quote), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + quote: str, + params: Optional["QuoteLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a quote, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + await self._request_async( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=sanitize_id(quote), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_quote_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_service.py new file mode 100644 index 00000000..80cd138b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_quote_service.py @@ -0,0 +1,375 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._quote import Quote + from stripe._quote_computed_upfront_line_items_service import ( + QuoteComputedUpfrontLineItemsService, + ) + from stripe._quote_line_item_service import QuoteLineItemService + from stripe._request_options import RequestOptions + from stripe.params._quote_accept_params import QuoteAcceptParams + from stripe.params._quote_cancel_params import QuoteCancelParams + from stripe.params._quote_create_params import QuoteCreateParams + from stripe.params._quote_finalize_quote_params import ( + QuoteFinalizeQuoteParams, + ) + from stripe.params._quote_list_params import QuoteListParams + from stripe.params._quote_pdf_params import QuotePdfParams + from stripe.params._quote_retrieve_params import QuoteRetrieveParams + from stripe.params._quote_update_params import QuoteUpdateParams + from typing import Any + +_subservices = { + "computed_upfront_line_items": [ + "stripe._quote_computed_upfront_line_items_service", + "QuoteComputedUpfrontLineItemsService", + ], + "line_items": ["stripe._quote_line_item_service", "QuoteLineItemService"], +} + + +class QuoteService(StripeService): + computed_upfront_line_items: "QuoteComputedUpfrontLineItemsService" + line_items: "QuoteLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["QuoteListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Quote]": + """ + Returns a list of your quotes. + """ + return cast( + "ListObject[Quote]", + self._request( + "get", + "/v1/quotes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["QuoteListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Quote]": + """ + Returns a list of your quotes. + """ + return cast( + "ListObject[Quote]", + await self._request_async( + "get", + "/v1/quotes", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["QuoteCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + A quote models prices and services for a customer. Default options for header, description, footer, and expires_at can be set in the dashboard via the [quote template](https://dashboard.stripe.com/settings/billing/quote). + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["QuoteCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + A quote models prices and services for a customer. Default options for header, description, footer, and expires_at can be set in the dashboard via the [quote template](https://dashboard.stripe.com/settings/billing/quote). + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + quote: str, + params: Optional["QuoteRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Retrieves the quote with the given ID. + """ + return cast( + "Quote", + self._request( + "get", + "/v1/quotes/{quote}".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + quote: str, + params: Optional["QuoteRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Retrieves the quote with the given ID. + """ + return cast( + "Quote", + await self._request_async( + "get", + "/v1/quotes/{quote}".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + quote: str, + params: Optional["QuoteUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + A quote models prices and services for a customer. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + quote: str, + params: Optional["QuoteUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + A quote models prices and services for a customer. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + def accept( + self, + quote: str, + params: Optional["QuoteAcceptParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/accept".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + async def accept_async( + self, + quote: str, + params: Optional["QuoteAcceptParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Accepts the specified quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/accept".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + quote: str, + params: Optional["QuoteCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/cancel".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + quote: str, + params: Optional["QuoteCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Cancels the quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/cancel".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + def finalize_quote( + self, + quote: str, + params: Optional["QuoteFinalizeQuoteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + self._request( + "post", + "/v1/quotes/{quote}/finalize".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + async def finalize_quote_async( + self, + quote: str, + params: Optional["QuoteFinalizeQuoteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Quote": + """ + Finalizes the quote. + """ + return cast( + "Quote", + await self._request_async( + "post", + "/v1/quotes/{quote}/finalize".format(quote=sanitize_id(quote)), + base_address="api", + params=params, + options=options, + ), + ) + + def pdf( + self, + quote: str, + params: Optional["QuotePdfParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Any": + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + "Any", + self._request_stream( + "get", + "/v1/quotes/{quote}/pdf".format(quote=sanitize_id(quote)), + base_address="files", + params=params, + options=options, + ), + ) + + async def pdf_async( + self, + quote: str, + params: Optional["QuotePdfParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Any": + """ + Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.stripe.com/quotes/overview#quote_pdf) + """ + return cast( + "Any", + await self._request_stream_async( + "get", + "/v1/quotes/{quote}/pdf".format(quote=sanitize_id(quote)), + base_address="files", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_radar_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_radar_service.py new file mode 100644 index 00000000..db686e5d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_radar_service.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.radar._early_fraud_warning_service import ( + EarlyFraudWarningService, + ) + from stripe.radar._value_list_item_service import ValueListItemService + from stripe.radar._value_list_service import ValueListService + +_subservices = { + "early_fraud_warnings": [ + "stripe.radar._early_fraud_warning_service", + "EarlyFraudWarningService", + ], + "value_lists": ["stripe.radar._value_list_service", "ValueListService"], + "value_list_items": [ + "stripe.radar._value_list_item_service", + "ValueListItemService", + ], +} + + +class RadarService(StripeService): + early_fraud_warnings: "EarlyFraudWarningService" + value_lists: "ValueListService" + value_list_items: "ValueListItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_refund.py b/Backend/venv/lib/python3.12/site-packages/stripe/_refund.py new file mode 100644 index 00000000..a1103b79 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_refund.py @@ -0,0 +1,844 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._charge import Charge + from stripe._payment_intent import PaymentIntent + from stripe._reversal import Reversal + from stripe.params._refund_cancel_params import RefundCancelParams + from stripe.params._refund_create_params import RefundCreateParams + from stripe.params._refund_expire_params import RefundExpireParams + from stripe.params._refund_list_params import RefundListParams + from stripe.params._refund_modify_params import RefundModifyParams + from stripe.params._refund_retrieve_params import RefundRetrieveParams + + +class Refund( + CreateableAPIResource["Refund"], + ListableAPIResource["Refund"], + UpdateableAPIResource["Refund"], +): + """ + Refund objects allow you to refund a previously created charge that isn't + refunded yet. Funds are refunded to the credit or debit card that's + initially charged. + + Related guide: [Refunds](https://stripe.com/docs/refunds) + """ + + OBJECT_NAME: ClassVar[Literal["refund"]] = "refund" + + class DestinationDetails(StripeObject): + class Affirm(StripeObject): + pass + + class AfterpayClearpay(StripeObject): + pass + + class Alipay(StripeObject): + pass + + class Alma(StripeObject): + pass + + class AmazonPay(StripeObject): + pass + + class AuBankTransfer(StripeObject): + pass + + class Blik(StripeObject): + network_decline_code: Optional[str] + """ + For refunds declined by the network, a decline code provided by the network which indicates the reason the refund failed. + """ + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class BrBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class Card(StripeObject): + reference: Optional[str] + """ + Value of the reference number assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference number on the refund. This can be `pending`, `available` or `unavailable`. + """ + reference_type: Optional[str] + """ + Type of the reference number assigned to the refund. + """ + type: Literal["pending", "refund", "reversal"] + """ + The type of refund. This can be `refund`, `reversal`, or `pending`. + """ + + class Cashapp(StripeObject): + pass + + class Crypto(StripeObject): + reference: Optional[str] + """ + The transaction hash of the refund. + """ + + class CustomerCashBalance(StripeObject): + pass + + class Eps(StripeObject): + pass + + class EuBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class GbBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class Giropay(StripeObject): + pass + + class Grabpay(StripeObject): + pass + + class JpBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class Klarna(StripeObject): + pass + + class Multibanco(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class MxBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class NzBankTransfer(StripeObject): + pass + + class P24(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class Paynow(StripeObject): + pass + + class Paypal(StripeObject): + network_decline_code: Optional[str] + """ + For refunds declined by the network, a decline code provided by the network which indicates the reason the refund failed. + """ + + class Pix(StripeObject): + pass + + class Revolut(StripeObject): + pass + + class Sofort(StripeObject): + pass + + class Swish(StripeObject): + network_decline_code: Optional[str] + """ + For refunds declined by the network, a decline code provided by the network which indicates the reason the refund failed. + """ + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class ThBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class UsBankTransfer(StripeObject): + reference: Optional[str] + """ + The reference assigned to the refund. + """ + reference_status: Optional[str] + """ + Status of the reference on the refund. This can be `pending`, `available` or `unavailable`. + """ + + class WechatPay(StripeObject): + pass + + class Zip(StripeObject): + pass + + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_bank_transfer: Optional[AuBankTransfer] + blik: Optional[Blik] + br_bank_transfer: Optional[BrBankTransfer] + card: Optional[Card] + cashapp: Optional[Cashapp] + crypto: Optional[Crypto] + customer_cash_balance: Optional[CustomerCashBalance] + eps: Optional[Eps] + eu_bank_transfer: Optional[EuBankTransfer] + gb_bank_transfer: Optional[GbBankTransfer] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + jp_bank_transfer: Optional[JpBankTransfer] + klarna: Optional[Klarna] + multibanco: Optional[Multibanco] + mx_bank_transfer: Optional[MxBankTransfer] + nz_bank_transfer: Optional[NzBankTransfer] + p24: Optional[P24] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + revolut: Optional[Revolut] + sofort: Optional[Sofort] + swish: Optional[Swish] + th_bank_transfer: Optional[ThBankTransfer] + type: str + """ + The type of transaction-specific details of the payment method used in the refund (e.g., `card`). An additional hash is included on `destination_details` with a name matching this value. It contains information specific to the refund transaction. + """ + us_bank_transfer: Optional[UsBankTransfer] + wechat_pay: Optional[WechatPay] + zip: Optional[Zip] + _inner_class_types = { + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_bank_transfer": AuBankTransfer, + "blik": Blik, + "br_bank_transfer": BrBankTransfer, + "card": Card, + "cashapp": Cashapp, + "crypto": Crypto, + "customer_cash_balance": CustomerCashBalance, + "eps": Eps, + "eu_bank_transfer": EuBankTransfer, + "gb_bank_transfer": GbBankTransfer, + "giropay": Giropay, + "grabpay": Grabpay, + "jp_bank_transfer": JpBankTransfer, + "klarna": Klarna, + "multibanco": Multibanco, + "mx_bank_transfer": MxBankTransfer, + "nz_bank_transfer": NzBankTransfer, + "p24": P24, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "revolut": Revolut, + "sofort": Sofort, + "swish": Swish, + "th_bank_transfer": ThBankTransfer, + "us_bank_transfer": UsBankTransfer, + "wechat_pay": WechatPay, + "zip": Zip, + } + + class NextAction(StripeObject): + class DisplayDetails(StripeObject): + class EmailSent(StripeObject): + email_sent_at: int + """ + The timestamp when the email was sent. + """ + email_sent_to: str + """ + The recipient's email address. + """ + + email_sent: EmailSent + expires_at: int + """ + The expiry timestamp. + """ + _inner_class_types = {"email_sent": EmailSent} + + display_details: Optional[DisplayDetails] + type: str + """ + Type of the next action to perform. + """ + _inner_class_types = {"display_details": DisplayDetails} + + class PresentmentDetails(StripeObject): + presentment_amount: int + """ + Amount intended to be collected by this payment, denominated in `presentment_currency`. + """ + presentment_currency: str + """ + Currency presented to the customer during payment. + """ + + amount: int + """ + Amount, in cents (or local equivalent). + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + Balance transaction that describes the impact on your account balance. + """ + charge: Optional[ExpandableField["Charge"]] + """ + ID of the charge that's refunded. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. You can use this for displaying to users (available on non-card refunds only). + """ + destination_details: Optional[DestinationDetails] + failure_balance_transaction: Optional[ + ExpandableField["BalanceTransaction"] + ] + """ + After the refund fails, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction. + """ + failure_reason: Optional[str] + """ + Provides the reason for the refund failure. Possible values are: `lost_or_stolen_card`, `expired_or_canceled_card`, `charge_for_pending_refund_disputed`, `insufficient_funds`, `declined`, `merchant_request`, or `unknown`. + """ + id: str + """ + Unique identifier for the object. + """ + instructions_email: Optional[str] + """ + For payment methods without native refund support (for example, Konbini, PromptPay), provide an email address for the customer to receive refund instructions. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + next_action: Optional[NextAction] + object: Literal["refund"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + ID of the PaymentIntent that's refunded. + """ + pending_reason: Optional[ + Literal["charge_pending", "insufficient_funds", "processing"] + ] + """ + Provides the reason for why the refund is pending. Possible values are: `processing`, `insufficient_funds`, or `charge_pending`. + """ + presentment_details: Optional[PresentmentDetails] + reason: Optional[ + Literal[ + "duplicate", + "expired_uncaptured_charge", + "fraudulent", + "requested_by_customer", + ] + ] + """ + Reason for the refund, which is either user-provided (`duplicate`, `fraudulent`, or `requested_by_customer`) or generated by Stripe internally (`expired_uncaptured_charge`). + """ + receipt_number: Optional[str] + """ + This is the transaction number that appears on email receipts sent for this refund. + """ + source_transfer_reversal: Optional[ExpandableField["Reversal"]] + """ + The transfer reversal that's associated with the refund. Only present if the charge came from another Stripe account. + """ + status: Optional[str] + """ + Status of the refund. This can be `pending`, `requires_action`, `succeeded`, `failed`, or `canceled`. Learn more about [failed refunds](https://stripe.com/docs/refunds#failed-refunds). + """ + transfer_reversal: Optional[ExpandableField["Reversal"]] + """ + This refers to the transfer reversal object if the accompanying transfer reverses. This is only applicable if the charge was created using the destination parameter. + """ + + @classmethod + def _cls_cancel( + cls, refund: str, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + cls._static_request( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + refund: str, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + ... + + @overload + def cancel(self, **params: Unpack["RefundCancelParams"]) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + self._request( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, refund: str, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + await cls._static_request_async( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + refund: str, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["RefundCancelParams"] + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + await self._request_async( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["RefundCreateParams"]) -> "Refund": + """ + When you create a new refund, you must specify a Charge or a PaymentIntent object on which to create it. + + Creating a new refund will refund a charge that has previously been created but not yet refunded. + Funds will be refunded to the credit or debit card that was originally charged. + + You can optionally refund only part of a charge. + You can do so multiple times, until the entire charge has been refunded. + + Once entirely refunded, a charge can't be refunded again. + This method will raise an error when called on an already-refunded charge, + or when trying to refund more money than is left on a charge. + """ + return cast( + "Refund", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["RefundCreateParams"] + ) -> "Refund": + """ + When you create a new refund, you must specify a Charge or a PaymentIntent object on which to create it. + + Creating a new refund will refund a charge that has previously been created but not yet refunded. + Funds will be refunded to the credit or debit card that was originally charged. + + You can optionally refund only part of a charge. + You can do so multiple times, until the entire charge has been refunded. + + Once entirely refunded, a charge can't be refunded again. + This method will raise an error when called on an already-refunded charge, + or when trying to refund more money than is left on a charge. + """ + return cast( + "Refund", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["RefundListParams"] + ) -> ListObject["Refund"]: + """ + Returns a list of all refunds you created. We return the refunds in sorted order, with the most recent refunds appearing first. The 10 most recent refunds are always available by default on the Charge object. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["RefundListParams"] + ) -> ListObject["Refund"]: + """ + Returns a list of all refunds you created. We return the refunds in sorted order, with the most recent refunds appearing first. The 10 most recent refunds are always available by default on the Charge object. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["RefundModifyParams"] + ) -> "Refund": + """ + Updates the refund that you specify by setting the values of the passed parameters. Any parameters that you don't provide remain unchanged. + + This request only accepts metadata as an argument. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Refund", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["RefundModifyParams"] + ) -> "Refund": + """ + Updates the refund that you specify by setting the values of the passed parameters. Any parameters that you don't provide remain unchanged. + + This request only accepts metadata as an argument. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Refund", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["RefundRetrieveParams"] + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["RefundRetrieveParams"] + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["Refund"]): + _resource_cls: Type["Refund"] + + @classmethod + def _cls_expire( + cls, refund: str, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + cls._static_request( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @overload + @staticmethod + def expire( + refund: str, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + ... + + @overload + def expire(self, **params: Unpack["RefundExpireParams"]) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + ... + + @class_method_variant("_cls_expire") + def expire( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + self.resource._request( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_expire_async( + cls, refund: str, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + await cls._static_request_async( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(refund) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def expire_async( + refund: str, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + ... + + @overload + async def expire_async( + self, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + ... + + @class_method_variant("_cls_expire_async") + async def expire_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["RefundExpireParams"] + ) -> "Refund": + """ + Expire a refund with a status of requires_action. + """ + return cast( + "Refund", + await self.resource._request_async( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "destination_details": DestinationDetails, + "next_action": NextAction, + "presentment_details": PresentmentDetails, + } + + +Refund.TestHelpers._resource_cls = Refund diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_refund_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_refund_service.py new file mode 100644 index 00000000..07b5c341 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_refund_service.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._refund import Refund + from stripe._request_options import RequestOptions + from stripe.params._refund_cancel_params import RefundCancelParams + from stripe.params._refund_create_params import RefundCreateParams + from stripe.params._refund_list_params import RefundListParams + from stripe.params._refund_retrieve_params import RefundRetrieveParams + from stripe.params._refund_update_params import RefundUpdateParams + + +class RefundService(StripeService): + def list( + self, + params: Optional["RefundListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Refund]": + """ + Returns a list of all refunds you created. We return the refunds in sorted order, with the most recent refunds appearing first. The 10 most recent refunds are always available by default on the Charge object. + """ + return cast( + "ListObject[Refund]", + self._request( + "get", + "/v1/refunds", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["RefundListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Refund]": + """ + Returns a list of all refunds you created. We return the refunds in sorted order, with the most recent refunds appearing first. The 10 most recent refunds are always available by default on the Charge object. + """ + return cast( + "ListObject[Refund]", + await self._request_async( + "get", + "/v1/refunds", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["RefundCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + When you create a new refund, you must specify a Charge or a PaymentIntent object on which to create it. + + Creating a new refund will refund a charge that has previously been created but not yet refunded. + Funds will be refunded to the credit or debit card that was originally charged. + + You can optionally refund only part of a charge. + You can do so multiple times, until the entire charge has been refunded. + + Once entirely refunded, a charge can't be refunded again. + This method will raise an error when called on an already-refunded charge, + or when trying to refund more money than is left on a charge. + """ + return cast( + "Refund", + self._request( + "post", + "/v1/refunds", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["RefundCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + When you create a new refund, you must specify a Charge or a PaymentIntent object on which to create it. + + Creating a new refund will refund a charge that has previously been created but not yet refunded. + Funds will be refunded to the credit or debit card that was originally charged. + + You can optionally refund only part of a charge. + You can do so multiple times, until the entire charge has been refunded. + + Once entirely refunded, a charge can't be refunded again. + This method will raise an error when called on an already-refunded charge, + or when trying to refund more money than is left on a charge. + """ + return cast( + "Refund", + await self._request_async( + "post", + "/v1/refunds", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + refund: str, + params: Optional["RefundRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + return cast( + "Refund", + self._request( + "get", + "/v1/refunds/{refund}".format(refund=sanitize_id(refund)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + refund: str, + params: Optional["RefundRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Retrieves the details of an existing refund. + """ + return cast( + "Refund", + await self._request_async( + "get", + "/v1/refunds/{refund}".format(refund=sanitize_id(refund)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + refund: str, + params: Optional["RefundUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Updates the refund that you specify by setting the values of the passed parameters. Any parameters that you don't provide remain unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "Refund", + self._request( + "post", + "/v1/refunds/{refund}".format(refund=sanitize_id(refund)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + refund: str, + params: Optional["RefundUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Updates the refund that you specify by setting the values of the passed parameters. Any parameters that you don't provide remain unchanged. + + This request only accepts metadata as an argument. + """ + return cast( + "Refund", + await self._request_async( + "post", + "/v1/refunds/{refund}".format(refund=sanitize_id(refund)), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + refund: str, + params: Optional["RefundCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + self._request( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(refund), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + refund: str, + params: Optional["RefundCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Refund": + """ + Cancels a refund with a status of requires_action. + + You can't cancel refunds in other states. Only refunds for payment methods that require customer action can enter the requires_action state. + """ + return cast( + "Refund", + await self._request_async( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=sanitize_id(refund), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_reporting_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_reporting_service.py new file mode 100644 index 00000000..2e6a5053 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_reporting_service.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.reporting._report_run_service import ReportRunService + from stripe.reporting._report_type_service import ReportTypeService + +_subservices = { + "report_runs": [ + "stripe.reporting._report_run_service", + "ReportRunService", + ], + "report_types": [ + "stripe.reporting._report_type_service", + "ReportTypeService", + ], +} + + +class ReportingService(StripeService): + report_runs: "ReportRunService" + report_types: "ReportTypeService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_request_metrics.py b/Backend/venv/lib/python3.12/site-packages/stripe/_request_metrics.py new file mode 100644 index 00000000..308eac91 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_request_metrics.py @@ -0,0 +1,23 @@ +from typing import List, Optional + + +class RequestMetrics(object): + def __init__( + self, + request_id, + request_duration_ms, + usage: Optional[List[str]] = None, + ): + self.request_id = request_id + self.request_duration_ms = request_duration_ms + self.usage = usage + + def payload(self): + ret = { + "request_id": self.request_id, + "request_duration_ms": self.request_duration_ms, + } + + if self.usage: + ret["usage"] = self.usage + return ret diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_request_options.py b/Backend/venv/lib/python3.12/site-packages/stripe/_request_options.py new file mode 100644 index 00000000..b3c00c43 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_request_options.py @@ -0,0 +1,93 @@ +from stripe._requestor_options import RequestorOptions +from typing import Mapping, Optional, Dict, Tuple, Any +from typing_extensions import NotRequired, TypedDict, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._stripe_context import StripeContext + + +class RequestOptions(TypedDict): + api_key: NotRequired["str|None"] + stripe_version: NotRequired["str|None"] + stripe_account: NotRequired["str|None"] + stripe_context: NotRequired["str | StripeContext | None"] + max_network_retries: NotRequired["int|None"] + idempotency_key: NotRequired["str|None"] + content_type: NotRequired["str|None"] + headers: NotRequired["Mapping[str, str]|None"] + + +def merge_options( + requestor: RequestorOptions, + request: Optional[RequestOptions], +) -> RequestOptions: + """ + Merge a client and request object, giving precedence to the values from + the request object. + """ + if request is None: + return { + "api_key": requestor.api_key, + "stripe_account": requestor.stripe_account, + "stripe_context": requestor.stripe_context, + "stripe_version": requestor.stripe_version, + "max_network_retries": requestor.max_network_retries, + "idempotency_key": None, + "content_type": None, + "headers": None, + } + + return { + "api_key": request.get("api_key") or requestor.api_key, + "stripe_account": request.get("stripe_account") + or requestor.stripe_account, + "stripe_context": request.get("stripe_context") + or requestor.stripe_context, + "stripe_version": request.get("stripe_version") + or requestor.stripe_version, + "max_network_retries": request.get("max_network_retries") + if request.get("max_network_retries") is not None + else requestor.max_network_retries, + "idempotency_key": request.get("idempotency_key"), + "content_type": request.get("content_type"), + "headers": request.get("headers"), + } + + +PERSISTENT_OPTIONS_KEYS = { + "api_key", + "stripe_version", + "stripe_account", + "stripe_context", +} +""" +These are the keys in RequestOptions that should persist across requests made +by the same requestor. +""" + + +def extract_options_from_dict( + d: Optional[Mapping[str, Any]], +) -> Tuple[RequestOptions, Dict[str, Any]]: + """ + Extracts a RequestOptions object from a dict, and returns a tuple of + the RequestOptions object and the remaining dict. + """ + if not d: + return {}, {} + options: RequestOptions = {} + d_copy = dict(d) + for key in [ + "api_key", + "stripe_version", + "stripe_account", + "stripe_context", + "max_network_retries", + "idempotency_key", + "content_type", + "headers", + ]: + if key in d_copy: + options[key] = d_copy.pop(key) + + return options, d_copy diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_requestor_options.py b/Backend/venv/lib/python3.12/site-packages/stripe/_requestor_options.py new file mode 100644 index 00000000..ad5c0f08 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_requestor_options.py @@ -0,0 +1,96 @@ +# using global variables +import stripe # noqa: IMP101 +from stripe._base_address import BaseAddresses + +from typing import Optional, Union +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._stripe_context import StripeContext + + +class RequestorOptions(object): + api_key: Optional[str] + stripe_account: Optional[str] + stripe_context: "Optional[Union[str, StripeContext]]" + stripe_version: Optional[str] + base_addresses: BaseAddresses + max_network_retries: Optional[int] + + def __init__( + self, + api_key: Optional[str] = None, + stripe_account: Optional[str] = None, + stripe_context: "Optional[Union[str, StripeContext]]" = None, + stripe_version: Optional[str] = None, + base_addresses: Optional[BaseAddresses] = None, + max_network_retries: Optional[int] = None, + ): + self.api_key = api_key + self.stripe_account = stripe_account + self.stripe_context = stripe_context + self.stripe_version = stripe_version + self.base_addresses = {} + + if base_addresses: + # Base addresses can be unset (for correct merging). + # If they are not set, then we will use default API bases defined on stripe. + if base_addresses.get("api"): + self.base_addresses["api"] = base_addresses.get("api") + if base_addresses.get("connect") is not None: + self.base_addresses["connect"] = base_addresses.get("connect") + if base_addresses.get("files") is not None: + self.base_addresses["files"] = base_addresses.get("files") + if base_addresses.get("meter_events") is not None: + self.base_addresses["meter_events"] = base_addresses.get( + "meter_events" + ) + + self.max_network_retries = max_network_retries + + def to_dict(self): + """ + Returns a dict representation of the object. + """ + return { + "api_key": self.api_key, + "stripe_account": self.stripe_account, + "stripe_context": self.stripe_context, + "stripe_version": self.stripe_version, + "base_addresses": self.base_addresses, + "max_network_retries": self.max_network_retries, + } + + +class _GlobalRequestorOptions(RequestorOptions): + def __init__(self): + pass + + @property + def base_addresses(self): + return { + "api": stripe.api_base, + "connect": stripe.connect_api_base, + "files": stripe.upload_api_base, + "meter_events": stripe.meter_events_api_base, + } + + @property + def api_key(self): + return stripe.api_key + + @property + def stripe_version(self): + return stripe.api_version + + @property + def stripe_account(self): + return None + + @property + def stripe_context(self): + return None + + @property + def max_network_retries(self): + return stripe.max_network_retries diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_reserve_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/_reserve_transaction.py new file mode 100644 index 00000000..aef70b25 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_reserve_transaction.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal + + +class ReserveTransaction(StripeObject): + OBJECT_NAME: ClassVar[Literal["reserve_transaction"]] = ( + "reserve_transaction" + ) + amount: int + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + id: str + """ + Unique identifier for the object. + """ + object: Literal["reserve_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_reversal.py b/Backend/venv/lib/python3.12/site-packages/stripe/_reversal.py new file mode 100644 index 00000000..25bbb80c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_reversal.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._transfer import Transfer +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._refund import Refund + + +class Reversal(UpdateableAPIResource["Reversal"]): + """ + [Stripe Connect](https://stripe.com/docs/connect) platforms can reverse transfers made to a + connected account, either entirely or partially, and can also specify whether + to refund any related application fees. Transfer reversals add to the + platform's balance and subtract from the destination account's balance. + + Reversing a transfer that was made for a [destination + charge](https://docs.stripe.com/docs/connect/destination-charges) is allowed only up to the amount of + the charge. It is possible to reverse a + [transfer_group](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) + transfer only if the destination account has enough balance to cover the + reversal. + + Related guide: [Reverse transfers](https://stripe.com/docs/connect/separate-charges-and-transfers#reverse-transfers) + """ + + OBJECT_NAME: ClassVar[Literal["transfer_reversal"]] = "transfer_reversal" + amount: int + """ + Amount, in cents (or local equivalent). + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + Balance transaction that describes the impact on your account balance. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + destination_payment_refund: Optional[ExpandableField["Refund"]] + """ + Linked payment refund for the transfer reversal. + """ + id: str + """ + Unique identifier for the object. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["transfer_reversal"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + source_refund: Optional[ExpandableField["Refund"]] + """ + ID of the refund responsible for the transfer reversal. + """ + transfer: ExpandableField["Transfer"] + """ + ID of the transfer that was reversed. + """ + + def instance_url(self): + token = self.id + transfer = self.transfer + if isinstance(transfer, Transfer): + transfer = transfer.id + base = Transfer.class_url() + cust_extn = sanitize_id(transfer) + extn = sanitize_id(token) + return "%s/%s/reversals/%s" % (base, cust_extn, extn) + + @classmethod + def modify(cls, sid, **params): + raise NotImplementedError( + "Can't modify a reversal without a transfer ID. " + "Use stripe.Transfer.modify_reversal('transfer_id', 'reversal_id', ...) " + "(see https://stripe.com/docs/api/transfer_reversals/update)." + ) + + @classmethod + def retrieve(cls, id, **params): + raise NotImplementedError( + "Can't retrieve a reversal without a transfer ID. " + "Use stripe.Transfer.retrieve_reversal('transfer_id', 'reversal_id') " + "(see https://stripe.com/docs/api/transfer_reversals/retrieve)." + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_review.py b/Backend/venv/lib/python3.12/site-packages/stripe/_review.py new file mode 100644 index 00000000..d03e8462 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_review.py @@ -0,0 +1,310 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._charge import Charge + from stripe._payment_intent import PaymentIntent + from stripe.params._review_approve_params import ReviewApproveParams + from stripe.params._review_list_params import ReviewListParams + from stripe.params._review_retrieve_params import ReviewRetrieveParams + + +class Review(ListableAPIResource["Review"]): + """ + Reviews can be used to supplement automated fraud detection with human expertise. + + Learn more about [Radar](https://docs.stripe.com/radar) and reviewing payments + [here](https://stripe.com/docs/radar/reviews). + """ + + OBJECT_NAME: ClassVar[Literal["review"]] = "review" + + class IpAddressLocation(StripeObject): + city: Optional[str] + """ + The city where the payment originated. + """ + country: Optional[str] + """ + Two-letter ISO code representing the country where the payment originated. + """ + latitude: Optional[float] + """ + The geographic latitude where the payment originated. + """ + longitude: Optional[float] + """ + The geographic longitude where the payment originated. + """ + region: Optional[str] + """ + The state/county/province/region where the payment originated. + """ + + class Session(StripeObject): + browser: Optional[str] + """ + The browser used in this browser session (e.g., `Chrome`). + """ + device: Optional[str] + """ + Information about the device used for the browser session (e.g., `Samsung SM-G930T`). + """ + platform: Optional[str] + """ + The platform for the browser session (e.g., `Macintosh`). + """ + version: Optional[str] + """ + The version for the browser session (e.g., `61.0.3163.100`). + """ + + billing_zip: Optional[str] + """ + The ZIP or postal code of the card used, if applicable. + """ + charge: Optional[ExpandableField["Charge"]] + """ + The charge associated with this review. + """ + closed_reason: Optional[ + Literal[ + "acknowledged", + "approved", + "canceled", + "disputed", + "payment_never_settled", + "redacted", + "refunded", + "refunded_as_fraud", + ] + ] + """ + The reason the review was closed, or null if it has not yet been closed. One of `approved`, `refunded`, `refunded_as_fraud`, `disputed`, `redacted`, `canceled`, `payment_never_settled`, or `acknowledged`. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + ip_address: Optional[str] + """ + The IP address where the payment originated. + """ + ip_address_location: Optional[IpAddressLocation] + """ + Information related to the location of the payment. Note that this information is an approximation and attempts to locate the nearest population center - it should not be used to determine a specific address. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["review"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + open: bool + """ + If `true`, the review needs action. + """ + opened_reason: Literal["manual", "rule"] + """ + The reason the review was opened. One of `rule` or `manual`. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + The PaymentIntent ID associated with this review, if one exists. + """ + reason: str + """ + The reason the review is currently open or closed. One of `rule`, `manual`, `approved`, `refunded`, `refunded_as_fraud`, `disputed`, `redacted`, `canceled`, `payment_never_settled`, or `acknowledged`. + """ + session: Optional[Session] + """ + Information related to the browsing session of the user who initiated the payment. + """ + + @classmethod + def _cls_approve( + cls, review: str, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + cls._static_request( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(review) + ), + params=params, + ), + ) + + @overload + @staticmethod + def approve( + review: str, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + ... + + @overload + def approve(self, **params: Unpack["ReviewApproveParams"]) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + ... + + @class_method_variant("_cls_approve") + def approve( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + self._request( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_approve_async( + cls, review: str, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + await cls._static_request_async( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(review) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def approve_async( + review: str, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + ... + + @overload + async def approve_async( + self, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + ... + + @class_method_variant("_cls_approve_async") + async def approve_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["ReviewApproveParams"] + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + await self._request_async( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["ReviewListParams"] + ) -> ListObject["Review"]: + """ + Returns a list of Review objects that have open set to true. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ReviewListParams"] + ) -> ListObject["Review"]: + """ + Returns a list of Review objects that have open set to true. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ReviewRetrieveParams"] + ) -> "Review": + """ + Retrieves a Review object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ReviewRetrieveParams"] + ) -> "Review": + """ + Retrieves a Review object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "ip_address_location": IpAddressLocation, + "session": Session, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_review_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_review_service.py new file mode 100644 index 00000000..030985dd --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_review_service.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._review import Review + from stripe.params._review_approve_params import ReviewApproveParams + from stripe.params._review_list_params import ReviewListParams + from stripe.params._review_retrieve_params import ReviewRetrieveParams + + +class ReviewService(StripeService): + def list( + self, + params: Optional["ReviewListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Review]": + """ + Returns a list of Review objects that have open set to true. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Review]", + self._request( + "get", + "/v1/reviews", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ReviewListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Review]": + """ + Returns a list of Review objects that have open set to true. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Review]", + await self._request_async( + "get", + "/v1/reviews", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + review: str, + params: Optional["ReviewRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Review": + """ + Retrieves a Review object. + """ + return cast( + "Review", + self._request( + "get", + "/v1/reviews/{review}".format(review=sanitize_id(review)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + review: str, + params: Optional["ReviewRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Review": + """ + Retrieves a Review object. + """ + return cast( + "Review", + await self._request_async( + "get", + "/v1/reviews/{review}".format(review=sanitize_id(review)), + base_address="api", + params=params, + options=options, + ), + ) + + def approve( + self, + review: str, + params: Optional["ReviewApproveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + self._request( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(review), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def approve_async( + self, + review: str, + params: Optional["ReviewApproveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Review": + """ + Approves a Review object, closing it and removing it from the list of reviews. + """ + return cast( + "Review", + await self._request_async( + "post", + "/v1/reviews/{review}/approve".format( + review=sanitize_id(review), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_search_result_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/_search_result_object.py new file mode 100644 index 00000000..3397d439 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_search_result_object.py @@ -0,0 +1,178 @@ +# pyright: strict +from typing_extensions import Self, Unpack +from typing import ( + Generic, + List, + TypeVar, + cast, + Any, + Mapping, + Iterator, + AsyncIterator, + Optional, +) + +from stripe._api_requestor import ( + _APIRequestor, # pyright: ignore[reportPrivateUsage] +) +from stripe._stripe_object import StripeObject +from stripe import _util +import warnings +from stripe._request_options import RequestOptions, extract_options_from_dict +from stripe._any_iterator import AnyIterator + +T = TypeVar("T", bound=StripeObject) + + +class SearchResultObject(StripeObject, Generic[T]): + OBJECT_NAME = "search_result" + data: List[T] + has_more: bool + next_page: str + + def _search(self, **params: Mapping[str, Any]) -> Self: + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + return self.search( # pyright: ignore[reportDeprecated] + **params, + ) + + def _get_url_for_search(self) -> str: + url = self.get("url") + if not isinstance(url, str): + raise ValueError( + 'Cannot call .list on a list object without a string "url" property' + ) + return url + + @_util.deprecated( + "This will be removed in a future version of stripe-python. Please call the `search` method on the corresponding resource directly, instead of the generic search on SearchResultObject." + ) + def search(self, **params: Mapping[str, Any]) -> Self: + return cast( + Self, + self._request( + "get", + self._get_url_for_search(), + params=params, + base_address="api", + ), + ) + + async def _search_async(self, **params: Mapping[str, Any]) -> Self: + return cast( + Self, + await self._request_async( + "get", + self._get_url_for_search(), + params=params, + base_address="api", + ), + ) + + def __getitem__(self, k: str) -> T: + if isinstance(k, str): # pyright: ignore + return super(SearchResultObject, self).__getitem__(k) + else: + raise KeyError( + "You tried to access the %s index, but SearchResultObject types " + "only support string keys. (HINT: Search calls return an object " + "with a 'data' (which is the data array). You likely want to " + "call .data[%s])" % (repr(k), repr(k)) + ) + + # Pyright doesn't like this because SearchResultObject inherits from StripeObject inherits from Dict[str, Any] + # and so it wants the type of __iter__ to agree with __iter__ from Dict[str, Any] + # But we are iterating through "data", which is a List[T]. + def __iter__(self) -> Iterator[T]: # pyright: ignore + return getattr(self, "data", []).__iter__() + + def __len__(self) -> int: + return getattr(self, "data", []).__len__() + + def _auto_paging_iter(self) -> Iterator[T]: + page = self + + while True: + for item in page: + yield item + page = page.next_search_result_page() + + if page.is_empty: + break + + def auto_paging_iter(self) -> AnyIterator[T]: + return AnyIterator( + self._auto_paging_iter(), self._auto_paging_iter_async() + ) + + async def _auto_paging_iter_async(self) -> AsyncIterator[T]: + page = self + + while True: + for item in page: + yield item + page = await page.next_search_result_page_async() + + if page.is_empty: + break + + @classmethod + def _empty_search_result( + cls, + **params: Unpack[RequestOptions], + ) -> Self: + return cls._construct_from( + values={"data": [], "has_more": False, "next_page": None}, + last_response=None, + requestor=_APIRequestor._global_with_options( # pyright: ignore[reportPrivateUsage] + **params, + ), + api_mode="V1", + ) + + @property + def is_empty(self) -> bool: + return not self.data + + def _get_filters_for_next_page( + self, params: RequestOptions + ) -> Mapping[str, Any]: + params_with_filters = dict(self._retrieve_params) + params_with_filters.update({"page": self.next_page}) + params_with_filters.update(params) + return params_with_filters + + def _maybe_empty_result(self, params: RequestOptions) -> Optional[Self]: + if not self.has_more: + options, _ = extract_options_from_dict(params) + return self._empty_search_result( + api_key=options.get("api_key"), + stripe_version=options.get("stripe_version"), + stripe_account=options.get("stripe_account"), + ) + return None + + def next_search_result_page( + self, **params: Unpack[RequestOptions] + ) -> Self: + empty = self._maybe_empty_result(params) + return ( + empty + if empty is not None + else self._search( + **self._get_filters_for_next_page(params), + ) + ) + + async def next_search_result_page_async( + self, **params: Unpack[RequestOptions] + ) -> Self: + empty = self._maybe_empty_result(params) + return ( + empty + if empty is not None + else await self._search_async( + **self._get_filters_for_next_page(params), + ) + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_searchable_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_searchable_api_resource.py new file mode 100644 index 00000000..037476da --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_searchable_api_resource.py @@ -0,0 +1,49 @@ +from stripe._api_resource import APIResource +from stripe._search_result_object import SearchResultObject +from typing import TypeVar +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._stripe_object import StripeObject + +T = TypeVar("T", bound="StripeObject") + + +class SearchableAPIResource(APIResource[T]): + @classmethod + def _search(cls, search_url, **params): + ret = cls._static_request( + "get", + search_url, + params=params, + ) + if not isinstance(ret, SearchResultObject): + raise TypeError( + "Expected search result from API, got %s" + % (type(ret).__name__,) + ) + + return ret + + @classmethod + async def _search_async(cls, search_url, **params): + ret = await cls._static_request_async( + "get", + search_url, + params=params, + ) + if not isinstance(ret, SearchResultObject): + raise TypeError( + "Expected search result from API, got %s" + % (type(ret).__name__,) + ) + + return ret + + @classmethod + def search(cls, *args, **kwargs): + raise NotImplementedError + + @classmethod + def search_auto_paging_iter(cls, *args, **kwargs): + raise NotImplementedError diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt.py b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt.py new file mode 100644 index 00000000..b2d0ff3c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt.py @@ -0,0 +1,839 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional, Union +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._customer import Customer + from stripe._mandate import Mandate + from stripe._payment_intent import PaymentIntent + from stripe._payment_method import PaymentMethod + from stripe._setup_intent import SetupIntent + from stripe._source import Source + from stripe.params._setup_attempt_list_params import SetupAttemptListParams + + +class SetupAttempt(ListableAPIResource["SetupAttempt"]): + """ + A SetupAttempt describes one attempted confirmation of a SetupIntent, + whether that confirmation is successful or unsuccessful. You can use + SetupAttempts to inspect details of a specific attempt at setting up a + payment method using a SetupIntent. + """ + + OBJECT_NAME: ClassVar[Literal["setup_attempt"]] = "setup_attempt" + + class PaymentMethodDetails(StripeObject): + class AcssDebit(StripeObject): + pass + + class AmazonPay(StripeObject): + pass + + class AuBecsDebit(StripeObject): + pass + + class BacsDebit(StripeObject): + pass + + class Bancontact(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + Can be one of `en`, `de`, `fr`, or `nl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Bancontact directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class Boleto(StripeObject): + pass + + class Card(StripeObject): + class Checks(StripeObject): + address_line1_check: Optional[str] + """ + If a address line1 was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + address_postal_code_check: Optional[str] + """ + If a address postal code was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + cvc_check: Optional[str] + """ + If a CVC was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`. + """ + + class ThreeDSecure(StripeObject): + authentication_flow: Optional[ + Literal["challenge", "frictionless"] + ] + """ + For authenticated transactions: how the customer was authenticated by + the issuing bank. + """ + electronic_commerce_indicator: Optional[ + Literal["01", "02", "05", "06", "07"] + ] + """ + The Electronic Commerce Indicator (ECI). A protocol-level field + indicating what degree of authentication was performed. + """ + result: Optional[ + Literal[ + "attempt_acknowledged", + "authenticated", + "exempted", + "failed", + "not_supported", + "processing_error", + ] + ] + """ + Indicates the outcome of 3D Secure authentication. + """ + result_reason: Optional[ + Literal[ + "abandoned", + "bypassed", + "canceled", + "card_not_enrolled", + "network_not_supported", + "protocol_error", + "rejected", + ] + ] + """ + Additional information about why 3D Secure succeeded or failed based + on the `result`. + """ + transaction_id: Optional[str] + """ + The 3D Secure 1 XID or 3D Secure 2 Directory Server Transaction ID + (dsTransId) for this payment. + """ + version: Optional[Literal["1.0.2", "2.1.0", "2.2.0"]] + """ + The version of 3D Secure that was used. + """ + + class Wallet(StripeObject): + class ApplePay(StripeObject): + pass + + class GooglePay(StripeObject): + pass + + apple_pay: Optional[ApplePay] + google_pay: Optional[GooglePay] + type: Literal["apple_pay", "google_pay", "link"] + """ + The type of the card wallet, one of `apple_pay`, `google_pay`, or `link`. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type. + """ + _inner_class_types = { + "apple_pay": ApplePay, + "google_pay": GooglePay, + } + + brand: Optional[str] + """ + Card brand. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `jcb`, `link`, `mastercard`, `unionpay`, `visa` or `unknown`. + """ + checks: Optional[Checks] + """ + Check results by Card networks on Card address and CVC at the time of authorization + """ + country: Optional[str] + """ + Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. + """ + description: Optional[str] + """ + A high-level description of the type of cards issued in this range. (For internal use only and not typically available in standard API requests.) + """ + exp_month: Optional[int] + """ + Two-digit number representing the card's expiration month. + """ + exp_year: Optional[int] + """ + Four-digit number representing the card's expiration year. + """ + fingerprint: Optional[str] + """ + Uniquely identifies this particular card number. You can use this attribute to check whether two customers who've signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number. + + *As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.* + """ + funding: Optional[str] + """ + Card funding type. Can be `credit`, `debit`, `prepaid`, or `unknown`. + """ + iin: Optional[str] + """ + Issuer identification number of the card. (For internal use only and not typically available in standard API requests.) + """ + issuer: Optional[str] + """ + The name of the card's issuing bank. (For internal use only and not typically available in standard API requests.) + """ + last4: Optional[str] + """ + The last four digits of the card. + """ + network: Optional[str] + """ + Identifies which network this charge was processed on. Can be `amex`, `cartes_bancaires`, `diners`, `discover`, `eftpos_au`, `interac`, `jcb`, `link`, `mastercard`, `unionpay`, `visa`, or `unknown`. + """ + three_d_secure: Optional[ThreeDSecure] + """ + Populated if this authorization used 3D Secure authentication. + """ + wallet: Optional[Wallet] + """ + If this Card is part of a card wallet, this contains the details of the card wallet. + """ + _inner_class_types = { + "checks": Checks, + "three_d_secure": ThreeDSecure, + "wallet": Wallet, + } + + class CardPresent(StripeObject): + class Offline(StripeObject): + stored_at: Optional[int] + """ + Time at which the payment was collected while offline + """ + type: Optional[Literal["deferred"]] + """ + The method used to process this payment method offline. Only deferred is allowed. + """ + + generated_card: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the Card PaymentMethod which was generated by this SetupAttempt. + """ + offline: Optional[Offline] + """ + Details about payments collected offline. + """ + _inner_class_types = {"offline": Offline} + + class Cashapp(StripeObject): + pass + + class Ideal(StripeObject): + bank: Optional[ + Literal[ + "abn_amro", + "asn_bank", + "bunq", + "buut", + "handelsbanken", + "ing", + "knab", + "moneyou", + "n26", + "nn", + "rabobank", + "regiobank", + "revolut", + "sns_bank", + "triodos_bank", + "van_lanschot", + "yoursafe", + ] + ] + """ + The customer's bank. Can be one of `abn_amro`, `asn_bank`, `bunq`, `buut`, `handelsbanken`, `ing`, `knab`, `moneyou`, `n26`, `nn`, `rabobank`, `regiobank`, `revolut`, `sns_bank`, `triodos_bank`, `van_lanschot`, or `yoursafe`. + """ + bic: Optional[ + Literal[ + "ABNANL2A", + "ASNBNL21", + "BITSNL2A", + "BUNQNL2A", + "BUUTNL2A", + "FVLBNL22", + "HANDNL2A", + "INGBNL2A", + "KNABNL2H", + "MOYONL21", + "NNBANL2G", + "NTSBDEB1", + "RABONL2U", + "RBRBNL21", + "REVOIE23", + "REVOLT21", + "SNSBNL2A", + "TRIONL2U", + ] + ] + """ + The Bank Identifier Code of the customer's bank. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by iDEAL directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class KakaoPay(StripeObject): + pass + + class Klarna(StripeObject): + pass + + class KrCard(StripeObject): + pass + + class Link(StripeObject): + pass + + class NaverPay(StripeObject): + buyer_id: Optional[str] + """ + Uniquely identifies this particular Naver Pay account. You can use this attribute to check whether two Naver Pay accounts are the same. + """ + + class NzBankAccount(StripeObject): + pass + + class Paypal(StripeObject): + pass + + class RevolutPay(StripeObject): + pass + + class SepaDebit(StripeObject): + pass + + class Sofort(StripeObject): + bank_code: Optional[str] + """ + Bank code of bank associated with the bank account. + """ + bank_name: Optional[str] + """ + Name of the bank associated with the bank account. + """ + bic: Optional[str] + """ + Bank Identifier Code of the bank associated with the bank account. + """ + generated_sepa_debit: Optional[ExpandableField["PaymentMethod"]] + """ + The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + generated_sepa_debit_mandate: Optional[ExpandableField["Mandate"]] + """ + The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt. + """ + iban_last4: Optional[str] + """ + Last four characters of the IBAN. + """ + preferred_language: Optional[Literal["de", "en", "fr", "nl"]] + """ + Preferred language of the Sofort authorization page that the customer is redirected to. + Can be one of `en`, `de`, `fr`, or `nl` + """ + verified_name: Optional[str] + """ + Owner's verified full name. Values are verified or provided by Sofort directly + (if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + + class UsBankAccount(StripeObject): + pass + + acss_debit: Optional[AcssDebit] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + boleto: Optional[Boleto] + card: Optional[Card] + card_present: Optional[CardPresent] + cashapp: Optional[Cashapp] + ideal: Optional[Ideal] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + kr_card: Optional[KrCard] + link: Optional[Link] + naver_pay: Optional[NaverPay] + nz_bank_account: Optional[NzBankAccount] + paypal: Optional[Paypal] + revolut_pay: Optional[RevolutPay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + type: str + """ + The type of the payment method used in the SetupIntent (e.g., `card`). An additional hash is included on `payment_method_details` with a name matching this value. It contains confirmation-specific information for the payment method. + """ + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "boleto": Boleto, + "card": Card, + "card_present": CardPresent, + "cashapp": Cashapp, + "ideal": Ideal, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "kr_card": KrCard, + "link": Link, + "naver_pay": NaverPay, + "nz_bank_account": NzBankAccount, + "paypal": Paypal, + "revolut_pay": RevolutPay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "us_bank_account": UsBankAccount, + } + + class SetupError(StripeObject): + advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one. + """ + charge: Optional[str] + """ + For card errors, the ID of the failed charge. + """ + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "balance_invalid_parameter", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_exceeds_transaction_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "customer_session_expired", + "customer_tax_location_invalid", + "debit_not_authorized", + "email_invalid", + "expired_card", + "financial_connections_account_inactive", + "financial_connections_account_pending_account_numbers", + "financial_connections_account_unavailable_account_numbers", + "financial_connections_no_successful_transaction_refresh", + "forwarding_api_inactive", + "forwarding_api_invalid_parameter", + "forwarding_api_retryable_upstream_error", + "forwarding_api_upstream_connection_error", + "forwarding_api_upstream_connection_timeout", + "forwarding_api_upstream_error", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "india_recurring_payment_mandate_canceled", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_mandate_reference_prefix_format", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_rate_limit_exceeded", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_mobile_wallet_unsupported", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_address_invalid", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "tax_id_prohibited", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_hardware_fault", + "terminal_reader_invalid_location_for_activation", + "terminal_reader_invalid_location_for_payment", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_card_network_invalid", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + """ + For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported. + """ + decline_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one. + """ + doc_url: Optional[str] + """ + A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported. + """ + message: Optional[str] + """ + A human-readable message providing more details about the error. For card errors, these messages can be shown to your users. + """ + network_advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error. + """ + network_decline_code: Optional[str] + """ + For payments declined by the network, an alphanumeric code which indicates the reason the payment failed. + """ + param: Optional[str] + """ + If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field. + """ + payment_intent: Optional["PaymentIntent"] + """ + A PaymentIntent guides you through the process of collecting a payment from your customer. + We recommend that you create exactly one PaymentIntent for each order or + customer session in your system. You can reference the PaymentIntent later to + see the history of payment attempts for a particular session. + + A PaymentIntent transitions through + [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) + throughout its lifetime as it interfaces with Stripe.js to perform + authentication flows and ultimately creates at most one successful charge. + + Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents) + """ + payment_method: Optional["PaymentMethod"] + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + payment_method_type: Optional[str] + """ + If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors. + """ + request_log_url: Optional[str] + """ + A URL to the request log entry in your dashboard. + """ + setup_intent: Optional["SetupIntent"] + """ + A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. + For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. + Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. + + Create a SetupIntent when you're ready to collect your customer's payment credentials. + Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. + The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides + you through the setup process. + + Successful SetupIntents result in payment credentials that are optimized for future payments. + For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through + [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection + to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). + If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), + it automatically attaches the resulting payment method to that Customer after successful setup. + We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on + PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. + + By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. + + Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents) + """ + source: Optional[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + """ + The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error` + """ + + application: Optional[ExpandableField["Application"]] + """ + The value of [application](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-application) on the SetupIntent at the time of this confirmation. + """ + attach_to_self: Optional[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The value of [customer](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-customer) on the SetupIntent at the time of this confirmation. + """ + flow_directions: Optional[List[Literal["inbound", "outbound"]]] + """ + Indicates the directions of money movement for which this payment method is intended to be used. + + Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["setup_attempt"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The value of [on_behalf_of](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-on_behalf_of) on the SetupIntent at the time of this confirmation. + """ + payment_method: ExpandableField["PaymentMethod"] + """ + ID of the payment method used with this SetupAttempt. + """ + payment_method_details: PaymentMethodDetails + setup_error: Optional[SetupError] + """ + The error encountered during this attempt to confirm the SetupIntent, if any. + """ + setup_intent: ExpandableField["SetupIntent"] + """ + ID of the SetupIntent that this attempt belongs to. + """ + status: str + """ + Status of this SetupAttempt, one of `requires_confirmation`, `requires_action`, `processing`, `succeeded`, `failed`, or `abandoned`. + """ + usage: str + """ + The value of [usage](https://stripe.com/docs/api/setup_intents/object#setup_intent_object-usage) on the SetupIntent at the time of this confirmation, one of `off_session` or `on_session`. + """ + + @classmethod + def list( + cls, **params: Unpack["SetupAttemptListParams"] + ) -> ListObject["SetupAttempt"]: + """ + Returns a list of SetupAttempts that associate with a provided SetupIntent. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SetupAttemptListParams"] + ) -> ListObject["SetupAttempt"]: + """ + Returns a list of SetupAttempts that associate with a provided SetupIntent. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + _inner_class_types = { + "payment_method_details": PaymentMethodDetails, + "setup_error": SetupError, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt_service.py new file mode 100644 index 00000000..afa07322 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_attempt_service.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._setup_attempt import SetupAttempt + from stripe.params._setup_attempt_list_params import SetupAttemptListParams + + +class SetupAttemptService(StripeService): + def list( + self, + params: "SetupAttemptListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SetupAttempt]": + """ + Returns a list of SetupAttempts that associate with a provided SetupIntent. + """ + return cast( + "ListObject[SetupAttempt]", + self._request( + "get", + "/v1/setup_attempts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "SetupAttemptListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SetupAttempt]": + """ + Returns a list of SetupAttempts that associate with a provided SetupIntent. + """ + return cast( + "ListObject[SetupAttempt]", + await self._request_async( + "get", + "/v1/setup_attempts", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent.py b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent.py new file mode 100644 index 00000000..f3e927ba --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent.py @@ -0,0 +1,1478 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, Union, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._customer import Customer + from stripe._mandate import Mandate + from stripe._payment_intent import PaymentIntent + from stripe._payment_method import PaymentMethod + from stripe._setup_attempt import SetupAttempt + from stripe._source import Source + from stripe.params._setup_intent_cancel_params import ( + SetupIntentCancelParams, + ) + from stripe.params._setup_intent_confirm_params import ( + SetupIntentConfirmParams, + ) + from stripe.params._setup_intent_create_params import ( + SetupIntentCreateParams, + ) + from stripe.params._setup_intent_list_params import SetupIntentListParams + from stripe.params._setup_intent_modify_params import ( + SetupIntentModifyParams, + ) + from stripe.params._setup_intent_retrieve_params import ( + SetupIntentRetrieveParams, + ) + from stripe.params._setup_intent_verify_microdeposits_params import ( + SetupIntentVerifyMicrodepositsParams, + ) + from typing import Any + + +class SetupIntent( + CreateableAPIResource["SetupIntent"], + ListableAPIResource["SetupIntent"], + UpdateableAPIResource["SetupIntent"], +): + """ + A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. + For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. + Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. + + Create a SetupIntent when you're ready to collect your customer's payment credentials. + Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. + The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides + you through the setup process. + + Successful SetupIntents result in payment credentials that are optimized for future payments. + For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through + [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection + to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). + If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), + it automatically attaches the resulting payment method to that Customer after successful setup. + We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on + PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. + + By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. + + Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents) + """ + + OBJECT_NAME: ClassVar[Literal["setup_intent"]] = "setup_intent" + + class AutomaticPaymentMethods(StripeObject): + allow_redirects: Optional[Literal["always", "never"]] + """ + Controls whether this SetupIntent will accept redirect-based payment methods. + + Redirect-based payment methods may require your customer to be redirected to a payment method's app or site for authentication or additional steps. To [confirm](https://stripe.com/docs/api/setup_intents/confirm) this SetupIntent, you may be required to provide a `return_url` to redirect customers back to your site after they authenticate or complete the setup. + """ + enabled: Optional[bool] + """ + Automatically calculates compatible payment methods + """ + + class LastSetupError(StripeObject): + advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating [how to proceed with an error](https://stripe.com/docs/declines#retrying-issuer-declines) if they provide one. + """ + charge: Optional[str] + """ + For card errors, the ID of the failed charge. + """ + code: Optional[ + Literal[ + "account_closed", + "account_country_invalid_address", + "account_error_country_change_requires_additional_steps", + "account_information_mismatch", + "account_invalid", + "account_number_invalid", + "acss_debit_session_incomplete", + "alipay_upgrade_required", + "amount_too_large", + "amount_too_small", + "api_key_expired", + "application_fees_not_allowed", + "authentication_required", + "balance_insufficient", + "balance_invalid_parameter", + "bank_account_bad_routing_numbers", + "bank_account_declined", + "bank_account_exists", + "bank_account_restricted", + "bank_account_unusable", + "bank_account_unverified", + "bank_account_verification_failed", + "billing_invalid_mandate", + "bitcoin_upgrade_required", + "capture_charge_authorization_expired", + "capture_unauthorized_payment", + "card_decline_rate_limit_exceeded", + "card_declined", + "cardholder_phone_number_required", + "charge_already_captured", + "charge_already_refunded", + "charge_disputed", + "charge_exceeds_source_limit", + "charge_exceeds_transaction_limit", + "charge_expired_for_capture", + "charge_invalid_parameter", + "charge_not_refundable", + "clearing_code_unsupported", + "country_code_invalid", + "country_unsupported", + "coupon_expired", + "customer_max_payment_methods", + "customer_max_subscriptions", + "customer_session_expired", + "customer_tax_location_invalid", + "debit_not_authorized", + "email_invalid", + "expired_card", + "financial_connections_account_inactive", + "financial_connections_account_pending_account_numbers", + "financial_connections_account_unavailable_account_numbers", + "financial_connections_no_successful_transaction_refresh", + "forwarding_api_inactive", + "forwarding_api_invalid_parameter", + "forwarding_api_retryable_upstream_error", + "forwarding_api_upstream_connection_error", + "forwarding_api_upstream_connection_timeout", + "forwarding_api_upstream_error", + "idempotency_key_in_use", + "incorrect_address", + "incorrect_cvc", + "incorrect_number", + "incorrect_zip", + "india_recurring_payment_mandate_canceled", + "instant_payouts_config_disabled", + "instant_payouts_currency_disabled", + "instant_payouts_limit_exceeded", + "instant_payouts_unsupported", + "insufficient_funds", + "intent_invalid_state", + "intent_verification_method_missing", + "invalid_card_type", + "invalid_characters", + "invalid_charge_amount", + "invalid_cvc", + "invalid_expiry_month", + "invalid_expiry_year", + "invalid_mandate_reference_prefix_format", + "invalid_number", + "invalid_source_usage", + "invalid_tax_location", + "invoice_no_customer_line_items", + "invoice_no_payment_method_types", + "invoice_no_subscription_line_items", + "invoice_not_editable", + "invoice_on_behalf_of_not_editable", + "invoice_payment_intent_requires_action", + "invoice_upcoming_none", + "livemode_mismatch", + "lock_timeout", + "missing", + "no_account", + "not_allowed_on_standard_account", + "out_of_inventory", + "ownership_declaration_not_allowed", + "parameter_invalid_empty", + "parameter_invalid_integer", + "parameter_invalid_string_blank", + "parameter_invalid_string_empty", + "parameter_missing", + "parameter_unknown", + "parameters_exclusive", + "payment_intent_action_required", + "payment_intent_authentication_failure", + "payment_intent_incompatible_payment_method", + "payment_intent_invalid_parameter", + "payment_intent_konbini_rejected_confirmation_number", + "payment_intent_mandate_invalid", + "payment_intent_payment_attempt_expired", + "payment_intent_payment_attempt_failed", + "payment_intent_rate_limit_exceeded", + "payment_intent_unexpected_state", + "payment_method_bank_account_already_verified", + "payment_method_bank_account_blocked", + "payment_method_billing_details_address_missing", + "payment_method_configuration_failures", + "payment_method_currency_mismatch", + "payment_method_customer_decline", + "payment_method_invalid_parameter", + "payment_method_invalid_parameter_testmode", + "payment_method_microdeposit_failed", + "payment_method_microdeposit_verification_amounts_invalid", + "payment_method_microdeposit_verification_amounts_mismatch", + "payment_method_microdeposit_verification_attempts_exceeded", + "payment_method_microdeposit_verification_descriptor_code_mismatch", + "payment_method_microdeposit_verification_timeout", + "payment_method_not_available", + "payment_method_provider_decline", + "payment_method_provider_timeout", + "payment_method_unactivated", + "payment_method_unexpected_state", + "payment_method_unsupported_type", + "payout_reconciliation_not_ready", + "payouts_limit_exceeded", + "payouts_not_allowed", + "platform_account_required", + "platform_api_key_expired", + "postal_code_invalid", + "processing_error", + "product_inactive", + "progressive_onboarding_limit_exceeded", + "rate_limit", + "refer_to_customer", + "refund_disputed_payment", + "resource_already_exists", + "resource_missing", + "return_intent_already_processed", + "routing_number_invalid", + "secret_key_required", + "sepa_unsupported_account", + "setup_attempt_failed", + "setup_intent_authentication_failure", + "setup_intent_invalid_parameter", + "setup_intent_mandate_invalid", + "setup_intent_mobile_wallet_unsupported", + "setup_intent_setup_attempt_expired", + "setup_intent_unexpected_state", + "shipping_address_invalid", + "shipping_calculation_failed", + "sku_inactive", + "state_unsupported", + "status_transition_invalid", + "stripe_tax_inactive", + "tax_id_invalid", + "tax_id_prohibited", + "taxes_calculation_failed", + "terminal_location_country_unsupported", + "terminal_reader_busy", + "terminal_reader_hardware_fault", + "terminal_reader_invalid_location_for_activation", + "terminal_reader_invalid_location_for_payment", + "terminal_reader_offline", + "terminal_reader_timeout", + "testmode_charges_only", + "tls_version_unsupported", + "token_already_used", + "token_card_network_invalid", + "token_in_use", + "transfer_source_balance_parameters_mismatch", + "transfers_not_allowed", + "url_invalid", + ] + ] + """ + For some errors that could be handled programmatically, a short string indicating the [error code](https://stripe.com/docs/error-codes) reported. + """ + decline_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a short string indicating the [card issuer's reason for the decline](https://stripe.com/docs/declines#issuer-declines) if they provide one. + """ + doc_url: Optional[str] + """ + A URL to more information about the [error code](https://stripe.com/docs/error-codes) reported. + """ + message: Optional[str] + """ + A human-readable message providing more details about the error. For card errors, these messages can be shown to your users. + """ + network_advice_code: Optional[str] + """ + For card errors resulting from a card issuer decline, a 2 digit code which indicates the advice given to merchant by the card network on how to proceed with an error. + """ + network_decline_code: Optional[str] + """ + For payments declined by the network, an alphanumeric code which indicates the reason the payment failed. + """ + param: Optional[str] + """ + If the error is parameter-specific, the parameter related to the error. For example, you can use this to display a message near the correct form field. + """ + payment_intent: Optional["PaymentIntent"] + """ + A PaymentIntent guides you through the process of collecting a payment from your customer. + We recommend that you create exactly one PaymentIntent for each order or + customer session in your system. You can reference the PaymentIntent later to + see the history of payment attempts for a particular session. + + A PaymentIntent transitions through + [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses) + throughout its lifetime as it interfaces with Stripe.js to perform + authentication flows and ultimately creates at most one successful charge. + + Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents) + """ + payment_method: Optional["PaymentMethod"] + """ + PaymentMethod objects represent your customer's payment instruments. + You can use them with [PaymentIntents](https://stripe.com/docs/payments/payment-intents) to collect payments or save them to + Customer objects to store instrument details for future payments. + + Related guides: [Payment Methods](https://stripe.com/docs/payments/payment-methods) and [More Payment Scenarios](https://stripe.com/docs/payments/more-payment-scenarios). + """ + payment_method_type: Optional[str] + """ + If the error is specific to the type of payment method, the payment method type that had a problem. This field is only populated for invoice-related errors. + """ + request_log_url: Optional[str] + """ + A URL to the request log entry in your dashboard. + """ + setup_intent: Optional["SetupIntent"] + """ + A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. + For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. + Later, you can use [PaymentIntents](https://stripe.com/docs/api#payment_intents) to drive the payment flow. + + Create a SetupIntent when you're ready to collect your customer's payment credentials. + Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. + The SetupIntent transitions through multiple [statuses](https://docs.stripe.com/payments/intents#intent-statuses) as it guides + you through the setup process. + + Successful SetupIntents result in payment credentials that are optimized for future payments. + For example, cardholders in [certain regions](https://stripe.com/guides/strong-customer-authentication) might need to be run through + [Strong Customer Authentication](https://docs.stripe.com/strong-customer-authentication) during payment method collection + to streamline later [off-session payments](https://docs.stripe.com/payments/setup-intents). + If you use the SetupIntent with a [Customer](https://stripe.com/docs/api#setup_intent_object-customer), + it automatically attaches the resulting payment method to that Customer after successful setup. + We recommend using SetupIntents or [setup_future_usage](https://stripe.com/docs/api#payment_intent_object-setup_future_usage) on + PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. + + By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. + + Related guide: [Setup Intents API](https://docs.stripe.com/payments/setup-intents) + """ + source: Optional[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + type: Literal[ + "api_error", + "card_error", + "idempotency_error", + "invalid_request_error", + ] + """ + The type of error returned. One of `api_error`, `card_error`, `idempotency_error`, or `invalid_request_error` + """ + + class NextAction(StripeObject): + class CashappHandleRedirectOrDisplayQrCode(StripeObject): + class QrCode(StripeObject): + expires_at: int + """ + The date (unix timestamp) when the QR code expires. + """ + image_url_png: str + """ + The image_url_png string used to render QR code + """ + image_url_svg: str + """ + The image_url_svg string used to render QR code + """ + + hosted_instructions_url: str + """ + The URL to the hosted Cash App Pay instructions page, which allows customers to view the QR code, and supports QR code refreshing on expiration. + """ + mobile_auth_url: str + """ + The url for mobile redirect based auth + """ + qr_code: QrCode + _inner_class_types = {"qr_code": QrCode} + + class RedirectToUrl(StripeObject): + return_url: Optional[str] + """ + If the customer does not exit their browser while authenticating, they will be redirected to this specified URL after completion. + """ + url: Optional[str] + """ + The URL you must redirect your customer to in order to authenticate. + """ + + class VerifyWithMicrodeposits(StripeObject): + arrival_date: int + """ + The timestamp when the microdeposits are expected to land. + """ + hosted_verification_url: str + """ + The URL for the hosted verification page, which allows customers to verify their bank account. + """ + microdeposit_type: Optional[Literal["amounts", "descriptor_code"]] + """ + The type of the microdeposit sent to the customer. Used to distinguish between different verification methods. + """ + + cashapp_handle_redirect_or_display_qr_code: Optional[ + CashappHandleRedirectOrDisplayQrCode + ] + redirect_to_url: Optional[RedirectToUrl] + type: str + """ + Type of the next action to perform. Refer to the other child attributes under `next_action` for available values. Examples include: `redirect_to_url`, `use_stripe_sdk`, `alipay_handle_redirect`, `oxxo_display_details`, or `verify_with_microdeposits`. + """ + use_stripe_sdk: Optional[Dict[str, "Any"]] + """ + When confirming a SetupIntent with Stripe.js, Stripe.js depends on the contents of this dictionary to invoke authentication flows. The shape of the contents is subject to change and is only intended to be used by Stripe.js. + """ + verify_with_microdeposits: Optional[VerifyWithMicrodeposits] + _inner_class_types = { + "cashapp_handle_redirect_or_display_qr_code": CashappHandleRedirectOrDisplayQrCode, + "redirect_to_url": RedirectToUrl, + "verify_with_microdeposits": VerifyWithMicrodeposits, + } + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + """ + ID of the payment method configuration used. + """ + parent: Optional[str] + """ + ID of the parent payment method configuration used. + """ + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + """ + A URL for custom mandate text + """ + default_for: Optional[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. + """ + interval_description: Optional[str] + """ + Description of the interval. Only required if the 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + """ + Payment schedule for the mandate. + """ + transaction_type: Optional[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + currency: Optional[Literal["cad", "usd"]] + """ + Currency supported by the bank account + """ + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class AmazonPay(StripeObject): + pass + + class BacsDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + _inner_class_types = {"mandate_options": MandateOptions} + + class Card(StripeObject): + class MandateOptions(StripeObject): + amount: int + """ + Amount to be charged for future payments. + """ + amount_type: Literal["fixed", "maximum"] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + end_date: Optional[int] + """ + End date of the mandate or subscription. If not provided, the mandate will be active until canceled. If provided, end date should be after start date. + """ + interval: Literal["day", "month", "sporadic", "week", "year"] + """ + Specifies payment frequency. One of `day`, `week`, `month`, `year`, or `sporadic`. + """ + interval_count: Optional[int] + """ + The number of intervals between payments. For example, `interval=month` and `interval_count=3` indicates one payment every three months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). This parameter is optional when `interval=sporadic`. + """ + reference: str + """ + Unique identifier for the mandate or subscription. + """ + start_date: int + """ + Start date of the mandate or subscription. Start date should not be lesser than yesterday. + """ + supported_types: Optional[List[Literal["india"]]] + """ + Specifies the type of mandates supported. Possible values are `india`. + """ + + mandate_options: Optional[MandateOptions] + """ + Configuration options for setting up an eMandate for cards issued in India. + """ + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this SetupIntent on. Depends on the available networks of the card attached to the setup intent. Can be only set confirm-time. + """ + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class CardPresent(StripeObject): + pass + + class Klarna(StripeObject): + currency: Optional[str] + """ + The currency of the setup intent. Three letter ISO currency code. + """ + preferred_locale: Optional[str] + """ + Preferred locale of the Klarna checkout page that the customer is redirected to. + """ + + class Link(StripeObject): + persistent_token: Optional[str] + """ + [Deprecated] This is a legacy parameter that no longer has any function. + """ + + class Paypal(StripeObject): + billing_agreement_id: Optional[str] + """ + The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. + """ + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + _inner_class_types = {"mandate_options": MandateOptions} + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class Filters(StripeObject): + account_subcategories: Optional[ + List[Literal["checking", "savings"]] + ] + """ + The account subcategories to use to filter for possible accounts to link. Valid subcategories are `checking` and `savings`. + """ + + filters: Optional[Filters] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + """ + The list of permissions to request. The `payment_method` permission must be included. + """ + prefetch: Optional[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + Data features requested to be retrieved upon account creation. + """ + return_url: Optional[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + _inner_class_types = {"filters": Filters} + + class MandateOptions(StripeObject): + collection_method: Optional[Literal["paper"]] + """ + Mandate collection method + """ + + financial_connections: Optional[FinancialConnections] + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = { + "financial_connections": FinancialConnections, + "mandate_options": MandateOptions, + } + + acss_debit: Optional[AcssDebit] + amazon_pay: Optional[AmazonPay] + bacs_debit: Optional[BacsDebit] + card: Optional[Card] + card_present: Optional[CardPresent] + klarna: Optional[Klarna] + link: Optional[Link] + paypal: Optional[Paypal] + sepa_debit: Optional[SepaDebit] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "amazon_pay": AmazonPay, + "bacs_debit": BacsDebit, + "card": Card, + "card_present": CardPresent, + "klarna": Klarna, + "link": Link, + "paypal": Paypal, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect application that created the SetupIntent. + """ + attach_to_self: Optional[bool] + """ + If present, the SetupIntent's payment method will be attached to the in-context Stripe Account. + + It can only be used for this Stripe Account's own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer. + """ + automatic_payment_methods: Optional[AutomaticPaymentMethods] + """ + Settings for dynamic payment methods compatible with this Setup Intent + """ + cancellation_reason: Optional[ + Literal["abandoned", "duplicate", "requested_by_customer"] + ] + """ + Reason for cancellation of this SetupIntent, one of `abandoned`, `requested_by_customer`, or `duplicate`. + """ + client_secret: Optional[str] + """ + The client secret of this SetupIntent. Used for client-side retrieval using a publishable key. + + The client secret can be used to complete payment setup from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the Customer this SetupIntent belongs to, if one exists. + + If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + excluded_payment_method_types: Optional[ + List[ + Literal[ + "acss_debit", + "affirm", + "afterpay_clearpay", + "alipay", + "alma", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "billie", + "blik", + "boleto", + "card", + "cashapp", + "crypto", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "mb_way", + "mobilepay", + "multibanco", + "naver_pay", + "nz_bank_account", + "oxxo", + "p24", + "pay_by_bank", + "payco", + "paynow", + "paypal", + "pix", + "promptpay", + "revolut_pay", + "samsung_pay", + "satispay", + "sepa_debit", + "sofort", + "swish", + "twint", + "us_bank_account", + "wechat_pay", + "zip", + ] + ] + ] + """ + Payment method types that are excluded from this SetupIntent. + """ + flow_directions: Optional[List[Literal["inbound", "outbound"]]] + """ + Indicates the directions of money movement for which this payment method is intended to be used. + + Include `inbound` if you intend to use the payment method as the origin to pull funds from. Include `outbound` if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes. + """ + id: str + """ + Unique identifier for the object. + """ + last_setup_error: Optional[LastSetupError] + """ + The error encountered in the previous SetupIntent confirmation. + """ + latest_attempt: Optional[ExpandableField["SetupAttempt"]] + """ + The most recent SetupAttempt for this SetupIntent. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the multi use Mandate generated by the SetupIntent. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + next_action: Optional[NextAction] + """ + If present, this property tells you what actions you need to take in order for your customer to continue payment setup. + """ + object: Literal["setup_intent"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) for which the setup is intended. + """ + payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the payment method used with this SetupIntent. If the payment method is `card_present` and isn't a digital wallet, then the [generated_card](https://docs.stripe.com/api/setup_attempts/object#setup_attempt_object-payment_method_details-card_present-generated_card) associated with the `latest_attempt` is attached to the Customer instead. + """ + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + """ + Information about the [payment method configuration](https://stripe.com/docs/api/payment_method_configurations) used for this Setup Intent. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment method-specific configuration for this SetupIntent. + """ + payment_method_types: List[str] + """ + The list of payment method types (e.g. card) that this SetupIntent is allowed to set up. A list of valid payment method types can be found [here](https://docs.stripe.com/api/payment_methods/object#payment_method_object-type). + """ + single_use_mandate: Optional[ExpandableField["Mandate"]] + """ + ID of the single_use Mandate generated by the SetupIntent. + """ + status: Literal[ + "canceled", + "processing", + "requires_action", + "requires_confirmation", + "requires_payment_method", + "succeeded", + ] + """ + [Status](https://stripe.com/docs/payments/intents#intent-statuses) of this SetupIntent, one of `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `canceled`, or `succeeded`. + """ + usage: str + """ + Indicates how the payment method is intended to be used in the future. + + Use `on_session` if you intend to only reuse the payment method when the customer is in your checkout flow. Use `off_session` if your customer may or may not be in your checkout flow. If not provided, this value defaults to `off_session`. + """ + + @classmethod + def _cls_cancel( + cls, intent: str, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + cls._static_request( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + intent: str, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @overload + def cancel( + self, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, intent: str, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + await cls._static_request_async( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + intent: str, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentCancelParams"] + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_confirm( + cls, intent: str, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + cls._static_request( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def confirm( + intent: str, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + ... + + @overload + def confirm( + self, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + ... + + @class_method_variant("_cls_confirm") + def confirm( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_confirm_async( + cls, intent: str, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + await cls._static_request_async( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def confirm_async( + intent: str, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + ... + + @overload + async def confirm_async( + self, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + ... + + @class_method_variant("_cls_confirm_async") + async def confirm_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentConfirmParams"] + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["SetupIntentCreateParams"] + ) -> "SetupIntent": + """ + Creates a SetupIntent object. + + After you create the SetupIntent, attach a payment method and [confirm](https://docs.stripe.com/docs/api/setup_intents/confirm) + it to collect any required permissions to charge the payment method later. + """ + return cast( + "SetupIntent", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SetupIntentCreateParams"] + ) -> "SetupIntent": + """ + Creates a SetupIntent object. + + After you create the SetupIntent, attach a payment method and [confirm](https://docs.stripe.com/docs/api/setup_intents/confirm) + it to collect any required permissions to charge the payment method later. + """ + return cast( + "SetupIntent", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["SetupIntentListParams"] + ) -> ListObject["SetupIntent"]: + """ + Returns a list of SetupIntents. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SetupIntentListParams"] + ) -> ListObject["SetupIntent"]: + """ + Returns a list of SetupIntents. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["SetupIntentModifyParams"] + ) -> "SetupIntent": + """ + Updates a SetupIntent object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SetupIntent", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SetupIntentModifyParams"] + ) -> "SetupIntent": + """ + Updates a SetupIntent object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SetupIntent", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SetupIntentRetrieveParams"] + ) -> "SetupIntent": + """ + Retrieves the details of a SetupIntent that has previously been created. + + Client-side retrieval using a publishable key is allowed when the client_secret is provided in the query string. + + When retrieved with a publishable key, only a subset of properties will be returned. Please refer to the [SetupIntent](https://docs.stripe.com/api#setup_intent_object) object reference for more details. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SetupIntentRetrieveParams"] + ) -> "SetupIntent": + """ + Retrieves the details of a SetupIntent that has previously been created. + + Client-side retrieval using a publishable key is allowed when the client_secret is provided in the query string. + + When retrieved with a publishable key, only a subset of properties will be returned. Please refer to the [SetupIntent](https://docs.stripe.com/api#setup_intent_object) object reference for more details. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_verify_microdeposits( + cls, + intent: str, + **params: Unpack["SetupIntentVerifyMicrodepositsParams"], + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + cls._static_request( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + def verify_microdeposits( + intent: str, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + ... + + @overload + def verify_microdeposits( + self, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + ... + + @class_method_variant("_cls_verify_microdeposits") + def verify_microdeposits( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_verify_microdeposits_async( + cls, + intent: str, + **params: Unpack["SetupIntentVerifyMicrodepositsParams"], + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + await cls._static_request_async( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def verify_microdeposits_async( + intent: str, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + ... + + @overload + async def verify_microdeposits_async( + self, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + ... + + @class_method_variant("_cls_verify_microdeposits_async") + async def verify_microdeposits_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SetupIntentVerifyMicrodepositsParams"] + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = { + "automatic_payment_methods": AutomaticPaymentMethods, + "last_setup_error": LastSetupError, + "next_action": NextAction, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent_service.py new file mode 100644 index 00000000..62d196d0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_setup_intent_service.py @@ -0,0 +1,372 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._setup_intent import SetupIntent + from stripe.params._setup_intent_cancel_params import ( + SetupIntentCancelParams, + ) + from stripe.params._setup_intent_confirm_params import ( + SetupIntentConfirmParams, + ) + from stripe.params._setup_intent_create_params import ( + SetupIntentCreateParams, + ) + from stripe.params._setup_intent_list_params import SetupIntentListParams + from stripe.params._setup_intent_retrieve_params import ( + SetupIntentRetrieveParams, + ) + from stripe.params._setup_intent_update_params import ( + SetupIntentUpdateParams, + ) + from stripe.params._setup_intent_verify_microdeposits_params import ( + SetupIntentVerifyMicrodepositsParams, + ) + + +class SetupIntentService(StripeService): + def list( + self, + params: Optional["SetupIntentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SetupIntent]": + """ + Returns a list of SetupIntents. + """ + return cast( + "ListObject[SetupIntent]", + self._request( + "get", + "/v1/setup_intents", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["SetupIntentListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SetupIntent]": + """ + Returns a list of SetupIntents. + """ + return cast( + "ListObject[SetupIntent]", + await self._request_async( + "get", + "/v1/setup_intents", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["SetupIntentCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Creates a SetupIntent object. + + After you create the SetupIntent, attach a payment method and [confirm](https://docs.stripe.com/docs/api/setup_intents/confirm) + it to collect any required permissions to charge the payment method later. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["SetupIntentCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Creates a SetupIntent object. + + After you create the SetupIntent, attach a payment method and [confirm](https://docs.stripe.com/docs/api/setup_intents/confirm) + it to collect any required permissions to charge the payment method later. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + intent: str, + params: Optional["SetupIntentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Retrieves the details of a SetupIntent that has previously been created. + + Client-side retrieval using a publishable key is allowed when the client_secret is provided in the query string. + + When retrieved with a publishable key, only a subset of properties will be returned. Please refer to the [SetupIntent](https://docs.stripe.com/api#setup_intent_object) object reference for more details. + """ + return cast( + "SetupIntent", + self._request( + "get", + "/v1/setup_intents/{intent}".format( + intent=sanitize_id(intent) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + intent: str, + params: Optional["SetupIntentRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Retrieves the details of a SetupIntent that has previously been created. + + Client-side retrieval using a publishable key is allowed when the client_secret is provided in the query string. + + When retrieved with a publishable key, only a subset of properties will be returned. Please refer to the [SetupIntent](https://docs.stripe.com/api#setup_intent_object) object reference for more details. + """ + return cast( + "SetupIntent", + await self._request_async( + "get", + "/v1/setup_intents/{intent}".format( + intent=sanitize_id(intent) + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + intent: str, + params: Optional["SetupIntentUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Updates a SetupIntent object. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}".format( + intent=sanitize_id(intent) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + intent: str, + params: Optional["SetupIntentUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Updates a SetupIntent object. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}".format( + intent=sanitize_id(intent) + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + intent: str, + params: Optional["SetupIntentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + intent: str, + params: Optional["SetupIntentCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + You can cancel a SetupIntent object when it's in one of these statuses: requires_payment_method, requires_confirmation, or requires_action. + + After you cancel it, setup is abandoned and any operations on the SetupIntent fail with an error. You can't cancel the SetupIntent for a Checkout Session. [Expire the Checkout Session](https://docs.stripe.com/docs/api/checkout/sessions/expire) instead. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def confirm( + self, + intent: str, + params: Optional["SetupIntentConfirmParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def confirm_async( + self, + intent: str, + params: Optional["SetupIntentConfirmParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Confirm that your customer intends to set up the current or + provided payment method. For example, you would confirm a SetupIntent + when a customer hits the “Save” button on a payment method management + page on your website. + + If the selected payment method does not require any additional + steps from the customer, the SetupIntent will transition to the + succeeded status. + + Otherwise, it will transition to the requires_action status and + suggest additional actions via next_action. If setup fails, + the SetupIntent will transition to the + requires_payment_method status or the canceled status if the + confirmation limit is reached. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def verify_microdeposits( + self, + intent: str, + params: Optional["SetupIntentVerifyMicrodepositsParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + self._request( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def verify_microdeposits_async( + self, + intent: str, + params: Optional["SetupIntentVerifyMicrodepositsParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SetupIntent": + """ + Verifies microdeposits on a SetupIntent object. + """ + return cast( + "SetupIntent", + await self._request_async( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=sanitize_id(intent), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate.py b/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate.py new file mode 100644 index 00000000..1389c750 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate.py @@ -0,0 +1,273 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._tax_code import TaxCode + from stripe.params._shipping_rate_create_params import ( + ShippingRateCreateParams, + ) + from stripe.params._shipping_rate_list_params import ShippingRateListParams + from stripe.params._shipping_rate_modify_params import ( + ShippingRateModifyParams, + ) + from stripe.params._shipping_rate_retrieve_params import ( + ShippingRateRetrieveParams, + ) + + +class ShippingRate( + CreateableAPIResource["ShippingRate"], + ListableAPIResource["ShippingRate"], + UpdateableAPIResource["ShippingRate"], +): + """ + Shipping rates describe the price of shipping presented to your customers and + applied to a purchase. For more information, see [Charge for shipping](https://stripe.com/docs/payments/during-payment/charge-shipping). + """ + + OBJECT_NAME: ClassVar[Literal["shipping_rate"]] = "shipping_rate" + + class DeliveryEstimate(StripeObject): + class Maximum(StripeObject): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + class Minimum(StripeObject): + unit: Literal["business_day", "day", "hour", "month", "week"] + """ + A unit of time. + """ + value: int + """ + Must be greater than 0. + """ + + maximum: Optional[Maximum] + """ + The upper bound of the estimated range. If empty, represents no upper bound i.e., infinite. + """ + minimum: Optional[Minimum] + """ + The lower bound of the estimated range. If empty, represents no lower bound. + """ + _inner_class_types = {"maximum": Maximum, "minimum": Minimum} + + class FixedAmount(StripeObject): + class CurrencyOptions(StripeObject): + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + tax_behavior: Literal["exclusive", "inclusive", "unspecified"] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + + amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_options: Optional[Dict[str, CurrencyOptions]] + """ + Shipping rates defined in each available currency option. Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies). + """ + _inner_class_types = {"currency_options": CurrencyOptions} + _inner_class_dicts = ["currency_options"] + + active: bool + """ + Whether the shipping rate can be used for new purchases. Defaults to `true`. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + delivery_estimate: Optional[DeliveryEstimate] + """ + The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + display_name: Optional[str] + """ + The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. + """ + fixed_amount: Optional[FixedAmount] + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["shipping_rate"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + tax_behavior: Optional[Literal["exclusive", "inclusive", "unspecified"]] + """ + Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of `inclusive`, `exclusive`, or `unspecified`. + """ + tax_code: Optional[ExpandableField["TaxCode"]] + """ + A [tax code](https://stripe.com/docs/tax/tax-categories) ID. The Shipping tax code is `txcd_92010001`. + """ + type: Literal["fixed_amount"] + """ + The type of calculation to use on the shipping rate. + """ + + @classmethod + def create( + cls, **params: Unpack["ShippingRateCreateParams"] + ) -> "ShippingRate": + """ + Creates a new shipping rate object. + """ + return cast( + "ShippingRate", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ShippingRateCreateParams"] + ) -> "ShippingRate": + """ + Creates a new shipping rate object. + """ + return cast( + "ShippingRate", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["ShippingRateListParams"] + ) -> ListObject["ShippingRate"]: + """ + Returns a list of your shipping rates. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ShippingRateListParams"] + ) -> ListObject["ShippingRate"]: + """ + Returns a list of your shipping rates. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ShippingRateModifyParams"] + ) -> "ShippingRate": + """ + Updates an existing shipping rate object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "ShippingRate", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ShippingRateModifyParams"] + ) -> "ShippingRate": + """ + Updates an existing shipping rate object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "ShippingRate", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ShippingRateRetrieveParams"] + ) -> "ShippingRate": + """ + Returns the shipping rate object with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ShippingRateRetrieveParams"] + ) -> "ShippingRate": + """ + Returns the shipping rate object with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "delivery_estimate": DeliveryEstimate, + "fixed_amount": FixedAmount, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate_service.py new file mode 100644 index 00000000..c1154292 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_shipping_rate_service.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._shipping_rate import ShippingRate + from stripe.params._shipping_rate_create_params import ( + ShippingRateCreateParams, + ) + from stripe.params._shipping_rate_list_params import ShippingRateListParams + from stripe.params._shipping_rate_retrieve_params import ( + ShippingRateRetrieveParams, + ) + from stripe.params._shipping_rate_update_params import ( + ShippingRateUpdateParams, + ) + + +class ShippingRateService(StripeService): + def list( + self, + params: Optional["ShippingRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ShippingRate]": + """ + Returns a list of your shipping rates. + """ + return cast( + "ListObject[ShippingRate]", + self._request( + "get", + "/v1/shipping_rates", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ShippingRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ShippingRate]": + """ + Returns a list of your shipping rates. + """ + return cast( + "ListObject[ShippingRate]", + await self._request_async( + "get", + "/v1/shipping_rates", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ShippingRateCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Creates a new shipping rate object. + """ + return cast( + "ShippingRate", + self._request( + "post", + "/v1/shipping_rates", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ShippingRateCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Creates a new shipping rate object. + """ + return cast( + "ShippingRate", + await self._request_async( + "post", + "/v1/shipping_rates", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + shipping_rate_token: str, + params: Optional["ShippingRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Returns the shipping rate object with the given ID. + """ + return cast( + "ShippingRate", + self._request( + "get", + "/v1/shipping_rates/{shipping_rate_token}".format( + shipping_rate_token=sanitize_id(shipping_rate_token), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + shipping_rate_token: str, + params: Optional["ShippingRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Returns the shipping rate object with the given ID. + """ + return cast( + "ShippingRate", + await self._request_async( + "get", + "/v1/shipping_rates/{shipping_rate_token}".format( + shipping_rate_token=sanitize_id(shipping_rate_token), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + shipping_rate_token: str, + params: Optional["ShippingRateUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Updates an existing shipping rate object. + """ + return cast( + "ShippingRate", + self._request( + "post", + "/v1/shipping_rates/{shipping_rate_token}".format( + shipping_rate_token=sanitize_id(shipping_rate_token), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + shipping_rate_token: str, + params: Optional["ShippingRateUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ShippingRate": + """ + Updates an existing shipping rate object. + """ + return cast( + "ShippingRate", + await self._request_async( + "post", + "/v1/shipping_rates/{shipping_rate_token}".format( + shipping_rate_token=sanitize_id(shipping_rate_token), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_sigma_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_sigma_service.py new file mode 100644 index 00000000..b1189294 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_sigma_service.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.sigma._scheduled_query_run_service import ( + ScheduledQueryRunService, + ) + +_subservices = { + "scheduled_query_runs": [ + "stripe.sigma._scheduled_query_run_service", + "ScheduledQueryRunService", + ], +} + + +class SigmaService(StripeService): + scheduled_query_runs: "ScheduledQueryRunService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_singleton_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_singleton_api_resource.py new file mode 100644 index 00000000..b64b9b3a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_singleton_api_resource.py @@ -0,0 +1,29 @@ +from stripe._api_resource import APIResource + +from typing import TypeVar +from stripe._stripe_object import StripeObject + +T = TypeVar("T", bound=StripeObject) + +# TODO(major): 1704 - Inline into Tax.Settings and Balance, and remove this class. + + +class SingletonAPIResource(APIResource[T]): + @classmethod + def retrieve(cls, **params) -> T: + return super(SingletonAPIResource, cls).retrieve(None, **params) + + @classmethod + def class_url(cls): + if cls == SingletonAPIResource: + raise NotImplementedError( + "SingletonAPIResource is an abstract class. You should " + "perform actions on its subclasses (e.g. Balance)" + ) + # Namespaces are separated in object names with periods (.) and in URLs + # with forward slashes (/), so replace the former with the latter. + base = cls.OBJECT_NAME.replace(".", "/") + return "/v1/%s" % (base,) + + def instance_url(self): + return self.class_url() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_source.py b/Backend/venv/lib/python3.12/site-packages/stripe/_source.py new file mode 100644 index 00000000..c7f66c53 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_source.py @@ -0,0 +1,953 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._customer import Customer +from stripe._error import InvalidRequestError +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._source_transaction import SourceTransaction + from stripe.params._source_create_params import SourceCreateParams + from stripe.params._source_list_source_transactions_params import ( + SourceListSourceTransactionsParams, + ) + from stripe.params._source_modify_params import SourceModifyParams + from stripe.params._source_retrieve_params import SourceRetrieveParams + from stripe.params._source_verify_params import SourceVerifyParams + + +class Source(CreateableAPIResource["Source"], UpdateableAPIResource["Source"]): + """ + `Source` objects allow you to accept a variety of payment methods. They + represent a customer's payment instrument, and can be used with the Stripe API + just like a `Card` object: once chargeable, they can be charged, or can be + attached to customers. + + Stripe doesn't recommend using the deprecated [Sources API](https://stripe.com/docs/api/sources). + We recommend that you adopt the [PaymentMethods API](https://stripe.com/docs/api/payment_methods). + This newer API provides access to our latest features and payment method types. + + Related guides: [Sources API](https://stripe.com/docs/sources) and [Sources & Customers](https://stripe.com/docs/sources/customers). + """ + + OBJECT_NAME: ClassVar[Literal["source"]] = "source" + + class AchCreditTransfer(StripeObject): + account_number: Optional[str] + bank_name: Optional[str] + fingerprint: Optional[str] + refund_account_holder_name: Optional[str] + refund_account_holder_type: Optional[str] + refund_routing_number: Optional[str] + routing_number: Optional[str] + swift_code: Optional[str] + + class AchDebit(StripeObject): + bank_name: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + type: Optional[str] + + class AcssDebit(StripeObject): + bank_address_city: Optional[str] + bank_address_line_1: Optional[str] + bank_address_line_2: Optional[str] + bank_address_postal_code: Optional[str] + bank_name: Optional[str] + category: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + routing_number: Optional[str] + + class Alipay(StripeObject): + data_string: Optional[str] + native_url: Optional[str] + statement_descriptor: Optional[str] + + class AuBecsDebit(StripeObject): + bsb_number: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + + class Bancontact(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + iban_last4: Optional[str] + preferred_language: Optional[str] + statement_descriptor: Optional[str] + + class Card(StripeObject): + address_line1_check: Optional[str] + address_zip_check: Optional[str] + brand: Optional[str] + country: Optional[str] + cvc_check: Optional[str] + description: Optional[str] + dynamic_last4: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + name: Optional[str] + three_d_secure: Optional[str] + tokenization_method: Optional[str] + + class CardPresent(StripeObject): + application_cryptogram: Optional[str] + application_preferred_name: Optional[str] + authorization_code: Optional[str] + authorization_response_code: Optional[str] + brand: Optional[str] + country: Optional[str] + cvm_type: Optional[str] + data_type: Optional[str] + dedicated_file_name: Optional[str] + description: Optional[str] + emv_auth_data: Optional[str] + evidence_customer_signature: Optional[str] + evidence_transaction_certificate: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + pos_device_id: Optional[str] + pos_entry_mode: Optional[str] + read_method: Optional[str] + reader: Optional[str] + terminal_verification_results: Optional[str] + transaction_status_information: Optional[str] + + class CodeVerification(StripeObject): + attempts_remaining: int + """ + The number of attempts remaining to authenticate the source object with a verification code. + """ + status: str + """ + The status of the code verification, either `pending` (awaiting verification, `attempts_remaining` should be greater than 0), `succeeded` (successful verification) or `failed` (failed verification, cannot be verified anymore as `attempts_remaining` should be 0). + """ + + class Eps(StripeObject): + reference: Optional[str] + statement_descriptor: Optional[str] + + class Giropay(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + statement_descriptor: Optional[str] + + class Ideal(StripeObject): + bank: Optional[str] + bic: Optional[str] + iban_last4: Optional[str] + statement_descriptor: Optional[str] + + class Klarna(StripeObject): + background_image_url: Optional[str] + client_token: Optional[str] + first_name: Optional[str] + last_name: Optional[str] + locale: Optional[str] + logo_url: Optional[str] + page_title: Optional[str] + pay_later_asset_urls_descriptive: Optional[str] + pay_later_asset_urls_standard: Optional[str] + pay_later_name: Optional[str] + pay_later_redirect_url: Optional[str] + pay_now_asset_urls_descriptive: Optional[str] + pay_now_asset_urls_standard: Optional[str] + pay_now_name: Optional[str] + pay_now_redirect_url: Optional[str] + pay_over_time_asset_urls_descriptive: Optional[str] + pay_over_time_asset_urls_standard: Optional[str] + pay_over_time_name: Optional[str] + pay_over_time_redirect_url: Optional[str] + payment_method_categories: Optional[str] + purchase_country: Optional[str] + purchase_type: Optional[str] + redirect_url: Optional[str] + shipping_delay: Optional[int] + shipping_first_name: Optional[str] + shipping_last_name: Optional[str] + + class Multibanco(StripeObject): + entity: Optional[str] + reference: Optional[str] + refund_account_holder_address_city: Optional[str] + refund_account_holder_address_country: Optional[str] + refund_account_holder_address_line1: Optional[str] + refund_account_holder_address_line2: Optional[str] + refund_account_holder_address_postal_code: Optional[str] + refund_account_holder_address_state: Optional[str] + refund_account_holder_name: Optional[str] + refund_iban: Optional[str] + + class Owner(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class VerifiedAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + """ + Owner's address. + """ + email: Optional[str] + """ + Owner's email address. + """ + name: Optional[str] + """ + Owner's full name. + """ + phone: Optional[str] + """ + Owner's phone number (including extension). + """ + verified_address: Optional[VerifiedAddress] + """ + Verified owner's address. Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + verified_email: Optional[str] + """ + Verified owner's email address. Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + verified_name: Optional[str] + """ + Verified owner's full name. Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + verified_phone: Optional[str] + """ + Verified owner's phone number (including extension). Verified values are verified or provided by the payment method directly (and if supported) at the time of authorization or settlement. They cannot be set or mutated. + """ + _inner_class_types = { + "address": Address, + "verified_address": VerifiedAddress, + } + + class P24(StripeObject): + reference: Optional[str] + + class Receiver(StripeObject): + address: Optional[str] + """ + The address of the receiver source. This is the value that should be communicated to the customer to send their funds to. + """ + amount_charged: int + """ + The total amount that was moved to your balance. This is almost always equal to the amount charged. In rare cases when customers deposit excess funds and we are unable to refund those, those funds get moved to your balance and show up in amount_charged as well. The amount charged is expressed in the source's currency. + """ + amount_received: int + """ + The total amount received by the receiver source. `amount_received = amount_returned + amount_charged` should be true for consumed sources unless customers deposit excess funds. The amount received is expressed in the source's currency. + """ + amount_returned: int + """ + The total amount that was returned to the customer. The amount returned is expressed in the source's currency. + """ + refund_attributes_method: str + """ + Type of refund attribute method, one of `email`, `manual`, or `none`. + """ + refund_attributes_status: str + """ + Type of refund attribute status, one of `missing`, `requested`, or `available`. + """ + + class Redirect(StripeObject): + failure_reason: Optional[str] + """ + The failure reason for the redirect, either `user_abort` (the customer aborted or dropped out of the redirect flow), `declined` (the authentication failed or the transaction was declined), or `processing_error` (the redirect failed due to a technical error). Present only if the redirect status is `failed`. + """ + return_url: str + """ + The URL you provide to redirect the customer to after they authenticated their payment. + """ + status: str + """ + The status of the redirect, either `pending` (ready to be used by your customer to authenticate the transaction), `succeeded` (successful authentication, cannot be reused) or `not_required` (redirect should not be used) or `failed` (failed authentication, cannot be reused). + """ + url: str + """ + The URL provided to you to redirect a customer to as part of a `redirect` authentication flow. + """ + + class SepaCreditTransfer(StripeObject): + bank_name: Optional[str] + bic: Optional[str] + iban: Optional[str] + refund_account_holder_address_city: Optional[str] + refund_account_holder_address_country: Optional[str] + refund_account_holder_address_line1: Optional[str] + refund_account_holder_address_line2: Optional[str] + refund_account_holder_address_postal_code: Optional[str] + refund_account_holder_address_state: Optional[str] + refund_account_holder_name: Optional[str] + refund_iban: Optional[str] + + class SepaDebit(StripeObject): + bank_code: Optional[str] + branch_code: Optional[str] + country: Optional[str] + fingerprint: Optional[str] + last4: Optional[str] + mandate_reference: Optional[str] + mandate_url: Optional[str] + + class Sofort(StripeObject): + bank_code: Optional[str] + bank_name: Optional[str] + bic: Optional[str] + country: Optional[str] + iban_last4: Optional[str] + preferred_language: Optional[str] + statement_descriptor: Optional[str] + + class SourceOrder(StripeObject): + class Item(StripeObject): + amount: Optional[int] + """ + The amount (price) for this order item. + """ + currency: Optional[str] + """ + This currency of this order item. Required when `amount` is present. + """ + description: Optional[str] + """ + Human-readable description for this order item. + """ + parent: Optional[str] + """ + The ID of the associated object for this line item. Expandable if not null (e.g., expandable to a SKU). + """ + quantity: Optional[int] + """ + The quantity of this order item. When type is `sku`, this is the number of instances of the SKU to be ordered. + """ + type: Optional[str] + """ + The type of this order item. Must be `sku`, `tax`, or `shipping`. + """ + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Optional[Address] + carrier: Optional[str] + """ + The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. + """ + name: Optional[str] + """ + Recipient name. + """ + phone: Optional[str] + """ + Recipient phone (including extension). + """ + tracking_number: Optional[str] + """ + The tracking number for a physical product, obtained from the delivery service. If multiple tracking numbers were generated for this purchase, please separate them with commas. + """ + _inner_class_types = {"address": Address} + + amount: int + """ + A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the total amount for the order. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + email: Optional[str] + """ + The email address of the customer placing the order. + """ + items: Optional[List[Item]] + """ + List of items constituting the order. + """ + shipping: Optional[Shipping] + _inner_class_types = {"items": Item, "shipping": Shipping} + + class ThreeDSecure(StripeObject): + address_line1_check: Optional[str] + address_zip_check: Optional[str] + authenticated: Optional[bool] + brand: Optional[str] + card: Optional[str] + country: Optional[str] + customer: Optional[str] + cvc_check: Optional[str] + description: Optional[str] + dynamic_last4: Optional[str] + exp_month: Optional[int] + exp_year: Optional[int] + fingerprint: Optional[str] + funding: Optional[str] + iin: Optional[str] + issuer: Optional[str] + last4: Optional[str] + name: Optional[str] + three_d_secure: Optional[str] + tokenization_method: Optional[str] + + class Wechat(StripeObject): + prepay_id: Optional[str] + qr_code_url: Optional[str] + statement_descriptor: Optional[str] + + ach_credit_transfer: Optional[AchCreditTransfer] + ach_debit: Optional[AchDebit] + acss_debit: Optional[AcssDebit] + alipay: Optional[Alipay] + allow_redisplay: Optional[Literal["always", "limited", "unspecified"]] + """ + This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to “unspecified”. + """ + amount: Optional[int] + """ + A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the total amount associated with the source. This is the amount for which the source will be chargeable once ready. Required for `single_use` sources. + """ + au_becs_debit: Optional[AuBecsDebit] + bancontact: Optional[Bancontact] + card: Optional[Card] + card_present: Optional[CardPresent] + client_secret: str + """ + The client secret of the source. Used for client-side retrieval using a publishable key. + """ + code_verification: Optional[CodeVerification] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: Optional[str] + """ + Three-letter [ISO code for the currency](https://stripe.com/docs/currencies) associated with the source. This is the currency for which the source will be chargeable once ready. Required for `single_use` sources. + """ + customer: Optional[str] + """ + The ID of the customer to which this source is attached. This will not be present when the source has not been attached to a customer. + """ + eps: Optional[Eps] + flow: str + """ + The authentication `flow` of the source. `flow` is one of `redirect`, `receiver`, `code_verification`, `none`. + """ + giropay: Optional[Giropay] + id: str + """ + Unique identifier for the object. + """ + ideal: Optional[Ideal] + klarna: Optional[Klarna] + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + multibanco: Optional[Multibanco] + object: Literal["source"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + owner: Optional[Owner] + """ + Information about the owner of the payment instrument that may be used or required by particular source types. + """ + p24: Optional[P24] + receiver: Optional[Receiver] + redirect: Optional[Redirect] + sepa_credit_transfer: Optional[SepaCreditTransfer] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + source_order: Optional[SourceOrder] + statement_descriptor: Optional[str] + """ + Extra information about a source. This will appear on your customer's statement every time you charge the source. + """ + status: str + """ + The status of the source, one of `canceled`, `chargeable`, `consumed`, `failed`, or `pending`. Only `chargeable` sources can be used to create a charge. + """ + three_d_secure: Optional[ThreeDSecure] + type: Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "alipay", + "au_becs_debit", + "bancontact", + "card", + "card_present", + "eps", + "giropay", + "ideal", + "klarna", + "multibanco", + "p24", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "three_d_secure", + "wechat", + ] + """ + The `type` of the source. The `type` is a payment method, one of `ach_credit_transfer`, `ach_debit`, `alipay`, `bancontact`, `card`, `card_present`, `eps`, `giropay`, `ideal`, `multibanco`, `klarna`, `p24`, `sepa_debit`, `sofort`, `three_d_secure`, or `wechat`. An additional hash is included on the source with a name matching this value. It contains additional information specific to the [payment method](https://stripe.com/docs/sources) used. + """ + usage: Optional[str] + """ + Either `reusable` or `single_use`. Whether this source should be reusable or not. Some source types may or may not be reusable by construction, while others may leave the option at creation. If an incompatible value is passed, an error will be returned. + """ + wechat: Optional[Wechat] + + @classmethod + def create(cls, **params: Unpack["SourceCreateParams"]) -> "Source": + """ + Creates a new source object. + """ + return cast( + "Source", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SourceCreateParams"] + ) -> "Source": + """ + Creates a new source object. + """ + return cast( + "Source", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_list_source_transactions( + cls, + source: str, + **params: Unpack["SourceListSourceTransactionsParams"], + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + return cast( + ListObject["SourceTransaction"], + cls._static_request( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(source) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_source_transactions( + source: str, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + ... + + @overload + def list_source_transactions( + self, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + ... + + @class_method_variant("_cls_list_source_transactions") + def list_source_transactions( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + return cast( + ListObject["SourceTransaction"], + self._request( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_source_transactions_async( + cls, + source: str, + **params: Unpack["SourceListSourceTransactionsParams"], + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + return cast( + ListObject["SourceTransaction"], + await cls._static_request_async( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(source) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_source_transactions_async( + source: str, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + ... + + @overload + async def list_source_transactions_async( + self, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + ... + + @class_method_variant("_cls_list_source_transactions_async") + async def list_source_transactions_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SourceListSourceTransactionsParams"] + ) -> ListObject["SourceTransaction"]: + """ + List source transactions for a given source. + """ + return cast( + ListObject["SourceTransaction"], + await self._request_async( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["SourceModifyParams"] + ) -> "Source": + """ + Updates the specified source by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts the metadata and owner as arguments. It is also possible to update type specific information for selected payment methods. Please refer to our [payment method guides](https://docs.stripe.com/docs/sources) for more detail. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Source", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SourceModifyParams"] + ) -> "Source": + """ + Updates the specified source by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts the metadata and owner as arguments. It is also possible to update type specific information for selected payment methods. Please refer to our [payment method guides](https://docs.stripe.com/docs/sources) for more detail. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Source", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SourceRetrieveParams"] + ) -> "Source": + """ + Retrieves an existing source object. Supply the unique source ID from a source creation request and Stripe will return the corresponding up-to-date source object information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SourceRetrieveParams"] + ) -> "Source": + """ + Retrieves an existing source object. Supply the unique source ID from a source creation request and Stripe will return the corresponding up-to-date source object information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_verify( + cls, source: str, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + cls._static_request( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(source) + ), + params=params, + ), + ) + + @overload + @staticmethod + def verify( + source: str, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + ... + + @overload + def verify(self, **params: Unpack["SourceVerifyParams"]) -> "Source": + """ + Verify a given source. + """ + ... + + @class_method_variant("_cls_verify") + def verify( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + self._request( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_verify_async( + cls, source: str, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + await cls._static_request_async( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(source) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def verify_async( + source: str, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + ... + + @overload + async def verify_async( + self, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + ... + + @class_method_variant("_cls_verify_async") + async def verify_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SourceVerifyParams"] + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + await self._request_async( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + def detach(self, **params) -> "Source": + token = self.id + + if hasattr(self, "customer") and self.customer: + extn = sanitize_id(token) + customer = self.customer + base = Customer.class_url() + owner_extn = sanitize_id(customer) + url = "%s/%s/sources/%s" % (base, owner_extn, extn) + + self._request_and_refresh("delete", url, params) + return cast("Source", self) + + else: + raise InvalidRequestError( + "Source %s does not appear to be currently attached " + "to a customer object." % token, + "id", + ) + + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "ach_debit": AchDebit, + "acss_debit": AcssDebit, + "alipay": Alipay, + "au_becs_debit": AuBecsDebit, + "bancontact": Bancontact, + "card": Card, + "card_present": CardPresent, + "code_verification": CodeVerification, + "eps": Eps, + "giropay": Giropay, + "ideal": Ideal, + "klarna": Klarna, + "multibanco": Multibanco, + "owner": Owner, + "p24": P24, + "receiver": Receiver, + "redirect": Redirect, + "sepa_credit_transfer": SepaCreditTransfer, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "source_order": SourceOrder, + "three_d_secure": ThreeDSecure, + "wechat": Wechat, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_source_mandate_notification.py b/Backend/venv/lib/python3.12/site-packages/stripe/_source_mandate_notification.py new file mode 100644 index 00000000..2d6a6202 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_source_mandate_notification.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._source import Source + + +class SourceMandateNotification(StripeObject): + """ + Source mandate notifications should be created when a notification related to + a source mandate must be sent to the payer. They will trigger a webhook or + deliver an email to the customer. + """ + + OBJECT_NAME: ClassVar[Literal["source_mandate_notification"]] = ( + "source_mandate_notification" + ) + + class AcssDebit(StripeObject): + statement_descriptor: Optional[str] + """ + The statement descriptor associate with the debit. + """ + + class BacsDebit(StripeObject): + last4: Optional[str] + """ + Last 4 digits of the account number associated with the debit. + """ + + class SepaDebit(StripeObject): + creditor_identifier: Optional[str] + """ + SEPA creditor ID. + """ + last4: Optional[str] + """ + Last 4 digits of the account number associated with the debit. + """ + mandate_reference: Optional[str] + """ + Mandate reference associated with the debit. + """ + + acss_debit: Optional[AcssDebit] + amount: Optional[int] + """ + A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the amount associated with the mandate notification. The amount is expressed in the currency of the underlying source. Required if the notification type is `debit_initiated`. + """ + bacs_debit: Optional[BacsDebit] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["source_mandate_notification"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + reason: str + """ + The reason of the mandate notification. Valid reasons are `mandate_confirmed` or `debit_initiated`. + """ + sepa_debit: Optional[SepaDebit] + source: "Source" + """ + `Source` objects allow you to accept a variety of payment methods. They + represent a customer's payment instrument, and can be used with the Stripe API + just like a `Card` object: once chargeable, they can be charged, or can be + attached to customers. + + Stripe doesn't recommend using the deprecated [Sources API](https://stripe.com/docs/api/sources). + We recommend that you adopt the [PaymentMethods API](https://stripe.com/docs/api/payment_methods). + This newer API provides access to our latest features and payment method types. + + Related guides: [Sources API](https://stripe.com/docs/sources) and [Sources & Customers](https://stripe.com/docs/sources/customers). + """ + status: str + """ + The status of the mandate notification. Valid statuses are `pending` or `submitted`. + """ + type: str + """ + The type of source this mandate notification is attached to. Should be the source type identifier code for the payment method, such as `three_d_secure`. + """ + _inner_class_types = { + "acss_debit": AcssDebit, + "bacs_debit": BacsDebit, + "sepa_debit": SepaDebit, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_source_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_source_service.py new file mode 100644 index 00000000..849f2e74 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_source_service.py @@ -0,0 +1,265 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe._request_options import RequestOptions + from stripe._source import Source + from stripe._source_transaction_service import SourceTransactionService + from stripe.params._source_create_params import SourceCreateParams + from stripe.params._source_detach_params import SourceDetachParams + from stripe.params._source_retrieve_params import SourceRetrieveParams + from stripe.params._source_update_params import SourceUpdateParams + from stripe.params._source_verify_params import SourceVerifyParams + from typing import Union + +_subservices = { + "transactions": [ + "stripe._source_transaction_service", + "SourceTransactionService", + ], +} + + +class SourceService(StripeService): + transactions: "SourceTransactionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def detach( + self, + customer: str, + id: str, + params: Optional["SourceDetachParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Delete a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + self._request( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def detach_async( + self, + customer: str, + id: str, + params: Optional["SourceDetachParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Union[Account, BankAccount, Card, Source]": + """ + Delete a specified source for a given customer. + """ + return cast( + "Union[Account, BankAccount, Card, Source]", + await self._request_async( + "delete", + "/v1/customers/{customer}/sources/{id}".format( + customer=sanitize_id(customer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + source: str, + params: Optional["SourceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Retrieves an existing source object. Supply the unique source ID from a source creation request and Stripe will return the corresponding up-to-date source object information. + """ + return cast( + "Source", + self._request( + "get", + "/v1/sources/{source}".format(source=sanitize_id(source)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + source: str, + params: Optional["SourceRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Retrieves an existing source object. Supply the unique source ID from a source creation request and Stripe will return the corresponding up-to-date source object information. + """ + return cast( + "Source", + await self._request_async( + "get", + "/v1/sources/{source}".format(source=sanitize_id(source)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + source: str, + params: Optional["SourceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Updates the specified source by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts the metadata and owner as arguments. It is also possible to update type specific information for selected payment methods. Please refer to our [payment method guides](https://docs.stripe.com/docs/sources) for more detail. + """ + return cast( + "Source", + self._request( + "post", + "/v1/sources/{source}".format(source=sanitize_id(source)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + source: str, + params: Optional["SourceUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Updates the specified source by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts the metadata and owner as arguments. It is also possible to update type specific information for selected payment methods. Please refer to our [payment method guides](https://docs.stripe.com/docs/sources) for more detail. + """ + return cast( + "Source", + await self._request_async( + "post", + "/v1/sources/{source}".format(source=sanitize_id(source)), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["SourceCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Creates a new source object. + """ + return cast( + "Source", + self._request( + "post", + "/v1/sources", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["SourceCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Creates a new source object. + """ + return cast( + "Source", + await self._request_async( + "post", + "/v1/sources", + base_address="api", + params=params, + options=options, + ), + ) + + def verify( + self, + source: str, + params: "SourceVerifyParams", + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + self._request( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(source), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def verify_async( + self, + source: str, + params: "SourceVerifyParams", + options: Optional["RequestOptions"] = None, + ) -> "Source": + """ + Verify a given source. + """ + return cast( + "Source", + await self._request_async( + "post", + "/v1/sources/{source}/verify".format( + source=sanitize_id(source), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction.py new file mode 100644 index 00000000..c1aa0d01 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal + + +class SourceTransaction(StripeObject): + """ + Some payment methods have no required amount that a customer must send. + Customers can be instructed to send any amount, and it can be made up of + multiple transactions. As such, sources can have multiple associated + transactions. + """ + + OBJECT_NAME: ClassVar[Literal["source_transaction"]] = "source_transaction" + + class AchCreditTransfer(StripeObject): + customer_data: Optional[str] + """ + Customer data associated with the transfer. + """ + fingerprint: Optional[str] + """ + Bank account fingerprint associated with the transfer. + """ + last4: Optional[str] + """ + Last 4 digits of the account number associated with the transfer. + """ + routing_number: Optional[str] + """ + Routing number associated with the transfer. + """ + + class ChfCreditTransfer(StripeObject): + reference: Optional[str] + """ + Reference associated with the transfer. + """ + sender_address_country: Optional[str] + """ + Sender's country address. + """ + sender_address_line1: Optional[str] + """ + Sender's line 1 address. + """ + sender_iban: Optional[str] + """ + Sender's bank account IBAN. + """ + sender_name: Optional[str] + """ + Sender's name. + """ + + class GbpCreditTransfer(StripeObject): + fingerprint: Optional[str] + """ + Bank account fingerprint associated with the Stripe owned bank account receiving the transfer. + """ + funding_method: Optional[str] + """ + The credit transfer rails the sender used to push this transfer. The possible rails are: Faster Payments, BACS, CHAPS, and wire transfers. Currently only Faster Payments is supported. + """ + last4: Optional[str] + """ + Last 4 digits of sender account number associated with the transfer. + """ + reference: Optional[str] + """ + Sender entered arbitrary information about the transfer. + """ + sender_account_number: Optional[str] + """ + Sender account number associated with the transfer. + """ + sender_name: Optional[str] + """ + Sender name associated with the transfer. + """ + sender_sort_code: Optional[str] + """ + Sender sort code associated with the transfer. + """ + + class PaperCheck(StripeObject): + available_at: Optional[str] + """ + Time at which the deposited funds will be available for use. Measured in seconds since the Unix epoch. + """ + invoices: Optional[str] + """ + Comma-separated list of invoice IDs associated with the paper check. + """ + + class SepaCreditTransfer(StripeObject): + reference: Optional[str] + """ + Reference associated with the transfer. + """ + sender_iban: Optional[str] + """ + Sender's bank account IBAN. + """ + sender_name: Optional[str] + """ + Sender's name. + """ + + ach_credit_transfer: Optional[AchCreditTransfer] + amount: int + """ + A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the amount your customer has pushed to the receiver. + """ + chf_credit_transfer: Optional[ChfCreditTransfer] + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + gbp_credit_transfer: Optional[GbpCreditTransfer] + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["source_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + paper_check: Optional[PaperCheck] + sepa_credit_transfer: Optional[SepaCreditTransfer] + source: str + """ + The ID of the source this transaction is attached to. + """ + status: str + """ + The status of the transaction, one of `succeeded`, `pending`, or `failed`. + """ + type: Literal[ + "ach_credit_transfer", + "ach_debit", + "alipay", + "bancontact", + "card", + "card_present", + "eps", + "giropay", + "ideal", + "klarna", + "multibanco", + "p24", + "sepa_debit", + "sofort", + "three_d_secure", + "wechat", + ] + """ + The type of source this transaction is attached to. + """ + _inner_class_types = { + "ach_credit_transfer": AchCreditTransfer, + "chf_credit_transfer": ChfCreditTransfer, + "gbp_credit_transfer": GbpCreditTransfer, + "paper_check": PaperCheck, + "sepa_credit_transfer": SepaCreditTransfer, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction_service.py new file mode 100644 index 00000000..b40e9150 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_source_transaction_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._source_transaction import SourceTransaction + from stripe.params._source_transaction_list_params import ( + SourceTransactionListParams, + ) + + +class SourceTransactionService(StripeService): + def list( + self, + source: str, + params: Optional["SourceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SourceTransaction]": + """ + List source transactions for a given source. + """ + return cast( + "ListObject[SourceTransaction]", + self._request( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(source), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + source: str, + params: Optional["SourceTransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SourceTransaction]": + """ + List source transactions for a given source. + """ + return cast( + "ListObject[SourceTransaction]", + await self._request_async( + "get", + "/v1/sources/{source}/source_transactions".format( + source=sanitize_id(source), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_client.py b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_client.py new file mode 100644 index 00000000..e084f76a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_client.py @@ -0,0 +1,1117 @@ +# -*- coding: utf-8 -*- + +import json +from collections import OrderedDict + +from stripe import ( + DEFAULT_API_BASE, + DEFAULT_CONNECT_API_BASE, + DEFAULT_UPLOAD_API_BASE, + DEFAULT_METER_EVENTS_API_BASE, +) + +from stripe._api_mode import ApiMode +from stripe._error import AuthenticationError +from stripe._request_options import extract_options_from_dict +from stripe._requestor_options import RequestorOptions, BaseAddresses +from stripe._client_options import _ClientOptions +from stripe._http_client import ( + new_default_http_client, + new_http_client_async_fallback, +) +from stripe._api_version import _ApiVersion +from stripe._stripe_object import StripeObject +from stripe._stripe_response import StripeResponse +from stripe._util import _convert_to_stripe_object, get_api_mode, deprecated # noqa: F401 +from stripe._webhook import Webhook, WebhookSignature +from stripe._event import Event +from stripe.v2.core._event import EventNotification + +from typing import Any, Dict, Optional, Union, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._stripe_context import StripeContext + from stripe._http_client import HTTPClient + +# Non-generated services +from stripe._oauth_service import OAuthService + +from stripe._v1_services import V1Services +from stripe._v2_services import V2Services + +# service-types: The beginning of the section generated from our OpenAPI spec +if TYPE_CHECKING: + from stripe._account_service import AccountService + from stripe._account_link_service import AccountLinkService + from stripe._account_session_service import AccountSessionService + from stripe._apple_pay_domain_service import ApplePayDomainService + from stripe._application_fee_service import ApplicationFeeService + from stripe._apps_service import AppsService + from stripe._balance_service import BalanceService + from stripe._balance_settings_service import BalanceSettingsService + from stripe._balance_transaction_service import BalanceTransactionService + from stripe._billing_service import BillingService + from stripe._billing_portal_service import BillingPortalService + from stripe._charge_service import ChargeService + from stripe._checkout_service import CheckoutService + from stripe._climate_service import ClimateService + from stripe._confirmation_token_service import ConfirmationTokenService + from stripe._country_spec_service import CountrySpecService + from stripe._coupon_service import CouponService + from stripe._credit_note_service import CreditNoteService + from stripe._customer_service import CustomerService + from stripe._customer_session_service import CustomerSessionService + from stripe._dispute_service import DisputeService + from stripe._entitlements_service import EntitlementsService + from stripe._ephemeral_key_service import EphemeralKeyService + from stripe._event_service import EventService + from stripe._exchange_rate_service import ExchangeRateService + from stripe._file_service import FileService + from stripe._file_link_service import FileLinkService + from stripe._financial_connections_service import ( + FinancialConnectionsService, + ) + from stripe._forwarding_service import ForwardingService + from stripe._identity_service import IdentityService + from stripe._invoice_service import InvoiceService + from stripe._invoice_item_service import InvoiceItemService + from stripe._invoice_payment_service import InvoicePaymentService + from stripe._invoice_rendering_template_service import ( + InvoiceRenderingTemplateService, + ) + from stripe._issuing_service import IssuingService + from stripe._mandate_service import MandateService + from stripe._payment_attempt_record_service import ( + PaymentAttemptRecordService, + ) + from stripe._payment_intent_service import PaymentIntentService + from stripe._payment_link_service import PaymentLinkService + from stripe._payment_method_service import PaymentMethodService + from stripe._payment_method_configuration_service import ( + PaymentMethodConfigurationService, + ) + from stripe._payment_method_domain_service import ( + PaymentMethodDomainService, + ) + from stripe._payment_record_service import PaymentRecordService + from stripe._payout_service import PayoutService + from stripe._plan_service import PlanService + from stripe._price_service import PriceService + from stripe._product_service import ProductService + from stripe._promotion_code_service import PromotionCodeService + from stripe._quote_service import QuoteService + from stripe._radar_service import RadarService + from stripe._refund_service import RefundService + from stripe._reporting_service import ReportingService + from stripe._review_service import ReviewService + from stripe._setup_attempt_service import SetupAttemptService + from stripe._setup_intent_service import SetupIntentService + from stripe._shipping_rate_service import ShippingRateService + from stripe._sigma_service import SigmaService + from stripe._source_service import SourceService + from stripe._subscription_service import SubscriptionService + from stripe._subscription_item_service import SubscriptionItemService + from stripe._subscription_schedule_service import ( + SubscriptionScheduleService, + ) + from stripe._tax_service import TaxService + from stripe._tax_code_service import TaxCodeService + from stripe._tax_id_service import TaxIdService + from stripe._tax_rate_service import TaxRateService + from stripe._terminal_service import TerminalService + from stripe._test_helpers_service import TestHelpersService + from stripe._token_service import TokenService + from stripe._topup_service import TopupService + from stripe._transfer_service import TransferService + from stripe._treasury_service import TreasuryService + from stripe._webhook_endpoint_service import WebhookEndpointService + +# service-types: The end of the section generated from our OpenAPI spec + +if TYPE_CHECKING: + from stripe.events._event_classes import ALL_EVENT_NOTIFICATIONS + + +class StripeClient(object): + def __init__( + self, + api_key: str, + *, + stripe_account: Optional[str] = None, + stripe_context: "Optional[Union[str, StripeContext]]" = None, + stripe_version: Optional[str] = None, + base_addresses: Optional[BaseAddresses] = None, + client_id: Optional[str] = None, + verify_ssl_certs: bool = True, + proxy: Optional[str] = None, + max_network_retries: Optional[int] = None, + http_client: Optional["HTTPClient"] = None, + ): + # The types forbid this, but let's give users without types a friendly error. + if api_key is None: # pyright: ignore[reportUnnecessaryComparison] + raise AuthenticationError( + "No API key provided. (HINT: set your API key using " + '"client = stripe.StripeClient()"). You can ' + "generate API keys from the Stripe web interface. " + "See https://stripe.com/api for details, or email " + "support@stripe.com if you have any questions." + ) + + if http_client and (proxy or verify_ssl_certs is not True): + raise ValueError( + "You cannot specify `proxy` or `verify_ssl_certs` when passing " + "in a custom `http_client`. Please set these values on your " + "custom `http_client` instead." + ) + + # Default to stripe.DEFAULT_API_BASE, stripe.DEFAULT_CONNECT_API_BASE, + # and stripe.DEFAULT_UPLOAD_API_BASE if not set in base_addresses. + base_addresses = { + "api": DEFAULT_API_BASE, + "connect": DEFAULT_CONNECT_API_BASE, + "files": DEFAULT_UPLOAD_API_BASE, + "meter_events": DEFAULT_METER_EVENTS_API_BASE, + **(base_addresses or {}), + } + + requestor_options = RequestorOptions( + api_key=api_key, + stripe_account=stripe_account, + stripe_context=stripe_context, + stripe_version=stripe_version or _ApiVersion.CURRENT, + base_addresses=base_addresses, + max_network_retries=max_network_retries, + ) + + if http_client is None: + http_client = new_default_http_client( + async_fallback_client=new_http_client_async_fallback( + proxy=proxy, verify_ssl_certs=verify_ssl_certs + ), + proxy=proxy, + verify_ssl_certs=verify_ssl_certs, + ) + + from stripe._api_requestor import _APIRequestor + + self._requestor = _APIRequestor( + options=requestor_options, + client=http_client, + ) + + self._options = _ClientOptions( + client_id=client_id, + proxy=proxy, + verify_ssl_certs=verify_ssl_certs, + ) + + self.oauth = OAuthService(self._requestor, self._options) + + # top-level services: The beginning of the section generated from our OpenAPI spec + self.v1 = V1Services(self._requestor) + self.v2 = V2Services(self._requestor) + # top-level services: The end of the section generated from our OpenAPI spec + + def parse_event_notification( + self, + raw: Union[bytes, str, bytearray], + sig_header: str, + secret: str, + tolerance: int = Webhook.DEFAULT_TOLERANCE, + ) -> "ALL_EVENT_NOTIFICATIONS": + """ + This should be your main method for interacting with `EventNotifications`. It's the V2 equivalent of `construct_event()`, but with better typing support. + + It returns a union representing all known `EventNotification` classes. They have a `type` property that can be used for narrowing, which will get you very specific type support. If parsing an event the SDK isn't familiar with, it'll instead return `UnknownEventNotification`. That's not reflected in the return type of the function (because it messes up type narrowing) but is otherwise intended. + """ + payload = ( + cast(Union[bytes, bytearray], raw).decode("utf-8") + if hasattr(raw, "decode") + else cast(str, raw) + ) + + WebhookSignature.verify_header(payload, sig_header, secret, tolerance) + + return cast( + "ALL_EVENT_NOTIFICATIONS", + EventNotification.from_json(payload, self), + ) + + def construct_event( + self, + payload: Union[bytes, str], + sig_header: str, + secret: str, + tolerance: int = Webhook.DEFAULT_TOLERANCE, + ) -> Event: + if hasattr(payload, "decode"): + payload = cast(bytes, payload).decode("utf-8") + + WebhookSignature.verify_header(payload, sig_header, secret, tolerance) + + data = json.loads(payload, object_pairs_hook=OrderedDict) + event = Event._construct_from( + values=data, + requestor=self._requestor, + api_mode="V1", + ) + + return event + + def raw_request(self, method_: str, url_: str, **params): + params = params.copy() + options, params = extract_options_from_dict(params) + api_mode = get_api_mode(url_) + base_address = params.pop("base", "api") + + # we manually pass usage in event internals, so use those if available + usage = params.pop("usage", ["raw_request"]) + + rbody, rcode, rheaders = self._requestor.request_raw( + method_, + url_, + params=params, + options=options, + base_address=base_address, + api_mode=api_mode, + usage=usage, + ) + + return self._requestor._interpret_response( + rbody, rcode, rheaders, api_mode + ) + + async def raw_request_async(self, method_: str, url_: str, **params): + params = params.copy() + options, params = extract_options_from_dict(params) + api_mode = get_api_mode(url_) + base_address = params.pop("base", "api") + + rbody, rcode, rheaders = await self._requestor.request_raw_async( + method_, + url_, + params=params, + options=options, + base_address=base_address, + api_mode=api_mode, + usage=["raw_request"], + ) + + return self._requestor._interpret_response( + rbody, rcode, rheaders, api_mode + ) + + def deserialize( + self, + resp: Union[StripeResponse, Dict[str, Any]], + params: Optional[Dict[str, Any]] = None, + *, + api_mode: ApiMode, + ) -> StripeObject: + """ + Used to translate the result of a `raw_request` into a StripeObject. + """ + return _convert_to_stripe_object( + resp=resp, + params=params, + requestor=self._requestor, + api_mode=api_mode, + ) + + # deprecated v1 services: The beginning of the section generated from our OpenAPI spec + @property + @deprecated( + """ + StripeClient.accounts is deprecated, use StripeClient.v1.accounts instead. + All functionality under it has been copied over to StripeClient.v1.accounts. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def accounts(self) -> "AccountService": + return self.v1.accounts + + @property + @deprecated( + """ + StripeClient.account_links is deprecated, use StripeClient.v1.account_links instead. + All functionality under it has been copied over to StripeClient.v1.account_links. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def account_links(self) -> "AccountLinkService": + return self.v1.account_links + + @property + @deprecated( + """ + StripeClient.account_sessions is deprecated, use StripeClient.v1.account_sessions instead. + All functionality under it has been copied over to StripeClient.v1.account_sessions. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def account_sessions(self) -> "AccountSessionService": + return self.v1.account_sessions + + @property + @deprecated( + """ + StripeClient.apple_pay_domains is deprecated, use StripeClient.v1.apple_pay_domains instead. + All functionality under it has been copied over to StripeClient.v1.apple_pay_domains. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def apple_pay_domains(self) -> "ApplePayDomainService": + return self.v1.apple_pay_domains + + @property + @deprecated( + """ + StripeClient.application_fees is deprecated, use StripeClient.v1.application_fees instead. + All functionality under it has been copied over to StripeClient.v1.application_fees. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def application_fees(self) -> "ApplicationFeeService": + return self.v1.application_fees + + @property + @deprecated( + """ + StripeClient.apps is deprecated, use StripeClient.v1.apps instead. + All functionality under it has been copied over to StripeClient.v1.apps. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def apps(self) -> "AppsService": + return self.v1.apps + + @property + @deprecated( + """ + StripeClient.balance is deprecated, use StripeClient.v1.balance instead. + All functionality under it has been copied over to StripeClient.v1.balance. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def balance(self) -> "BalanceService": + return self.v1.balance + + @property + @deprecated( + """ + StripeClient.balance_settings is deprecated, use StripeClient.v1.balance_settings instead. + All functionality under it has been copied over to StripeClient.v1.balance_settings. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def balance_settings(self) -> "BalanceSettingsService": + return self.v1.balance_settings + + @property + @deprecated( + """ + StripeClient.balance_transactions is deprecated, use StripeClient.v1.balance_transactions instead. + All functionality under it has been copied over to StripeClient.v1.balance_transactions. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def balance_transactions(self) -> "BalanceTransactionService": + return self.v1.balance_transactions + + @property + @deprecated( + """ + StripeClient.billing is deprecated, use StripeClient.v1.billing instead. + All functionality under it has been copied over to StripeClient.v1.billing. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def billing(self) -> "BillingService": + return self.v1.billing + + @property + @deprecated( + """ + StripeClient.billing_portal is deprecated, use StripeClient.v1.billing_portal instead. + All functionality under it has been copied over to StripeClient.v1.billing_portal. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def billing_portal(self) -> "BillingPortalService": + return self.v1.billing_portal + + @property + @deprecated( + """ + StripeClient.charges is deprecated, use StripeClient.v1.charges instead. + All functionality under it has been copied over to StripeClient.v1.charges. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def charges(self) -> "ChargeService": + return self.v1.charges + + @property + @deprecated( + """ + StripeClient.checkout is deprecated, use StripeClient.v1.checkout instead. + All functionality under it has been copied over to StripeClient.v1.checkout. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def checkout(self) -> "CheckoutService": + return self.v1.checkout + + @property + @deprecated( + """ + StripeClient.climate is deprecated, use StripeClient.v1.climate instead. + All functionality under it has been copied over to StripeClient.v1.climate. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def climate(self) -> "ClimateService": + return self.v1.climate + + @property + @deprecated( + """ + StripeClient.confirmation_tokens is deprecated, use StripeClient.v1.confirmation_tokens instead. + All functionality under it has been copied over to StripeClient.v1.confirmation_tokens. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def confirmation_tokens(self) -> "ConfirmationTokenService": + return self.v1.confirmation_tokens + + @property + @deprecated( + """ + StripeClient.country_specs is deprecated, use StripeClient.v1.country_specs instead. + All functionality under it has been copied over to StripeClient.v1.country_specs. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def country_specs(self) -> "CountrySpecService": + return self.v1.country_specs + + @property + @deprecated( + """ + StripeClient.coupons is deprecated, use StripeClient.v1.coupons instead. + All functionality under it has been copied over to StripeClient.v1.coupons. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def coupons(self) -> "CouponService": + return self.v1.coupons + + @property + @deprecated( + """ + StripeClient.credit_notes is deprecated, use StripeClient.v1.credit_notes instead. + All functionality under it has been copied over to StripeClient.v1.credit_notes. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def credit_notes(self) -> "CreditNoteService": + return self.v1.credit_notes + + @property + @deprecated( + """ + StripeClient.customers is deprecated, use StripeClient.v1.customers instead. + All functionality under it has been copied over to StripeClient.v1.customers. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def customers(self) -> "CustomerService": + return self.v1.customers + + @property + @deprecated( + """ + StripeClient.customer_sessions is deprecated, use StripeClient.v1.customer_sessions instead. + All functionality under it has been copied over to StripeClient.v1.customer_sessions. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def customer_sessions(self) -> "CustomerSessionService": + return self.v1.customer_sessions + + @property + @deprecated( + """ + StripeClient.disputes is deprecated, use StripeClient.v1.disputes instead. + All functionality under it has been copied over to StripeClient.v1.disputes. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def disputes(self) -> "DisputeService": + return self.v1.disputes + + @property + @deprecated( + """ + StripeClient.entitlements is deprecated, use StripeClient.v1.entitlements instead. + All functionality under it has been copied over to StripeClient.v1.entitlements. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def entitlements(self) -> "EntitlementsService": + return self.v1.entitlements + + @property + @deprecated( + """ + StripeClient.ephemeral_keys is deprecated, use StripeClient.v1.ephemeral_keys instead. + All functionality under it has been copied over to StripeClient.v1.ephemeral_keys. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def ephemeral_keys(self) -> "EphemeralKeyService": + return self.v1.ephemeral_keys + + @property + @deprecated( + """ + StripeClient.events is deprecated, use StripeClient.v1.events instead. + All functionality under it has been copied over to StripeClient.v1.events. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def events(self) -> "EventService": + return self.v1.events + + @property + @deprecated( + """ + StripeClient.exchange_rates is deprecated, use StripeClient.v1.exchange_rates instead. + All functionality under it has been copied over to StripeClient.v1.exchange_rates. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def exchange_rates(self) -> "ExchangeRateService": + return self.v1.exchange_rates + + @property + @deprecated( + """ + StripeClient.files is deprecated, use StripeClient.v1.files instead. + All functionality under it has been copied over to StripeClient.v1.files. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def files(self) -> "FileService": + return self.v1.files + + @property + @deprecated( + """ + StripeClient.file_links is deprecated, use StripeClient.v1.file_links instead. + All functionality under it has been copied over to StripeClient.v1.file_links. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def file_links(self) -> "FileLinkService": + return self.v1.file_links + + @property + @deprecated( + """ + StripeClient.financial_connections is deprecated, use StripeClient.v1.financial_connections instead. + All functionality under it has been copied over to StripeClient.v1.financial_connections. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def financial_connections(self) -> "FinancialConnectionsService": + return self.v1.financial_connections + + @property + @deprecated( + """ + StripeClient.forwarding is deprecated, use StripeClient.v1.forwarding instead. + All functionality under it has been copied over to StripeClient.v1.forwarding. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def forwarding(self) -> "ForwardingService": + return self.v1.forwarding + + @property + @deprecated( + """ + StripeClient.identity is deprecated, use StripeClient.v1.identity instead. + All functionality under it has been copied over to StripeClient.v1.identity. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def identity(self) -> "IdentityService": + return self.v1.identity + + @property + @deprecated( + """ + StripeClient.invoices is deprecated, use StripeClient.v1.invoices instead. + All functionality under it has been copied over to StripeClient.v1.invoices. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def invoices(self) -> "InvoiceService": + return self.v1.invoices + + @property + @deprecated( + """ + StripeClient.invoice_items is deprecated, use StripeClient.v1.invoice_items instead. + All functionality under it has been copied over to StripeClient.v1.invoice_items. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def invoice_items(self) -> "InvoiceItemService": + return self.v1.invoice_items + + @property + @deprecated( + """ + StripeClient.invoice_payments is deprecated, use StripeClient.v1.invoice_payments instead. + All functionality under it has been copied over to StripeClient.v1.invoice_payments. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def invoice_payments(self) -> "InvoicePaymentService": + return self.v1.invoice_payments + + @property + @deprecated( + """ + StripeClient.invoice_rendering_templates is deprecated, use StripeClient.v1.invoice_rendering_templates instead. + All functionality under it has been copied over to StripeClient.v1.invoice_rendering_templates. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def invoice_rendering_templates(self) -> "InvoiceRenderingTemplateService": + return self.v1.invoice_rendering_templates + + @property + @deprecated( + """ + StripeClient.issuing is deprecated, use StripeClient.v1.issuing instead. + All functionality under it has been copied over to StripeClient.v1.issuing. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def issuing(self) -> "IssuingService": + return self.v1.issuing + + @property + @deprecated( + """ + StripeClient.mandates is deprecated, use StripeClient.v1.mandates instead. + All functionality under it has been copied over to StripeClient.v1.mandates. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def mandates(self) -> "MandateService": + return self.v1.mandates + + @property + @deprecated( + """ + StripeClient.payment_attempt_records is deprecated, use StripeClient.v1.payment_attempt_records instead. + All functionality under it has been copied over to StripeClient.v1.payment_attempt_records. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_attempt_records(self) -> "PaymentAttemptRecordService": + return self.v1.payment_attempt_records + + @property + @deprecated( + """ + StripeClient.payment_intents is deprecated, use StripeClient.v1.payment_intents instead. + All functionality under it has been copied over to StripeClient.v1.payment_intents. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_intents(self) -> "PaymentIntentService": + return self.v1.payment_intents + + @property + @deprecated( + """ + StripeClient.payment_links is deprecated, use StripeClient.v1.payment_links instead. + All functionality under it has been copied over to StripeClient.v1.payment_links. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_links(self) -> "PaymentLinkService": + return self.v1.payment_links + + @property + @deprecated( + """ + StripeClient.payment_methods is deprecated, use StripeClient.v1.payment_methods instead. + All functionality under it has been copied over to StripeClient.v1.payment_methods. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_methods(self) -> "PaymentMethodService": + return self.v1.payment_methods + + @property + @deprecated( + """ + StripeClient.payment_method_configurations is deprecated, use StripeClient.v1.payment_method_configurations instead. + All functionality under it has been copied over to StripeClient.v1.payment_method_configurations. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_method_configurations( + self, + ) -> "PaymentMethodConfigurationService": + return self.v1.payment_method_configurations + + @property + @deprecated( + """ + StripeClient.payment_method_domains is deprecated, use StripeClient.v1.payment_method_domains instead. + All functionality under it has been copied over to StripeClient.v1.payment_method_domains. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_method_domains(self) -> "PaymentMethodDomainService": + return self.v1.payment_method_domains + + @property + @deprecated( + """ + StripeClient.payment_records is deprecated, use StripeClient.v1.payment_records instead. + All functionality under it has been copied over to StripeClient.v1.payment_records. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payment_records(self) -> "PaymentRecordService": + return self.v1.payment_records + + @property + @deprecated( + """ + StripeClient.payouts is deprecated, use StripeClient.v1.payouts instead. + All functionality under it has been copied over to StripeClient.v1.payouts. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def payouts(self) -> "PayoutService": + return self.v1.payouts + + @property + @deprecated( + """ + StripeClient.plans is deprecated, use StripeClient.v1.plans instead. + All functionality under it has been copied over to StripeClient.v1.plans. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def plans(self) -> "PlanService": + return self.v1.plans + + @property + @deprecated( + """ + StripeClient.prices is deprecated, use StripeClient.v1.prices instead. + All functionality under it has been copied over to StripeClient.v1.prices. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def prices(self) -> "PriceService": + return self.v1.prices + + @property + @deprecated( + """ + StripeClient.products is deprecated, use StripeClient.v1.products instead. + All functionality under it has been copied over to StripeClient.v1.products. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def products(self) -> "ProductService": + return self.v1.products + + @property + @deprecated( + """ + StripeClient.promotion_codes is deprecated, use StripeClient.v1.promotion_codes instead. + All functionality under it has been copied over to StripeClient.v1.promotion_codes. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def promotion_codes(self) -> "PromotionCodeService": + return self.v1.promotion_codes + + @property + @deprecated( + """ + StripeClient.quotes is deprecated, use StripeClient.v1.quotes instead. + All functionality under it has been copied over to StripeClient.v1.quotes. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def quotes(self) -> "QuoteService": + return self.v1.quotes + + @property + @deprecated( + """ + StripeClient.radar is deprecated, use StripeClient.v1.radar instead. + All functionality under it has been copied over to StripeClient.v1.radar. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def radar(self) -> "RadarService": + return self.v1.radar + + @property + @deprecated( + """ + StripeClient.refunds is deprecated, use StripeClient.v1.refunds instead. + All functionality under it has been copied over to StripeClient.v1.refunds. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def refunds(self) -> "RefundService": + return self.v1.refunds + + @property + @deprecated( + """ + StripeClient.reporting is deprecated, use StripeClient.v1.reporting instead. + All functionality under it has been copied over to StripeClient.v1.reporting. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def reporting(self) -> "ReportingService": + return self.v1.reporting + + @property + @deprecated( + """ + StripeClient.reviews is deprecated, use StripeClient.v1.reviews instead. + All functionality under it has been copied over to StripeClient.v1.reviews. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def reviews(self) -> "ReviewService": + return self.v1.reviews + + @property + @deprecated( + """ + StripeClient.setup_attempts is deprecated, use StripeClient.v1.setup_attempts instead. + All functionality under it has been copied over to StripeClient.v1.setup_attempts. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def setup_attempts(self) -> "SetupAttemptService": + return self.v1.setup_attempts + + @property + @deprecated( + """ + StripeClient.setup_intents is deprecated, use StripeClient.v1.setup_intents instead. + All functionality under it has been copied over to StripeClient.v1.setup_intents. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def setup_intents(self) -> "SetupIntentService": + return self.v1.setup_intents + + @property + @deprecated( + """ + StripeClient.shipping_rates is deprecated, use StripeClient.v1.shipping_rates instead. + All functionality under it has been copied over to StripeClient.v1.shipping_rates. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def shipping_rates(self) -> "ShippingRateService": + return self.v1.shipping_rates + + @property + @deprecated( + """ + StripeClient.sigma is deprecated, use StripeClient.v1.sigma instead. + All functionality under it has been copied over to StripeClient.v1.sigma. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def sigma(self) -> "SigmaService": + return self.v1.sigma + + @property + @deprecated( + """ + StripeClient.sources is deprecated, use StripeClient.v1.sources instead. + All functionality under it has been copied over to StripeClient.v1.sources. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def sources(self) -> "SourceService": + return self.v1.sources + + @property + @deprecated( + """ + StripeClient.subscriptions is deprecated, use StripeClient.v1.subscriptions instead. + All functionality under it has been copied over to StripeClient.v1.subscriptions. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def subscriptions(self) -> "SubscriptionService": + return self.v1.subscriptions + + @property + @deprecated( + """ + StripeClient.subscription_items is deprecated, use StripeClient.v1.subscription_items instead. + All functionality under it has been copied over to StripeClient.v1.subscription_items. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def subscription_items(self) -> "SubscriptionItemService": + return self.v1.subscription_items + + @property + @deprecated( + """ + StripeClient.subscription_schedules is deprecated, use StripeClient.v1.subscription_schedules instead. + All functionality under it has been copied over to StripeClient.v1.subscription_schedules. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def subscription_schedules(self) -> "SubscriptionScheduleService": + return self.v1.subscription_schedules + + @property + @deprecated( + """ + StripeClient.tax is deprecated, use StripeClient.v1.tax instead. + All functionality under it has been copied over to StripeClient.v1.tax. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def tax(self) -> "TaxService": + return self.v1.tax + + @property + @deprecated( + """ + StripeClient.tax_codes is deprecated, use StripeClient.v1.tax_codes instead. + All functionality under it has been copied over to StripeClient.v1.tax_codes. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def tax_codes(self) -> "TaxCodeService": + return self.v1.tax_codes + + @property + @deprecated( + """ + StripeClient.tax_ids is deprecated, use StripeClient.v1.tax_ids instead. + All functionality under it has been copied over to StripeClient.v1.tax_ids. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def tax_ids(self) -> "TaxIdService": + return self.v1.tax_ids + + @property + @deprecated( + """ + StripeClient.tax_rates is deprecated, use StripeClient.v1.tax_rates instead. + All functionality under it has been copied over to StripeClient.v1.tax_rates. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def tax_rates(self) -> "TaxRateService": + return self.v1.tax_rates + + @property + @deprecated( + """ + StripeClient.terminal is deprecated, use StripeClient.v1.terminal instead. + All functionality under it has been copied over to StripeClient.v1.terminal. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def terminal(self) -> "TerminalService": + return self.v1.terminal + + @property + @deprecated( + """ + StripeClient.test_helpers is deprecated, use StripeClient.v1.test_helpers instead. + All functionality under it has been copied over to StripeClient.v1.test_helpers. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def test_helpers(self) -> "TestHelpersService": + return self.v1.test_helpers + + @property + @deprecated( + """ + StripeClient.tokens is deprecated, use StripeClient.v1.tokens instead. + All functionality under it has been copied over to StripeClient.v1.tokens. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def tokens(self) -> "TokenService": + return self.v1.tokens + + @property + @deprecated( + """ + StripeClient.topups is deprecated, use StripeClient.v1.topups instead. + All functionality under it has been copied over to StripeClient.v1.topups. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def topups(self) -> "TopupService": + return self.v1.topups + + @property + @deprecated( + """ + StripeClient.transfers is deprecated, use StripeClient.v1.transfers instead. + All functionality under it has been copied over to StripeClient.v1.transfers. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def transfers(self) -> "TransferService": + return self.v1.transfers + + @property + @deprecated( + """ + StripeClient.treasury is deprecated, use StripeClient.v1.treasury instead. + All functionality under it has been copied over to StripeClient.v1.treasury. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def treasury(self) -> "TreasuryService": + return self.v1.treasury + + @property + @deprecated( + """ + StripeClient.webhook_endpoints is deprecated, use StripeClient.v1.webhook_endpoints instead. + All functionality under it has been copied over to StripeClient.v1.webhook_endpoints. + See [migration guide](https://github.com/stripe/stripe-python/wiki/v1-namespace-in-StripeClient) for more on this and tips on migrating to the new v1 namespace. + """, + ) + def webhook_endpoints(self) -> "WebhookEndpointService": + return self.v1.webhook_endpoints + + # deprecated v1 services: The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_context.py b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_context.py new file mode 100644 index 00000000..48fa3d9f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_context.py @@ -0,0 +1,40 @@ +from typing import List, Optional + + +class StripeContext: + """ + The StripeContext class provides an immutable container and convenience methods for interacting with the `Stripe-Context` header. All methods return a new instance of StripeContext. + + You can use it whenever you're initializing a `StripeClient` or sending `stripe_context` with a request. It's also found in the `EventNotification.context` property. + """ + + def __init__(self, segments: Optional[List[str]] = None): + self._segments = segments or [] + + def push(self, segment: str) -> "StripeContext": + return StripeContext(self._segments + [segment]) + + def pop(self) -> "StripeContext": + if not self._segments: + raise ValueError("Cannot pop from an empty StripeContext") + + return StripeContext(self._segments[:-1]) + + def __str__(self) -> str: + return "/".join(self._segments) + + def __repr__(self) -> str: + return f"StripeContext({self._segments!r})" + + def __eq__(self, other) -> bool: + if not isinstance(other, StripeContext): + return False + return self._segments == other._segments + + @staticmethod + def parse(context_str: str) -> "StripeContext": + if not context_str: + return StripeContext() + + segments = context_str.split("/") + return StripeContext(segments) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_object.py b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_object.py new file mode 100644 index 00000000..0f44342f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_object.py @@ -0,0 +1,621 @@ +# pyright: strict +import datetime +import json +from copy import deepcopy +from typing_extensions import TYPE_CHECKING, Type, Literal, Self +from typing import ( + Any, + Dict, + List, + Optional, + Mapping, + Set, + Tuple, + ClassVar, + Union, + cast, + overload, +) + +# Used to break circular imports +import stripe # noqa: IMP101 +from stripe import _util + +from stripe._stripe_response import ( + StripeResponse, + StripeStreamResponse, + StripeStreamResponseAsync, +) +from stripe._encode import _encode_datetime # pyright: ignore +from stripe._request_options import ( + PERSISTENT_OPTIONS_KEYS, + extract_options_from_dict, +) +from stripe._api_mode import ApiMode +from stripe._base_address import BaseAddress + +if TYPE_CHECKING: + from stripe._api_requestor import _APIRequestor # pyright: ignore[reportPrivateUsage] + + +@overload +def _compute_diff( + current: Dict[str, Any], previous: Optional[Dict[str, Any]] +) -> Dict[str, Any]: ... + + +@overload +def _compute_diff( + current: object, previous: Optional[Dict[str, Any]] +) -> object: ... + + +def _compute_diff( + current: object, previous: Optional[Dict[str, Any]] +) -> object: + if isinstance(current, dict): + current = cast(Dict[str, Any], current) + previous = previous or {} + diff = current.copy() + for key in set(previous.keys()) - set(diff.keys()): + diff[key] = "" + return diff + return current if current is not None else "" + + +def _serialize_list( + array: Optional[List[Any]], previous: List[Any] +) -> Dict[str, Any]: + array = array or [] + previous = previous or [] + params: Dict[str, Any] = {} + + for i, v in enumerate(array): + previous_item = previous[i] if len(previous) > i else None + if hasattr(v, "serialize"): + params[str(i)] = v.serialize(previous_item) + else: + params[str(i)] = _compute_diff(v, previous_item) + + return params + + +class StripeObject(Dict[str, Any]): + class _ReprJSONEncoder(json.JSONEncoder): + def default(self, o: Any) -> Any: + if isinstance(o, datetime.datetime): + return _encode_datetime(o) + return super(StripeObject._ReprJSONEncoder, self).default(o) + + _retrieve_params: Mapping[str, Any] + _previous: Optional[Mapping[str, Any]] + + def __init__( + self, + id: Optional[str] = None, + api_key: Optional[str] = None, + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + last_response: Optional[StripeResponse] = None, + *, + _requestor: Optional["_APIRequestor"] = None, + # TODO: is a more specific type possible here? + **params: Any, + ): + super(StripeObject, self).__init__() + + self._unsaved_values: Set[str] = set() + self._transient_values: Set[str] = set() + self._last_response = last_response + + self._retrieve_params = params + self._previous = None + + from stripe._api_requestor import _APIRequestor # pyright: ignore[reportPrivateUsage] + + self._requestor = ( + _APIRequestor._global_with_options( # pyright: ignore[reportPrivateUsage] + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + ) + if _requestor is None + else _requestor + ) + + if id: + self["id"] = id + + @property + def api_key(self): + return self._requestor.api_key + + @property + def stripe_account(self): + return self._requestor.stripe_account + + @property + def stripe_version(self): + return self._requestor.stripe_version + + @property + def last_response(self) -> Optional[StripeResponse]: + return self._last_response + + # StripeObject inherits from `dict` which has an update method, and this doesn't quite match + # the full signature of the update method in MutableMapping. But we ignore. + def update( # pyright: ignore + self, update_dict: Mapping[str, Any] + ) -> None: + for k in update_dict: + self._unsaved_values.add(k) + + return super(StripeObject, self).update(update_dict) + + if not TYPE_CHECKING: + + def __setattr__(self, k, v): + if k in PERSISTENT_OPTIONS_KEYS: + self._requestor = self._requestor._new_requestor_with_options( + {k: v} + ) + return None + + if k[0] == "_" or k in self.__dict__: + return super(StripeObject, self).__setattr__(k, v) + + self[k] = v + return None + + def __getattr__(self, k): + if k[0] == "_": + raise AttributeError(k) + + try: + if k in self._field_remappings: + k = self._field_remappings[k] + return self[k] + except KeyError as err: + raise AttributeError(*err.args) from err + + def __delattr__(self, k): + if k[0] == "_" or k in self.__dict__: + return super(StripeObject, self).__delattr__(k) + else: + del self[k] + + def __setitem__(self, k: str, v: Any) -> None: + if v == "": + raise ValueError( + "You cannot set %s to an empty string on this object. " + "The empty string is treated specially in our requests. " + "If you'd like to delete the property using the save() method on this object, you may set %s.%s=None. " + "Alternatively, you can pass %s='' to delete the property when using a resource method such as modify()." + % (k, str(self), k, k) + ) + + # Allows for unpickling in Python 3.x + if not hasattr(self, "_unsaved_values"): + self._unsaved_values = set() + + self._unsaved_values.add(k) + + super(StripeObject, self).__setitem__(k, v) + + def __getitem__(self, k: str) -> Any: + try: + return super(StripeObject, self).__getitem__(k) + except KeyError as err: + if k in self._transient_values: + raise KeyError( + "%r. HINT: The %r attribute was set in the past." + "It was then wiped when refreshing the object with " + "the result returned by Stripe's API, probably as a " + "result of a save(). The attributes currently " + "available on this object are: %s" + % (k, k, ", ".join(list(self.keys()))) + ) + else: + raise err + + def __delitem__(self, k: str) -> None: + super(StripeObject, self).__delitem__(k) + + # Allows for unpickling in Python 3.x + if hasattr(self, "_unsaved_values") and k in self._unsaved_values: + self._unsaved_values.remove(k) + + # Custom unpickling method that uses `update` to update the dictionary + # without calling __setitem__, which would fail if any value is an empty + # string + def __setstate__(self, state: Dict[str, Any]) -> None: + self.update(state) + + # Custom pickling method to ensure the instance is pickled as a custom + # class and not as a dict, otherwise __setstate__ would not be called when + # unpickling. + def __reduce__(self) -> Tuple[Any, ...]: + reduce_value = ( + type(self), # callable + ( # args + self.get("id", None), + self.api_key, + self.stripe_version, + self.stripe_account, + ), + dict(self), # state + ) + return reduce_value + + @classmethod + def construct_from( + cls, + values: Dict[str, Any], + key: Optional[str], + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + last_response: Optional[StripeResponse] = None, + *, + api_mode: ApiMode = "V1", + ) -> Self: + from stripe._api_requestor import _APIRequestor # pyright: ignore[reportPrivateUsage] + + return cls._construct_from( + values=values, + requestor=_APIRequestor._global_with_options( # pyright: ignore[reportPrivateUsage] + api_key=key, + stripe_version=stripe_version, + stripe_account=stripe_account, + ), + api_mode=api_mode, + last_response=last_response, + ) + + @classmethod + def _construct_from( + cls, + *, + values: Dict[str, Any], + last_response: Optional[StripeResponse] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + ) -> Self: + instance = cls( + values.get("id"), + last_response=last_response, + _requestor=requestor, + ) + instance._refresh_from( + values=values, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + return instance + + def refresh_from( + self, + values: Dict[str, Any], + api_key: Optional[str] = None, + partial: Optional[bool] = False, + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + last_response: Optional[StripeResponse] = None, + *, + api_mode: ApiMode = "V1", + ) -> None: + self._refresh_from( + values=values, + partial=partial, + last_response=last_response, + requestor=self._requestor._new_requestor_with_options( # pyright: ignore[reportPrivateUsage] + { + "api_key": api_key, + "stripe_version": stripe_version, + "stripe_account": stripe_account, + } + ), + api_mode=api_mode, + ) + + def _refresh_from( + self, + *, + values: Dict[str, Any], + partial: Optional[bool] = False, + last_response: Optional[StripeResponse] = None, + requestor: Optional["_APIRequestor"] = None, + api_mode: ApiMode, + ) -> None: + self._requestor = requestor or self._requestor + self._last_response = last_response or getattr( + values, "_last_response", None + ) + + # Wipe old state before setting new. This is useful for e.g. + # updating a customer, where there is no persistent card + # parameter. Mark those values which don't persist as transient + if partial: + self._unsaved_values = self._unsaved_values - set(values) + else: + removed = set(self.keys()) - set(values) + self._transient_values = self._transient_values | removed + self._unsaved_values = set() + self.clear() + + self._transient_values = self._transient_values - set(values) + + for k, v in values.items(): + inner_class = self._get_inner_class_type(k) + is_dict = self._get_inner_class_is_beneath_dict(k) + if is_dict: + obj = { + k: None + if v is None + else cast( + StripeObject, + _util._convert_to_stripe_object( # pyright: ignore[reportPrivateUsage] + resp=v, + params=None, + klass_=inner_class, + requestor=self._requestor, + api_mode=api_mode, + ), + ) + for k, v in v.items() + } + else: + obj = cast( + Union[StripeObject, List[StripeObject]], + _util._convert_to_stripe_object( # pyright: ignore[reportPrivateUsage] + resp=v, + params=None, + klass_=inner_class, + requestor=self._requestor, + api_mode=api_mode, + ), + ) + super(StripeObject, self).__setitem__(k, obj) + + self._previous = values + + @_util.deprecated( + "This will be removed in a future version of stripe-python." + ) + def request( + self, + method: Literal["get", "post", "delete"], + url: str, + params: Optional[Dict[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ) -> "StripeObject": + return StripeObject._request( + self, + method, + url, + params=params, + base_address=base_address, + ) + + def _request( + self, + method: Literal["get", "post", "delete"], + url: str, + params: Optional[Mapping[str, Any]] = None, + usage: Optional[List[str]] = None, + *, + base_address: BaseAddress, + ) -> "StripeObject": + if params is None: + params = self._retrieve_params + + request_options, request_params = extract_options_from_dict(params) + + return self._requestor.request( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + usage=usage, + ) + + async def _request_async( + self, + method: Literal["get", "post", "delete"], + url: str, + params: Optional[Mapping[str, Any]] = None, + usage: Optional[List[str]] = None, + *, + base_address: BaseAddress, + ) -> "StripeObject": + if params is None: + params = self._retrieve_params + + request_options, request_params = extract_options_from_dict(params) + + return await self._requestor.request_async( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + usage=usage, + ) + + def _request_stream( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ) -> StripeStreamResponse: + if params is None: + params = self._retrieve_params + + request_options, request_params = extract_options_from_dict(params) + return self._requestor.request_stream( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + ) + + async def _request_stream_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + *, + base_address: BaseAddress = "api", + ) -> StripeStreamResponseAsync: + if params is None: + params = self._retrieve_params + + request_options, request_params = extract_options_from_dict(params) + return await self._requestor.request_stream_async( + method, + url, + params=request_params, + options=request_options, + base_address=base_address, + ) + + def __repr__(self) -> str: + ident_parts = [type(self).__name__] + + obj_str = self.get("object") + if isinstance(obj_str, str): + ident_parts.append(obj_str) + + if isinstance(self.get("id"), str): + ident_parts.append("id=%s" % (self.get("id"),)) + + unicode_repr = "<%s at %s> JSON: %s" % ( + " ".join(ident_parts), + hex(id(self)), + str(self), + ) + return unicode_repr + + def __str__(self) -> str: + return json.dumps( + self._to_dict_recursive(), + sort_keys=True, + indent=2, + cls=self._ReprJSONEncoder, + ) + + @_util.deprecated( + "Deprecated. The public interface will be removed in a future version." + ) + def to_dict(self) -> Dict[str, Any]: + return dict(self) + + def _to_dict_recursive(self) -> Dict[str, Any]: + def maybe_to_dict_recursive( + value: Optional[Union[StripeObject, Dict[str, Any]]], + ) -> Optional[Dict[str, Any]]: + if value is None: + return None + elif isinstance(value, StripeObject): + return value._to_dict_recursive() + else: + return value + + return { + key: list(map(maybe_to_dict_recursive, cast(List[Any], value))) + if isinstance(value, list) + else maybe_to_dict_recursive(value) + for key, value in dict(self).items() + } + + @_util.deprecated( + "For internal stripe-python use only. The public interface will be removed in a future version." + ) + def to_dict_recursive(self) -> Dict[str, Any]: + return self._to_dict_recursive() + + @property + @_util.deprecated( + "For internal stripe-python use only. The public interface will be removed in a future version." + ) + def stripe_id(self) -> Optional[str]: + return getattr(self, "id") + + def serialize( + self, previous: Optional[Mapping[str, Any]] + ) -> Dict[str, Any]: + params: Dict[str, Any] = {} + unsaved_keys = self._unsaved_values or set() + previous = previous or self._previous or {} + + for k, v in self.items(): + if k == "id" or k.startswith("_"): + continue + elif isinstance(v, stripe.APIResource): + continue + elif hasattr(v, "serialize"): + child = v.serialize(previous.get(k, None)) + if child != {}: + params[k] = child + elif k in unsaved_keys: + params[k] = _compute_diff(v, previous.get(k, None)) + elif k == "additional_owners" and v is not None: + params[k] = _serialize_list(v, previous.get(k, None)) + + return params + + # This class overrides __setitem__ to throw exceptions on inputs that it + # doesn't like. This can cause problems when we try to copy an object + # wholesale because some data that's returned from the API may not be valid + # if it was set to be set manually. Here we override the class' copy + # arguments so that we can bypass these possible exceptions on __setitem__. + def __copy__(self) -> "StripeObject": + copied = StripeObject( + self.get("id"), + self.api_key, + stripe_version=self.stripe_version, + stripe_account=self.stripe_account, + ) + + copied._retrieve_params = self._retrieve_params + + for k, v in self.items(): + # Call parent's __setitem__ to avoid checks that we've added in the + # overridden version that can throw exceptions. + super(StripeObject, copied).__setitem__(k, v) + + return copied + + # This class overrides __setitem__ to throw exceptions on inputs that it + # doesn't like. This can cause problems when we try to copy an object + # wholesale because some data that's returned from the API may not be valid + # if it was set to be set manually. Here we override the class' copy + # arguments so that we can bypass these possible exceptions on __setitem__. + def __deepcopy__(self, memo: Dict[int, Any]) -> "StripeObject": + copied = self.__copy__() + memo[id(self)] = copied + + for k, v in self.items(): + # Call parent's __setitem__ to avoid checks that we've added in the + # overridden version that can throw exceptions. + super(StripeObject, copied).__setitem__(k, deepcopy(v, memo)) + + return copied + + _field_remappings: ClassVar[Dict[str, str]] = {} + + _inner_class_types: ClassVar[Dict[str, Type["StripeObject"]]] = {} + _inner_class_dicts: ClassVar[List[str]] = [] + + def _get_inner_class_type( + self, field_name: str + ) -> Optional[Type["StripeObject"]]: + return self._inner_class_types.get(field_name) + + def _get_inner_class_is_beneath_dict(self, field_name: str): + return field_name in self._inner_class_dicts diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_response.py b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_response.py new file mode 100644 index 00000000..28f0d69e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_response.py @@ -0,0 +1,65 @@ +# pyright: strict +from io import IOBase +import json +from collections import OrderedDict +from typing import Mapping, Optional, AsyncIterable + + +class StripeResponseBase(object): + code: int + headers: Mapping[str, str] + + def __init__(self, code: int, headers: Mapping[str, str]): + self.code = code + self.headers = headers + + @property + def idempotency_key(self) -> Optional[str]: + try: + return self.headers["idempotency-key"] + except KeyError: + return None + + @property + def request_id(self) -> Optional[str]: + try: + return self.headers["request-id"] + except KeyError: + return None + + +class StripeResponse(StripeResponseBase): + body: str + data: object + + def __init__(self, body: str, code: int, headers: Mapping[str, str]): + StripeResponseBase.__init__(self, code, headers) + self.body = body + self.data = json.loads(body, object_pairs_hook=OrderedDict) + + +class StripeStreamResponse(StripeResponseBase): + io: IOBase + + def __init__(self, io: IOBase, code: int, headers: Mapping[str, str]): + StripeResponseBase.__init__(self, code, headers) + self.io = io + + +class StripeStreamResponseAsync(StripeResponseBase): + _stream: AsyncIterable[bytes] + + def __init__( + self, + stream: AsyncIterable[bytes], + code: int, + headers: Mapping[str, str], + ): + StripeResponseBase.__init__(self, code, headers) + self._stream = stream + + def stream(self) -> AsyncIterable[bytes]: + return self._stream + + async def read_async(self) -> bytes: + return b"".join([chunk async for chunk in self._stream]) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_service.py new file mode 100644 index 00000000..e72279f4 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_stripe_service.py @@ -0,0 +1,91 @@ +from stripe._api_requestor import ( + _APIRequestor, +) +from stripe._stripe_response import ( + StripeStreamResponse, + StripeStreamResponseAsync, +) +from stripe._stripe_object import StripeObject +from stripe._request_options import RequestOptions +from stripe._base_address import BaseAddress + +from typing import Any, Mapping, Optional + + +class StripeService(object): + _requestor: _APIRequestor + + def __init__(self, requestor): + self._requestor = requestor + + def _request( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + ) -> StripeObject: + return self._requestor.request( + method, + url, + params, + options, + base_address=base_address, + usage=["stripe_client"], + ) + + async def _request_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + ) -> StripeObject: + return await self._requestor.request_async( + method, + url, + params, + options, + base_address=base_address, + usage=["stripe_client"], + ) + + def _request_stream( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + ) -> StripeStreamResponse: + return self._requestor.request_stream( + method, + url, + params, + options, + base_address=base_address, + usage=["stripe_client"], + ) + + async def _request_stream_async( + self, + method: str, + url: str, + params: Optional[Mapping[str, Any]] = None, + options: Optional[RequestOptions] = None, + *, + base_address: BaseAddress, + ) -> StripeStreamResponseAsync: + return await self._requestor.request_stream_async( + method, + url, + params, + options, + base_address=base_address, + usage=["stripe_client"], + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription.py new file mode 100644 index 00000000..05db3e64 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription.py @@ -0,0 +1,1433 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._search_result_object import SearchResultObject +from stripe._searchable_api_resource import SearchableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ( + AsyncIterator, + ClassVar, + Dict, + Iterator, + List, + Optional, + Union, + cast, + overload, +) +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._bank_account import BankAccount + from stripe._card import Card as CardResource + from stripe._customer import Customer + from stripe._discount import Discount + from stripe._invoice import Invoice + from stripe._payment_method import PaymentMethod + from stripe._setup_intent import SetupIntent + from stripe._source import Source + from stripe._subscription_item import SubscriptionItem + from stripe._subscription_schedule import SubscriptionSchedule + from stripe._tax_id import TaxId + from stripe._tax_rate import TaxRate + from stripe.params._subscription_cancel_params import ( + SubscriptionCancelParams, + ) + from stripe.params._subscription_create_params import ( + SubscriptionCreateParams, + ) + from stripe.params._subscription_delete_discount_params import ( + SubscriptionDeleteDiscountParams, + ) + from stripe.params._subscription_list_params import SubscriptionListParams + from stripe.params._subscription_migrate_params import ( + SubscriptionMigrateParams, + ) + from stripe.params._subscription_modify_params import ( + SubscriptionModifyParams, + ) + from stripe.params._subscription_resume_params import ( + SubscriptionResumeParams, + ) + from stripe.params._subscription_retrieve_params import ( + SubscriptionRetrieveParams, + ) + from stripe.params._subscription_search_params import ( + SubscriptionSearchParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class Subscription( + CreateableAPIResource["Subscription"], + DeletableAPIResource["Subscription"], + ListableAPIResource["Subscription"], + SearchableAPIResource["Subscription"], + UpdateableAPIResource["Subscription"], +): + """ + Subscriptions allow you to charge a customer on a recurring basis. + + Related guide: [Creating subscriptions](https://stripe.com/docs/billing/subscriptions/creating) + """ + + OBJECT_NAME: ClassVar[Literal["subscription"]] = "subscription" + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + disabled_reason: Optional[Literal["requires_location_inputs"]] + """ + If Stripe disabled automatic tax, this enum describes why. + """ + enabled: bool + """ + Whether Stripe automatically computes tax on this subscription. + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + _inner_class_types = {"liability": Liability} + + class BillingCycleAnchorConfig(StripeObject): + day_of_month: int + """ + The day of the month of the billing_cycle_anchor. + """ + hour: Optional[int] + """ + The hour of the day of the billing_cycle_anchor. + """ + minute: Optional[int] + """ + The minute of the hour of the billing_cycle_anchor. + """ + month: Optional[int] + """ + The month to start full cycle billing periods. + """ + second: Optional[int] + """ + The second of the minute of the billing_cycle_anchor. + """ + + class BillingMode(StripeObject): + class Flexible(StripeObject): + proration_discounts: Optional[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + flexible: Optional[Flexible] + """ + Configure behavior for flexible billing mode + """ + type: Literal["classic", "flexible"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + updated_at: Optional[int] + """ + Details on when the current billing_mode was adopted. + """ + _inner_class_types = {"flexible": Flexible} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + """ + Monetary threshold that triggers the subscription to create an invoice + """ + reset_billing_cycle_anchor: Optional[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. This value may not be `true` if the subscription contains items with plans that have `aggregate_usage=last_ever`. + """ + + class CancellationDetails(StripeObject): + comment: Optional[str] + """ + Additional comments about why the user canceled the subscription, if the subscription was canceled explicitly by the user. + """ + feedback: Optional[ + Literal[ + "customer_service", + "low_quality", + "missing_features", + "other", + "switched_service", + "too_complex", + "too_expensive", + "unused", + ] + ] + """ + The customer submitted reason for why they canceled, if the subscription was canceled explicitly by the user. + """ + reason: Optional[ + Literal[ + "cancellation_requested", "payment_disputed", "payment_failed" + ] + ] + """ + Why this subscription was canceled. + """ + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + """ + The account tax IDs associated with the subscription. Will be set on invoices generated by the subscription. + """ + issuer: Issuer + _inner_class_types = {"issuer": Issuer} + + class PauseCollection(StripeObject): + behavior: Literal["keep_as_draft", "mark_uncollectible", "void"] + """ + The payment collection behavior for this subscription while paused. One of `keep_as_draft`, `mark_uncollectible`, or `void`. + """ + resumes_at: Optional[int] + """ + The time after which the subscription will resume collecting payments. + """ + + class PaymentSettings(StripeObject): + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + transaction_type: Optional[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + mandate_options: Optional[MandateOptions] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + preferred_language: Literal["de", "en", "fr", "nl"] + """ + Preferred language of the Bancontact authorization page that the customer is redirected to. + """ + + class Card(StripeObject): + class MandateOptions(StripeObject): + amount: Optional[int] + """ + Amount to be charged for future payments. + """ + amount_type: Optional[Literal["fixed", "maximum"]] + """ + One of `fixed` or `maximum`. If `fixed`, the `amount` param refers to the exact amount to be charged in future payments. If `maximum`, the amount charged can be up to the value passed for the `amount` param. + """ + description: Optional[str] + """ + A description of the mandate or subscription that is meant to be displayed to the customer. + """ + + mandate_options: Optional[MandateOptions] + network: Optional[ + Literal[ + "amex", + "cartes_bancaires", + "diners", + "discover", + "eftpos_au", + "girocard", + "interac", + "jcb", + "link", + "mastercard", + "unionpay", + "unknown", + "visa", + ] + ] + """ + Selected network to process this Subscription on. Depends on the available networks of the card attached to the Subscription. Can be only set confirm-time. + """ + request_three_d_secure: Optional[ + Literal["any", "automatic", "challenge"] + ] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + eu_bank_transfer: Optional[EuBankTransfer] + type: Optional[str] + """ + The bank transfer type that can be used for funding. Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + _inner_class_types = {"bank_transfer": BankTransfer} + + class Konbini(StripeObject): + pass + + class SepaDebit(StripeObject): + pass + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class Filters(StripeObject): + account_subcategories: Optional[ + List[Literal["checking", "savings"]] + ] + """ + The account subcategories to use to filter for possible accounts to link. Valid subcategories are `checking` and `savings`. + """ + + filters: Optional[Filters] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + """ + The list of permissions to request. The `payment_method` permission must be included. + """ + prefetch: Optional[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + Data features requested to be retrieved upon account creation. + """ + _inner_class_types = {"filters": Filters} + + financial_connections: Optional[FinancialConnections] + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = { + "financial_connections": FinancialConnections, + } + + acss_debit: Optional[AcssDebit] + """ + This sub-hash contains details about the Canadian pre-authorized debit payment method options to pass to invoices created by the subscription. + """ + bancontact: Optional[Bancontact] + """ + This sub-hash contains details about the Bancontact payment method options to pass to invoices created by the subscription. + """ + card: Optional[Card] + """ + This sub-hash contains details about the Card payment method options to pass to invoices created by the subscription. + """ + customer_balance: Optional[CustomerBalance] + """ + This sub-hash contains details about the Bank transfer payment method options to pass to invoices created by the subscription. + """ + konbini: Optional[Konbini] + """ + This sub-hash contains details about the Konbini payment method options to pass to invoices created by the subscription. + """ + sepa_debit: Optional[SepaDebit] + """ + This sub-hash contains details about the SEPA Direct Debit payment method options to pass to invoices created by the subscription. + """ + us_bank_account: Optional[UsBankAccount] + """ + This sub-hash contains details about the ACH direct debit payment method options to pass to invoices created by the subscription. + """ + _inner_class_types = { + "acss_debit": AcssDebit, + "bancontact": Bancontact, + "card": Card, + "customer_balance": CustomerBalance, + "konbini": Konbini, + "sepa_debit": SepaDebit, + "us_bank_account": UsBankAccount, + } + + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment-method-specific configuration to provide to invoices created by the subscription. + """ + payment_method_types: Optional[ + List[ + Literal[ + "ach_credit_transfer", + "ach_debit", + "acss_debit", + "affirm", + "amazon_pay", + "au_becs_debit", + "bacs_debit", + "bancontact", + "boleto", + "card", + "cashapp", + "crypto", + "custom", + "customer_balance", + "eps", + "fpx", + "giropay", + "grabpay", + "ideal", + "jp_credit_transfer", + "kakao_pay", + "klarna", + "konbini", + "kr_card", + "link", + "multibanco", + "naver_pay", + "nz_bank_account", + "p24", + "payco", + "paynow", + "paypal", + "promptpay", + "revolut_pay", + "sepa_credit_transfer", + "sepa_debit", + "sofort", + "swish", + "us_bank_account", + "wechat_pay", + ] + ] + ] + """ + The list of payment method types to provide to every invoice created by the subscription. If not set, Stripe attempts to automatically determine the types to use by looking at the invoice's default payment method, the subscription's default payment method, the customer's default payment method, and your [invoice template settings](https://dashboard.stripe.com/settings/billing/invoice). + """ + save_default_payment_method: Optional[ + Literal["off", "on_subscription"] + ] + """ + Configure whether Stripe updates `subscription.default_payment_method` when payment succeeds. Defaults to `off`. + """ + _inner_class_types = {"payment_method_options": PaymentMethodOptions} + + class PendingInvoiceItemInterval(StripeObject): + interval: Literal["day", "month", "week", "year"] + """ + Specifies invoicing frequency. Either `day`, `week`, `month` or `year`. + """ + interval_count: int + """ + The number of intervals between invoices. For example, `interval=month` and `interval_count=3` bills every 3 months. Maximum of one year interval allowed (1 year, 12 months, or 52 weeks). + """ + + class PendingUpdate(StripeObject): + billing_cycle_anchor: Optional[int] + """ + If the update is applied, determines the date of the first full invoice, and, for plans with `month` or `year` intervals, the day of the month for subsequent invoices. The timestamp is in UTC format. + """ + expires_at: int + """ + The point after which the changes reflected by this update will be discarded and no longer applied. + """ + subscription_items: Optional[List["SubscriptionItem"]] + """ + List of subscription items, each with an attached plan, that will be set if the update is applied. + """ + trial_end: Optional[int] + """ + Unix timestamp representing the end of the trial period the customer will get before being charged for the first time, if the update is applied. + """ + trial_from_plan: Optional[bool] + """ + Indicates if a plan's `trial_period_days` should be applied to the subscription. Setting `trial_end` per subscription is preferred, and this defaults to `false`. Setting this flag to `true` together with `trial_end` is not allowed. See [Using trial periods on subscriptions](https://stripe.com/docs/billing/subscriptions/trials) to learn more. + """ + + class TransferData(StripeObject): + amount_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: ExpandableField["Account"] + """ + The account where funds from the payment will be transferred to upon payment success. + """ + + class TrialSettings(StripeObject): + class EndBehavior(StripeObject): + missing_payment_method: Literal[ + "cancel", "create_invoice", "pause" + ] + """ + Indicates how the subscription should change when the trial ends if the user did not provide a payment method. + """ + + end_behavior: EndBehavior + """ + Defines how a subscription behaves when a free trial ends. + """ + _inner_class_types = {"end_behavior": EndBehavior} + + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect Application that created the subscription. + """ + application_fee_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. + """ + automatic_tax: AutomaticTax + billing_cycle_anchor: int + """ + The reference point that aligns future [billing cycle](https://stripe.com/docs/subscriptions/billing-cycle) dates. It sets the day of week for `week` intervals, the day of month for `month` and `year` intervals, and the month of year for `year` intervals. The timestamp is in UTC format. + """ + billing_cycle_anchor_config: Optional[BillingCycleAnchorConfig] + """ + The fixed values used to calculate the `billing_cycle_anchor`. + """ + billing_mode: BillingMode + """ + The billing mode of the subscription. + """ + billing_thresholds: Optional[BillingThresholds] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period + """ + cancel_at: Optional[int] + """ + A date in the future at which the subscription will automatically get canceled + """ + cancel_at_period_end: bool + """ + Whether this subscription will (if `status=active`) or did (if `status=canceled`) cancel at the end of the current billing period. + """ + canceled_at: Optional[int] + """ + If the subscription has been canceled, the date of that cancellation. If the subscription was canceled with `cancel_at_period_end`, `canceled_at` will reflect the time of the most recent update request, not the end of the subscription period when the subscription is automatically moved to a canceled state. + """ + cancellation_details: Optional[CancellationDetails] + """ + Details about why this subscription was cancelled + """ + collection_method: Literal["charge_automatically", "send_invoice"] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay this subscription at the end of the cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + customer: ExpandableField["Customer"] + """ + ID of the customer who owns the subscription. + """ + days_until_due: Optional[int] + """ + Number of days a customer has to pay invoices generated by this subscription. This value will be `null` for subscriptions where `collection_method=charge_automatically`. + """ + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the default payment method for the subscription. It must belong to the customer associated with the subscription. This takes precedence over `default_source`. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_source: Optional[ + ExpandableField[ + Union["Account", "BankAccount", "CardResource", "Source"] + ] + ] + """ + ID of the default payment source for the subscription. It must belong to the customer associated with the subscription and be in a chargeable state. If `default_payment_method` is also set, `default_payment_method` will take precedence. If neither are set, invoices will use the customer's [invoice_settings.default_payment_method](https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method) or [default_source](https://stripe.com/docs/api/customers/object#customer_object-default_source). + """ + default_tax_rates: Optional[List["TaxRate"]] + """ + The tax rates that will apply to any subscription item that does not have `tax_rates` set. Invoices created will have their `default_tax_rates` populated from the subscription. + """ + description: Optional[str] + """ + The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: List[ExpandableField["Discount"]] + """ + The discounts applied to the subscription. Subscription item discounts are applied before subscription discounts. Use `expand[]=discounts` to expand each discount. + """ + ended_at: Optional[int] + """ + If the subscription has ended, the date the subscription ended. + """ + id: str + """ + Unique identifier for the object. + """ + invoice_settings: InvoiceSettings + items: ListObject["SubscriptionItem"] + """ + List of subscription items, each with an attached price. + """ + latest_invoice: Optional[ExpandableField["Invoice"]] + """ + The most recent invoice this subscription has generated. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + next_pending_invoice_item_invoice: Optional[int] + """ + Specifies the approximate timestamp on which any pending invoice items will be billed according to the schedule provided at `pending_invoice_item_interval`. + """ + object: Literal["subscription"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) the charge was made on behalf of for charges associated with this subscription. See the [Connect documentation](https://stripe.com/docs/connect/subscriptions#on-behalf-of) for details. + """ + pause_collection: Optional[PauseCollection] + """ + If specified, payment collection for this subscription will be paused. Note that the subscription status will be unchanged and will not be updated to `paused`. Learn more about [pausing collection](https://stripe.com/docs/billing/subscriptions/pause-payment). + """ + payment_settings: Optional[PaymentSettings] + """ + Payment settings passed on to invoices created by the subscription. + """ + pending_invoice_item_interval: Optional[PendingInvoiceItemInterval] + """ + Specifies an interval for how often to bill for any pending invoice items. It is analogous to calling [Create an invoice](https://stripe.com/docs/api#create_invoice) for the given subscription at the specified interval. + """ + pending_setup_intent: Optional[ExpandableField["SetupIntent"]] + """ + You can use this [SetupIntent](https://stripe.com/docs/api/setup_intents) to collect user authentication when creating a subscription without immediate payment or updating a subscription's payment method, allowing you to optimize for off-session payments. Learn more in the [SCA Migration Guide](https://stripe.com/docs/billing/migration/strong-customer-authentication#scenario-2). + """ + pending_update: Optional[PendingUpdate] + """ + If specified, [pending updates](https://stripe.com/docs/billing/subscriptions/pending-updates) that will be applied to the subscription once the `latest_invoice` has been paid. + """ + schedule: Optional[ExpandableField["SubscriptionSchedule"]] + """ + The schedule attached to the subscription + """ + start_date: int + """ + Date when the subscription was first created. The date might differ from the `created` date due to backdating. + """ + status: Literal[ + "active", + "canceled", + "incomplete", + "incomplete_expired", + "past_due", + "paused", + "trialing", + "unpaid", + ] + """ + Possible values are `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `canceled`, `unpaid`, or `paused`. + + For `collection_method=charge_automatically` a subscription moves into `incomplete` if the initial payment attempt fails. A subscription in this status can only have metadata and default_source updated. Once the first invoice is paid, the subscription moves into an `active` status. If the first invoice is not paid within 23 hours, the subscription transitions to `incomplete_expired`. This is a terminal status, the open invoice will be voided and no further invoices will be generated. + + A subscription that is currently in a trial period is `trialing` and moves to `active` when the trial period is over. + + A subscription can only enter a `paused` status [when a trial ends without a payment method](https://stripe.com/docs/billing/subscriptions/trials#create-free-trials-without-payment). A `paused` subscription doesn't generate invoices and can be resumed after your customer adds their payment method. The `paused` status is different from [pausing collection](https://stripe.com/docs/billing/subscriptions/pause-payment), which still generates invoices and leaves the subscription's status unchanged. + + If subscription `collection_method=charge_automatically`, it becomes `past_due` when payment is required but cannot be paid (due to failed payment or awaiting additional user actions). Once Stripe has exhausted all payment retry attempts, the subscription will become `canceled` or `unpaid` (depending on your subscriptions settings). + + If subscription `collection_method=send_invoice` it becomes `past_due` when its invoice is not paid by the due date, and `canceled` or `unpaid` if it is still not paid by an additional deadline after that. Note that when a subscription has a status of `unpaid`, no subsequent invoices will be attempted (invoices will be created, but then immediately automatically closed). After receiving updated payment information from a customer, you may choose to reopen and pay their closed invoices. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this subscription belongs to. + """ + transfer_data: Optional[TransferData] + """ + The account (if any) the subscription's payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription's invoices. + """ + trial_end: Optional[int] + """ + If the subscription has a trial, the end of that trial. + """ + trial_settings: Optional[TrialSettings] + """ + Settings related to subscription trials. + """ + trial_start: Optional[int] + """ + If the subscription has a trial, the beginning of that trial. + """ + + @classmethod + def _cls_cancel( + cls, + subscription_exposed_id: str, + **params: Unpack["SubscriptionCancelParams"], + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + cls._static_request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + subscription_exposed_id: str, + **params: Unpack["SubscriptionCancelParams"], + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + ... + + @overload + def cancel( + self, **params: Unpack["SubscriptionCancelParams"] + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionCancelParams"] + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, + subscription_exposed_id: str, + **params: Unpack["SubscriptionCancelParams"], + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + await cls._static_request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + subscription_exposed_id: str, + **params: Unpack["SubscriptionCancelParams"], + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["SubscriptionCancelParams"] + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionCancelParams"] + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + await self._request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["SubscriptionCreateParams"] + ) -> "Subscription": + """ + Creates a new subscription on an existing customer. Each customer can have up to 500 active or scheduled subscriptions. + + When you create a subscription with collection_method=charge_automatically, the first invoice is finalized as part of the request. + The payment_behavior parameter determines the exact behavior of the initial payment. + + To start subscriptions where the first invoice always begins in a draft status, use [subscription schedules](https://docs.stripe.com/docs/billing/subscriptions/subscription-schedules#managing) instead. + Schedules provide the flexibility to model more complex billing configurations that change over time. + """ + return cast( + "Subscription", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SubscriptionCreateParams"] + ) -> "Subscription": + """ + Creates a new subscription on an existing customer. Each customer can have up to 500 active or scheduled subscriptions. + + When you create a subscription with collection_method=charge_automatically, the first invoice is finalized as part of the request. + The payment_behavior parameter determines the exact behavior of the initial payment. + + To start subscriptions where the first invoice always begins in a draft status, use [subscription schedules](https://docs.stripe.com/docs/billing/subscriptions/subscription-schedules#managing) instead. + Schedules provide the flexibility to model more complex billing configurations that change over time. + """ + return cast( + "Subscription", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete_discount( + cls, + subscription_exposed_id: str, + **params: Unpack["SubscriptionDeleteDiscountParams"], + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + cls._static_request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + def delete_discount( + subscription_exposed_id: str, + **params: Unpack["SubscriptionDeleteDiscountParams"], + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + ... + + @overload + def delete_discount( + self, **params: Unpack["SubscriptionDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + ... + + @class_method_variant("_cls_delete_discount") + def delete_discount( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_delete_discount_async( + cls, + subscription_exposed_id: str, + **params: Unpack["SubscriptionDeleteDiscountParams"], + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + await cls._static_request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def delete_discount_async( + subscription_exposed_id: str, + **params: Unpack["SubscriptionDeleteDiscountParams"], + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + ... + + @overload + async def delete_discount_async( + self, **params: Unpack["SubscriptionDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + ... + + @class_method_variant("_cls_delete_discount_async") + async def delete_discount_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionDeleteDiscountParams"] + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + await self._request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["SubscriptionListParams"] + ) -> ListObject["Subscription"]: + """ + By default, returns a list of subscriptions that have not been canceled. In order to list canceled subscriptions, specify status=canceled. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SubscriptionListParams"] + ) -> ListObject["Subscription"]: + """ + By default, returns a list of subscriptions that have not been canceled. In order to list canceled subscriptions, specify status=canceled. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_migrate( + cls, subscription: str, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + cls._static_request( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(subscription) + ), + params=params, + ), + ) + + @overload + @staticmethod + def migrate( + subscription: str, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + ... + + @overload + def migrate( + self, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + ... + + @class_method_variant("_cls_migrate") + def migrate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_migrate_async( + cls, subscription: str, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + await cls._static_request_async( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(subscription) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def migrate_async( + subscription: str, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + ... + + @overload + async def migrate_async( + self, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + ... + + @class_method_variant("_cls_migrate_async") + async def migrate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionMigrateParams"] + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["SubscriptionModifyParams"] + ) -> "Subscription": + """ + Updates an existing subscription to match the specified parameters. + When changing prices or quantities, we optionally prorate the price we charge next month to make up for any price changes. + To preview how the proration is calculated, use the [create preview](https://docs.stripe.com/docs/api/invoices/create_preview) endpoint. + + By default, we prorate subscription changes. For example, if a customer signs up on May 1 for a 100 price, they'll be billed 100 immediately. If on May 15 they switch to a 200 price, then on June 1 they'll be billed 250 (200 for a renewal of her subscription, plus a 50 prorating adjustment for half of the previous month's 100 difference). Similarly, a downgrade generates a credit that is applied to the next invoice. We also prorate when you make quantity changes. + + Switching prices does not normally change the billing date or generate an immediate charge unless: + + + The billing interval is changed (for example, from monthly to yearly). + The subscription moves from free to paid. + A trial starts or ends. + + + In these cases, we apply a credit for the unused time on the previous price, immediately charge the customer using the new price, and reset the billing date. Learn about how [Stripe immediately attempts payment for subscription changes](https://docs.stripe.com/docs/billing/subscriptions/upgrade-downgrade#immediate-payment). + + If you want to charge for an upgrade immediately, pass proration_behavior as always_invoice to create prorations, automatically invoice the customer for those proration adjustments, and attempt to collect payment. If you pass create_prorations, the prorations are created but not automatically invoiced. If you want to bill the customer for the prorations before the subscription's renewal date, you need to manually [invoice the customer](https://docs.stripe.com/docs/api/invoices/create). + + If you don't want to prorate, set the proration_behavior option to none. With this option, the customer is billed 100 on May 1 and 200 on June 1. Similarly, if you set proration_behavior to none when switching between different billing intervals (for example, from monthly to yearly), we don't generate any credits for the old subscription's unused time. We still reset the billing date and bill immediately for the new subscription. + + Updating the quantity on a subscription many times in an hour may result in [rate limiting. If you need to bill for a frequently changing quantity, consider integrating usage-based billing](https://docs.stripe.com/docs/rate-limits) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Subscription", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SubscriptionModifyParams"] + ) -> "Subscription": + """ + Updates an existing subscription to match the specified parameters. + When changing prices or quantities, we optionally prorate the price we charge next month to make up for any price changes. + To preview how the proration is calculated, use the [create preview](https://docs.stripe.com/docs/api/invoices/create_preview) endpoint. + + By default, we prorate subscription changes. For example, if a customer signs up on May 1 for a 100 price, they'll be billed 100 immediately. If on May 15 they switch to a 200 price, then on June 1 they'll be billed 250 (200 for a renewal of her subscription, plus a 50 prorating adjustment for half of the previous month's 100 difference). Similarly, a downgrade generates a credit that is applied to the next invoice. We also prorate when you make quantity changes. + + Switching prices does not normally change the billing date or generate an immediate charge unless: + + + The billing interval is changed (for example, from monthly to yearly). + The subscription moves from free to paid. + A trial starts or ends. + + + In these cases, we apply a credit for the unused time on the previous price, immediately charge the customer using the new price, and reset the billing date. Learn about how [Stripe immediately attempts payment for subscription changes](https://docs.stripe.com/docs/billing/subscriptions/upgrade-downgrade#immediate-payment). + + If you want to charge for an upgrade immediately, pass proration_behavior as always_invoice to create prorations, automatically invoice the customer for those proration adjustments, and attempt to collect payment. If you pass create_prorations, the prorations are created but not automatically invoiced. If you want to bill the customer for the prorations before the subscription's renewal date, you need to manually [invoice the customer](https://docs.stripe.com/docs/api/invoices/create). + + If you don't want to prorate, set the proration_behavior option to none. With this option, the customer is billed 100 on May 1 and 200 on June 1. Similarly, if you set proration_behavior to none when switching between different billing intervals (for example, from monthly to yearly), we don't generate any credits for the old subscription's unused time. We still reset the billing date and bill immediately for the new subscription. + + Updating the quantity on a subscription many times in an hour may result in [rate limiting. If you need to bill for a frequently changing quantity, consider integrating usage-based billing](https://docs.stripe.com/docs/rate-limits) instead. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Subscription", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_resume( + cls, subscription: str, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + cls._static_request( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(subscription) + ), + params=params, + ), + ) + + @overload + @staticmethod + def resume( + subscription: str, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + ... + + @overload + def resume( + self, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + ... + + @class_method_variant("_cls_resume") + def resume( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_resume_async( + cls, subscription: str, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + await cls._static_request_async( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(subscription) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def resume_async( + subscription: str, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + ... + + @overload + async def resume_async( + self, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + ... + + @class_method_variant("_cls_resume_async") + async def resume_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionResumeParams"] + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SubscriptionRetrieveParams"] + ) -> "Subscription": + """ + Retrieves the subscription with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SubscriptionRetrieveParams"] + ) -> "Subscription": + """ + Retrieves the subscription with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def search( + cls, *args, **kwargs: Unpack["SubscriptionSearchParams"] + ) -> SearchResultObject["Subscription"]: + """ + Search for subscriptions you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cls._search( + search_url="/v1/subscriptions/search", *args, **kwargs + ) + + @classmethod + async def search_async( + cls, *args, **kwargs: Unpack["SubscriptionSearchParams"] + ) -> SearchResultObject["Subscription"]: + """ + Search for subscriptions you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return await cls._search_async( + search_url="/v1/subscriptions/search", *args, **kwargs + ) + + @classmethod + def search_auto_paging_iter( + cls, *args, **kwargs: Unpack["SubscriptionSearchParams"] + ) -> Iterator["Subscription"]: + return cls.search(*args, **kwargs).auto_paging_iter() + + @classmethod + async def search_auto_paging_iter_async( + cls, *args, **kwargs: Unpack["SubscriptionSearchParams"] + ) -> AsyncIterator["Subscription"]: + return (await cls.search_async(*args, **kwargs)).auto_paging_iter() + + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_cycle_anchor_config": BillingCycleAnchorConfig, + "billing_mode": BillingMode, + "billing_thresholds": BillingThresholds, + "cancellation_details": CancellationDetails, + "invoice_settings": InvoiceSettings, + "pause_collection": PauseCollection, + "payment_settings": PaymentSettings, + "pending_invoice_item_interval": PendingInvoiceItemInterval, + "pending_update": PendingUpdate, + "transfer_data": TransferData, + "trial_settings": TrialSettings, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item.py new file mode 100644 index 00000000..939eb0b8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item.py @@ -0,0 +1,350 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._discount import Discount + from stripe._plan import Plan + from stripe._price import Price + from stripe._tax_rate import TaxRate + from stripe.params._subscription_item_create_params import ( + SubscriptionItemCreateParams, + ) + from stripe.params._subscription_item_delete_params import ( + SubscriptionItemDeleteParams, + ) + from stripe.params._subscription_item_list_params import ( + SubscriptionItemListParams, + ) + from stripe.params._subscription_item_modify_params import ( + SubscriptionItemModifyParams, + ) + from stripe.params._subscription_item_retrieve_params import ( + SubscriptionItemRetrieveParams, + ) + + +class SubscriptionItem( + CreateableAPIResource["SubscriptionItem"], + DeletableAPIResource["SubscriptionItem"], + ListableAPIResource["SubscriptionItem"], + UpdateableAPIResource["SubscriptionItem"], +): + """ + Subscription items allow you to create customer subscriptions with more than + one plan, making it easy to represent complex billing relationships. + """ + + OBJECT_NAME: ClassVar[Literal["subscription_item"]] = "subscription_item" + + class BillingThresholds(StripeObject): + usage_gte: Optional[int] + """ + Usage threshold that triggers the subscription to create an invoice + """ + + billing_thresholds: Optional[BillingThresholds] + """ + Define thresholds at which an invoice will be sent, and the related subscription advanced to a new billing period + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + current_period_end: int + """ + The end time of this subscription item's current billing period. + """ + current_period_start: int + """ + The start time of this subscription item's current billing period. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + discounts: List[ExpandableField["Discount"]] + """ + The discounts applied to the subscription item. Subscription item discounts are applied before subscription discounts. Use `expand[]=discounts` to expand each discount. + """ + id: str + """ + Unique identifier for the object. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["subscription_item"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + plan: "Plan" + """ + You can now model subscriptions more flexibly using the [Prices API](https://stripe.com/docs/api#prices). It replaces the Plans API and is backwards compatible to simplify your migration. + + Plans define the base price, currency, and billing cycle for recurring purchases of products. + [Products](https://stripe.com/docs/api#products) help you track inventory or provisioning, and plans help you track pricing. Different physical goods or levels of service should be represented by products, and pricing options should be represented by plans. This approach lets you change prices without having to change your provisioning scheme. + + For example, you might have a single "gold" product that has plans for $10/month, $100/year, €9/month, and €90/year. + + Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription) and more about [products and prices](https://stripe.com/docs/products-prices/overview). + """ + price: "Price" + """ + Prices define the unit cost, currency, and (optional) billing cycle for both recurring and one-time purchases of products. + [Products](https://stripe.com/docs/api#products) help you track inventory or provisioning, and prices help you track payment terms. Different physical goods or levels of service should be represented by products, and pricing options should be represented by prices. This approach lets you change prices without having to change your provisioning scheme. + + For example, you might have a single "gold" product that has prices for $10/month, $100/year, and €9 once. + + Related guides: [Set up a subscription](https://stripe.com/docs/billing/subscriptions/set-up-subscription), [create an invoice](https://stripe.com/docs/billing/invoices/create), and more about [products and prices](https://stripe.com/docs/products-prices/overview). + """ + quantity: Optional[int] + """ + The [quantity](https://stripe.com/docs/subscriptions/quantities) of the plan to which the customer should be subscribed. + """ + subscription: str + """ + The `subscription` this `subscription_item` belongs to. + """ + tax_rates: Optional[List["TaxRate"]] + """ + The tax rates which apply to this `subscription_item`. When set, the `default_tax_rates` on the subscription do not apply to this `subscription_item`. + """ + + @classmethod + def create( + cls, **params: Unpack["SubscriptionItemCreateParams"] + ) -> "SubscriptionItem": + """ + Adds a new item to an existing subscription. No existing items will be changed or replaced. + """ + return cast( + "SubscriptionItem", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SubscriptionItemCreateParams"] + ) -> "SubscriptionItem": + """ + Adds a new item to an existing subscription. No existing items will be changed or replaced. + """ + return cast( + "SubscriptionItem", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "SubscriptionItem", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + ... + + @overload + def delete( + self, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "SubscriptionItem", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionItemDeleteParams"] + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["SubscriptionItemListParams"] + ) -> ListObject["SubscriptionItem"]: + """ + Returns a list of your subscription items for a given subscription. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SubscriptionItemListParams"] + ) -> ListObject["SubscriptionItem"]: + """ + Returns a list of your subscription items for a given subscription. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["SubscriptionItemModifyParams"] + ) -> "SubscriptionItem": + """ + Updates the plan or quantity of an item on a current subscription. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SubscriptionItem", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SubscriptionItemModifyParams"] + ) -> "SubscriptionItem": + """ + Updates the plan or quantity of an item on a current subscription. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SubscriptionItem", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SubscriptionItemRetrieveParams"] + ) -> "SubscriptionItem": + """ + Retrieves the subscription item with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SubscriptionItemRetrieveParams"] + ) -> "SubscriptionItem": + """ + Retrieves the subscription item with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"billing_thresholds": BillingThresholds} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item_service.py new file mode 100644 index 00000000..30440433 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_item_service.py @@ -0,0 +1,224 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._subscription_item import SubscriptionItem + from stripe.params._subscription_item_create_params import ( + SubscriptionItemCreateParams, + ) + from stripe.params._subscription_item_delete_params import ( + SubscriptionItemDeleteParams, + ) + from stripe.params._subscription_item_list_params import ( + SubscriptionItemListParams, + ) + from stripe.params._subscription_item_retrieve_params import ( + SubscriptionItemRetrieveParams, + ) + from stripe.params._subscription_item_update_params import ( + SubscriptionItemUpdateParams, + ) + + +class SubscriptionItemService(StripeService): + def delete( + self, + item: str, + params: Optional["SubscriptionItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + return cast( + "SubscriptionItem", + self._request( + "delete", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + item: str, + params: Optional["SubscriptionItemDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Deletes an item from the subscription. Removing a subscription item from a subscription will not cancel the subscription. + """ + return cast( + "SubscriptionItem", + await self._request_async( + "delete", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + item: str, + params: Optional["SubscriptionItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Retrieves the subscription item with the given ID. + """ + return cast( + "SubscriptionItem", + self._request( + "get", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + item: str, + params: Optional["SubscriptionItemRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Retrieves the subscription item with the given ID. + """ + return cast( + "SubscriptionItem", + await self._request_async( + "get", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + item: str, + params: Optional["SubscriptionItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Updates the plan or quantity of an item on a current subscription. + """ + return cast( + "SubscriptionItem", + self._request( + "post", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + item: str, + params: Optional["SubscriptionItemUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Updates the plan or quantity of an item on a current subscription. + """ + return cast( + "SubscriptionItem", + await self._request_async( + "post", + "/v1/subscription_items/{item}".format(item=sanitize_id(item)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: "SubscriptionItemListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SubscriptionItem]": + """ + Returns a list of your subscription items for a given subscription. + """ + return cast( + "ListObject[SubscriptionItem]", + self._request( + "get", + "/v1/subscription_items", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "SubscriptionItemListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SubscriptionItem]": + """ + Returns a list of your subscription items for a given subscription. + """ + return cast( + "ListObject[SubscriptionItem]", + await self._request_async( + "get", + "/v1/subscription_items", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "SubscriptionItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Adds a new item to an existing subscription. No existing items will be changed or replaced. + """ + return cast( + "SubscriptionItem", + self._request( + "post", + "/v1/subscription_items", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "SubscriptionItemCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionItem": + """ + Adds a new item to an existing subscription. No existing items will be changed or replaced. + """ + return cast( + "SubscriptionItem", + await self._request_async( + "post", + "/v1/subscription_items", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule.py new file mode 100644 index 00000000..3a2279d1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule.py @@ -0,0 +1,938 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._coupon import Coupon + from stripe._customer import Customer + from stripe._discount import Discount as DiscountResource + from stripe._payment_method import PaymentMethod + from stripe._plan import Plan + from stripe._price import Price + from stripe._promotion_code import PromotionCode + from stripe._subscription import Subscription + from stripe._tax_id import TaxId + from stripe._tax_rate import TaxRate + from stripe.params._subscription_schedule_cancel_params import ( + SubscriptionScheduleCancelParams, + ) + from stripe.params._subscription_schedule_create_params import ( + SubscriptionScheduleCreateParams, + ) + from stripe.params._subscription_schedule_list_params import ( + SubscriptionScheduleListParams, + ) + from stripe.params._subscription_schedule_modify_params import ( + SubscriptionScheduleModifyParams, + ) + from stripe.params._subscription_schedule_release_params import ( + SubscriptionScheduleReleaseParams, + ) + from stripe.params._subscription_schedule_retrieve_params import ( + SubscriptionScheduleRetrieveParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class SubscriptionSchedule( + CreateableAPIResource["SubscriptionSchedule"], + ListableAPIResource["SubscriptionSchedule"], + UpdateableAPIResource["SubscriptionSchedule"], +): + """ + A subscription schedule allows you to create and manage the lifecycle of a subscription by predefining expected changes. + + Related guide: [Subscription schedules](https://stripe.com/docs/billing/subscriptions/subscription-schedules) + """ + + OBJECT_NAME: ClassVar[Literal["subscription_schedule"]] = ( + "subscription_schedule" + ) + + class BillingMode(StripeObject): + class Flexible(StripeObject): + proration_discounts: Optional[Literal["included", "itemized"]] + """ + Controls how invoices and invoice items display proration amounts and discount amounts. + """ + + flexible: Optional[Flexible] + """ + Configure behavior for flexible billing mode + """ + type: Literal["classic", "flexible"] + """ + Controls how prorations and invoices for subscriptions are calculated and orchestrated. + """ + updated_at: Optional[int] + """ + Details on when the current billing_mode was adopted. + """ + _inner_class_types = {"flexible": Flexible} + + class CurrentPhase(StripeObject): + end_date: int + """ + The end of this phase of the subscription schedule. + """ + start_date: int + """ + The start of this phase of the subscription schedule. + """ + + class DefaultSettings(StripeObject): + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + disabled_reason: Optional[Literal["requires_location_inputs"]] + """ + If Stripe disabled automatic tax, this enum describes why. + """ + enabled: bool + """ + Whether Stripe automatically computes tax on invoices created during this phase. + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + """ + Monetary threshold that triggers the subscription to create an invoice + """ + reset_billing_cycle_anchor: Optional[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. This value may not be `true` if the subscription contains items with plans that have `aggregate_usage=last_ever`. + """ + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + """ + The account tax IDs associated with the subscription schedule. Will be set on invoices generated by the subscription schedule. + """ + days_until_due: Optional[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `billing=charge_automatically`. + """ + issuer: Issuer + _inner_class_types = {"issuer": Issuer} + + class TransferData(StripeObject): + amount_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: ExpandableField["Account"] + """ + The account where funds from the payment will be transferred to upon payment success. + """ + + application_fee_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account during this phase of the schedule. + """ + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Literal["automatic", "phase_start"] + """ + Possible values are `phase_start` or `automatic`. If `phase_start` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If `automatic` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: Optional[BillingThresholds] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period + """ + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. + """ + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the default payment method for the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + description: Optional[str] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + invoice_settings: InvoiceSettings + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) the charge was made on behalf of for charges associated with the schedule's subscription. See the Connect documentation for details. + """ + transfer_data: Optional[TransferData] + """ + The account (if any) the associated subscription's payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription's invoices. + """ + _inner_class_types = { + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "invoice_settings": InvoiceSettings, + "transfer_data": TransferData, + } + + class Phase(StripeObject): + class AddInvoiceItem(StripeObject): + class Discount(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + ID of the coupon to create a new discount for. + """ + discount: Optional[ExpandableField["DiscountResource"]] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: Optional[ExpandableField["PromotionCode"]] + """ + ID of the promotion code to create a new discount for. + """ + + class Period(StripeObject): + class End(StripeObject): + timestamp: Optional[int] + """ + A precise Unix timestamp for the end of the invoice item period. Must be greater than or equal to `period.start`. + """ + type: Literal[ + "min_item_period_end", "phase_end", "timestamp" + ] + """ + Select how to calculate the end of the invoice item period. + """ + + class Start(StripeObject): + timestamp: Optional[int] + """ + A precise Unix timestamp for the start of the invoice item period. Must be less than or equal to `period.end`. + """ + type: Literal[ + "max_item_period_start", "phase_start", "timestamp" + ] + """ + Select how to calculate the start of the invoice item period. + """ + + end: End + start: Start + _inner_class_types = {"end": End, "start": Start} + + discounts: List[Discount] + """ + The stackable discounts that will be applied to the item. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + period: Period + price: ExpandableField["Price"] + """ + ID of the price used to generate the invoice item. + """ + quantity: Optional[int] + """ + The quantity of the invoice item. + """ + tax_rates: Optional[List["TaxRate"]] + """ + The tax rates which apply to the item. When set, the `default_tax_rates` do not apply to this item. + """ + _inner_class_types = {"discounts": Discount, "period": Period} + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + disabled_reason: Optional[Literal["requires_location_inputs"]] + """ + If Stripe disabled automatic tax, this enum describes why. + """ + enabled: bool + """ + Whether Stripe automatically computes tax on invoices created during this phase. + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + _inner_class_types = {"liability": Liability} + + class BillingThresholds(StripeObject): + amount_gte: Optional[int] + """ + Monetary threshold that triggers the subscription to create an invoice + """ + reset_billing_cycle_anchor: Optional[bool] + """ + Indicates if the `billing_cycle_anchor` should be reset when a threshold is reached. If true, `billing_cycle_anchor` will be updated to the date/time the threshold was last reached; otherwise, the value will remain unchanged. This value may not be `true` if the subscription contains items with plans that have `aggregate_usage=last_ever`. + """ + + class Discount(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + ID of the coupon to create a new discount for. + """ + discount: Optional[ExpandableField["DiscountResource"]] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: Optional[ExpandableField["PromotionCode"]] + """ + ID of the promotion code to create a new discount for. + """ + + class InvoiceSettings(StripeObject): + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + account_tax_ids: Optional[List[ExpandableField["TaxId"]]] + """ + The account tax IDs associated with this phase of the subscription schedule. Will be set on invoices generated by this phase of the subscription schedule. + """ + days_until_due: Optional[int] + """ + Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be `null` for subscription schedules where `billing=charge_automatically`. + """ + issuer: Optional[Issuer] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + _inner_class_types = {"issuer": Issuer} + + class Item(StripeObject): + class BillingThresholds(StripeObject): + usage_gte: Optional[int] + """ + Usage threshold that triggers the subscription to create an invoice + """ + + class Discount(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + ID of the coupon to create a new discount for. + """ + discount: Optional[ExpandableField["DiscountResource"]] + """ + ID of an existing discount on the object (or one of its ancestors) to reuse. + """ + promotion_code: Optional[ExpandableField["PromotionCode"]] + """ + ID of the promotion code to create a new discount for. + """ + + billing_thresholds: Optional[BillingThresholds] + """ + Define thresholds at which an invoice will be sent, and the related subscription advanced to a new billing period + """ + discounts: List[Discount] + """ + The discounts applied to the subscription item. Subscription item discounts are applied before subscription discounts. Use `expand[]=discounts` to expand each discount. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an item. Metadata on this item will update the underlying subscription item's `metadata` when the phase is entered. + """ + plan: ExpandableField["Plan"] + """ + ID of the plan to which the customer should be subscribed. + """ + price: ExpandableField["Price"] + """ + ID of the price to which the customer should be subscribed. + """ + quantity: Optional[int] + """ + Quantity of the plan to which the customer should be subscribed. + """ + tax_rates: Optional[List["TaxRate"]] + """ + The tax rates which apply to this `phase_item`. When set, the `default_tax_rates` on the phase do not apply to this `phase_item`. + """ + _inner_class_types = { + "billing_thresholds": BillingThresholds, + "discounts": Discount, + } + + class TransferData(StripeObject): + amount_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the destination account. By default, the entire amount is transferred to the destination. + """ + destination: ExpandableField["Account"] + """ + The account where funds from the payment will be transferred to upon payment success. + """ + + add_invoice_items: List[AddInvoiceItem] + """ + A list of prices and quantities that will generate invoice items appended to the next invoice for this phase. + """ + application_fee_percent: Optional[float] + """ + A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account during this phase of the schedule. + """ + automatic_tax: Optional[AutomaticTax] + billing_cycle_anchor: Optional[Literal["automatic", "phase_start"]] + """ + Possible values are `phase_start` or `automatic`. If `phase_start` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If `automatic` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https://stripe.com/docs/billing/subscriptions/billing-cycle). + """ + billing_thresholds: Optional[BillingThresholds] + """ + Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period + """ + collection_method: Optional[ + Literal["charge_automatically", "send_invoice"] + ] + """ + Either `charge_automatically`, or `send_invoice`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as `active`. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + default_payment_method: Optional[ExpandableField["PaymentMethod"]] + """ + ID of the default payment method for the subscription schedule. It must belong to the customer associated with the subscription schedule. If not set, invoices will use the default payment method in the customer's invoice settings. + """ + default_tax_rates: Optional[List["TaxRate"]] + """ + The default tax rates to apply to the subscription during this phase of the subscription schedule. + """ + description: Optional[str] + """ + Subscription description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. + """ + discounts: List[Discount] + """ + The stackable discounts that will be applied to the subscription on this phase. Subscription item discounts are applied before subscription discounts. + """ + end_date: int + """ + The end of this phase of the subscription schedule. + """ + invoice_settings: Optional[InvoiceSettings] + """ + The invoice settings applicable during this phase. + """ + items: List[Item] + """ + Subscription items to configure the subscription to during this phase of the subscription schedule. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to a phase. Metadata on a schedule's phase will update the underlying subscription's `metadata` when the phase is entered. Updating the underlying subscription's `metadata` directly will not affect the current phase's `metadata`. + """ + on_behalf_of: Optional[ExpandableField["Account"]] + """ + The account (if any) the charge was made on behalf of for charges associated with the schedule's subscription. See the Connect documentation for details. + """ + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + """ + When transitioning phases, controls how prorations are handled (if any). Possible values are `create_prorations`, `none`, and `always_invoice`. + """ + start_date: int + """ + The start of this phase of the subscription schedule. + """ + transfer_data: Optional[TransferData] + """ + The account (if any) the associated subscription's payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription's invoices. + """ + trial_end: Optional[int] + """ + When the trial ends within the phase. + """ + _inner_class_types = { + "add_invoice_items": AddInvoiceItem, + "automatic_tax": AutomaticTax, + "billing_thresholds": BillingThresholds, + "discounts": Discount, + "invoice_settings": InvoiceSettings, + "items": Item, + "transfer_data": TransferData, + } + + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect Application that created the schedule. + """ + billing_mode: BillingMode + """ + The billing mode of the subscription. + """ + canceled_at: Optional[int] + """ + Time at which the subscription schedule was canceled. Measured in seconds since the Unix epoch. + """ + completed_at: Optional[int] + """ + Time at which the subscription schedule was completed. Measured in seconds since the Unix epoch. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + current_phase: Optional[CurrentPhase] + """ + Object representing the start and end dates for the current phase of the subscription schedule, if it is `active`. + """ + customer: ExpandableField["Customer"] + """ + ID of the customer who owns the subscription schedule. + """ + default_settings: DefaultSettings + end_behavior: Literal["cancel", "none", "release", "renew"] + """ + Behavior of the subscription schedule and underlying subscription when it ends. Possible values are `release` or `cancel` with the default being `release`. `release` will end the subscription schedule and keep the underlying subscription running. `cancel` will end the subscription schedule and cancel the underlying subscription. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["subscription_schedule"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + phases: List[Phase] + """ + Configuration for the subscription schedule's phases. + """ + released_at: Optional[int] + """ + Time at which the subscription schedule was released. Measured in seconds since the Unix epoch. + """ + released_subscription: Optional[str] + """ + ID of the subscription once managed by the subscription schedule (if it is released). + """ + status: Literal[ + "active", "canceled", "completed", "not_started", "released" + ] + """ + The present status of the subscription schedule. Possible values are `not_started`, `active`, `completed`, `released`, and `canceled`. You can read more about the different states in our [behavior guide](https://stripe.com/docs/billing/subscriptions/subscription-schedules). + """ + subscription: Optional[ExpandableField["Subscription"]] + """ + ID of the subscription managed by the subscription schedule. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this subscription schedule belongs to. + """ + + @classmethod + def _cls_cancel( + cls, + schedule: str, + **params: Unpack["SubscriptionScheduleCancelParams"], + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(schedule) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + schedule: str, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + ... + + @overload + def cancel( + self, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, + schedule: str, + **params: Unpack["SubscriptionScheduleCancelParams"], + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + await cls._static_request_async( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(schedule) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + schedule: str, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionScheduleCancelParams"] + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["SubscriptionScheduleCreateParams"] + ) -> "SubscriptionSchedule": + """ + Creates a new subscription schedule object. Each customer can have up to 500 active or scheduled subscriptions. + """ + return cast( + "SubscriptionSchedule", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SubscriptionScheduleCreateParams"] + ) -> "SubscriptionSchedule": + """ + Creates a new subscription schedule object. Each customer can have up to 500 active or scheduled subscriptions. + """ + return cast( + "SubscriptionSchedule", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["SubscriptionScheduleListParams"] + ) -> ListObject["SubscriptionSchedule"]: + """ + Retrieves the list of your subscription schedules. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SubscriptionScheduleListParams"] + ) -> ListObject["SubscriptionSchedule"]: + """ + Retrieves the list of your subscription schedules. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["SubscriptionScheduleModifyParams"] + ) -> "SubscriptionSchedule": + """ + Updates an existing subscription schedule. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SubscriptionSchedule", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SubscriptionScheduleModifyParams"] + ) -> "SubscriptionSchedule": + """ + Updates an existing subscription schedule. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "SubscriptionSchedule", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_release( + cls, + schedule: str, + **params: Unpack["SubscriptionScheduleReleaseParams"], + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(schedule) + ), + params=params, + ), + ) + + @overload + @staticmethod + def release( + schedule: str, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + ... + + @overload + def release( + self, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + ... + + @class_method_variant("_cls_release") + def release( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_release_async( + cls, + schedule: str, + **params: Unpack["SubscriptionScheduleReleaseParams"], + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + await cls._static_request_async( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(schedule) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def release_async( + schedule: str, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + ... + + @overload + async def release_async( + self, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + ... + + @class_method_variant("_cls_release_async") + async def release_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SubscriptionScheduleReleaseParams"] + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SubscriptionScheduleRetrieveParams"] + ) -> "SubscriptionSchedule": + """ + Retrieves the details of an existing subscription schedule. You only need to supply the unique subscription schedule identifier that was returned upon subscription schedule creation. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SubscriptionScheduleRetrieveParams"] + ) -> "SubscriptionSchedule": + """ + Retrieves the details of an existing subscription schedule. You only need to supply the unique subscription schedule identifier that was returned upon subscription schedule creation. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "billing_mode": BillingMode, + "current_phase": CurrentPhase, + "default_settings": DefaultSettings, + "phases": Phase, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule_service.py new file mode 100644 index 00000000..ec9e7441 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_schedule_service.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._subscription_schedule import SubscriptionSchedule + from stripe.params._subscription_schedule_cancel_params import ( + SubscriptionScheduleCancelParams, + ) + from stripe.params._subscription_schedule_create_params import ( + SubscriptionScheduleCreateParams, + ) + from stripe.params._subscription_schedule_list_params import ( + SubscriptionScheduleListParams, + ) + from stripe.params._subscription_schedule_release_params import ( + SubscriptionScheduleReleaseParams, + ) + from stripe.params._subscription_schedule_retrieve_params import ( + SubscriptionScheduleRetrieveParams, + ) + from stripe.params._subscription_schedule_update_params import ( + SubscriptionScheduleUpdateParams, + ) + + +class SubscriptionScheduleService(StripeService): + def list( + self, + params: Optional["SubscriptionScheduleListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SubscriptionSchedule]": + """ + Retrieves the list of your subscription schedules. + """ + return cast( + "ListObject[SubscriptionSchedule]", + self._request( + "get", + "/v1/subscription_schedules", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["SubscriptionScheduleListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[SubscriptionSchedule]": + """ + Retrieves the list of your subscription schedules. + """ + return cast( + "ListObject[SubscriptionSchedule]", + await self._request_async( + "get", + "/v1/subscription_schedules", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["SubscriptionScheduleCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Creates a new subscription schedule object. Each customer can have up to 500 active or scheduled subscriptions. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["SubscriptionScheduleCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Creates a new subscription schedule object. Each customer can have up to 500 active or scheduled subscriptions. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + schedule: str, + params: Optional["SubscriptionScheduleRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Retrieves the details of an existing subscription schedule. You only need to supply the unique subscription schedule identifier that was returned upon subscription schedule creation. + """ + return cast( + "SubscriptionSchedule", + self._request( + "get", + "/v1/subscription_schedules/{schedule}".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + schedule: str, + params: Optional["SubscriptionScheduleRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Retrieves the details of an existing subscription schedule. You only need to supply the unique subscription schedule identifier that was returned upon subscription schedule creation. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "get", + "/v1/subscription_schedules/{schedule}".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + schedule: str, + params: Optional["SubscriptionScheduleUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Updates an existing subscription schedule. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules/{schedule}".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + schedule: str, + params: Optional["SubscriptionScheduleUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Updates an existing subscription schedule. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules/{schedule}".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + schedule: str, + params: Optional["SubscriptionScheduleCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + schedule: str, + params: Optional["SubscriptionScheduleCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def release( + self, + schedule: str, + params: Optional["SubscriptionScheduleReleaseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + self._request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def release_async( + self, + schedule: str, + params: Optional["SubscriptionScheduleReleaseParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "SubscriptionSchedule": + """ + Releases the subscription schedule immediately, which will stop scheduling of its phases, but leave any existing subscription in place. A schedule can only be released if its status is not_started or active. If the subscription schedule is currently associated with a subscription, releasing it will remove its subscription property and set the subscription's ID to the released_subscription property. + """ + return cast( + "SubscriptionSchedule", + await self._request_async( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=sanitize_id(schedule), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_service.py new file mode 100644 index 00000000..a6ee5f99 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_subscription_service.py @@ -0,0 +1,500 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._discount import Discount + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._search_result_object import SearchResultObject + from stripe._subscription import Subscription + from stripe.params._subscription_cancel_params import ( + SubscriptionCancelParams, + ) + from stripe.params._subscription_create_params import ( + SubscriptionCreateParams, + ) + from stripe.params._subscription_delete_discount_params import ( + SubscriptionDeleteDiscountParams, + ) + from stripe.params._subscription_list_params import SubscriptionListParams + from stripe.params._subscription_migrate_params import ( + SubscriptionMigrateParams, + ) + from stripe.params._subscription_resume_params import ( + SubscriptionResumeParams, + ) + from stripe.params._subscription_retrieve_params import ( + SubscriptionRetrieveParams, + ) + from stripe.params._subscription_search_params import ( + SubscriptionSearchParams, + ) + from stripe.params._subscription_update_params import ( + SubscriptionUpdateParams, + ) + + +class SubscriptionService(StripeService): + def cancel( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Cancels a customer's subscription immediately. The customer won't be charged again for the subscription. After it's canceled, you can no longer update the subscription or its [metadata](https://docs.stripe.com/metadata). + + Any pending invoice items that you've created are still charged at the end of the period, unless manually [deleted](https://docs.stripe.com/api#delete_invoiceitem). If you've set the subscription to cancel at the end of the period, any pending prorations are also left in place and collected at the end of the period. But if the subscription is set to cancel immediately, pending prorations are removed if invoice_now and prorate are both set to true. + + By default, upon subscription cancellation, Stripe stops automatic collection of all finalized invoices for the customer. This is intended to prevent unexpected payment attempts after the customer has canceled a subscription. However, you can resume automatic collection of the invoices manually after subscription cancellation to have us proceed. Or, you could check for unpaid invoices before allowing the customer to cancel the subscription at all. + """ + return cast( + "Subscription", + await self._request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Retrieves the subscription with the given ID. + """ + return cast( + "Subscription", + self._request( + "get", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Retrieves the subscription with the given ID. + """ + return cast( + "Subscription", + await self._request_async( + "get", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Updates an existing subscription to match the specified parameters. + When changing prices or quantities, we optionally prorate the price we charge next month to make up for any price changes. + To preview how the proration is calculated, use the [create preview](https://docs.stripe.com/docs/api/invoices/create_preview) endpoint. + + By default, we prorate subscription changes. For example, if a customer signs up on May 1 for a 100 price, they'll be billed 100 immediately. If on May 15 they switch to a 200 price, then on June 1 they'll be billed 250 (200 for a renewal of her subscription, plus a 50 prorating adjustment for half of the previous month's 100 difference). Similarly, a downgrade generates a credit that is applied to the next invoice. We also prorate when you make quantity changes. + + Switching prices does not normally change the billing date or generate an immediate charge unless: + + + The billing interval is changed (for example, from monthly to yearly). + The subscription moves from free to paid. + A trial starts or ends. + + + In these cases, we apply a credit for the unused time on the previous price, immediately charge the customer using the new price, and reset the billing date. Learn about how [Stripe immediately attempts payment for subscription changes](https://docs.stripe.com/docs/billing/subscriptions/upgrade-downgrade#immediate-payment). + + If you want to charge for an upgrade immediately, pass proration_behavior as always_invoice to create prorations, automatically invoice the customer for those proration adjustments, and attempt to collect payment. If you pass create_prorations, the prorations are created but not automatically invoiced. If you want to bill the customer for the prorations before the subscription's renewal date, you need to manually [invoice the customer](https://docs.stripe.com/docs/api/invoices/create). + + If you don't want to prorate, set the proration_behavior option to none. With this option, the customer is billed 100 on May 1 and 200 on June 1. Similarly, if you set proration_behavior to none when switching between different billing intervals (for example, from monthly to yearly), we don't generate any credits for the old subscription's unused time. We still reset the billing date and bill immediately for the new subscription. + + Updating the quantity on a subscription many times in an hour may result in [rate limiting. If you need to bill for a frequently changing quantity, consider integrating usage-based billing](https://docs.stripe.com/docs/rate-limits) instead. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Updates an existing subscription to match the specified parameters. + When changing prices or quantities, we optionally prorate the price we charge next month to make up for any price changes. + To preview how the proration is calculated, use the [create preview](https://docs.stripe.com/docs/api/invoices/create_preview) endpoint. + + By default, we prorate subscription changes. For example, if a customer signs up on May 1 for a 100 price, they'll be billed 100 immediately. If on May 15 they switch to a 200 price, then on June 1 they'll be billed 250 (200 for a renewal of her subscription, plus a 50 prorating adjustment for half of the previous month's 100 difference). Similarly, a downgrade generates a credit that is applied to the next invoice. We also prorate when you make quantity changes. + + Switching prices does not normally change the billing date or generate an immediate charge unless: + + + The billing interval is changed (for example, from monthly to yearly). + The subscription moves from free to paid. + A trial starts or ends. + + + In these cases, we apply a credit for the unused time on the previous price, immediately charge the customer using the new price, and reset the billing date. Learn about how [Stripe immediately attempts payment for subscription changes](https://docs.stripe.com/docs/billing/subscriptions/upgrade-downgrade#immediate-payment). + + If you want to charge for an upgrade immediately, pass proration_behavior as always_invoice to create prorations, automatically invoice the customer for those proration adjustments, and attempt to collect payment. If you pass create_prorations, the prorations are created but not automatically invoiced. If you want to bill the customer for the prorations before the subscription's renewal date, you need to manually [invoice the customer](https://docs.stripe.com/docs/api/invoices/create). + + If you don't want to prorate, set the proration_behavior option to none. With this option, the customer is billed 100 on May 1 and 200 on June 1. Similarly, if you set proration_behavior to none when switching between different billing intervals (for example, from monthly to yearly), we don't generate any credits for the old subscription's unused time. We still reset the billing date and bill immediately for the new subscription. + + Updating the quantity on a subscription many times in an hour may result in [rate limiting. If you need to bill for a frequently changing quantity, consider integrating usage-based billing](https://docs.stripe.com/docs/rate-limits) instead. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def delete_discount( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionDeleteDiscountParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_discount_async( + self, + subscription_exposed_id: str, + params: Optional["SubscriptionDeleteDiscountParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Discount": + """ + Removes the currently applied discount on a subscription. + """ + return cast( + "Discount", + await self._request_async( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=sanitize_id( + subscription_exposed_id + ), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["SubscriptionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Subscription]": + """ + By default, returns a list of subscriptions that have not been canceled. In order to list canceled subscriptions, specify status=canceled. + """ + return cast( + "ListObject[Subscription]", + self._request( + "get", + "/v1/subscriptions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["SubscriptionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Subscription]": + """ + By default, returns a list of subscriptions that have not been canceled. In order to list canceled subscriptions, specify status=canceled. + """ + return cast( + "ListObject[Subscription]", + await self._request_async( + "get", + "/v1/subscriptions", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "SubscriptionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Creates a new subscription on an existing customer. Each customer can have up to 500 active or scheduled subscriptions. + + When you create a subscription with collection_method=charge_automatically, the first invoice is finalized as part of the request. + The payment_behavior parameter determines the exact behavior of the initial payment. + + To start subscriptions where the first invoice always begins in a draft status, use [subscription schedules](https://docs.stripe.com/docs/billing/subscriptions/subscription-schedules#managing) instead. + Schedules provide the flexibility to model more complex billing configurations that change over time. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "SubscriptionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Creates a new subscription on an existing customer. Each customer can have up to 500 active or scheduled subscriptions. + + When you create a subscription with collection_method=charge_automatically, the first invoice is finalized as part of the request. + The payment_behavior parameter determines the exact behavior of the initial payment. + + To start subscriptions where the first invoice always begins in a draft status, use [subscription schedules](https://docs.stripe.com/docs/billing/subscriptions/subscription-schedules#managing) instead. + Schedules provide the flexibility to model more complex billing configurations that change over time. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions", + base_address="api", + params=params, + options=options, + ), + ) + + def search( + self, + params: "SubscriptionSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Subscription]": + """ + Search for subscriptions you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Subscription]", + self._request( + "get", + "/v1/subscriptions/search", + base_address="api", + params=params, + options=options, + ), + ) + + async def search_async( + self, + params: "SubscriptionSearchParams", + options: Optional["RequestOptions"] = None, + ) -> "SearchResultObject[Subscription]": + """ + Search for subscriptions you've previously created using Stripe's [Search Query Language](https://docs.stripe.com/docs/search#search-query-language). + Don't use search in read-after-write flows where strict consistency is necessary. Under normal operating + conditions, data is searchable in less than a minute. Occasionally, propagation of new or updated data can be up + to an hour behind during outages. Search functionality is not available to merchants in India. + """ + return cast( + "SearchResultObject[Subscription]", + await self._request_async( + "get", + "/v1/subscriptions/search", + base_address="api", + params=params, + options=options, + ), + ) + + def migrate( + self, + subscription: str, + params: "SubscriptionMigrateParams", + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(subscription), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def migrate_async( + self, + subscription: str, + params: "SubscriptionMigrateParams", + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Upgrade the billing_mode of an existing subscription. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions/{subscription}/migrate".format( + subscription=sanitize_id(subscription), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def resume( + self, + subscription: str, + params: Optional["SubscriptionResumeParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + self._request( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(subscription), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def resume_async( + self, + subscription: str, + params: Optional["SubscriptionResumeParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Subscription": + """ + Initiates resumption of a paused subscription, optionally resetting the billing cycle anchor and creating prorations. If a resumption invoice is generated, it must be paid or marked uncollectible before the subscription will be unpaused. If payment succeeds the subscription will become active, and if payment fails the subscription will be past_due. The resumption invoice will void automatically if not paid by the expiration date. + """ + return cast( + "Subscription", + await self._request_async( + "post", + "/v1/subscriptions/{subscription}/resume".format( + subscription=sanitize_id(subscription), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code.py new file mode 100644 index 00000000..281a4985 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from typing import ClassVar +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._tax_code_list_params import TaxCodeListParams + from stripe.params._tax_code_retrieve_params import TaxCodeRetrieveParams + + +class TaxCode(ListableAPIResource["TaxCode"]): + """ + [Tax codes](https://stripe.com/docs/tax/tax-categories) classify goods and services for tax purposes. + """ + + OBJECT_NAME: ClassVar[Literal["tax_code"]] = "tax_code" + description: str + """ + A detailed description of which types of products the tax code represents. + """ + id: str + """ + Unique identifier for the object. + """ + name: str + """ + A short name for the tax code. + """ + object: Literal["tax_code"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def list( + cls, **params: Unpack["TaxCodeListParams"] + ) -> ListObject["TaxCode"]: + """ + A list of [all tax codes available](https://stripe.com/docs/tax/tax-categories) to add to Products in order to allow specific tax calculations. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TaxCodeListParams"] + ) -> ListObject["TaxCode"]: + """ + A list of [all tax codes available](https://stripe.com/docs/tax/tax-categories) to add to Products in order to allow specific tax calculations. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TaxCodeRetrieveParams"] + ) -> "TaxCode": + """ + Retrieves the details of an existing tax code. Supply the unique tax code ID and Stripe will return the corresponding tax code information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TaxCodeRetrieveParams"] + ) -> "TaxCode": + """ + Retrieves the details of an existing tax code. Supply the unique tax code ID and Stripe will return the corresponding tax code information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code_service.py new file mode 100644 index 00000000..ed5f2a54 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_code_service.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._tax_code import TaxCode + from stripe.params._tax_code_list_params import TaxCodeListParams + from stripe.params._tax_code_retrieve_params import TaxCodeRetrieveParams + + +class TaxCodeService(StripeService): + def list( + self, + params: Optional["TaxCodeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxCode]": + """ + A list of [all tax codes available](https://stripe.com/docs/tax/tax-categories) to add to Products in order to allow specific tax calculations. + """ + return cast( + "ListObject[TaxCode]", + self._request( + "get", + "/v1/tax_codes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TaxCodeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxCode]": + """ + A list of [all tax codes available](https://stripe.com/docs/tax/tax-categories) to add to Products in order to allow specific tax calculations. + """ + return cast( + "ListObject[TaxCode]", + await self._request_async( + "get", + "/v1/tax_codes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["TaxCodeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxCode": + """ + Retrieves the details of an existing tax code. Supply the unique tax code ID and Stripe will return the corresponding tax code information. + """ + return cast( + "TaxCode", + self._request( + "get", + "/v1/tax_codes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["TaxCodeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxCode": + """ + Retrieves the details of an existing tax code. Supply the unique tax code ID and Stripe will return the corresponding tax code information. + """ + return cast( + "TaxCode", + await self._request_async( + "get", + "/v1/tax_codes/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_deducted_at_source.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_deducted_at_source.py new file mode 100644 index 00000000..a07bcf4c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_deducted_at_source.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal + + +class TaxDeductedAtSource(StripeObject): + OBJECT_NAME: ClassVar[Literal["tax_deducted_at_source"]] = ( + "tax_deducted_at_source" + ) + id: str + """ + Unique identifier for the object. + """ + object: Literal["tax_deducted_at_source"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + period_end: int + """ + The end of the invoicing period. This TDS applies to Stripe fees collected during this invoicing period. + """ + period_start: int + """ + The start of the invoicing period. This TDS applies to Stripe fees collected during this invoicing period. + """ + tax_deduction_account_number: str + """ + The TAN that was supplied to Stripe when TDS was assessed + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id.py new file mode 100644 index 00000000..2a508a40 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id.py @@ -0,0 +1,410 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._application import Application + from stripe._customer import Customer + from stripe.params._tax_id_create_params import TaxIdCreateParams + from stripe.params._tax_id_delete_params import TaxIdDeleteParams + from stripe.params._tax_id_list_params import TaxIdListParams + from stripe.params._tax_id_retrieve_params import TaxIdRetrieveParams + + +class TaxId( + CreateableAPIResource["TaxId"], + DeletableAPIResource["TaxId"], + ListableAPIResource["TaxId"], +): + """ + You can add one or multiple tax IDs to a [customer](https://stripe.com/docs/api/customers) or account. + Customer and account tax IDs get displayed on related invoices and credit notes. + + Related guides: [Customer tax identification numbers](https://stripe.com/docs/billing/taxes/tax-ids), [Account tax IDs](https://stripe.com/docs/invoicing/connect#account-tax-ids) + """ + + OBJECT_NAME: ClassVar[Literal["tax_id"]] = "tax_id" + + class Owner(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The account being referenced when `type` is `account`. + """ + application: Optional[ExpandableField["Application"]] + """ + The Connect Application being referenced when `type` is `application`. + """ + customer: Optional[ExpandableField["Customer"]] + """ + The customer being referenced when `type` is `customer`. + """ + type: Literal["account", "application", "customer", "self"] + """ + Type of owner referenced. + """ + + class Verification(StripeObject): + status: Literal["pending", "unavailable", "unverified", "verified"] + """ + Verification status, one of `pending`, `verified`, `unverified`, or `unavailable`. + """ + verified_address: Optional[str] + """ + Verified address. + """ + verified_name: Optional[str] + """ + Verified name. + """ + + country: Optional[str] + """ + Two-letter ISO code representing the country of the tax ID. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the customer. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["tax_id"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + owner: Optional[Owner] + """ + The account or customer the tax ID belongs to. + """ + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "unknown", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + Type of the tax ID, one of `ad_nrt`, `ae_trn`, `al_tin`, `am_tin`, `ao_tin`, `ar_cuit`, `au_abn`, `au_arn`, `aw_tin`, `az_tin`, `ba_tin`, `bb_tin`, `bd_bin`, `bf_ifu`, `bg_uic`, `bh_vat`, `bj_ifu`, `bo_tin`, `br_cnpj`, `br_cpf`, `bs_tin`, `by_tin`, `ca_bn`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `ca_qst`, `cd_nif`, `ch_uid`, `ch_vat`, `cl_tin`, `cm_niu`, `cn_tin`, `co_nit`, `cr_tin`, `cv_nif`, `de_stn`, `do_rcn`, `ec_ruc`, `eg_tin`, `es_cif`, `et_tin`, `eu_oss_vat`, `eu_vat`, `gb_vat`, `ge_vat`, `gn_nif`, `hk_br`, `hr_oib`, `hu_tin`, `id_npwp`, `il_vat`, `in_gst`, `is_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `ke_pin`, `kg_tin`, `kh_tin`, `kr_brn`, `kz_bin`, `la_tin`, `li_uid`, `li_vat`, `ma_vat`, `md_vat`, `me_pib`, `mk_vat`, `mr_nif`, `mx_rfc`, `my_frp`, `my_itn`, `my_sst`, `ng_tin`, `no_vat`, `no_voec`, `np_pan`, `nz_gst`, `om_vat`, `pe_ruc`, `ph_tin`, `ro_tin`, `rs_pib`, `ru_inn`, `ru_kpp`, `sa_vat`, `sg_gst`, `sg_uen`, `si_tin`, `sn_ninea`, `sr_fin`, `sv_nit`, `th_vat`, `tj_tin`, `tr_tin`, `tw_vat`, `tz_vat`, `ua_vat`, `ug_tin`, `us_ein`, `uy_ruc`, `uz_tin`, `uz_vat`, `ve_rif`, `vn_tin`, `za_vat`, `zm_tin`, or `zw_tin`. Note that some legacy tax IDs have type `unknown` + """ + value: str + """ + Value of the tax ID. + """ + verification: Optional[Verification] + """ + Tax ID verification information. + """ + + @classmethod + def create(cls, **params: Unpack["TaxIdCreateParams"]) -> "TaxId": + """ + Creates a new account or customer tax_id object. + """ + return cast( + "TaxId", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TaxIdCreateParams"] + ) -> "TaxId": + """ + Creates a new account or customer tax_id object. + """ + return cast( + "TaxId", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "TaxId", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete(sid: str, **params: Unpack["TaxIdDeleteParams"]) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + ... + + @overload + def delete(self, **params: Unpack["TaxIdDeleteParams"]) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "TaxId", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TaxIdDeleteParams"] + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list(cls, **params: Unpack["TaxIdListParams"]) -> ListObject["TaxId"]: + """ + Returns a list of tax IDs. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TaxIdListParams"] + ) -> ListObject["TaxId"]: + """ + Returns a list of tax IDs. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TaxIdRetrieveParams"] + ) -> "TaxId": + """ + Retrieves an account or customer tax_id object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TaxIdRetrieveParams"] + ) -> "TaxId": + """ + Retrieves an account or customer tax_id object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"owner": Owner, "verification": Verification} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id_service.py new file mode 100644 index 00000000..8b3dbefc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_id_service.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._tax_id import TaxId + from stripe.params._tax_id_create_params import TaxIdCreateParams + from stripe.params._tax_id_delete_params import TaxIdDeleteParams + from stripe.params._tax_id_list_params import TaxIdListParams + from stripe.params._tax_id_retrieve_params import TaxIdRetrieveParams + + +class TaxIdService(StripeService): + def delete( + self, + id: str, + params: Optional["TaxIdDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + return cast( + "TaxId", + self._request( + "delete", + "/v1/tax_ids/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + id: str, + params: Optional["TaxIdDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Deletes an existing account or customer tax_id object. + """ + return cast( + "TaxId", + await self._request_async( + "delete", + "/v1/tax_ids/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["TaxIdRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Retrieves an account or customer tax_id object. + """ + return cast( + "TaxId", + self._request( + "get", + "/v1/tax_ids/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["TaxIdRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Retrieves an account or customer tax_id object. + """ + return cast( + "TaxId", + await self._request_async( + "get", + "/v1/tax_ids/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["TaxIdListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxId]": + """ + Returns a list of tax IDs. + """ + return cast( + "ListObject[TaxId]", + self._request( + "get", + "/v1/tax_ids", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TaxIdListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxId]": + """ + Returns a list of tax IDs. + """ + return cast( + "ListObject[TaxId]", + await self._request_async( + "get", + "/v1/tax_ids", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "TaxIdCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Creates a new account or customer tax_id object. + """ + return cast( + "TaxId", + self._request( + "post", + "/v1/tax_ids", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "TaxIdCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxId": + """ + Creates a new account or customer tax_id object. + """ + return cast( + "TaxId", + await self._request_async( + "post", + "/v1/tax_ids", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate.py new file mode 100644 index 00000000..ec57166e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate.py @@ -0,0 +1,262 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._tax_rate_create_params import TaxRateCreateParams + from stripe.params._tax_rate_list_params import TaxRateListParams + from stripe.params._tax_rate_modify_params import TaxRateModifyParams + from stripe.params._tax_rate_retrieve_params import TaxRateRetrieveParams + + +class TaxRate( + CreateableAPIResource["TaxRate"], + ListableAPIResource["TaxRate"], + UpdateableAPIResource["TaxRate"], +): + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + + OBJECT_NAME: ClassVar[Literal["tax_rate"]] = "tax_rate" + + class FlatAmount(StripeObject): + amount: int + """ + Amount of the tax when the `rate_type` is `flat_amount`. This positive integer represents how much to charge in the smallest currency unit (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). + """ + currency: str + """ + Three-letter ISO currency code, in lowercase. + """ + + active: bool + """ + Defaults to `true`. When set to `false`, this tax rate cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + description: Optional[str] + """ + An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. + """ + display_name: str + """ + The display name of the tax rates as it will appear to your customer on their receipt email, PDF, and the hosted invoice page. + """ + effective_percentage: Optional[float] + """ + Actual/effective tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, + this percentage reflects the rate actually used to calculate tax based on the product's taxability + and whether the user is registered to collect taxes in the corresponding jurisdiction. + """ + flat_amount: Optional[FlatAmount] + """ + The amount of the tax rate when the `rate_type` is `flat_amount`. Tax rates with `rate_type` `percentage` can vary based on the transaction, resulting in this field being `null`. This field exposes the amount and currency of the flat tax rate. + """ + id: str + """ + Unique identifier for the object. + """ + inclusive: bool + """ + This specifies if the tax rate is inclusive or exclusive. + """ + jurisdiction: Optional[str] + """ + The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer's invoice. + """ + jurisdiction_level: Optional[ + Literal["city", "country", "county", "district", "multiple", "state"] + ] + """ + The level of the jurisdiction that imposes this tax rate. Will be `null` for manually defined tax rates. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["tax_rate"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + percentage: float + """ + Tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, this percentage includes the statutory tax rate of non-taxable jurisdictions. + """ + rate_type: Optional[Literal["flat_amount", "percentage"]] + """ + Indicates the type of tax rate applied to the taxable amount. This value can be `null` when no tax applies to the location. This field is only present for TaxRates created by Stripe Tax. + """ + state: Optional[str] + """ + [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. + """ + tax_type: Optional[ + Literal[ + "amusement_tax", + "communications_tax", + "gst", + "hst", + "igst", + "jct", + "lease_tax", + "pst", + "qst", + "retail_delivery_fee", + "rst", + "sales_tax", + "service_tax", + "vat", + ] + ] + """ + The high-level tax type, such as `vat` or `sales_tax`. + """ + + @classmethod + def create(cls, **params: Unpack["TaxRateCreateParams"]) -> "TaxRate": + """ + Creates a new tax rate. + """ + return cast( + "TaxRate", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TaxRateCreateParams"] + ) -> "TaxRate": + """ + Creates a new tax rate. + """ + return cast( + "TaxRate", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["TaxRateListParams"] + ) -> ListObject["TaxRate"]: + """ + Returns a list of your tax rates. Tax rates are returned sorted by creation date, with the most recently created tax rates appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TaxRateListParams"] + ) -> ListObject["TaxRate"]: + """ + Returns a list of your tax rates. Tax rates are returned sorted by creation date, with the most recently created tax rates appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["TaxRateModifyParams"] + ) -> "TaxRate": + """ + Updates an existing tax rate. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "TaxRate", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["TaxRateModifyParams"] + ) -> "TaxRate": + """ + Updates an existing tax rate. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "TaxRate", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TaxRateRetrieveParams"] + ) -> "TaxRate": + """ + Retrieves a tax rate with the given ID + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TaxRateRetrieveParams"] + ) -> "TaxRate": + """ + Retrieves a tax rate with the given ID + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"flat_amount": FlatAmount} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate_service.py new file mode 100644 index 00000000..8645575d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_rate_service.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._tax_rate import TaxRate + from stripe.params._tax_rate_create_params import TaxRateCreateParams + from stripe.params._tax_rate_list_params import TaxRateListParams + from stripe.params._tax_rate_retrieve_params import TaxRateRetrieveParams + from stripe.params._tax_rate_update_params import TaxRateUpdateParams + + +class TaxRateService(StripeService): + def list( + self, + params: Optional["TaxRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxRate]": + """ + Returns a list of your tax rates. Tax rates are returned sorted by creation date, with the most recently created tax rates appearing first. + """ + return cast( + "ListObject[TaxRate]", + self._request( + "get", + "/v1/tax_rates", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TaxRateListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[TaxRate]": + """ + Returns a list of your tax rates. Tax rates are returned sorted by creation date, with the most recently created tax rates appearing first. + """ + return cast( + "ListObject[TaxRate]", + await self._request_async( + "get", + "/v1/tax_rates", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "TaxRateCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Creates a new tax rate. + """ + return cast( + "TaxRate", + self._request( + "post", + "/v1/tax_rates", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "TaxRateCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Creates a new tax rate. + """ + return cast( + "TaxRate", + await self._request_async( + "post", + "/v1/tax_rates", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + tax_rate: str, + params: Optional["TaxRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Retrieves a tax rate with the given ID + """ + return cast( + "TaxRate", + self._request( + "get", + "/v1/tax_rates/{tax_rate}".format( + tax_rate=sanitize_id(tax_rate), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + tax_rate: str, + params: Optional["TaxRateRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Retrieves a tax rate with the given ID + """ + return cast( + "TaxRate", + await self._request_async( + "get", + "/v1/tax_rates/{tax_rate}".format( + tax_rate=sanitize_id(tax_rate), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + tax_rate: str, + params: Optional["TaxRateUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Updates an existing tax rate. + """ + return cast( + "TaxRate", + self._request( + "post", + "/v1/tax_rates/{tax_rate}".format( + tax_rate=sanitize_id(tax_rate), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + tax_rate: str, + params: Optional["TaxRateUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "TaxRate": + """ + Updates an existing tax rate. + """ + return cast( + "TaxRate", + await self._request_async( + "post", + "/v1/tax_rates/{tax_rate}".format( + tax_rate=sanitize_id(tax_rate), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_tax_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_service.py new file mode 100644 index 00000000..57c29159 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_tax_service.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.tax._calculation_service import CalculationService + from stripe.tax._registration_service import RegistrationService + from stripe.tax._settings_service import SettingsService + from stripe.tax._transaction_service import TransactionService + +_subservices = { + "calculations": ["stripe.tax._calculation_service", "CalculationService"], + "registrations": [ + "stripe.tax._registration_service", + "RegistrationService", + ], + "settings": ["stripe.tax._settings_service", "SettingsService"], + "transactions": ["stripe.tax._transaction_service", "TransactionService"], +} + + +class TaxService(StripeService): + calculations: "CalculationService" + registrations: "RegistrationService" + settings: "SettingsService" + transactions: "TransactionService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_terminal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_terminal_service.py new file mode 100644 index 00000000..33415c11 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_terminal_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.terminal._configuration_service import ConfigurationService + from stripe.terminal._connection_token_service import ( + ConnectionTokenService, + ) + from stripe.terminal._location_service import LocationService + from stripe.terminal._reader_service import ReaderService + +_subservices = { + "configurations": [ + "stripe.terminal._configuration_service", + "ConfigurationService", + ], + "connection_tokens": [ + "stripe.terminal._connection_token_service", + "ConnectionTokenService", + ], + "locations": ["stripe.terminal._location_service", "LocationService"], + "readers": ["stripe.terminal._reader_service", "ReaderService"], +} + + +class TerminalService(StripeService): + configurations: "ConfigurationService" + connection_tokens: "ConnectionTokenService" + locations: "LocationService" + readers: "ReaderService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers.py b/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers.py new file mode 100644 index 00000000..5b398f85 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers.py @@ -0,0 +1,65 @@ +from stripe._error import InvalidRequestError +from urllib.parse import quote_plus + +from typing import TypeVar, ClassVar, Any +from typing_extensions import Protocol +from stripe._api_resource import APIResource + +T = TypeVar("T", bound=APIResource[Any]) + + +class APIResourceTestHelpers(Protocol[T]): + """ + The base type for the TestHelper nested classes. + Handles request URL generation for test_helper custom methods. + Should be used in combination with the @test_helpers decorator. + + @test_helpers + class Foo(APIResource): + class TestHelpers(APIResourceTestHelpers): + """ + + _resource_cls: ClassVar[Any] + resource: T + + def __init__(self, resource): + self.resource = resource + + @classmethod + def _static_request(cls, *args, **kwargs): + return cls._resource_cls._static_request(*args, **kwargs) + + @classmethod + async def _static_request_async(cls, *args, **kwargs): + return await cls._resource_cls._static_request_async(*args, **kwargs) + + @classmethod + def _static_request_stream(cls, *args, **kwargs): + return cls._resource_cls._static_request_stream(*args, **kwargs) + + @classmethod + def class_url(cls): + if cls == APIResourceTestHelpers: + raise NotImplementedError( + "APIResourceTestHelpers is an abstract class. You should perform " + "actions on its subclasses (e.g. Charge, Customer)" + ) + # Namespaces are separated in object names with periods (.) and in URLs + # with forward slashes (/), so replace the former with the latter. + base = cls._resource_cls.OBJECT_NAME.replace(".", "/") + return "/v1/test_helpers/%ss" % (base,) + + def instance_url(self): + id = getattr(self.resource, "id", None) + + if not isinstance(id, str): + raise InvalidRequestError( + "Could not determine which URL to request: %s instance " + "has invalid ID: %r, %s. ID should be of type `str` (or" + " `unicode`)" % (type(self).__name__, id, type(id)), + "id", + ) + + base = self.class_url() + extn = quote_plus(id) + return "%s/%s" % (base, extn) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers_service.py new file mode 100644 index 00000000..8138b15f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_test_helpers_service.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.test_helpers._confirmation_token_service import ( + ConfirmationTokenService, + ) + from stripe.test_helpers._customer_service import CustomerService + from stripe.test_helpers._issuing_service import IssuingService + from stripe.test_helpers._refund_service import RefundService + from stripe.test_helpers._terminal_service import TerminalService + from stripe.test_helpers._test_clock_service import TestClockService + from stripe.test_helpers._treasury_service import TreasuryService + +_subservices = { + "confirmation_tokens": [ + "stripe.test_helpers._confirmation_token_service", + "ConfirmationTokenService", + ], + "customers": ["stripe.test_helpers._customer_service", "CustomerService"], + "issuing": ["stripe.test_helpers._issuing_service", "IssuingService"], + "refunds": ["stripe.test_helpers._refund_service", "RefundService"], + "terminal": ["stripe.test_helpers._terminal_service", "TerminalService"], + "test_clocks": [ + "stripe.test_helpers._test_clock_service", + "TestClockService", + ], + "treasury": ["stripe.test_helpers._treasury_service", "TreasuryService"], +} + + +class TestHelpersService(StripeService): + confirmation_tokens: "ConfirmationTokenService" + customers: "CustomerService" + issuing: "IssuingService" + refunds: "RefundService" + terminal: "TerminalService" + test_clocks: "TestClockService" + treasury: "TreasuryService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_token.py b/Backend/venv/lib/python3.12/site-packages/stripe/_token.py new file mode 100644 index 00000000..bf02e107 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_token.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._bank_account import BankAccount + from stripe._card import Card + from stripe.params._token_create_params import TokenCreateParams + from stripe.params._token_retrieve_params import TokenRetrieveParams + + +class Token(CreateableAPIResource["Token"]): + """ + Tokenization is the process Stripe uses to collect sensitive card or bank + account details, or personally identifiable information (PII), directly from + your customers in a secure manner. A token representing this information is + returned to your server to use. Use our + [recommended payments integrations](https://stripe.com/docs/payments) to perform this process + on the client-side. This guarantees that no sensitive card data touches your server, + and allows your integration to operate in a PCI-compliant way. + + If you can't use client-side tokenization, you can also create tokens using + the API with either your publishable or secret API key. If + your integration uses this method, you're responsible for any PCI compliance + that it might require, and you must keep your secret API key safe. Unlike with + client-side tokenization, your customer's information isn't sent directly to + Stripe, so we can't determine how it's handled or stored. + + You can't store or use tokens more than once. To store card or bank account + information for later use, create [Customer](https://stripe.com/docs/api#customers) + objects or [External accounts](https://docs.stripe.com/api#external_accounts). + [Radar](https://stripe.com/docs/radar), our integrated solution for automatic fraud protection, + performs best with integrations that use client-side tokenization. + """ + + OBJECT_NAME: ClassVar[Literal["token"]] = "token" + bank_account: Optional["BankAccount"] + """ + These bank accounts are payment methods on `Customer` objects. + + On the other hand [External Accounts](https://docs.stripe.com/api#external_accounts) are transfer + destinations on `Account` objects for connected accounts. + They can be bank accounts or debit cards as well, and are documented in the links above. + + Related guide: [Bank debits and transfers](https://docs.stripe.com/payments/bank-debits-transfers) + """ + card: Optional["Card"] + """ + You can store multiple cards on a customer in order to charge the customer + later. You can also store multiple debit cards on a recipient in order to + transfer to those cards later. + + Related guide: [Card payments with Sources](https://stripe.com/docs/sources/cards) + """ + client_ip: Optional[str] + """ + IP address of the client that generates the token. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["token"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + type: str + """ + Type of the token: `account`, `bank_account`, `card`, or `pii`. + """ + used: bool + """ + Determines if you have already used this token (you can only use tokens once). + """ + + @classmethod + def create(cls, **params: Unpack["TokenCreateParams"]) -> "Token": + """ + Creates a single-use token that represents a bank account's details. + You can use this token with any v1 API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [connected account](https://docs.stripe.com/api#accounts) where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is application, which includes Custom accounts. + """ + return cast( + "Token", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TokenCreateParams"] + ) -> "Token": + """ + Creates a single-use token that represents a bank account's details. + You can use this token with any v1 API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [connected account](https://docs.stripe.com/api#accounts) where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is application, which includes Custom accounts. + """ + return cast( + "Token", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TokenRetrieveParams"] + ) -> "Token": + """ + Retrieves the token with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TokenRetrieveParams"] + ) -> "Token": + """ + Retrieves the token with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_token_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_token_service.py new file mode 100644 index 00000000..a5cd81c2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_token_service.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe._token import Token + from stripe.params._token_create_params import TokenCreateParams + from stripe.params._token_retrieve_params import TokenRetrieveParams + + +class TokenService(StripeService): + def retrieve( + self, + token: str, + params: Optional["TokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Retrieves the token with the given ID. + """ + return cast( + "Token", + self._request( + "get", + "/v1/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + token: str, + params: Optional["TokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Retrieves the token with the given ID. + """ + return cast( + "Token", + await self._request_async( + "get", + "/v1/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["TokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Creates a single-use token that represents a bank account's details. + You can use this token with any v1 API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [connected account](https://docs.stripe.com/api#accounts) where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is application, which includes Custom accounts. + """ + return cast( + "Token", + self._request( + "post", + "/v1/tokens", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["TokenCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Creates a single-use token that represents a bank account's details. + You can use this token with any v1 API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [connected account](https://docs.stripe.com/api#accounts) where [controller.requirement_collection](https://docs.stripe.com/api/accounts/object#account_object-controller-requirement_collection) is application, which includes Custom accounts. + """ + return cast( + "Token", + await self._request_async( + "post", + "/v1/tokens", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_topup.py b/Backend/venv/lib/python3.12/site-packages/stripe/_topup.py new file mode 100644 index 00000000..e95ddfd2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_topup.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._source import Source + from stripe.params._topup_cancel_params import TopupCancelParams + from stripe.params._topup_create_params import TopupCreateParams + from stripe.params._topup_list_params import TopupListParams + from stripe.params._topup_modify_params import TopupModifyParams + from stripe.params._topup_retrieve_params import TopupRetrieveParams + + +class Topup( + CreateableAPIResource["Topup"], + ListableAPIResource["Topup"], + UpdateableAPIResource["Topup"], +): + """ + To top up your Stripe balance, you create a top-up object. You can retrieve + individual top-ups, as well as list all top-ups. Top-ups are identified by a + unique, random ID. + + Related guide: [Topping up your platform account](https://stripe.com/docs/connect/top-ups) + """ + + OBJECT_NAME: ClassVar[Literal["topup"]] = "topup" + amount: int + """ + Amount transferred. + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + ID of the balance transaction that describes the impact of this top-up on your account balance. May not be specified depending on status of top-up. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + expected_availability_date: Optional[int] + """ + Date the funds are expected to arrive in your Stripe account for payouts. This factors in delays like weekends or bank holidays. May not be specified depending on status of top-up. + """ + failure_code: Optional[str] + """ + Error code explaining reason for top-up failure if available (see [the errors section](https://stripe.com/docs/api#errors) for a list of codes). + """ + failure_message: Optional[str] + """ + Message to user further explaining reason for top-up failure if available. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["topup"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + source: Optional["Source"] + """ + The source field is deprecated. It might not always be present in the API response. + """ + statement_descriptor: Optional[str] + """ + Extra information about a top-up. This will appear on your source's bank statement. It must contain at least one letter. + """ + status: Literal["canceled", "failed", "pending", "reversed", "succeeded"] + """ + The status of the top-up is either `canceled`, `failed`, `pending`, `reversed`, or `succeeded`. + """ + transfer_group: Optional[str] + """ + A string that identifies this top-up as part of a group. + """ + + @classmethod + def _cls_cancel( + cls, topup: str, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + cls._static_request( + "post", + "/v1/topups/{topup}/cancel".format(topup=sanitize_id(topup)), + params=params, + ), + ) + + @overload + @staticmethod + def cancel(topup: str, **params: Unpack["TopupCancelParams"]) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + ... + + @overload + def cancel(self, **params: Unpack["TopupCancelParams"]) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + self._request( + "post", + "/v1/topups/{topup}/cancel".format( + topup=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, topup: str, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + await cls._static_request_async( + "post", + "/v1/topups/{topup}/cancel".format(topup=sanitize_id(topup)), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + topup: str, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TopupCancelParams"] + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + await self._request_async( + "post", + "/v1/topups/{topup}/cancel".format( + topup=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["TopupCreateParams"]) -> "Topup": + """ + Top up the balance of an account + """ + return cast( + "Topup", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TopupCreateParams"] + ) -> "Topup": + """ + Top up the balance of an account + """ + return cast( + "Topup", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["TopupListParams"]) -> ListObject["Topup"]: + """ + Returns a list of top-ups. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TopupListParams"] + ) -> ListObject["Topup"]: + """ + Returns a list of top-ups. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["TopupModifyParams"]) -> "Topup": + """ + Updates the metadata of a top-up. Other top-up details are not editable by design. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Topup", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["TopupModifyParams"] + ) -> "Topup": + """ + Updates the metadata of a top-up. Other top-up details are not editable by design. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Topup", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TopupRetrieveParams"] + ) -> "Topup": + """ + Retrieves the details of a top-up that has previously been created. Supply the unique top-up ID that was returned from your previous request, and Stripe will return the corresponding top-up information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TopupRetrieveParams"] + ) -> "Topup": + """ + Retrieves the details of a top-up that has previously been created. Supply the unique top-up ID that was returned from your previous request, and Stripe will return the corresponding top-up information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_topup_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_topup_service.py new file mode 100644 index 00000000..0f8b849f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_topup_service.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._topup import Topup + from stripe.params._topup_cancel_params import TopupCancelParams + from stripe.params._topup_create_params import TopupCreateParams + from stripe.params._topup_list_params import TopupListParams + from stripe.params._topup_retrieve_params import TopupRetrieveParams + from stripe.params._topup_update_params import TopupUpdateParams + + +class TopupService(StripeService): + def list( + self, + params: Optional["TopupListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Topup]": + """ + Returns a list of top-ups. + """ + return cast( + "ListObject[Topup]", + self._request( + "get", + "/v1/topups", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TopupListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Topup]": + """ + Returns a list of top-ups. + """ + return cast( + "ListObject[Topup]", + await self._request_async( + "get", + "/v1/topups", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "TopupCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Top up the balance of an account + """ + return cast( + "Topup", + self._request( + "post", + "/v1/topups", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "TopupCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Top up the balance of an account + """ + return cast( + "Topup", + await self._request_async( + "post", + "/v1/topups", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + topup: str, + params: Optional["TopupRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Retrieves the details of a top-up that has previously been created. Supply the unique top-up ID that was returned from your previous request, and Stripe will return the corresponding top-up information. + """ + return cast( + "Topup", + self._request( + "get", + "/v1/topups/{topup}".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + topup: str, + params: Optional["TopupRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Retrieves the details of a top-up that has previously been created. Supply the unique top-up ID that was returned from your previous request, and Stripe will return the corresponding top-up information. + """ + return cast( + "Topup", + await self._request_async( + "get", + "/v1/topups/{topup}".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + topup: str, + params: Optional["TopupUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Updates the metadata of a top-up. Other top-up details are not editable by design. + """ + return cast( + "Topup", + self._request( + "post", + "/v1/topups/{topup}".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + topup: str, + params: Optional["TopupUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Updates the metadata of a top-up. Other top-up details are not editable by design. + """ + return cast( + "Topup", + await self._request_async( + "post", + "/v1/topups/{topup}".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + topup: str, + params: Optional["TopupCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + self._request( + "post", + "/v1/topups/{topup}/cancel".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + topup: str, + params: Optional["TopupCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Topup": + """ + Cancels a top-up. Only pending top-ups can be canceled. + """ + return cast( + "Topup", + await self._request_async( + "post", + "/v1/topups/{topup}/cancel".format(topup=sanitize_id(topup)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_transfer.py b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer.py new file mode 100644 index 00000000..b45980e9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer.py @@ -0,0 +1,413 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._balance_transaction import BalanceTransaction + from stripe._charge import Charge + from stripe._reversal import Reversal + from stripe.params._transfer_create_params import TransferCreateParams + from stripe.params._transfer_create_reversal_params import ( + TransferCreateReversalParams, + ) + from stripe.params._transfer_list_params import TransferListParams + from stripe.params._transfer_list_reversals_params import ( + TransferListReversalsParams, + ) + from stripe.params._transfer_modify_params import TransferModifyParams + from stripe.params._transfer_modify_reversal_params import ( + TransferModifyReversalParams, + ) + from stripe.params._transfer_retrieve_params import TransferRetrieveParams + from stripe.params._transfer_retrieve_reversal_params import ( + TransferRetrieveReversalParams, + ) + + +@nested_resource_class_methods("reversal") +class Transfer( + CreateableAPIResource["Transfer"], + ListableAPIResource["Transfer"], + UpdateableAPIResource["Transfer"], +): + """ + A `Transfer` object is created when you move funds between Stripe accounts as + part of Connect. + + Before April 6, 2017, transfers also represented movement of funds from a + Stripe account to a card or bank account. This behavior has since been split + out into a [Payout](https://stripe.com/docs/api#payout_object) object, with corresponding payout endpoints. For more + information, read about the + [transfer/payout split](https://stripe.com/docs/transfer-payout-split). + + Related guide: [Creating separate charges and transfers](https://stripe.com/docs/connect/separate-charges-and-transfers) + """ + + OBJECT_NAME: ClassVar[Literal["transfer"]] = "transfer" + amount: int + """ + Amount in cents (or local equivalent) to be transferred. + """ + amount_reversed: int + """ + Amount in cents (or local equivalent) reversed (can be less than the amount attribute on the transfer if a partial reversal was issued). + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + Balance transaction that describes the impact of this transfer on your account balance. + """ + created: int + """ + Time that this record of the transfer was first created. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + destination: Optional[ExpandableField["Account"]] + """ + ID of the Stripe account the transfer was sent to. + """ + destination_payment: Optional[ExpandableField["Charge"]] + """ + If the destination is a Stripe account, this will be the ID of the payment that the destination account received for the transfer. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["transfer"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + reversals: ListObject["Reversal"] + """ + A list of reversals that have been applied to the transfer. + """ + reversed: bool + """ + Whether the transfer has been fully reversed. If the transfer is only partially reversed, this attribute will still be false. + """ + source_transaction: Optional[ExpandableField["Charge"]] + """ + ID of the charge that was used to fund the transfer. If null, the transfer was funded from the available balance. + """ + source_type: Optional[str] + """ + The source balance this transfer came from. One of `card`, `fpx`, or `bank_account`. + """ + transfer_group: Optional[str] + """ + A string that identifies this transaction as part of a group. See the [Connect documentation](https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options) for details. + """ + + @classmethod + def create(cls, **params: Unpack["TransferCreateParams"]) -> "Transfer": + """ + To send funds from your Stripe account to a connected account, you create a new transfer object. Your [Stripe balance](https://docs.stripe.com/api#balance) must be able to cover the transfer amount, or you'll receive an “Insufficient Funds” error. + """ + return cast( + "Transfer", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["TransferCreateParams"] + ) -> "Transfer": + """ + To send funds from your Stripe account to a connected account, you create a new transfer object. Your [Stripe balance](https://docs.stripe.com/api#balance) must be able to cover the transfer amount, or you'll receive an “Insufficient Funds” error. + """ + return cast( + "Transfer", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["TransferListParams"] + ) -> ListObject["Transfer"]: + """ + Returns a list of existing transfers sent to connected accounts. The transfers are returned in sorted order, with the most recently created transfers appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TransferListParams"] + ) -> ListObject["Transfer"]: + """ + Returns a list of existing transfers sent to connected accounts. The transfers are returned in sorted order, with the most recently created transfers appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["TransferModifyParams"] + ) -> "Transfer": + """ + Updates the specified transfer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts only metadata as an argument. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Transfer", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["TransferModifyParams"] + ) -> "Transfer": + """ + Updates the specified transfer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts only metadata as an argument. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Transfer", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransferRetrieveParams"] + ) -> "Transfer": + """ + Retrieves the details of an existing transfer. Supply the unique transfer ID from either a transfer creation request or the transfer list, and Stripe will return the corresponding transfer information. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransferRetrieveParams"] + ) -> "Transfer": + """ + Retrieves the details of an existing transfer. Supply the unique transfer ID from either a transfer creation request or the transfer list, and Stripe will return the corresponding transfer information. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def list_reversals( + cls, id: str, **params: Unpack["TransferListReversalsParams"] + ) -> ListObject["Reversal"]: + """ + You can see a list of the reversals belonging to a specific transfer. Note that the 10 most recent reversals are always available by default on the transfer object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional reversals. + """ + return cast( + ListObject["Reversal"], + cls._static_request( + "get", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + async def list_reversals_async( + cls, id: str, **params: Unpack["TransferListReversalsParams"] + ) -> ListObject["Reversal"]: + """ + You can see a list of the reversals belonging to a specific transfer. Note that the 10 most recent reversals are always available by default on the transfer object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional reversals. + """ + return cast( + ListObject["Reversal"], + await cls._static_request_async( + "get", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + def create_reversal( + cls, id: str, **params: Unpack["TransferCreateReversalParams"] + ) -> "Reversal": + """ + When you create a new reversal, you must specify a transfer to create it on. + + When reversing transfers, you can optionally reverse part of the transfer. You can do so as many times as you wish until the entire transfer has been reversed. + + Once entirely reversed, a transfer can't be reversed again. This method will return an error when called on an already-reversed transfer, or when trying to reverse more money than is left on a transfer. + """ + return cast( + "Reversal", + cls._static_request( + "post", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + async def create_reversal_async( + cls, id: str, **params: Unpack["TransferCreateReversalParams"] + ) -> "Reversal": + """ + When you create a new reversal, you must specify a transfer to create it on. + + When reversing transfers, you can optionally reverse part of the transfer. You can do so as many times as you wish until the entire transfer has been reversed. + + Once entirely reversed, a transfer can't be reversed again. This method will return an error when called on an already-reversed transfer, or when trying to reverse more money than is left on a transfer. + """ + return cast( + "Reversal", + await cls._static_request_async( + "post", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + params=params, + ), + ) + + @classmethod + def retrieve_reversal( + cls, + transfer: str, + id: str, + **params: Unpack["TransferRetrieveReversalParams"], + ) -> "Reversal": + """ + By default, you can see the 10 most recent reversals stored directly on the transfer object, but you can also retrieve details about a specific reversal stored on the transfer. + """ + return cast( + "Reversal", + cls._static_request( + "get", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def retrieve_reversal_async( + cls, + transfer: str, + id: str, + **params: Unpack["TransferRetrieveReversalParams"], + ) -> "Reversal": + """ + By default, you can see the 10 most recent reversals stored directly on the transfer object, but you can also retrieve details about a specific reversal stored on the transfer. + """ + return cast( + "Reversal", + await cls._static_request_async( + "get", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + def modify_reversal( + cls, + transfer: str, + id: str, + **params: Unpack["TransferModifyReversalParams"], + ) -> "Reversal": + """ + Updates the specified reversal by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata and description as arguments. + """ + return cast( + "Reversal", + cls._static_request( + "post", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def modify_reversal_async( + cls, + transfer: str, + id: str, + **params: Unpack["TransferModifyReversalParams"], + ) -> "Reversal": + """ + Updates the specified reversal by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata and description as arguments. + """ + return cast( + "Reversal", + await cls._static_request_async( + "post", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), id=sanitize_id(id) + ), + params=params, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_reversal_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_reversal_service.py new file mode 100644 index 00000000..0d74e068 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_reversal_service.py @@ -0,0 +1,213 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._reversal import Reversal + from stripe.params._transfer_reversal_create_params import ( + TransferReversalCreateParams, + ) + from stripe.params._transfer_reversal_list_params import ( + TransferReversalListParams, + ) + from stripe.params._transfer_reversal_retrieve_params import ( + TransferReversalRetrieveParams, + ) + from stripe.params._transfer_reversal_update_params import ( + TransferReversalUpdateParams, + ) + + +class TransferReversalService(StripeService): + def list( + self, + id: str, + params: Optional["TransferReversalListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Reversal]": + """ + You can see a list of the reversals belonging to a specific transfer. Note that the 10 most recent reversals are always available by default on the transfer object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional reversals. + """ + return cast( + "ListObject[Reversal]", + self._request( + "get", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + id: str, + params: Optional["TransferReversalListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Reversal]": + """ + You can see a list of the reversals belonging to a specific transfer. Note that the 10 most recent reversals are always available by default on the transfer object. If you need more than those 10, you can use this API method and the limit and starting_after parameters to page through additional reversals. + """ + return cast( + "ListObject[Reversal]", + await self._request_async( + "get", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + id: str, + params: Optional["TransferReversalCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + When you create a new reversal, you must specify a transfer to create it on. + + When reversing transfers, you can optionally reverse part of the transfer. You can do so as many times as you wish until the entire transfer has been reversed. + + Once entirely reversed, a transfer can't be reversed again. This method will return an error when called on an already-reversed transfer, or when trying to reverse more money than is left on a transfer. + """ + return cast( + "Reversal", + self._request( + "post", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + id: str, + params: Optional["TransferReversalCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + When you create a new reversal, you must specify a transfer to create it on. + + When reversing transfers, you can optionally reverse part of the transfer. You can do so as many times as you wish until the entire transfer has been reversed. + + Once entirely reversed, a transfer can't be reversed again. This method will return an error when called on an already-reversed transfer, or when trying to reverse more money than is left on a transfer. + """ + return cast( + "Reversal", + await self._request_async( + "post", + "/v1/transfers/{id}/reversals".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + transfer: str, + id: str, + params: Optional["TransferReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + By default, you can see the 10 most recent reversals stored directly on the transfer object, but you can also retrieve details about a specific reversal stored on the transfer. + """ + return cast( + "Reversal", + self._request( + "get", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + transfer: str, + id: str, + params: Optional["TransferReversalRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + By default, you can see the 10 most recent reversals stored directly on the transfer object, but you can also retrieve details about a specific reversal stored on the transfer. + """ + return cast( + "Reversal", + await self._request_async( + "get", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + transfer: str, + id: str, + params: Optional["TransferReversalUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + Updates the specified reversal by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata and description as arguments. + """ + return cast( + "Reversal", + self._request( + "post", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + transfer: str, + id: str, + params: Optional["TransferReversalUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Reversal": + """ + Updates the specified reversal by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request only accepts metadata and description as arguments. + """ + return cast( + "Reversal", + await self._request_async( + "post", + "/v1/transfers/{transfer}/reversals/{id}".format( + transfer=sanitize_id(transfer), + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_service.py new file mode 100644 index 00000000..4a32fb4f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_transfer_service.py @@ -0,0 +1,215 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._transfer import Transfer + from stripe._transfer_reversal_service import TransferReversalService + from stripe.params._transfer_create_params import TransferCreateParams + from stripe.params._transfer_list_params import TransferListParams + from stripe.params._transfer_retrieve_params import TransferRetrieveParams + from stripe.params._transfer_update_params import TransferUpdateParams + +_subservices = { + "reversals": [ + "stripe._transfer_reversal_service", + "TransferReversalService", + ], +} + + +class TransferService(StripeService): + reversals: "TransferReversalService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["TransferListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transfer]": + """ + Returns a list of existing transfers sent to connected accounts. The transfers are returned in sorted order, with the most recently created transfers appearing first. + """ + return cast( + "ListObject[Transfer]", + self._request( + "get", + "/v1/transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TransferListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transfer]": + """ + Returns a list of existing transfers sent to connected accounts. The transfers are returned in sorted order, with the most recently created transfers appearing first. + """ + return cast( + "ListObject[Transfer]", + await self._request_async( + "get", + "/v1/transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "TransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + To send funds from your Stripe account to a connected account, you create a new transfer object. Your [Stripe balance](https://docs.stripe.com/api#balance) must be able to cover the transfer amount, or you'll receive an “Insufficient Funds” error. + """ + return cast( + "Transfer", + self._request( + "post", + "/v1/transfers", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "TransferCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + To send funds from your Stripe account to a connected account, you create a new transfer object. Your [Stripe balance](https://docs.stripe.com/api#balance) must be able to cover the transfer amount, or you'll receive an “Insufficient Funds” error. + """ + return cast( + "Transfer", + await self._request_async( + "post", + "/v1/transfers", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + transfer: str, + params: Optional["TransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + Retrieves the details of an existing transfer. Supply the unique transfer ID from either a transfer creation request or the transfer list, and Stripe will return the corresponding transfer information. + """ + return cast( + "Transfer", + self._request( + "get", + "/v1/transfers/{transfer}".format( + transfer=sanitize_id(transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + transfer: str, + params: Optional["TransferRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + Retrieves the details of an existing transfer. Supply the unique transfer ID from either a transfer creation request or the transfer list, and Stripe will return the corresponding transfer information. + """ + return cast( + "Transfer", + await self._request_async( + "get", + "/v1/transfers/{transfer}".format( + transfer=sanitize_id(transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + transfer: str, + params: Optional["TransferUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + Updates the specified transfer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts only metadata as an argument. + """ + return cast( + "Transfer", + self._request( + "post", + "/v1/transfers/{transfer}".format( + transfer=sanitize_id(transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + transfer: str, + params: Optional["TransferUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transfer": + """ + Updates the specified transfer by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + + This request accepts only metadata as an argument. + """ + return cast( + "Transfer", + await self._request_async( + "post", + "/v1/transfers/{transfer}".format( + transfer=sanitize_id(transfer), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_treasury_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_treasury_service.py new file mode 100644 index 00000000..803cac51 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_treasury_service.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.treasury._credit_reversal_service import CreditReversalService + from stripe.treasury._debit_reversal_service import DebitReversalService + from stripe.treasury._financial_account_service import ( + FinancialAccountService, + ) + from stripe.treasury._inbound_transfer_service import ( + InboundTransferService, + ) + from stripe.treasury._outbound_payment_service import ( + OutboundPaymentService, + ) + from stripe.treasury._outbound_transfer_service import ( + OutboundTransferService, + ) + from stripe.treasury._received_credit_service import ReceivedCreditService + from stripe.treasury._received_debit_service import ReceivedDebitService + from stripe.treasury._transaction_entry_service import ( + TransactionEntryService, + ) + from stripe.treasury._transaction_service import TransactionService + +_subservices = { + "credit_reversals": [ + "stripe.treasury._credit_reversal_service", + "CreditReversalService", + ], + "debit_reversals": [ + "stripe.treasury._debit_reversal_service", + "DebitReversalService", + ], + "financial_accounts": [ + "stripe.treasury._financial_account_service", + "FinancialAccountService", + ], + "inbound_transfers": [ + "stripe.treasury._inbound_transfer_service", + "InboundTransferService", + ], + "outbound_payments": [ + "stripe.treasury._outbound_payment_service", + "OutboundPaymentService", + ], + "outbound_transfers": [ + "stripe.treasury._outbound_transfer_service", + "OutboundTransferService", + ], + "received_credits": [ + "stripe.treasury._received_credit_service", + "ReceivedCreditService", + ], + "received_debits": [ + "stripe.treasury._received_debit_service", + "ReceivedDebitService", + ], + "transactions": [ + "stripe.treasury._transaction_service", + "TransactionService", + ], + "transaction_entries": [ + "stripe.treasury._transaction_entry_service", + "TransactionEntryService", + ], +} + + +class TreasuryService(StripeService): + credit_reversals: "CreditReversalService" + debit_reversals: "DebitReversalService" + financial_accounts: "FinancialAccountService" + inbound_transfers: "InboundTransferService" + outbound_payments: "OutboundPaymentService" + outbound_transfers: "OutboundTransferService" + received_credits: "ReceivedCreditService" + received_debits: "ReceivedDebitService" + transactions: "TransactionService" + transaction_entries: "TransactionEntryService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_updateable_api_resource.py b/Backend/venv/lib/python3.12/site-packages/stripe/_updateable_api_resource.py new file mode 100644 index 00000000..4088dc51 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_updateable_api_resource.py @@ -0,0 +1,31 @@ +from stripe import _util +from stripe._api_resource import APIResource +from urllib.parse import quote_plus +from typing import TypeVar, cast +from stripe._stripe_object import StripeObject + +T = TypeVar("T", bound=StripeObject) + + +class UpdateableAPIResource(APIResource[T]): + @classmethod + def modify(cls, sid, **params) -> T: + url = "%s/%s" % (cls.class_url(), quote_plus(sid)) + return cast(T, cls._static_request("post", url, params=params)) + + @_util.deprecated( + "The `save` method is deprecated and will be removed in a future major version of the library. Use the class method `modify` on the resource instead." + ) + def save(self, idempotency_key=None): + updated_params = self.serialize(None) + if updated_params: + updated_params["idempotency_key"] = idempotency_key + self._request_and_refresh( + "post", + self.instance_url(), + params=updated_params, + usage=["save"], + ) + else: + _util.logger.debug("Trying to save already saved object %r", self) + return self diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_util.py b/Backend/venv/lib/python3.12/site-packages/stripe/_util.py new file mode 100644 index 00000000..9e121e35 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_util.py @@ -0,0 +1,452 @@ +import functools +import hmac +import logging +import sys +import os +import re +import warnings + +from stripe._api_mode import ApiMode + +from urllib.parse import quote_plus + +from typing_extensions import Type, TYPE_CHECKING +from typing import ( + Callable, + TypeVar, + Union, + overload, + Dict, + List, + cast, + Any, + Optional, + Mapping, +) +import typing_extensions + + +# Used for global variables +import stripe # noqa: IMP101 + +if TYPE_CHECKING: + from stripe._stripe_response import StripeResponse + from stripe._stripe_object import StripeObject + from stripe._api_requestor import _APIRequestor + +STRIPE_LOG = os.environ.get("STRIPE_LOG") + +logger: logging.Logger = logging.getLogger("stripe") + +if TYPE_CHECKING: + deprecated = typing_extensions.deprecated +else: + _T = TypeVar("_T") + + # Copied from python/typing_extensions, as this was added in typing_extensions 4.5.0 which is incompatible with + # python 3.6. We still need `deprecated = typing_extensions.deprecated` in addition to this fallback, as + # IDEs (pylance) specially detect references to symbols defined in `typing_extensions` + # + # https://github.com/python/typing_extensions/blob/5d20e9eed31de88667542ba5a6f66e6dc439b681/src/typing_extensions.py#L2289-L2370 + def deprecated( + __msg: str, + *, + category: Optional[Type[Warning]] = DeprecationWarning, + stacklevel: int = 1, + ) -> Callable[[_T], _T]: + def decorator(__arg: _T) -> _T: + if category is None: + __arg.__deprecated__ = __msg + return __arg + elif isinstance(__arg, type): + original_new = __arg.__new__ + has_init = __arg.__init__ is not object.__init__ + + @functools.wraps(original_new) + def __new__(cls, *args, **kwargs): + warnings.warn( + __msg, category=category, stacklevel=stacklevel + 1 + ) + if original_new is not object.__new__: + return original_new(cls, *args, **kwargs) + # Mirrors a similar check in object.__new__. + elif not has_init and (args or kwargs): + raise TypeError(f"{cls.__name__}() takes no arguments") + else: + return original_new(cls) + + __arg.__new__ = staticmethod(__new__) + __arg.__deprecated__ = __new__.__deprecated__ = __msg + return __arg + elif callable(__arg): + + @functools.wraps(__arg) + def wrapper(*args, **kwargs): + warnings.warn( + __msg, category=category, stacklevel=stacklevel + 1 + ) + return __arg(*args, **kwargs) + + __arg.__deprecated__ = wrapper.__deprecated__ = __msg + return wrapper + else: + raise TypeError( + "@deprecated decorator with non-None category must be applied to " + f"a class or callable, not {__arg!r}" + ) + + return decorator + + +def is_appengine_dev(): + return "APPENGINE_RUNTIME" in os.environ and "Dev" in os.environ.get( + "SERVER_SOFTWARE", "" + ) + + +def _console_log_level(): + if stripe.log in ["debug", "info"]: + return stripe.log + elif STRIPE_LOG in ["debug", "info"]: + return STRIPE_LOG + else: + return None + + +def log_debug(message, **params): + msg = logfmt(dict(message=message, **params)) + if _console_log_level() == "debug": + print(msg, file=sys.stderr) + logger.debug(msg) + + +def log_info(message, **params): + msg = logfmt(dict(message=message, **params)) + if _console_log_level() in ["debug", "info"]: + print(msg, file=sys.stderr) + logger.info(msg) + + +def _test_or_live_environment(): + if stripe.api_key is None: + return + match = re.match(r"sk_(live|test)_", stripe.api_key) + if match is None: + return + return match.groups()[0] + + +def dashboard_link(request_id): + return "https://dashboard.stripe.com/{env}/logs/{reqid}".format( + env=_test_or_live_environment() or "test", reqid=request_id + ) + + +def logfmt(props): + def fmt(key, val): + # Handle case where val is a bytes or bytesarray + if hasattr(val, "decode"): + val = val.decode("utf-8") + # Check if val is already a string to avoid re-encoding into + # ascii. Since the code is sent through 2to3, we can't just + # use unicode(val, encoding='utf8') since it will be + # translated incorrectly. + if not isinstance(val, str): + val = str(val) + if re.search(r"\s", val): + val = repr(val) + # key should already be a string + if re.search(r"\s", key): + key = repr(key) + return "{key}={val}".format(key=key, val=val) + + return " ".join([fmt(key, val) for key, val in sorted(props.items())]) + + +# Borrowed from Django's source code +if hasattr(hmac, "compare_digest"): + # Prefer the stdlib implementation, when available. + def secure_compare(val1, val2): + return hmac.compare_digest(val1, val2) + +else: + + def secure_compare(val1, val2): + """ + Returns True if the two strings are equal, False otherwise. + The time taken is independent of the number of characters that match. + For the sake of simplicity, this function executes in constant time + only when the two strings have the same length. It short-circuits when + they have different lengths. + """ + if len(val1) != len(val2): + return False + result = 0 + if isinstance(val1, bytes) and isinstance(val2, bytes): + for x, y in zip(val1, val2): + result |= x ^ y + else: + for x, y in zip(val1, val2): + result |= ord(cast(str, x)) ^ ord(cast(str, y)) + return result == 0 + + +Resp = Union["StripeResponse", Dict[str, Any], List["Resp"]] + + +@overload +def convert_to_stripe_object( + resp: Union["StripeResponse", Dict[str, Any]], + api_key: Optional[str] = None, + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + *, + api_mode: ApiMode = "V1", +) -> "StripeObject": ... + + +@overload +def convert_to_stripe_object( + resp: List[Resp], + api_key: Optional[str] = None, + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + *, + api_mode: ApiMode = "V1", +) -> List["StripeObject"]: ... + + +def convert_to_stripe_object( + resp: Resp, + api_key: Optional[str] = None, + stripe_version: Optional[str] = None, + stripe_account: Optional[str] = None, + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + *, + api_mode: ApiMode = "V1", +) -> Union["StripeObject", List["StripeObject"]]: + from stripe._api_requestor import _APIRequestor + + return _convert_to_stripe_object( + resp=resp, + params=params, + klass_=klass_, + requestor=_APIRequestor._global_with_options( + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + ), + api_mode=api_mode, + ) + + +@overload +def _convert_to_stripe_object( + *, + resp: Union["StripeResponse", Dict[str, Any]], + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + is_v2_deleted_object: bool = False, +) -> "StripeObject": ... + + +@overload +def _convert_to_stripe_object( + *, + resp: List[Resp], + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + is_v2_deleted_object: bool = False, +) -> List["StripeObject"]: ... + + +def _convert_to_stripe_object( + *, + resp: Resp, + params: Optional[Mapping[str, Any]] = None, + klass_: Optional[Type["StripeObject"]] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + # if true, we should ignore the `object` field for finding the class name. This is set by the API requestor + is_v2_deleted_object: bool = False, +) -> Union["StripeObject", List["StripeObject"]]: + # If we get a StripeResponse, we'll want to return a + # StripeObject with the last_response field filled out with + # the raw API response information + stripe_response = None + + # Imports here at runtime to avoid circular dependencies + from stripe._stripe_response import StripeResponse + from stripe._stripe_object import StripeObject + + if isinstance(resp, StripeResponse): + stripe_response = resp + resp = cast(Resp, stripe_response.data) + + if isinstance(resp, list): + return [ + _convert_to_stripe_object( + resp=cast("Union[StripeResponse, Dict[str, Any]]", i), + requestor=requestor, + api_mode=api_mode, + klass_=klass_, + ) + for i in resp + ] + elif isinstance(resp, dict) and not isinstance(resp, StripeObject): + resp = resp.copy() + klass_name = resp.get("object") + if isinstance(klass_name, str): + if is_v2_deleted_object: + # circular import + from stripe.v2._deleted_object import DeletedObject + + klass = DeletedObject + elif api_mode == "V2" and klass_name == "v2.core.event": + from stripe.events._event_classes import get_v2_event_class + + event_type = resp.get("type", "") + klass = get_v2_event_class(event_type) + else: + from stripe._object_classes import get_object_class + + klass = get_object_class(api_mode, klass_name) + # TODO: this is a horrible hack. The API needs + # to return something for `object` here. + + elif "data" in resp and "next_page_url" in resp: + klass = stripe.v2.ListObject + elif klass_ is not None: + klass = klass_ + else: + klass = StripeObject + + obj = klass._construct_from( + values=resp, + last_response=stripe_response, + requestor=requestor, + api_mode=api_mode, + ) + + # We only need to update _retrieve_params when special params were + # actually passed. Otherwise, leave it as is as the list / search result + # constructors will instantiate their own params. + if ( + params is not None + and hasattr(obj, "object") + and ( + (getattr(obj, "object") == "list") + or (getattr(obj, "object") == "search_result") + ) + ): + obj._retrieve_params = params + + return obj + else: + return cast("StripeObject", resp) + + +def convert_to_dict(obj): + """Converts a StripeObject back to a regular dict. + + Nested StripeObjects are also converted back to regular dicts. + + :param obj: The StripeObject to convert. + + :returns: The StripeObject as a dict. + """ + if isinstance(obj, list): + return [convert_to_dict(i) for i in obj] + # This works by virtue of the fact that StripeObjects _are_ dicts. The dict + # comprehension returns a regular dict and recursively applies the + # conversion to each value. + elif isinstance(obj, dict): + return {k: convert_to_dict(v) for k, v in obj.items()} + else: + return obj + + +@overload +def populate_headers( + idempotency_key: str, +) -> Dict[str, str]: ... + + +@overload +def populate_headers(idempotency_key: None) -> None: ... + + +def populate_headers( + idempotency_key: Union[str, None], +) -> Union[Dict[str, str], None]: + if idempotency_key is not None: + return {"Idempotency-Key": idempotency_key} + return None + + +T = TypeVar("T") + + +def merge_dicts(x, y): + z = x.copy() + z.update(y) + return z + + +def sanitize_id(id): + quotedId = quote_plus(id) + return quotedId + + +def get_api_mode(url: str) -> ApiMode: + if url.startswith("/v2"): + return "V2" + + # if urls aren't explicitly marked as v1, they're assumed to be v1 + else: + return "V1" + + +class class_method_variant(object): + def __init__(self, class_method_name): + self.class_method_name = class_method_name + + T = TypeVar("T") + + method: Any + + def __call__(self, method: T) -> T: + self.method = method + return cast(T, self) + + def __get__(self, obj, objtype: Optional[Type[Any]] = None): + @functools.wraps(self.method) + def _wrapper(*args, **kwargs): + if obj is not None: + # Method was called as an instance method, e.g. + # instance.method(...) + return self.method(obj, *args, **kwargs) + elif ( + len(args) > 0 + and objtype is not None + and isinstance(args[0], objtype) + ): + # Method was called as a class method with the instance as the + # first argument, e.g. Class.method(instance, ...) which in + # Python is the same thing as calling an instance method + return self.method(args[0], *args[1:], **kwargs) + else: + # Method was called as a class method, e.g. Class.method(...) + class_method = getattr(objtype, self.class_method_name) + return class_method(*args, **kwargs) + + return _wrapper diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_v1_services.py b/Backend/venv/lib/python3.12/site-packages/stripe/_v1_services.py new file mode 100644 index 00000000..ca9cc05b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_v1_services.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account_link_service import AccountLinkService + from stripe._account_service import AccountService + from stripe._account_session_service import AccountSessionService + from stripe._apple_pay_domain_service import ApplePayDomainService + from stripe._application_fee_service import ApplicationFeeService + from stripe._apps_service import AppsService + from stripe._balance_service import BalanceService + from stripe._balance_settings_service import BalanceSettingsService + from stripe._balance_transaction_service import BalanceTransactionService + from stripe._billing_portal_service import BillingPortalService + from stripe._billing_service import BillingService + from stripe._charge_service import ChargeService + from stripe._checkout_service import CheckoutService + from stripe._climate_service import ClimateService + from stripe._confirmation_token_service import ConfirmationTokenService + from stripe._country_spec_service import CountrySpecService + from stripe._coupon_service import CouponService + from stripe._credit_note_service import CreditNoteService + from stripe._customer_service import CustomerService + from stripe._customer_session_service import CustomerSessionService + from stripe._dispute_service import DisputeService + from stripe._entitlements_service import EntitlementsService + from stripe._ephemeral_key_service import EphemeralKeyService + from stripe._event_service import EventService + from stripe._exchange_rate_service import ExchangeRateService + from stripe._file_link_service import FileLinkService + from stripe._file_service import FileService + from stripe._financial_connections_service import ( + FinancialConnectionsService, + ) + from stripe._forwarding_service import ForwardingService + from stripe._identity_service import IdentityService + from stripe._invoice_item_service import InvoiceItemService + from stripe._invoice_payment_service import InvoicePaymentService + from stripe._invoice_rendering_template_service import ( + InvoiceRenderingTemplateService, + ) + from stripe._invoice_service import InvoiceService + from stripe._issuing_service import IssuingService + from stripe._mandate_service import MandateService + from stripe._payment_attempt_record_service import ( + PaymentAttemptRecordService, + ) + from stripe._payment_intent_service import PaymentIntentService + from stripe._payment_link_service import PaymentLinkService + from stripe._payment_method_configuration_service import ( + PaymentMethodConfigurationService, + ) + from stripe._payment_method_domain_service import ( + PaymentMethodDomainService, + ) + from stripe._payment_method_service import PaymentMethodService + from stripe._payment_record_service import PaymentRecordService + from stripe._payout_service import PayoutService + from stripe._plan_service import PlanService + from stripe._price_service import PriceService + from stripe._product_service import ProductService + from stripe._promotion_code_service import PromotionCodeService + from stripe._quote_service import QuoteService + from stripe._radar_service import RadarService + from stripe._refund_service import RefundService + from stripe._reporting_service import ReportingService + from stripe._review_service import ReviewService + from stripe._setup_attempt_service import SetupAttemptService + from stripe._setup_intent_service import SetupIntentService + from stripe._shipping_rate_service import ShippingRateService + from stripe._sigma_service import SigmaService + from stripe._source_service import SourceService + from stripe._subscription_item_service import SubscriptionItemService + from stripe._subscription_schedule_service import ( + SubscriptionScheduleService, + ) + from stripe._subscription_service import SubscriptionService + from stripe._tax_code_service import TaxCodeService + from stripe._tax_id_service import TaxIdService + from stripe._tax_rate_service import TaxRateService + from stripe._tax_service import TaxService + from stripe._terminal_service import TerminalService + from stripe._test_helpers_service import TestHelpersService + from stripe._token_service import TokenService + from stripe._topup_service import TopupService + from stripe._transfer_service import TransferService + from stripe._treasury_service import TreasuryService + from stripe._webhook_endpoint_service import WebhookEndpointService + +_subservices = { + "accounts": ["stripe._account_service", "AccountService"], + "account_links": ["stripe._account_link_service", "AccountLinkService"], + "account_sessions": [ + "stripe._account_session_service", + "AccountSessionService", + ], + "apple_pay_domains": [ + "stripe._apple_pay_domain_service", + "ApplePayDomainService", + ], + "application_fees": [ + "stripe._application_fee_service", + "ApplicationFeeService", + ], + "apps": ["stripe._apps_service", "AppsService"], + "balance": ["stripe._balance_service", "BalanceService"], + "balance_settings": [ + "stripe._balance_settings_service", + "BalanceSettingsService", + ], + "balance_transactions": [ + "stripe._balance_transaction_service", + "BalanceTransactionService", + ], + "billing": ["stripe._billing_service", "BillingService"], + "billing_portal": [ + "stripe._billing_portal_service", + "BillingPortalService", + ], + "charges": ["stripe._charge_service", "ChargeService"], + "checkout": ["stripe._checkout_service", "CheckoutService"], + "climate": ["stripe._climate_service", "ClimateService"], + "confirmation_tokens": [ + "stripe._confirmation_token_service", + "ConfirmationTokenService", + ], + "country_specs": ["stripe._country_spec_service", "CountrySpecService"], + "coupons": ["stripe._coupon_service", "CouponService"], + "credit_notes": ["stripe._credit_note_service", "CreditNoteService"], + "customers": ["stripe._customer_service", "CustomerService"], + "customer_sessions": [ + "stripe._customer_session_service", + "CustomerSessionService", + ], + "disputes": ["stripe._dispute_service", "DisputeService"], + "entitlements": ["stripe._entitlements_service", "EntitlementsService"], + "ephemeral_keys": ["stripe._ephemeral_key_service", "EphemeralKeyService"], + "events": ["stripe._event_service", "EventService"], + "exchange_rates": ["stripe._exchange_rate_service", "ExchangeRateService"], + "files": ["stripe._file_service", "FileService"], + "file_links": ["stripe._file_link_service", "FileLinkService"], + "financial_connections": [ + "stripe._financial_connections_service", + "FinancialConnectionsService", + ], + "forwarding": ["stripe._forwarding_service", "ForwardingService"], + "identity": ["stripe._identity_service", "IdentityService"], + "invoices": ["stripe._invoice_service", "InvoiceService"], + "invoice_items": ["stripe._invoice_item_service", "InvoiceItemService"], + "invoice_payments": [ + "stripe._invoice_payment_service", + "InvoicePaymentService", + ], + "invoice_rendering_templates": [ + "stripe._invoice_rendering_template_service", + "InvoiceRenderingTemplateService", + ], + "issuing": ["stripe._issuing_service", "IssuingService"], + "mandates": ["stripe._mandate_service", "MandateService"], + "payment_attempt_records": [ + "stripe._payment_attempt_record_service", + "PaymentAttemptRecordService", + ], + "payment_intents": [ + "stripe._payment_intent_service", + "PaymentIntentService", + ], + "payment_links": ["stripe._payment_link_service", "PaymentLinkService"], + "payment_methods": [ + "stripe._payment_method_service", + "PaymentMethodService", + ], + "payment_method_configurations": [ + "stripe._payment_method_configuration_service", + "PaymentMethodConfigurationService", + ], + "payment_method_domains": [ + "stripe._payment_method_domain_service", + "PaymentMethodDomainService", + ], + "payment_records": [ + "stripe._payment_record_service", + "PaymentRecordService", + ], + "payouts": ["stripe._payout_service", "PayoutService"], + "plans": ["stripe._plan_service", "PlanService"], + "prices": ["stripe._price_service", "PriceService"], + "products": ["stripe._product_service", "ProductService"], + "promotion_codes": [ + "stripe._promotion_code_service", + "PromotionCodeService", + ], + "quotes": ["stripe._quote_service", "QuoteService"], + "radar": ["stripe._radar_service", "RadarService"], + "refunds": ["stripe._refund_service", "RefundService"], + "reporting": ["stripe._reporting_service", "ReportingService"], + "reviews": ["stripe._review_service", "ReviewService"], + "setup_attempts": ["stripe._setup_attempt_service", "SetupAttemptService"], + "setup_intents": ["stripe._setup_intent_service", "SetupIntentService"], + "shipping_rates": ["stripe._shipping_rate_service", "ShippingRateService"], + "sigma": ["stripe._sigma_service", "SigmaService"], + "sources": ["stripe._source_service", "SourceService"], + "subscriptions": ["stripe._subscription_service", "SubscriptionService"], + "subscription_items": [ + "stripe._subscription_item_service", + "SubscriptionItemService", + ], + "subscription_schedules": [ + "stripe._subscription_schedule_service", + "SubscriptionScheduleService", + ], + "tax": ["stripe._tax_service", "TaxService"], + "tax_codes": ["stripe._tax_code_service", "TaxCodeService"], + "tax_ids": ["stripe._tax_id_service", "TaxIdService"], + "tax_rates": ["stripe._tax_rate_service", "TaxRateService"], + "terminal": ["stripe._terminal_service", "TerminalService"], + "test_helpers": ["stripe._test_helpers_service", "TestHelpersService"], + "tokens": ["stripe._token_service", "TokenService"], + "topups": ["stripe._topup_service", "TopupService"], + "transfers": ["stripe._transfer_service", "TransferService"], + "treasury": ["stripe._treasury_service", "TreasuryService"], + "webhook_endpoints": [ + "stripe._webhook_endpoint_service", + "WebhookEndpointService", + ], +} + + +class V1Services(StripeService): + accounts: "AccountService" + account_links: "AccountLinkService" + account_sessions: "AccountSessionService" + apple_pay_domains: "ApplePayDomainService" + application_fees: "ApplicationFeeService" + apps: "AppsService" + balance: "BalanceService" + balance_settings: "BalanceSettingsService" + balance_transactions: "BalanceTransactionService" + billing: "BillingService" + billing_portal: "BillingPortalService" + charges: "ChargeService" + checkout: "CheckoutService" + climate: "ClimateService" + confirmation_tokens: "ConfirmationTokenService" + country_specs: "CountrySpecService" + coupons: "CouponService" + credit_notes: "CreditNoteService" + customers: "CustomerService" + customer_sessions: "CustomerSessionService" + disputes: "DisputeService" + entitlements: "EntitlementsService" + ephemeral_keys: "EphemeralKeyService" + events: "EventService" + exchange_rates: "ExchangeRateService" + files: "FileService" + file_links: "FileLinkService" + financial_connections: "FinancialConnectionsService" + forwarding: "ForwardingService" + identity: "IdentityService" + invoices: "InvoiceService" + invoice_items: "InvoiceItemService" + invoice_payments: "InvoicePaymentService" + invoice_rendering_templates: "InvoiceRenderingTemplateService" + issuing: "IssuingService" + mandates: "MandateService" + payment_attempt_records: "PaymentAttemptRecordService" + payment_intents: "PaymentIntentService" + payment_links: "PaymentLinkService" + payment_methods: "PaymentMethodService" + payment_method_configurations: "PaymentMethodConfigurationService" + payment_method_domains: "PaymentMethodDomainService" + payment_records: "PaymentRecordService" + payouts: "PayoutService" + plans: "PlanService" + prices: "PriceService" + products: "ProductService" + promotion_codes: "PromotionCodeService" + quotes: "QuoteService" + radar: "RadarService" + refunds: "RefundService" + reporting: "ReportingService" + reviews: "ReviewService" + setup_attempts: "SetupAttemptService" + setup_intents: "SetupIntentService" + shipping_rates: "ShippingRateService" + sigma: "SigmaService" + sources: "SourceService" + subscriptions: "SubscriptionService" + subscription_items: "SubscriptionItemService" + subscription_schedules: "SubscriptionScheduleService" + tax: "TaxService" + tax_codes: "TaxCodeService" + tax_ids: "TaxIdService" + tax_rates: "TaxRateService" + terminal: "TerminalService" + test_helpers: "TestHelpersService" + tokens: "TokenService" + topups: "TopupService" + transfers: "TransferService" + treasury: "TreasuryService" + webhook_endpoints: "WebhookEndpointService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_v2_services.py b/Backend/venv/lib/python3.12/site-packages/stripe/_v2_services.py new file mode 100644 index 00000000..ebc1434a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_v2_services.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.v2._billing_service import BillingService + from stripe.v2._core_service import CoreService + +_subservices = { + "billing": ["stripe.v2._billing_service", "BillingService"], + "core": ["stripe.v2._core_service", "CoreService"], +} + + +class V2Services(StripeService): + billing: "BillingService" + core: "CoreService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_verify_mixin.py b/Backend/venv/lib/python3.12/site-packages/stripe/_verify_mixin.py new file mode 100644 index 00000000..bf779c61 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_verify_mixin.py @@ -0,0 +1,21 @@ +from typing import Any, Dict +from typing_extensions import Protocol + +from stripe._stripe_object import StripeObject + + +class _Verifiable(Protocol): + def instance_url(self) -> str: ... + + def _request( + self, + method: str, + url: str, + params: Dict[str, Any], + ) -> StripeObject: ... + + +class VerifyMixin(object): + def verify(self: _Verifiable, **params): + url = self.instance_url() + "/verify" + return self._request("post", url, params=params) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_version.py b/Backend/venv/lib/python3.12/site-packages/stripe/_version.py new file mode 100644 index 00000000..1cdb1633 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_version.py @@ -0,0 +1 @@ +VERSION = "13.2.0" diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_webhook.py b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook.py new file mode 100644 index 00000000..61686386 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook.py @@ -0,0 +1,96 @@ +import hmac +import json +import time +from collections import OrderedDict +from hashlib import sha256 + +# Used for global variables +import stripe # noqa: IMP101 +from stripe._event import Event +from stripe._util import secure_compare +from stripe._error import SignatureVerificationError +from stripe._api_requestor import _APIRequestor + + +class Webhook(object): + DEFAULT_TOLERANCE = 300 + + @staticmethod + def construct_event( + payload, sig_header, secret, tolerance=DEFAULT_TOLERANCE, api_key=None + ): + if hasattr(payload, "decode"): + payload = payload.decode("utf-8") + + WebhookSignature.verify_header(payload, sig_header, secret, tolerance) + + data = json.loads(payload, object_pairs_hook=OrderedDict) + event = Event._construct_from( + values=data, + requestor=_APIRequestor._global_with_options( + api_key=api_key or stripe.api_key + ), + api_mode="V1", + ) + + return event + + +class WebhookSignature(object): + EXPECTED_SCHEME = "v1" + + @staticmethod + def _compute_signature(payload, secret): + mac = hmac.new( + secret.encode("utf-8"), + msg=payload.encode("utf-8"), + digestmod=sha256, + ) + return mac.hexdigest() + + @staticmethod + def _get_timestamp_and_signatures(header, scheme): + list_items = [i.split("=", 2) for i in header.split(",")] + timestamp = int([i[1] for i in list_items if i[0] == "t"][0]) + signatures = [i[1] for i in list_items if i[0] == scheme] + return timestamp, signatures + + @classmethod + def verify_header(cls, payload, header, secret, tolerance=None): + try: + timestamp, signatures = cls._get_timestamp_and_signatures( + header, cls.EXPECTED_SCHEME + ) + except Exception: + raise SignatureVerificationError( + "Unable to extract timestamp and signatures from header", + header, + payload, + ) + + if not signatures: + raise SignatureVerificationError( + "No signatures found with expected scheme " + "%s" % cls.EXPECTED_SCHEME, + header, + payload, + ) + + signed_payload = "%d.%s" % (timestamp, payload) + expected_sig = cls._compute_signature(signed_payload, secret) + if not any(secure_compare(expected_sig, s) for s in signatures): + raise SignatureVerificationError( + "No signatures found matching the expected signature for " + "payload", + header, + payload, + ) + + if tolerance and timestamp < time.time() - tolerance: + raise SignatureVerificationError( + "Timestamp outside the tolerance zone (%d)" % timestamp, + header, + payload, + ) + + return True diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint.py b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint.py new file mode 100644 index 00000000..50c1d8cf --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._deletable_api_resource import DeletableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params._webhook_endpoint_create_params import ( + WebhookEndpointCreateParams, + ) + from stripe.params._webhook_endpoint_delete_params import ( + WebhookEndpointDeleteParams, + ) + from stripe.params._webhook_endpoint_list_params import ( + WebhookEndpointListParams, + ) + from stripe.params._webhook_endpoint_modify_params import ( + WebhookEndpointModifyParams, + ) + from stripe.params._webhook_endpoint_retrieve_params import ( + WebhookEndpointRetrieveParams, + ) + + +class WebhookEndpoint( + CreateableAPIResource["WebhookEndpoint"], + DeletableAPIResource["WebhookEndpoint"], + ListableAPIResource["WebhookEndpoint"], + UpdateableAPIResource["WebhookEndpoint"], +): + """ + You can configure [webhook endpoints](https://docs.stripe.com/webhooks/) via the API to be + notified about events that happen in your Stripe account or connected + accounts. + + Most users configure webhooks from [the dashboard](https://dashboard.stripe.com/webhooks), which provides a user interface for registering and testing your webhook endpoints. + + Related guide: [Setting up webhooks](https://docs.stripe.com/webhooks/configure) + """ + + OBJECT_NAME: ClassVar[Literal["webhook_endpoint"]] = "webhook_endpoint" + api_version: Optional[str] + """ + The API version events are rendered as for this webhook endpoint. + """ + application: Optional[str] + """ + The ID of the associated Connect application. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + deleted: Optional[Literal[True]] + """ + Always true for a deleted object + """ + description: Optional[str] + """ + An optional description of what the webhook is used for. + """ + enabled_events: List[str] + """ + The list of events to enable for this endpoint. `['*']` indicates that all events are enabled, except those that require explicit selection. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["webhook_endpoint"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + secret: Optional[str] + """ + The endpoint's secret, used to generate [webhook signatures](https://docs.stripe.com/webhooks/signatures). Only returned at creation. + """ + status: str + """ + The status of the webhook. It can be `enabled` or `disabled`. + """ + url: str + """ + The URL of the webhook endpoint. + """ + + @classmethod + def create( + cls, **params: Unpack["WebhookEndpointCreateParams"] + ) -> "WebhookEndpoint": + """ + A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the [webhooks settings](https://dashboard.stripe.com/account/webhooks) section of the Dashboard. + """ + return cast( + "WebhookEndpoint", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["WebhookEndpointCreateParams"] + ) -> "WebhookEndpoint": + """ + A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the [webhooks settings](https://dashboard.stripe.com/account/webhooks) section of the Dashboard. + """ + return cast( + "WebhookEndpoint", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_delete( + cls, sid: str, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "WebhookEndpoint", + cls._static_request( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + def delete( + sid: str, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + ... + + @overload + def delete( + self, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + ... + + @class_method_variant("_cls_delete") + def delete( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + return self._request_and_refresh( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + async def _cls_delete_async( + cls, sid: str, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(sid)) + return cast( + "WebhookEndpoint", + await cls._static_request_async( + "delete", + url, + params=params, + ), + ) + + @overload + @staticmethod + async def delete_async( + sid: str, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + ... + + @overload + async def delete_async( + self, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + ... + + @class_method_variant("_cls_delete_async") + async def delete_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["WebhookEndpointDeleteParams"] + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + return await self._request_and_refresh_async( + "delete", + self.instance_url(), + params=params, + ) + + @classmethod + def list( + cls, **params: Unpack["WebhookEndpointListParams"] + ) -> ListObject["WebhookEndpoint"]: + """ + Returns a list of your webhook endpoints. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["WebhookEndpointListParams"] + ) -> ListObject["WebhookEndpoint"]: + """ + Returns a list of your webhook endpoints. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["WebhookEndpointModifyParams"] + ) -> "WebhookEndpoint": + """ + Updates the webhook endpoint. You may edit the url, the list of enabled_events, and the status of your endpoint. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "WebhookEndpoint", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["WebhookEndpointModifyParams"] + ) -> "WebhookEndpoint": + """ + Updates the webhook endpoint. You may edit the url, the list of enabled_events, and the status of your endpoint. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "WebhookEndpoint", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["WebhookEndpointRetrieveParams"] + ) -> "WebhookEndpoint": + """ + Retrieves the webhook endpoint with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["WebhookEndpointRetrieveParams"] + ) -> "WebhookEndpoint": + """ + Retrieves the webhook endpoint with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint_service.py new file mode 100644 index 00000000..22c51718 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/_webhook_endpoint_service.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe._webhook_endpoint import WebhookEndpoint + from stripe.params._webhook_endpoint_create_params import ( + WebhookEndpointCreateParams, + ) + from stripe.params._webhook_endpoint_delete_params import ( + WebhookEndpointDeleteParams, + ) + from stripe.params._webhook_endpoint_list_params import ( + WebhookEndpointListParams, + ) + from stripe.params._webhook_endpoint_retrieve_params import ( + WebhookEndpointRetrieveParams, + ) + from stripe.params._webhook_endpoint_update_params import ( + WebhookEndpointUpdateParams, + ) + + +class WebhookEndpointService(StripeService): + def delete( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + return cast( + "WebhookEndpoint", + self._request( + "delete", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_async( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointDeleteParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + You can also delete webhook endpoints via the [webhook endpoint management](https://dashboard.stripe.com/account/webhooks) page of the Stripe dashboard. + """ + return cast( + "WebhookEndpoint", + await self._request_async( + "delete", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + Retrieves the webhook endpoint with the given ID. + """ + return cast( + "WebhookEndpoint", + self._request( + "get", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + Retrieves the webhook endpoint with the given ID. + """ + return cast( + "WebhookEndpoint", + await self._request_async( + "get", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + Updates the webhook endpoint. You may edit the url, the list of enabled_events, and the status of your endpoint. + """ + return cast( + "WebhookEndpoint", + self._request( + "post", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + webhook_endpoint: str, + params: Optional["WebhookEndpointUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + Updates the webhook endpoint. You may edit the url, the list of enabled_events, and the status of your endpoint. + """ + return cast( + "WebhookEndpoint", + await self._request_async( + "post", + "/v1/webhook_endpoints/{webhook_endpoint}".format( + webhook_endpoint=sanitize_id(webhook_endpoint), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def list( + self, + params: Optional["WebhookEndpointListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[WebhookEndpoint]": + """ + Returns a list of your webhook endpoints. + """ + return cast( + "ListObject[WebhookEndpoint]", + self._request( + "get", + "/v1/webhook_endpoints", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["WebhookEndpointListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[WebhookEndpoint]": + """ + Returns a list of your webhook endpoints. + """ + return cast( + "ListObject[WebhookEndpoint]", + await self._request_async( + "get", + "/v1/webhook_endpoints", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "WebhookEndpointCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the [webhooks settings](https://dashboard.stripe.com/account/webhooks) section of the Dashboard. + """ + return cast( + "WebhookEndpoint", + self._request( + "post", + "/v1/webhook_endpoints", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "WebhookEndpointCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "WebhookEndpoint": + """ + A webhook endpoint must have a url and a list of enabled_events. You may optionally specify the Boolean connect parameter. If set to true, then a Connect webhook endpoint that notifies the specified url about events from all connected accounts is created; otherwise an account webhook endpoint that notifies the specified url only about events from your account is created. You can also create webhook endpoints in the [webhooks settings](https://dashboard.stripe.com/account/webhooks) section of the Dashboard. + """ + return cast( + "WebhookEndpoint", + await self._request_async( + "post", + "/v1/webhook_endpoints", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/apps/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/apps/__init__.py new file mode 100644 index 00000000..f4e11b24 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/apps/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.apps._secret import Secret as Secret + from stripe.apps._secret_service import SecretService as SecretService + +# name -> (import_target, is_submodule) +_import_map = { + "Secret": ("stripe.apps._secret", False), + "SecretService": ("stripe.apps._secret_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a801fbb5b94f44369817b48da914355e90572232 GIT binary patch literal 949 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 A_5c6? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/_secret_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/apps/__pycache__/_secret_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..820e9e31e59a7627c890c6479b2ce030d7f65e76 GIT binary patch literal 4361 zcmd5<&2Jk;6rZ)%YkOn6j`LN5O1Fi6IBjg&LP1cF=m#kZNh^X>VFb&@J4xK`dfnMg z+JqhuttufQ!HEctaH@=T9(5Qa_jdfxYQ?iIH6(kAUAuD8u3t?L>$h;r6BDPXc zBtjK70eabr+Oa~6>mpX%RtqX`E7pLWC?t40Y9;MdA;sGdvu93CzcxDs1M2G~*E=_Vkrq*%dV^kGrZB+$To_U2XpvFWWkl-~ zqlQP%8_cj#KPE;`Q;T}^!V+aIRa&TCEtSnp^I!}=D#nUpBSJ=lPW>-vtP@HKl1U1o zI5CIKkQp{*8a5-3fzDLS=z?O#ZbS-lPi-8ukwB|<_zr+?0<=m`Z4$K6K%46F-2vKI zPi-2s@jyG+<(mPm+EY6O+JRLmI|7Hvfe#LI)>kSVa+ZYc`%y<65Q||?fdg7*E;2I`-=)L97!`f){^G=^DA%ZrL2?pkI@&g}#p54#MGfNGRt>R%yJX zYQck_)(p$iT)u2qb3KPqQ*+9iw?wtY(h4nWZqcdG+@=p3f~oxQBJ~>S{K}EMQK`83 zz~2uWmC~)SpO`mXsvD-ssOz#cIIuwww?YipIhFib$D`KdNyoWVDlg_w8pTVrZ02E!D|xFlpRcTXOHTP%?#R)+Tk_~+ z1q_Tu3X9_bCKjrTmBNdMTduO|%NC%p76eLgayc9uhNZaAfcSviO_TI+HKA1#=}%@p znyIEos_DJeU3;rzyQ({P*9J&(yiSy4sve1_)f$P%)jIf*u7kV|gY|boOcUv$5A!-i z())nZXQB1*%}9i_4);0oaqOG$6)78KBk&P^RBRMmV<>i_z(|~Jo}L_h8mutb@FF zpl{y$uUVIa#S7N)yqCvrEARDUor?Ruf0k=$T*PH-mTPC+R&cgw+yG4Z4>N9hlX0Tl zYvbGkb8P;jZ%=01vkt?#G1kR8lUI{1uzT??Aq@2^Sa+^%iSTyaO~kw7|J#xMvj1xy z;=0?i-?P}=o`;$C{Re#1I&)yR#pj4qKVCv6>;P+9US_4)Yy!$O9n+7l`>L+nj=5}M zJE7~Bmkmp3n2h_MO~cJ#k*M&GyLKCinm&UDqEZ{FWLvih)%D1wCutK)ny7= z4mGFYg`&eRr3~+c{#a8JRQr0z{io@N_Xk)5zku+7@ec-m;_j4dH_(IXAh=dxVd&@j zn0EwA;DkBX-`~fHXZ*kzOM "Secret": + """ + Create or replace a secret in the secret store. + """ + return cast( + "Secret", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SecretCreateParams"] + ) -> "Secret": + """ + Create or replace a secret in the secret store. + """ + return cast( + "Secret", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def delete_where( + cls, **params: Unpack["SecretDeleteWhereParams"] + ) -> "Secret": + """ + Deletes a secret from the secret store by name and scope. + """ + return cast( + "Secret", + cls._static_request( + "post", + "/v1/apps/secrets/delete", + params=params, + ), + ) + + @classmethod + async def delete_where_async( + cls, **params: Unpack["SecretDeleteWhereParams"] + ) -> "Secret": + """ + Deletes a secret from the secret store by name and scope. + """ + return cast( + "Secret", + await cls._static_request_async( + "post", + "/v1/apps/secrets/delete", + params=params, + ), + ) + + @classmethod + def find(cls, **params: Unpack["SecretFindParams"]) -> "Secret": + """ + Finds a secret in the secret store by name and scope. + """ + return cast( + "Secret", + cls._static_request( + "get", + "/v1/apps/secrets/find", + params=params, + ), + ) + + @classmethod + async def find_async( + cls, **params: Unpack["SecretFindParams"] + ) -> "Secret": + """ + Finds a secret in the secret store by name and scope. + """ + return cast( + "Secret", + await cls._static_request_async( + "get", + "/v1/apps/secrets/find", + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["SecretListParams"] + ) -> ListObject["Secret"]: + """ + List all secrets stored on the given scope. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SecretListParams"] + ) -> ListObject["Secret"]: + """ + List all secrets stored on the given scope. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + _inner_class_types = {"scope": Scope} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/apps/_secret_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/apps/_secret_service.py new file mode 100644 index 00000000..2a164c43 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/apps/_secret_service.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.apps._secret import Secret + from stripe.params.apps._secret_create_params import SecretCreateParams + from stripe.params.apps._secret_delete_where_params import ( + SecretDeleteWhereParams, + ) + from stripe.params.apps._secret_find_params import SecretFindParams + from stripe.params.apps._secret_list_params import SecretListParams + + +class SecretService(StripeService): + def list( + self, + params: "SecretListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Secret]": + """ + List all secrets stored on the given scope. + """ + return cast( + "ListObject[Secret]", + self._request( + "get", + "/v1/apps/secrets", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "SecretListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Secret]": + """ + List all secrets stored on the given scope. + """ + return cast( + "ListObject[Secret]", + await self._request_async( + "get", + "/v1/apps/secrets", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "SecretCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Create or replace a secret in the secret store. + """ + return cast( + "Secret", + self._request( + "post", + "/v1/apps/secrets", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "SecretCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Create or replace a secret in the secret store. + """ + return cast( + "Secret", + await self._request_async( + "post", + "/v1/apps/secrets", + base_address="api", + params=params, + options=options, + ), + ) + + def find( + self, + params: "SecretFindParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Finds a secret in the secret store by name and scope. + """ + return cast( + "Secret", + self._request( + "get", + "/v1/apps/secrets/find", + base_address="api", + params=params, + options=options, + ), + ) + + async def find_async( + self, + params: "SecretFindParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Finds a secret in the secret store by name and scope. + """ + return cast( + "Secret", + await self._request_async( + "get", + "/v1/apps/secrets/find", + base_address="api", + params=params, + options=options, + ), + ) + + def delete_where( + self, + params: "SecretDeleteWhereParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Deletes a secret from the secret store by name and scope. + """ + return cast( + "Secret", + self._request( + "post", + "/v1/apps/secrets/delete", + base_address="api", + params=params, + options=options, + ), + ) + + async def delete_where_async( + self, + params: "SecretDeleteWhereParams", + options: Optional["RequestOptions"] = None, + ) -> "Secret": + """ + Deletes a secret from the secret store by name and scope. + """ + return cast( + "Secret", + await self._request_async( + "post", + "/v1/apps/secrets/delete", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__init__.py new file mode 100644 index 00000000..d6b7582d --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__init__.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing._alert import Alert as Alert + from stripe.billing._alert_service import AlertService as AlertService + from stripe.billing._alert_triggered import ( + AlertTriggered as AlertTriggered, + ) + from stripe.billing._credit_balance_summary import ( + CreditBalanceSummary as CreditBalanceSummary, + ) + from stripe.billing._credit_balance_summary_service import ( + CreditBalanceSummaryService as CreditBalanceSummaryService, + ) + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction as CreditBalanceTransaction, + ) + from stripe.billing._credit_balance_transaction_service import ( + CreditBalanceTransactionService as CreditBalanceTransactionService, + ) + from stripe.billing._credit_grant import CreditGrant as CreditGrant + from stripe.billing._credit_grant_service import ( + CreditGrantService as CreditGrantService, + ) + from stripe.billing._meter import Meter as Meter + from stripe.billing._meter_event import MeterEvent as MeterEvent + from stripe.billing._meter_event_adjustment import ( + MeterEventAdjustment as MeterEventAdjustment, + ) + from stripe.billing._meter_event_adjustment_service import ( + MeterEventAdjustmentService as MeterEventAdjustmentService, + ) + from stripe.billing._meter_event_service import ( + MeterEventService as MeterEventService, + ) + from stripe.billing._meter_event_summary import ( + MeterEventSummary as MeterEventSummary, + ) + from stripe.billing._meter_event_summary_service import ( + MeterEventSummaryService as MeterEventSummaryService, + ) + from stripe.billing._meter_service import MeterService as MeterService + +# name -> (import_target, is_submodule) +_import_map = { + "Alert": ("stripe.billing._alert", False), + "AlertService": ("stripe.billing._alert_service", False), + "AlertTriggered": ("stripe.billing._alert_triggered", False), + "CreditBalanceSummary": ("stripe.billing._credit_balance_summary", False), + "CreditBalanceSummaryService": ( + "stripe.billing._credit_balance_summary_service", + False, + ), + "CreditBalanceTransaction": ( + "stripe.billing._credit_balance_transaction", + False, + ), + "CreditBalanceTransactionService": ( + "stripe.billing._credit_balance_transaction_service", + False, + ), + "CreditGrant": ("stripe.billing._credit_grant", False), + "CreditGrantService": ("stripe.billing._credit_grant_service", False), + "Meter": ("stripe.billing._meter", False), + "MeterEvent": ("stripe.billing._meter_event", False), + "MeterEventAdjustment": ("stripe.billing._meter_event_adjustment", False), + "MeterEventAdjustmentService": ( + "stripe.billing._meter_event_adjustment_service", + False, + ), + "MeterEventService": ("stripe.billing._meter_event_service", False), + "MeterEventSummary": ("stripe.billing._meter_event_summary", False), + "MeterEventSummaryService": ( + "stripe.billing._meter_event_summary_service", + False, + ), + "MeterService": ("stripe.billing._meter_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..879fbd7c65307575240f60031ce1a52f47692db2 GIT binary patch literal 3211 zcmbVN&2JM&6rc5a9XqxYf9AtZuwy$RPKaF~3ACaWUolV$s+9D=s@2NLZq1e*+nU_~ zu7ZS64;+y=aH`Z}5r0ZAMqJVrky^Ev-nLDtDo%Yf<9Gp^5IU0IzTeF6&BvQJKmQaC z4961&M-e}Wbu?d#r&9&!+AN+ z{J2rT)AF={bfhNKInQAfd!spDW%Y8vc>ItliWngN?tr@-daJlKLd4R%I740cv6 zf}K<6!5&c;z?Rf9*bmgBV2`QC!7i#x4+VKf6HTwW{2h`Hw@$Q96i@y^6J8YTu#TGz zVkx+xZW5QQf3!D&hRyA@{-=NGPhS!K*t7$}2p(k+; zzPfd`YEvw01y2JfDyGI{;g~>bJfDjw&U?R~A@qC*! zEuuHI(z zeA5*Y;QZ3T`0j@2n}=h~y(7+YZ@of-Jm%QJW8C#ZJa*zOu{ByH6%yvG!hS4wPEf19 zSA%IyRmdkX`xYxUdZ^O||XYBb9i8*Z$4y56WCFC9HrHg!u|Xab>H)66ozp>jt;%8H`bbxTo7%@&+Q>Fiul zNEX&!gP-{Yn7hdF1Oxf!`O=Tp)BNJoQ1*W1!Dr8txgVCFCFkx}ejZM5k4`=a{~k|m zM@F_IiCsxd3^_;)5B>YMA4SIgLIQ-xvd?0nE)is6Y4^Oy{tCzh z)9!hW{mI>Z(8{vkL;DDoOZ$HaAJa^GU)3Y@F6;wI9@EF({If?(s2bY)i5(Nf-n{l# zE+&ka;))ZXU=T?;cLcKjnJPeB1m#R0U!IAE23luIQX{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a29f5739e9efc90f74bc6fdd37b63447139f366 GIT binary patch literal 14162 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert_triggered.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_alert_triggered.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41c28e2350c8d3bad338e57d2691b6a667312226 GIT binary patch literal 972 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 bfyk>ni3LF@ZjKZ;PhV_~TzW!q$hH3m+5E9J literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_summary_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_summary_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf8490eaeada270ad1e24139a5b705587e2d6c90 GIT binary patch literal 1825 zcmbVN&u<$=6rR~%UTRp2k-LQhyLMS!@#&BzHLpLnyg+oWm=6?1s|=DjyF-+b@A+3$-* z1HoW_PPZHlpyj@8vMmRStt4~VR|Cz~Fd`bQfM4-* zfo|)GPxbSGVH=6A`C~!BE?^{~tH{gkAx|gxKo)1&#a`Yte&-Vt$HldXwmM{u(4AJ3 zm{P32*NIx~(Dh@b>9UB2y#K-VE6&pLm8F$;SFeJhbc5XL5*CR_2A0VsO1xII==yHh zBx~IuaA^d3C+XCaju=*pHYq_)+mX(G^9FAnkj*x zBE(b5=fg!1`zXTjNrs1a(aqD5nLWY3i+81O)q^zc2a<5EAyXT@V^q_T5yYy|7O6H9 zYOCvl+bR>}RyW$T>QwHe;FE)%vL zwL8{wJ0gC4vEAP02o~MuHVHjzhlD$p-&(giy=bc)UTVz0X0cX8>KzDhHwm*?Qj-s% zJ7;5em?+vtrx)vxr=+Ovyz(!pZe&qqz|0mve2k9Ds65#()cS?;7uP;M7(>PBA<~Map_(rn1C-AjLs<8CG28>=@Iw$Q2>II~<)-a>IHV?#vT znSC1OMC{9av&$fULw}#5uyXFl%FKhx%;O|ZTm%v)N`F1drN5?Yp3@FS7 zv4;javM&9R8&{2=%L@Y)z5@+arhk~8eK0;Z;C6^Gs>3|jUVWx9=HfifQk338lQ*YYdjVJVo zcn#i4gT*`7_>VPEIHH%FQ}3eSvj)IUI3DS5ioCo{O>pohkj;V^$Qa{e4dMBp&`XDC d?iaaysJwottQ<>{svQ|K*!Ze`jNp^(^$&pU;;R4v literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d55c565b1b203b9cc042b2eb7d7b5aa376ded1cf GIT binary patch literal 6563 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_balance_transaction_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..770fb7158aacd3c1846312f3a39f4be9bad3de3c GIT binary patch literal 3269 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_grant_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_credit_grant_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e0de47926f3453a8f1ab7e9aeaca6d15bfa53f0 GIT binary patch literal 7214 zcmdrRTW=d#`HU}Pdwj{*Ns~BjTDNI;@n&N;$)?$EyQzAkyOesX7FNP&F>Yp(bvt9b zXPnSvgMi&?B_t$}5R^v*Pf^P+*n)WHrO`e#8W9142lma#Eg-+Z_nk8nj~(B(yFz70 z%IEK#?{d!hZs(Fegu@bn&-mw9;p#y`{)!Fz^IAylcYxd@3Q+`&=t5Qy5O--V-JNwa z+^uVB}NmqpdQMG81B=;dL$cRxL+I4<*dx` zfELwb*%-qmZBQS|4lz8a?bC;|!we5;Bl>7|l;L45u8(EM1mYr>h!VL=lmS(^@8ndF>EUM5EH1fqlrLeB%3QE#t`rj&73Z-IRGd+uWqk5h@%N; zzM@{u)4YzHPSV9Yw)9!aEZpE`9Y`7kH z?^{LazKavDlcZRml@iuxCqN>f&>%??rKQ9oOTNT1W}lJT<)p))z;rLGm3lnAI-R~z z(6mBvInCK~oZWQi%Y{w18M=`-)LdRssA?E=5G3gkfK3+_QHwuEdCmi?$56GU28)5~ zfyvcxr{68t#Bh>t09+=*Gkf*}qKNN-)qd`}=l;;^B@Iu{lOOqi*G|8-5%+wiP?J z*Jgt+fXxOY|7tc|)dO~{*FvD^{lt{;D`8Ulbzn-MLFk~E8GDS10rdH$N^&;=V70Iv z7>RsShBy)gXJdNGB?z}>`%*XFS3#i>Ko&g!><`0@1y%)+erxbe`v7Qbf!~VHZfpqmtxEpDV`GYU!?odlAhxO6 zzWU^DDB4xKM=-KnuOIAKt<&!nl<#f|^f*kZQ4KadtVq*C&})iIC93Bu6m0`MWSTP%J$k={(5xY+y zzy;EI04+9;*k-ko=5QCwbCw^VlD7fy;%vL1kv6@Z&@GW_1EBi-lV?TYBjKz^dKdtV zV&8L@Q;qV@Py4+xidC{U-lB7`x^})1SJ*A0ZH?!opMhkjT!8BJ#m|KWG+kq#Xk*fSj{I`wr{Al(N%TyOxT3MDNDfX|NACf4^!DS? zJBUZ`U_ko++Z@hg7&Q{&0ybMVht3JXP1z+OoD3hM#oqzYX&>m@?3fpRJiRyBzUqNy zo#%xN!#sC+@#5~83ZHcP%8H2|S+NR=THMt!CnRL%cjva(sRsEI^i=2En0qXr-jYu{ za^v+cW^TL*c5vjzSFqV{ZpaODTKO^2=A_ih^dGc*j~waG{5^9d>B?l1LM9o77m{2t zudBJ7Ddlo{NmHVLbb?C?%w*oz4PR;zo7xhYimPa4Ok8jD-RWG!F6dQXq z_R>~#vWnEIpGXt60Aepai_ps?J!=h<>^Q&(AK=sRo_rlw5QxDFLIYJV{KDL$@kjAj zw&c0058M96T9B_Q5ox3rL@Y% zqj;+~LpE`xQqb5v%M>eXWq4-fS;k&1qr4}l-l?cX1OCThP`u2WgSIex8!NH@YfwK@ zMr?}p+?i{71U_I1S~l`wwl&c zX{zgZY?+o+7^P6knhuLXu@sl4ZpdB|C~G%C#grMv}ry?2>|o2Xl8x znKV_qlATdwH&x;!qMLfGj?;-%$w@x?k>;a~Kl+&I4>8OPIXl+aZGYP74OoolKEW(boBg4fx3Ug^b7WE%6qXkz2?v7~7X_&9uea zC{A6vJ<}2Ips+u^CDR%2q;MeJmFbRmQ#hCwGF#(YDO{iK$!v>nqi`tQo9T=9Q8=9L z&kV!|SjNG~ZmHoWtQmg}<_SiMyvj(8GAlKraVjh*nq?($AiI*xmX$4Zn)=f%Q zN(l8Ogi?_{?8%&znw%>Y>LWZ|Jwk+b@U#pBlxK~BwE%!wHKFLUP8uwwACHkK_5;JO zF)|ZpB_{4T3u+PPBuAW=ow7@Epoma0aZ4O%lrBI#2#{0u+~o8=;$A9NE+}=|N`17{ z1EpSDX&o)~L1~?>)Gr4>O#L{5myx{y2N0Hh00k)&1gPGqM>u4_^)Sn@ZI%r-oQMI3 z0Kd_IjWt0@Q>mocSYeA%QU|rI2-8`$8Kr(GZKtJSsY7m%wqPr%Q(`80sq0m~q%aY= zy1v_1-w5>)IY|2uN`1Jbtu~w{xmj+hiPd9al}2opn=5+brEL~oycLWfhycS zJMKEO>$l;wuRFT|3#&A{jvBKYwD95`bav5oXE$WWHE6qCr<=S*qS6T**kQx!To-Gn z4Xewx(qS7PVm6%ab#Qjsa0DC9Zd*TlY&cuXC}zic$iga7tjD03g~v;KExdRSrP#w| z6tm;*v*WHayAd1CwsmK>-@+=*uD8bQ4p?~cUOKyj>(1^GJFabZhitTa)P~cy4$fg4 zPQMN3OC{NO453MvG-|^f*bwuG4Ra9ekWa3Y{nFT<@bT!}(daSFNv*878@5xQ06&^l z1Z7%If|VA|A(a*8VD}Z2IoMM(MmLHes;ZbghqIU_ zsiX`ASxK18kqqr{LR3;Pkx4xR6B+i=bv!MnVY-qqHItI$gTmL&D&mwZ05+5v^Zmx) zIaQrj4#r|qE~yMFbf+Fp<}xt@A*ResC`s7A>6~LT*u_rTMU;*)A21MyDOI$(Q%AmX zZ0t;8eDvh8vaQM3R+!=tu+P3V$(+nftYMCw`sM^BbYq(1qs}#bcN`uwD0Nbto(4*5 zVSO8%7Uyu!Pn?(MH0Q(|I0+iB&P~hXQJ3aPB(h>gP9!v6B9X~SGiikViNrT&#I#Yv z!J4)DL_*AFbE-&JnMja&nB)zn2r08R5jzJQicMu-j2)Gg^J;E7_T`)^r*|I7<<7%Q zVn@Kikh4+@w&mGaIyDiSo&(<}`_S<2JuwCRke%p(0Ns?BPTvx3(MgiY@bsKkU$HvU z4I>Z3pMt<^%xXv1vZt%yaCrR%7gOJSbt)e$m5?alknNDvrg#_Blv7+{QHg-c4y5}W z7v=wkKed!TZ&OOtuJG^Z|7 zbB-vt)}k-%G_ZF@IYY!OFaG0?VF0+j2&rs`hePp{ATurf$%M=G56)x(~I7yt-_;X<8OchpBpraR3St)lxbAbMO(y3V))K%78IX(DrXfEn~%bF*Z zH6RxRBfw9sLH{OH8)MxwG{lg!;4IQAp%}!{T+`I6Cn#>3i^%E>$tI033W^v8J?J|4 zE5;$Y#;Bz_iCth`;GnSLCpnGWh6`7pN<#GY%^8TpG_M{*&5-mBAaydWP;>Krp*$2rh%sn3yYFzb4R{ixW{_ecLdo|R&8j4&Cd^hlB{c1~R z!OaAOBEtuQMW;LDD===akIG6FAzz37inEYB$*`Y0F)uR`{}M3dhmLF9x13JKBJK$D zhUb0m0t>e36bw$ON1j6HcOV%zY1dRiyM(CBWs~GIBA$VyjA(wHOghedgPnAG+3#Zu zRHT1legiZN8Z>NZT4~sxZ`fW`JD{4Lk7)1J z7z%wd-5;vZ6w2$hp4jZ}(oReJRbnrtq>C|YexOWaux=_AH+ZU1hG2uf+#u09S?Y_0EP)AkHg(~MomGjn8Ip|%tT|5BSm^t=_gM1CZak>*j##(~i z9{6mN59xw!mAnh>izp$lFoh7~^;au8)Rm7)Bq%Y4)ObZsPgdC=G6^X2RfD|`rRHEh zb1))8X_;w3%ST23I{yYa&0Ii62%`Q`+KRWpbC#kiuNz~q-?ElmK z?;U;j@N&zZ8lu%+WNL_3rM02f{0$gx^Va;cS{$(PuKU>d+5|7rdfe3OufoJFI+N!i zTdv4W6&h=p`VL(qYF7R&bW(g4k_~LWjSDsP8n*!#ZUbc;DDaS7E21xbX=IdV|B@Yb z_K0Ni!6evCsttC}+i6kX&QHp*D;xWJ|yG9Ppb41{h?AX^<~E)RIfS;83xD z`ZIk*Wvf~;_Y$Y#*z~vHFwOf5s8JQadFaQizr-#$s2ji62d)79naA{kD5T*|01sr$ zQz6~`u(>IeYq%Gz^&NW=&Y92&(i_o$N0=nJi~yH0JA|p6D)cE)H+4*?bE^4LN-7I} ze>N!-R7cHw1`a%q5t1XM2l6zCHQkmIhyam}0#SXr!Q*kjd7rNP2>&ObDrh-julF(F zxrTf5;oen$7$O1ORbD@}8fgRXzo8F2*9PAe7e)&0i~T~sbMzP0`56SrbZ!Gl-059=ZPu8hDpjJ+MuoB2bkQ-%5=02?XP ze;4IJ`J8s;vp7+T&0XXTm>l^-Oz?Qa9-voIo2m?Y`xV6X>*O@_!idW4WqXj&7}A-V zu|BQKBXynD8^-8V0S=9N*}q~(-M+u}0z_J2s4@kpg97|3{tt!e7fahyWta{pdd7ve zw8OlpD38N21TPEI@zw#ZCuq5OB>@*2ba$gyB%dZ6x8^}gUOV|+AXyC`T@SXc7G=S< zRXheRJruR%%&>3vP_(l0MWm04-OWH!CMQTMN*{D- zb@~`Vq9u~mL1N_qW~5eG{%suiMI0Ezvj-lyiv90EFYAr;tAGP8jcwOZt@+3qj=c=74xa!e^ zoQh4~1J^e6J=A15;Ai3gM^@LVDt$9!DuRZOn z^(|NGtL+FO&}VC{a7P9gAlTr?zbkawZ$aaeW0ShW$({}~iltTJe> z%258s^0n%vzr+2Lz*9Wd?~ItSTz*na-H zdypkf&=J9yy-Y|@K&X)X9su^!R<&e=_3Px?_h6C(4gqU8>sA16Ir^Kpb{MM?HDR4_ zTlZ-M{h1uR%Cn@7u8{_2YXj?D64>9^L1Syzf=eYdGkVyDo~7+9=6T4LTk=L4q*Zh_ z-)_a+iHf?vL5|wabU*YrFSQKi{o8G~aZRhC11q7&@}b9Uw*{l@X08iLEQ6UMQ>ncF zF#whO<`>1>P3@w$V1gFY$orVJcF{79d==|T$LTfp*7jN)F?39SwKKdv#tL!=eN*e` z%wmugKx~FV8=d>o#{-uRkJhmtFzl$;_W|n#7=qA4xVlF%IgZJbkc>x%$TrNN;iE4w zGCeL9aViJTz^Xr$;2HGT+dojVYT7t*Cy0%%*f;H zD^Ff+T^zU`%eU{zhaXzzkKN-vPXFSLdklQ;HSz#|{T>6Kd(g(ec)|wzDGc2N!{K~Vz2-56DC|A zxjb&dfyS$+^8VgszSk;QY8=e_qsx5MENUBq%xWNHO{J-4ncw=cGgNTYIem+hOMUzE zT?YybWPUMq7e7UgafNAZp`Ahjrw=0BrLNt1ybyxi$KKFgCwvV|fC^m{vmP+RjRg+B zLjTgh;k@uAnxieC)Mx=vp@(q=SDi4B%jpMuRp9X3v305EK)&N3&Cy0sij5jD3BpZ> z(+_tG06Bo}*Y_S|4bUduR<7Zs$OYPg2ojVE+oKb7nQun@m>qym% zcG7yB5lja$zo<3flC4=m&c0+=Bb3~M)xs)vFFW_#XB7{XucCSJ@uh8h^IIM+F!j#n zUkv@~+5EwicM&czq1jk+*x5`O9D`H90tdN|y^*U=p;4!T*a92)tcA z%f!gzY^BP8U*z4Pyzpp&gB)!EUxRl56&fk;5EIo0zng1Osc?_yg(nOZjVv_|nIE6+Dm-=6LVSdqeh(1{tZW| z>7*IWF_6&)@88@&Z$|Wu*JPY28x8Q9L)&;wwqp{bQ7bmuvEigjA)nC%19si5q34EC z%nm`a<~altg4fK4$=^X1oKi+X=c>T5Ec=OzVUMu4nW5Xvqqmt;x0&JF%;-nV!H<}S zmzjq@Vh-h*L;uKyZu7@(^Cvz5XU6r3izbZoI9pb9$HzFj7hhgxWA_{<-K=YsZ(AJ5 c^F6D4%c48a3ueCP##&Hj$F4gRk?P-n0buf;3;+NC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64ed241cb4fd81087753ee77a0428f6fbe88552f GIT binary patch literal 2352 zcmb_d&2Jk;6rc5e*xuNQosTvYXoe3F+z-37sG(AX)TB{c+NKq>NZkXg&F&=LWJr3>k^J_}n>TM}-tYIG ze<&7p1cUvt&s_uU7cuD#EmgV>C>zK@j^rU z896_17lW?$=~}AmV9%y{8Url3)G`43@{4g~u;x>%h^wc1!5JV$ zry$OCiVj*-oWa}5U6_es43gdJLw)N*tx~1T^(Q&7#wCPw3?sH-A`-(eB@Id#sMxY2 zHw+k#>Q;p9CW}I!P?%cF1iJxl0V0^SSVa6Pz8W^MZ3Vc=2=+yqd*PxGFSwqEt(^#X z!D7V0VE}=NOJR$(M5<3;!lDEN%AxH72OPZWM)f$18!RQ^*&)1IckMcM$f6q%ybyv1 z#KU$NMDaVq#dsdSYLelG)$&5i!B*hldbo<=Ue?kQB};GsIEHZVBmvbpB{xUJt>L(8 z{2DV};{z9G-kO`eY|fv&FvqiY%ut8x@uC@6KH<9S!0GOyODNBI?h5fkhj1-ixJH1h z+4L4XAGtnZk>xkI)`(e1MHO<5lBh`o8<5!$N(NtF{!}sGTBgISL!K zGhsx$!!u#H3@FrQprT3O)PSQaHP2nBHCg~#aIE^;(HeuoKP*Zfc*JTfqHcrK(tFp; zKK!bU7S|HgZkA)x&k4>~6Vp++3Of$s1N3MRl}5J;<6DKH`-O>iVPdPaXR9=_QT)94 z#n9H?=Q~+c#9gEm2fJ#vq<2s@uXkZ5+6COFVC=4dIESSF9lSN@tM3B=zRYaMAFC>Q z0_GI@EcdOvDpgcE4u{7$QPDW)J`nRgl*aynl4-G4VAJP>A1vR0w zfurmO5to58Tv-T1kBYM412I>DIQ7t>qWmZp;$;wb5Pd=DA|pvw#TCUV>_-qEp@*4_ zn(OE&zrQ0RwX{C|)#T=jQ|*0kw96;DD5Gi}4Gosp&Ua!z4V6dNF8-T7G_p3|vlmA< zM=R~ZfqTkzTTH4{k0=p?Dmi;YLp@JVm1_Ih!DF{dY+eeE*=q$H|~ZZeHBFw4k77Uv+B(>RXuyu-VKCd9nph_0kbuB^#!LQBLl z(Mh@~E#;=QwA-O|a0qu08J?3I#m#6L4)N$5vgCWnN?^`P>;)f>1?ExftR@SoU+AL1 zMZMz$8zDAk96WmI{QEfYE5yXGp7l;8g8EHB{0} zp&HH^uT=X?P}fK&j0@Q9bK}t=ooMcJOel>Dse%p=!p30m}d4^(A(h z{{4~q9Pi>l({nLCt{%s$KaV%+ zm>zp~V*H9eHF|MkTm1+Od(;>JroDc!fWeY0AmPml~4io~)XgpW9K5Ecc2B&aN_(|B!DC-_zc2Vs;l z>9Eu*#CgO=g6RaYdO%MCc4!3xx^aIk?p%Fr^G#3;DESDjccNU+nsQ)G$v#mAYs%nS zZr56_dpYwU^Lch{_bc@T%BT$_W;z>EBA2eCL@FKU@&%wj1$&KoAQuq#zk_`jS>lI~ zurK&!;S)(h&%r;5K1+TrEN}&hyb8`^Fv%gx9R@Phg0lB-Q0hid^-OYvDh>hJhM~e> zVmgcackJVKm9x~q86ZESKieS9_ddxF)$&6xLfSnHkalJ&Fs$df$CNH--tK%#`MTfV95q?3wh!4g{QWEUkOCA8Dxi9vdSi^Lh&MyWzw zKvHgL&%;A22gYjq#%oSw*AI1VaDWk5QyVET` z+kJPc#b_WIkGAqX^A@WONVRezE!c0Ns>tJs`D8s4Yj*6@J?;_ zXkCES52?Xt65Ja?Yrj6w;{JnX-@z}>uIwGEiMtpa6ojclHX3AOvZ%9apkF(>QMRF9 z+4l~iGbZY7X|cP`CS07SNCu=~vauY}3C}vei-~o7JH%cy%JFlxzR3+lmoZp>0fZ9AOaK4? literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_adjustment_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec75de45f9a25a5f923bf9ab0ee9584814f8d973 GIT binary patch literal 1804 zcmbVN&2Jk;6rb5I+Z)?BPLzPFf=QK%ZLn8q`8X6IHEGnKD5fG@*aNGLcbYoc^=@a@ zp>A_PG(ti`;zq6rPF3J9;X+SXD@A~~z|F`BAfI@%vrbYqrHDDadGkJIfAf29X1^~K zbOeL_S!rF<5c-ubMng@N!6qns$VD#pkdG~lxh{E%J=NDN4I`q_GWZoQ z<7cgG;#0kxuUmSeYu=cjxAGWC=mv5#yU5KFyf2GyS%q%S(0}I(1ILB6h_*tqM(B2{ zNen5@z8glZpzV0E(sWqFL*D=3=90a*ytKITPU8j`itmv-9l|0J$-pwXN+Lp+wn;m> z=5BUaRI+hN}Pz?bg1LArobd*CS44cLD@qDS=dFEltZrWO0MiGM0V8|z~^di z=9cDWcU4Pysy7E-wTq3h_}p12(i1mgEliNm9BdqCg5>m!axAe%Nz|cjnuSF(r4Lku zctQDkumEBYMHr@JxOfL`o{k*Z6Z|`PNBUOXPm8`U3FjIzwBc2~nhrq^t2)*7mglwF z8&#i^TP2*`s&hj7Ryf9dML;Fb%zmfxRfwP z^MHmHKo}C`2;;0xMV%p3VZ^(262kZq0q^j>c{}ilxzWCBUMFlT3PN)^h=^BP2!buZ zZZ0^@Ez)*P0KaW|t#vc(Mz@3ZmHPZ;leHpJ3n9SSAk1V*BOYV7&jxQZ(W&*Y8*9y^ zlkUy@OMUAirUZD|Yal*Ghb2^+?B!>A`O+7wpRM*vQ@zsbz4J4@>GQqkU+RycLS=xo zLUEwxN_rpVa{2)Bo~-`^Fb+Nhv4Zgb?tur;%lCoIFQq;CQ&mMLJ@F>`Jo}ye5jHZE zgHLKq$GKMKVuFiF5RFl}ilcJb4(qm?bQ+waI#GUW;=JHO`0u^)Y}Q2N1-{XB5Wk_n zPtjMN`msFws66{5ffE;jz=`5tkF(fUfYc%5ZT3mEhQG#h`Zu{6HgLnxpx5lS;}hGC zb=&p>x8rd=Z`*e|jwd`+flONA;zbY-5k1Fselj{X63>CcED*b>pGD@CKQiO0{&VSa zUxm4^p>pMi%B4r+bA4`y2)#PUaqZRr6nn^H#b@~!8%8mn5^YAkK$~;A$Eyp0)Zja_qDx zPCbHx%^84o!tgNrmZ-|x)Bp#6@7N^}eHmkXq#->26MFdo&HW;m4wN?zl$9e%Qnf>U O7VBTtju1@AUjG28hTBj8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_event_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cd8fed8dcab5b29a3b102f22fcb7b12ff4eb74b GIT binary patch literal 1699 zcmbVM&2Jk;6rb5I+Z)^1PUQqwEv6`lO^COl2rh_2(x^dIOhve`2UZ*JGlMwMos|v#G9RU?J874j8<>noA;Z2Z+`F1d|xW* z2nPGJ(fvk6=vQux2iWNt-iGN2xyZ#H^09?6*CkK#WlQ!IOG$0nQ+>_SFd`bQfnV`* ze%{KbKGiGux}~SO=FRv;tB8?=t|2#fh}=BE$Fc}zm3jq3|D78KPD)!b?M7sa(EVc9A6&kgL0rE4vDjUG-V;xtg21sk!+>)l#17 zEr3_;VPht#PGV#-!9TgcExm-S{g1SzcPG`G8+*9~@>KBuoqIDf6j zur#Sei9!~S=FR;TGeesx+D_3dk)5dfKu(I=4kNbXx|A?Rix8KVKo}C`xg>d;ikbmb zVZ^&RfiQj;$ZQmuw?dzoJHcJ^Dq*{E7?~SkOuXgQFx-VK%~hwfO9Iz~H1|!fyKP3j z_*NKPX|23svTjV4BLFx%gqbXDs>cc2QyJS#v|20bC0ZwKk9+fHiq;aI3Z%wf1@RF& zsi4ZaesR8EtbD%t>1MxD?^hQ47cTYZF7)T08_b|mV~Dg;d8igD`T!LQ`VjV=E$V$( z9KH|YI>P_Eu=k-YKLp;skdEX}R25AM{W|(A|DF5+Hgc3FpVp98xmM$1mWy*B+T+TU z$Ca@i)(bjx4xHnXP<{cDqToXK?_GQvSHk}S-+mRuZ|LtS(rWb|YYPu+3ukGYeGzDz zE&uf-cLN2e95LQUA2*lrS9nSPy0DB5+%`05COdF^V%v#s+kWWod0a2r_MJV)6CSF- zPTJt&B8Ufwp65D051ko{XFy>Vh(k2UBlF51xvHxFTzP4r!aUGWt?@%+@nLmoz}Eqx z*M|kJz5JiBCmbun@`!DtoYX~MwrnwvTaoe`kZ5r)f-V=CrPW`EmC^&JzOlV(4jIXBzBlvU^LyW$nLk%oy9kE*cZ)yu z5c*`4{w;*iIzNLN26yf)S&whVye`yR03}Q#5I#N4r|9+Hc`;oOVHmShK5#zhW0Oz z&CrSLVT-xUi|nsp*LS7psc*NtFrxTnQBg~8yR<#+HER#&Zio!I-bTW}_ zLN$xjbi(ing+GU(%)xC`ockRf3yJlVYMe32Mbz(BUIU@ocetuo)wO`XWam?- zsz}4B6sgEnTwo<247;Fu4jE-q%yxRa|L9)RG4i0>~25kW;1Juk!hQ zyP>yV(Mu|NNkebBaW;K9#iuy=S+uK!OjnbA0BrO(oc7_v&6N2MS08B0XOO1Fwt zdZId&Wmjn`b!9k!Zu^9!z%3zVmk_YeV}pBy{07-KJ8eQD5fUPOI3u!UgtFV<1##==4F`s-_NZ@&NL{^{2DryF}`$acMjhpt}#(Ar+uHW+$n?b7^k zi95ad!zEt3JRdA^Z*Bf~iB~t@Z{9xb?S5$OE|)eo=SLNmTg!|FJMHpHT}GeOGpRcy z&7)9yy2yZ&itTcvRtS3z$4D8ns|M8dnTMf{yA9}zf4A=9J^3}LaB-2k4r1Y0mi5^~ XR`3yRe?;H@+K&VSvz(nX)E@6GSM znIE!Q6~SVE4OzF62>r$n@k&HY_dYP|$V4W#k%Ma(b6&6oN34kfFWQoms3jb^CI@H9 zPC80W!H6hy5Ns26%28`-pp)&ilc{9_K51v2TrC&yirwSnYk7nx55g4cnLM2J^Vbt#@ap z^vP>elh@y_UIl^rj>WtibBmMNyuVFH_>RsJlOWSpR#+g1ujtz&2hy3WuTV z0a-^Ljuj?eLyHkWv5fDgV2X=z^Bhrl&|u+O!<$i*M^en0i8WzOd?as1o|{5wJB!N6 z{YkYHt(yd}C(EQ{lx(>CQe(a}XW6#pE|eS&SqXHmS7HHZ7GaeGPg;b4zPLcV{g<@m zF)eb_0yn1Jwaj~3;H)1wZ(y1WoQ$TmA^Mp)gAv^@O-dM}J)og^AZ3Zl+)B}D*haoQ z-=L1+QGSgZk}ol0&j*nXofy~gn)X+;+YN_k3+{^c7GX_$w_X{A`5&j=r z?E%c-U1;R5gmv+gL;@YQ-s|WyL69Kod6|G0Q=t9b5dQ0aXU zQ0dM6{UkIU36R=nyuI&Vnvn5#ctTRYPXSlP)p8QrTz3tJ=(?}!y3;UQHs>?Cey3&F zkw%10qLijDEKqYUIo$-F~)l`!ecw=?9b@T i4jTPc%7h_7H4A#D4*+IVghw literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing/__pycache__/_meter_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..945e302fd5c133fb1a1e086abc9c8366496648f9 GIT binary patch literal 8171 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert.py new file mode 100644 index 00000000..e7b6b800 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert.py @@ -0,0 +1,493 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe.billing._meter import Meter + from stripe.params.billing._alert_activate_params import ( + AlertActivateParams, + ) + from stripe.params.billing._alert_archive_params import AlertArchiveParams + from stripe.params.billing._alert_create_params import AlertCreateParams + from stripe.params.billing._alert_deactivate_params import ( + AlertDeactivateParams, + ) + from stripe.params.billing._alert_list_params import AlertListParams + from stripe.params.billing._alert_retrieve_params import ( + AlertRetrieveParams, + ) + + +class Alert(CreateableAPIResource["Alert"], ListableAPIResource["Alert"]): + """ + A billing alert is a resource that notifies you when a certain usage threshold on a meter is crossed. For example, you might create a billing alert to notify you when a certain user made 100 API requests. + """ + + OBJECT_NAME: ClassVar[Literal["billing.alert"]] = "billing.alert" + + class UsageThreshold(StripeObject): + class Filter(StripeObject): + customer: Optional[ExpandableField["Customer"]] + """ + Limit the scope of the alert to this customer ID + """ + type: Literal["customer"] + + filters: Optional[List[Filter]] + """ + The filters allow limiting the scope of this usage alert. You can only specify up to one filter at this time. + """ + gte: int + """ + The value at which this alert will trigger. + """ + meter: ExpandableField["Meter"] + """ + The [Billing Meter](https://docs.stripe.com/api/billing/meter) ID whose usage is monitored. + """ + recurrence: Literal["one_time"] + """ + Defines how the alert will behave. + """ + _inner_class_types = {"filters": Filter} + + alert_type: Literal["usage_threshold"] + """ + Defines the type of the alert. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.alert"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Optional[Literal["active", "archived", "inactive"]] + """ + Status of the alert. This can be active, inactive or archived. + """ + title: str + """ + Title of the alert. + """ + usage_threshold: Optional[UsageThreshold] + """ + Encapsulates configuration of the alert to monitor usage on a specific [Billing Meter](https://stripe.com/docs/api/billing/meter). + """ + + @classmethod + def _cls_activate( + cls, id: str, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + cls._static_request( + "post", + "/v1/billing/alerts/{id}/activate".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + def activate(id: str, **params: Unpack["AlertActivateParams"]) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + ... + + @overload + def activate(self, **params: Unpack["AlertActivateParams"]) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + ... + + @class_method_variant("_cls_activate") + def activate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/activate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_activate_async( + cls, id: str, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + await cls._static_request_async( + "post", + "/v1/billing/alerts/{id}/activate".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + async def activate_async( + id: str, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + ... + + @overload + async def activate_async( + self, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + ... + + @class_method_variant("_cls_activate_async") + async def activate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertActivateParams"] + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/activate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_archive( + cls, id: str, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + cls._static_request( + "post", + "/v1/billing/alerts/{id}/archive".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + def archive(id: str, **params: Unpack["AlertArchiveParams"]) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + ... + + @overload + def archive(self, **params: Unpack["AlertArchiveParams"]) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + ... + + @class_method_variant("_cls_archive") + def archive( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/archive".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_archive_async( + cls, id: str, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + await cls._static_request_async( + "post", + "/v1/billing/alerts/{id}/archive".format(id=sanitize_id(id)), + params=params, + ), + ) + + @overload + @staticmethod + async def archive_async( + id: str, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + ... + + @overload + async def archive_async( + self, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + ... + + @class_method_variant("_cls_archive_async") + async def archive_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertArchiveParams"] + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/archive".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["AlertCreateParams"]) -> "Alert": + """ + Creates a billing alert + """ + return cast( + "Alert", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["AlertCreateParams"] + ) -> "Alert": + """ + Creates a billing alert + """ + return cast( + "Alert", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_deactivate( + cls, id: str, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + cls._static_request( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def deactivate( + id: str, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + ... + + @overload + def deactivate(self, **params: Unpack["AlertDeactivateParams"]) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + ... + + @class_method_variant("_cls_deactivate") + def deactivate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_deactivate_async( + cls, id: str, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + await cls._static_request_async( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def deactivate_async( + id: str, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + ... + + @overload + async def deactivate_async( + self, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + ... + + @class_method_variant("_cls_deactivate_async") + async def deactivate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AlertDeactivateParams"] + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["AlertListParams"]) -> ListObject["Alert"]: + """ + Lists billing active and inactive alerts + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["AlertListParams"] + ) -> ListObject["Alert"]: + """ + Lists billing active and inactive alerts + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["AlertRetrieveParams"] + ) -> "Alert": + """ + Retrieves a billing alert given an ID + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["AlertRetrieveParams"] + ) -> "Alert": + """ + Retrieves a billing alert given an ID + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"usage_threshold": UsageThreshold} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_service.py new file mode 100644 index 00000000..88840dc2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_service.py @@ -0,0 +1,265 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing._alert import Alert + from stripe.params.billing._alert_activate_params import ( + AlertActivateParams, + ) + from stripe.params.billing._alert_archive_params import AlertArchiveParams + from stripe.params.billing._alert_create_params import AlertCreateParams + from stripe.params.billing._alert_deactivate_params import ( + AlertDeactivateParams, + ) + from stripe.params.billing._alert_list_params import AlertListParams + from stripe.params.billing._alert_retrieve_params import ( + AlertRetrieveParams, + ) + + +class AlertService(StripeService): + def list( + self, + params: Optional["AlertListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Alert]": + """ + Lists billing active and inactive alerts + """ + return cast( + "ListObject[Alert]", + self._request( + "get", + "/v1/billing/alerts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["AlertListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Alert]": + """ + Lists billing active and inactive alerts + """ + return cast( + "ListObject[Alert]", + await self._request_async( + "get", + "/v1/billing/alerts", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "AlertCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Creates a billing alert + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "AlertCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Creates a billing alert + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["AlertRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Retrieves a billing alert given an ID + """ + return cast( + "Alert", + self._request( + "get", + "/v1/billing/alerts/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["AlertRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Retrieves a billing alert given an ID + """ + return cast( + "Alert", + await self._request_async( + "get", + "/v1/billing/alerts/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def activate( + self, + id: str, + params: Optional["AlertActivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/activate".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def activate_async( + self, + id: str, + params: Optional["AlertActivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Reactivates this alert, allowing it to trigger again. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/activate".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def archive( + self, + id: str, + params: Optional["AlertArchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/archive".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def archive_async( + self, + id: str, + params: Optional["AlertArchiveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Archives this alert, removing it from the list view and APIs. This is non-reversible. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/archive".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def deactivate( + self, + id: str, + params: Optional["AlertDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + self._request( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def deactivate_async( + self, + id: str, + params: Optional["AlertDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Alert": + """ + Deactivates this alert, preventing it from triggering. + """ + return cast( + "Alert", + await self._request_async( + "post", + "/v1/billing/alerts/{id}/deactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_triggered.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_triggered.py new file mode 100644 index 00000000..3e33e940 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_alert_triggered.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing._alert import Alert + + +class AlertTriggered(StripeObject): + OBJECT_NAME: ClassVar[Literal["billing.alert_triggered"]] = ( + "billing.alert_triggered" + ) + alert: "Alert" + """ + A billing alert is a resource that notifies you when a certain usage threshold on a meter is crossed. For example, you might create a billing alert to notify you when a certain user made 100 API requests. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: str + """ + ID of customer for which the alert triggered + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.alert_triggered"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + value: int + """ + The value triggering the alert + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary.py new file mode 100644 index 00000000..27c5eedc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._singleton_api_resource import SingletonAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe.params.billing._credit_balance_summary_retrieve_params import ( + CreditBalanceSummaryRetrieveParams, + ) + + +class CreditBalanceSummary(SingletonAPIResource["CreditBalanceSummary"]): + """ + Indicates the billing credit balance for billing credits granted to a customer. + """ + + OBJECT_NAME: ClassVar[Literal["billing.credit_balance_summary"]] = ( + "billing.credit_balance_summary" + ) + + class Balance(StripeObject): + class AvailableBalance(StripeObject): + class Monetary(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount. + """ + + monetary: Optional[Monetary] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + _inner_class_types = {"monetary": Monetary} + + class LedgerBalance(StripeObject): + class Monetary(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount. + """ + + monetary: Optional[Monetary] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + _inner_class_types = {"monetary": Monetary} + + available_balance: AvailableBalance + ledger_balance: LedgerBalance + _inner_class_types = { + "available_balance": AvailableBalance, + "ledger_balance": LedgerBalance, + } + + balances: List[Balance] + """ + The billing credit balances. One entry per credit grant currency. If a customer only has credit grants in a single currency, then this will have a single balance entry. + """ + customer: ExpandableField["Customer"] + """ + The customer the balance is for. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.credit_balance_summary"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def retrieve( + cls, **params: Unpack["CreditBalanceSummaryRetrieveParams"] + ) -> "CreditBalanceSummary": + """ + Retrieves the credit balance summary for a customer. + """ + instance = cls(None, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, **params: Unpack["CreditBalanceSummaryRetrieveParams"] + ) -> "CreditBalanceSummary": + """ + Retrieves the credit balance summary for a customer. + """ + instance = cls(None, **params) + await instance.refresh_async() + return instance + + @classmethod + def class_url(cls): + return "/v1/billing/credit_balance_summary" + + _inner_class_types = {"balances": Balance} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary_service.py new file mode 100644 index 00000000..b911f56e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_summary_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.billing._credit_balance_summary import CreditBalanceSummary + from stripe.params.billing._credit_balance_summary_retrieve_params import ( + CreditBalanceSummaryRetrieveParams, + ) + + +class CreditBalanceSummaryService(StripeService): + def retrieve( + self, + params: "CreditBalanceSummaryRetrieveParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditBalanceSummary": + """ + Retrieves the credit balance summary for a customer. + """ + return cast( + "CreditBalanceSummary", + self._request( + "get", + "/v1/billing/credit_balance_summary", + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + params: "CreditBalanceSummaryRetrieveParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditBalanceSummary": + """ + Retrieves the credit balance summary for a customer. + """ + return cast( + "CreditBalanceSummary", + await self._request_async( + "get", + "/v1/billing/credit_balance_summary", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction.py new file mode 100644 index 00000000..f66eb7b0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction.py @@ -0,0 +1,234 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._invoice import Invoice + from stripe.billing._credit_grant import CreditGrant + from stripe.params.billing._credit_balance_transaction_list_params import ( + CreditBalanceTransactionListParams, + ) + from stripe.params.billing._credit_balance_transaction_retrieve_params import ( + CreditBalanceTransactionRetrieveParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class CreditBalanceTransaction( + ListableAPIResource["CreditBalanceTransaction"] +): + """ + A credit balance transaction is a resource representing a transaction (either a credit or a debit) against an existing credit grant. + """ + + OBJECT_NAME: ClassVar[Literal["billing.credit_balance_transaction"]] = ( + "billing.credit_balance_transaction" + ) + + class Credit(StripeObject): + class Amount(StripeObject): + class Monetary(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount. + """ + + monetary: Optional[Monetary] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + _inner_class_types = {"monetary": Monetary} + + class CreditsApplicationInvoiceVoided(StripeObject): + invoice: ExpandableField["Invoice"] + """ + The invoice to which the reinstated billing credits were originally applied. + """ + invoice_line_item: str + """ + The invoice line item to which the reinstated billing credits were originally applied. + """ + + amount: Amount + credits_application_invoice_voided: Optional[ + CreditsApplicationInvoiceVoided + ] + """ + Details of the invoice to which the reinstated credits were originally applied. Only present if `type` is `credits_application_invoice_voided`. + """ + type: Literal["credits_application_invoice_voided", "credits_granted"] + """ + The type of credit transaction. + """ + _inner_class_types = { + "amount": Amount, + "credits_application_invoice_voided": CreditsApplicationInvoiceVoided, + } + + class Debit(StripeObject): + class Amount(StripeObject): + class Monetary(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount. + """ + + monetary: Optional[Monetary] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + _inner_class_types = {"monetary": Monetary} + + class CreditsApplied(StripeObject): + invoice: ExpandableField["Invoice"] + """ + The invoice to which the billing credits were applied. + """ + invoice_line_item: str + """ + The invoice line item to which the billing credits were applied. + """ + + amount: Amount + credits_applied: Optional[CreditsApplied] + """ + Details of how the billing credits were applied to an invoice. Only present if `type` is `credits_applied`. + """ + type: Literal["credits_applied", "credits_expired", "credits_voided"] + """ + The type of debit transaction. + """ + _inner_class_types = { + "amount": Amount, + "credits_applied": CreditsApplied, + } + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + credit: Optional[Credit] + """ + Credit details for this credit balance transaction. Only present if type is `credit`. + """ + credit_grant: ExpandableField["CreditGrant"] + """ + The credit grant associated with this credit balance transaction. + """ + debit: Optional[Debit] + """ + Debit details for this credit balance transaction. Only present if type is `debit`. + """ + effective_at: int + """ + The effective time of this credit balance transaction. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.credit_balance_transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this credit balance transaction belongs to. + """ + type: Optional[Literal["credit", "debit"]] + """ + The type of credit balance transaction (credit or debit). + """ + + @classmethod + def list( + cls, **params: Unpack["CreditBalanceTransactionListParams"] + ) -> ListObject["CreditBalanceTransaction"]: + """ + Retrieve a list of credit balance transactions. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CreditBalanceTransactionListParams"] + ) -> ListObject["CreditBalanceTransaction"]: + """ + Retrieve a list of credit balance transactions. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, + id: str, + **params: Unpack["CreditBalanceTransactionRetrieveParams"], + ) -> "CreditBalanceTransaction": + """ + Retrieves a credit balance transaction. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, + id: str, + **params: Unpack["CreditBalanceTransactionRetrieveParams"], + ) -> "CreditBalanceTransaction": + """ + Retrieves a credit balance transaction. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"credit": Credit, "debit": Debit} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction_service.py new file mode 100644 index 00000000..5aea7ea7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_balance_transaction_service.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing._credit_balance_transaction import ( + CreditBalanceTransaction, + ) + from stripe.params.billing._credit_balance_transaction_list_params import ( + CreditBalanceTransactionListParams, + ) + from stripe.params.billing._credit_balance_transaction_retrieve_params import ( + CreditBalanceTransactionRetrieveParams, + ) + + +class CreditBalanceTransactionService(StripeService): + def list( + self, + params: "CreditBalanceTransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditBalanceTransaction]": + """ + Retrieve a list of credit balance transactions. + """ + return cast( + "ListObject[CreditBalanceTransaction]", + self._request( + "get", + "/v1/billing/credit_balance_transactions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "CreditBalanceTransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditBalanceTransaction]": + """ + Retrieve a list of credit balance transactions. + """ + return cast( + "ListObject[CreditBalanceTransaction]", + await self._request_async( + "get", + "/v1/billing/credit_balance_transactions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["CreditBalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditBalanceTransaction": + """ + Retrieves a credit balance transaction. + """ + return cast( + "CreditBalanceTransaction", + self._request( + "get", + "/v1/billing/credit_balance_transactions/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["CreditBalanceTransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditBalanceTransaction": + """ + Retrieves a credit balance transaction. + """ + return cast( + "CreditBalanceTransaction", + await self._request_async( + "get", + "/v1/billing/credit_balance_transactions/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant.py new file mode 100644 index 00000000..fda5610a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant.py @@ -0,0 +1,503 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._customer import Customer + from stripe.params.billing._credit_grant_create_params import ( + CreditGrantCreateParams, + ) + from stripe.params.billing._credit_grant_expire_params import ( + CreditGrantExpireParams, + ) + from stripe.params.billing._credit_grant_list_params import ( + CreditGrantListParams, + ) + from stripe.params.billing._credit_grant_modify_params import ( + CreditGrantModifyParams, + ) + from stripe.params.billing._credit_grant_retrieve_params import ( + CreditGrantRetrieveParams, + ) + from stripe.params.billing._credit_grant_void_grant_params import ( + CreditGrantVoidGrantParams, + ) + from stripe.test_helpers._test_clock import TestClock + + +class CreditGrant( + CreateableAPIResource["CreditGrant"], + ListableAPIResource["CreditGrant"], + UpdateableAPIResource["CreditGrant"], +): + """ + A credit grant is an API resource that documents the allocation of some billing credits to a customer. + + Related guide: [Billing credits](https://docs.stripe.com/billing/subscriptions/usage-based/billing-credits) + """ + + OBJECT_NAME: ClassVar[Literal["billing.credit_grant"]] = ( + "billing.credit_grant" + ) + + class Amount(StripeObject): + class Monetary(StripeObject): + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + value: int + """ + A positive integer representing the amount. + """ + + monetary: Optional[Monetary] + """ + The monetary amount. + """ + type: Literal["monetary"] + """ + The type of this amount. We currently only support `monetary` billing credits. + """ + _inner_class_types = {"monetary": Monetary} + + class ApplicabilityConfig(StripeObject): + class Scope(StripeObject): + class Price(StripeObject): + id: Optional[str] + """ + Unique identifier for the object. + """ + + price_type: Optional[Literal["metered"]] + """ + The price type that credit grants can apply to. We currently only support the `metered` price type. This refers to prices that have a [Billing Meter](https://docs.stripe.com/api/billing/meter) attached to them. Cannot be used in combination with `prices`. + """ + prices: Optional[List[Price]] + """ + The prices that credit grants can apply to. We currently only support `metered` prices. This refers to prices that have a [Billing Meter](https://docs.stripe.com/api/billing/meter) attached to them. Cannot be used in combination with `price_type`. + """ + _inner_class_types = {"prices": Price} + + scope: Scope + _inner_class_types = {"scope": Scope} + + amount: Amount + applicability_config: ApplicabilityConfig + category: Literal["paid", "promotional"] + """ + The category of this credit grant. This is for tracking purposes and isn't displayed to the customer. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: ExpandableField["Customer"] + """ + ID of the customer receiving the billing credits. + """ + effective_at: Optional[int] + """ + The time when the billing credits become effective-when they're eligible for use. + """ + expires_at: Optional[int] + """ + The time when the billing credits expire. If not present, the billing credits don't expire. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + A descriptive name shown in dashboard. + """ + object: Literal["billing.credit_grant"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + priority: Optional[int] + """ + The priority for applying this credit grant. The highest priority is 0 and the lowest is 100. + """ + test_clock: Optional[ExpandableField["TestClock"]] + """ + ID of the test clock this credit grant belongs to. + """ + updated: int + """ + Time at which the object was last updated. Measured in seconds since the Unix epoch. + """ + voided_at: Optional[int] + """ + The time when this credit grant was voided. If not present, the credit grant hasn't been voided. + """ + + @classmethod + def create( + cls, **params: Unpack["CreditGrantCreateParams"] + ) -> "CreditGrant": + """ + Creates a credit grant. + """ + return cast( + "CreditGrant", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CreditGrantCreateParams"] + ) -> "CreditGrant": + """ + Creates a credit grant. + """ + return cast( + "CreditGrant", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_expire( + cls, id: str, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + cls._static_request( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def expire( + id: str, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + ... + + @overload + def expire( + self, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + ... + + @class_method_variant("_cls_expire") + def expire( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_expire_async( + cls, id: str, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + await cls._static_request_async( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def expire_async( + id: str, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + ... + + @overload + async def expire_async( + self, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + ... + + @class_method_variant("_cls_expire_async") + async def expire_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditGrantExpireParams"] + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["CreditGrantListParams"] + ) -> ListObject["CreditGrant"]: + """ + Retrieve a list of credit grants. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CreditGrantListParams"] + ) -> ListObject["CreditGrant"]: + """ + Retrieve a list of credit grants. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["CreditGrantModifyParams"] + ) -> "CreditGrant": + """ + Updates a credit grant. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "CreditGrant", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CreditGrantModifyParams"] + ) -> "CreditGrant": + """ + Updates a credit grant. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "CreditGrant", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CreditGrantRetrieveParams"] + ) -> "CreditGrant": + """ + Retrieves a credit grant. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CreditGrantRetrieveParams"] + ) -> "CreditGrant": + """ + Retrieves a credit grant. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_void_grant( + cls, id: str, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + cls._static_request( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def void_grant( + id: str, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + ... + + @overload + def void_grant( + self, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + ... + + @class_method_variant("_cls_void_grant") + def void_grant( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_void_grant_async( + cls, id: str, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + await cls._static_request_async( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def void_grant_async( + id: str, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + ... + + @overload + async def void_grant_async( + self, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + ... + + @class_method_variant("_cls_void_grant_async") + async def void_grant_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CreditGrantVoidGrantParams"] + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = { + "amount": Amount, + "applicability_config": ApplicabilityConfig, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant_service.py new file mode 100644 index 00000000..047cf0f5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_credit_grant_service.py @@ -0,0 +1,275 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing._credit_grant import CreditGrant + from stripe.params.billing._credit_grant_create_params import ( + CreditGrantCreateParams, + ) + from stripe.params.billing._credit_grant_expire_params import ( + CreditGrantExpireParams, + ) + from stripe.params.billing._credit_grant_list_params import ( + CreditGrantListParams, + ) + from stripe.params.billing._credit_grant_retrieve_params import ( + CreditGrantRetrieveParams, + ) + from stripe.params.billing._credit_grant_update_params import ( + CreditGrantUpdateParams, + ) + from stripe.params.billing._credit_grant_void_grant_params import ( + CreditGrantVoidGrantParams, + ) + + +class CreditGrantService(StripeService): + def list( + self, + params: Optional["CreditGrantListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditGrant]": + """ + Retrieve a list of credit grants. + """ + return cast( + "ListObject[CreditGrant]", + self._request( + "get", + "/v1/billing/credit_grants", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CreditGrantListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[CreditGrant]": + """ + Retrieve a list of credit grants. + """ + return cast( + "ListObject[CreditGrant]", + await self._request_async( + "get", + "/v1/billing/credit_grants", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CreditGrantCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Creates a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CreditGrantCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Creates a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["CreditGrantRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Retrieves a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "get", + "/v1/billing/credit_grants/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["CreditGrantRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Retrieves a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "get", + "/v1/billing/credit_grants/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["CreditGrantUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Updates a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["CreditGrantUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Updates a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def expire( + self, + id: str, + params: Optional["CreditGrantExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def expire_async( + self, + id: str, + params: Optional["CreditGrantExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Expires a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants/{id}/expire".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def void_grant( + self, + id: str, + params: Optional["CreditGrantVoidGrantParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + self._request( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def void_grant_async( + self, + id: str, + params: Optional["CreditGrantVoidGrantParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "CreditGrant": + """ + Voids a credit grant. + """ + return cast( + "CreditGrant", + await self._request_async( + "post", + "/v1/billing/credit_grants/{id}/void".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter.py new file mode 100644 index 00000000..5f7d7b11 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter.py @@ -0,0 +1,494 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._nested_resource_class_methods import nested_resource_class_methods +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing._meter_event_summary import MeterEventSummary + from stripe.params.billing._meter_create_params import MeterCreateParams + from stripe.params.billing._meter_deactivate_params import ( + MeterDeactivateParams, + ) + from stripe.params.billing._meter_list_event_summaries_params import ( + MeterListEventSummariesParams, + ) + from stripe.params.billing._meter_list_params import MeterListParams + from stripe.params.billing._meter_modify_params import MeterModifyParams + from stripe.params.billing._meter_reactivate_params import ( + MeterReactivateParams, + ) + from stripe.params.billing._meter_retrieve_params import ( + MeterRetrieveParams, + ) + + +@nested_resource_class_methods("event_summary") +class Meter( + CreateableAPIResource["Meter"], + ListableAPIResource["Meter"], + UpdateableAPIResource["Meter"], +): + """ + Meters specify how to aggregate meter events over a billing period. Meter events represent the actions that customers take in your system. Meters attach to prices and form the basis of the bill. + + Related guide: [Usage based billing](https://docs.stripe.com/billing/subscriptions/usage-based) + """ + + OBJECT_NAME: ClassVar[Literal["billing.meter"]] = "billing.meter" + + class CustomerMapping(StripeObject): + event_payload_key: str + """ + The key in the meter event payload to use for mapping the event to a customer. + """ + type: Literal["by_id"] + """ + The method for mapping a meter event to a customer. + """ + + class DefaultAggregation(StripeObject): + formula: Literal["count", "last", "sum"] + """ + Specifies how events are aggregated. + """ + + class StatusTransitions(StripeObject): + deactivated_at: Optional[int] + """ + The time the meter was deactivated, if any. Measured in seconds since Unix epoch. + """ + + class ValueSettings(StripeObject): + event_payload_key: str + """ + The key in the meter event payload to use as the value for this meter. + """ + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer_mapping: CustomerMapping + default_aggregation: DefaultAggregation + display_name: str + """ + The meter's name. + """ + event_name: str + """ + The name of the meter event to record usage for. Corresponds with the `event_name` field on meter events. + """ + event_time_window: Optional[Literal["day", "hour"]] + """ + The time window which meter events have been pre-aggregated for, if any. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.meter"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "inactive"] + """ + The meter's status. + """ + status_transitions: StatusTransitions + updated: int + """ + Time at which the object was last updated. Measured in seconds since the Unix epoch. + """ + value_settings: ValueSettings + + @classmethod + def create(cls, **params: Unpack["MeterCreateParams"]) -> "Meter": + """ + Creates a billing meter. + """ + return cast( + "Meter", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["MeterCreateParams"] + ) -> "Meter": + """ + Creates a billing meter. + """ + return cast( + "Meter", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_deactivate( + cls, id: str, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + cls._static_request( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def deactivate( + id: str, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + ... + + @overload + def deactivate(self, **params: Unpack["MeterDeactivateParams"]) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + ... + + @class_method_variant("_cls_deactivate") + def deactivate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_deactivate_async( + cls, id: str, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + await cls._static_request_async( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def deactivate_async( + id: str, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + ... + + @overload + async def deactivate_async( + self, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + ... + + @class_method_variant("_cls_deactivate_async") + async def deactivate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["MeterDeactivateParams"] + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["MeterListParams"]) -> ListObject["Meter"]: + """ + Retrieve a list of billing meters. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["MeterListParams"] + ) -> ListObject["Meter"]: + """ + Retrieve a list of billing meters. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["MeterModifyParams"]) -> "Meter": + """ + Updates a billing meter. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Meter", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["MeterModifyParams"] + ) -> "Meter": + """ + Updates a billing meter. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Meter", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_reactivate( + cls, id: str, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + cls._static_request( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + def reactivate( + id: str, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + ... + + @overload + def reactivate(self, **params: Unpack["MeterReactivateParams"]) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + ... + + @class_method_variant("_cls_reactivate") + def reactivate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_reactivate_async( + cls, id: str, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + await cls._static_request_async( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def reactivate_async( + id: str, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + ... + + @overload + async def reactivate_async( + self, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + ... + + @class_method_variant("_cls_reactivate_async") + async def reactivate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["MeterReactivateParams"] + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["MeterRetrieveParams"] + ) -> "Meter": + """ + Retrieves a billing meter given an ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["MeterRetrieveParams"] + ) -> "Meter": + """ + Retrieves a billing meter given an ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def list_event_summaries( + cls, id: str, **params: Unpack["MeterListEventSummariesParams"] + ) -> ListObject["MeterEventSummary"]: + """ + Retrieve a list of billing meter event summaries. + """ + return cast( + ListObject["MeterEventSummary"], + cls._static_request( + "get", + "/v1/billing/meters/{id}/event_summaries".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + @classmethod + async def list_event_summaries_async( + cls, id: str, **params: Unpack["MeterListEventSummariesParams"] + ) -> ListObject["MeterEventSummary"]: + """ + Retrieve a list of billing meter event summaries. + """ + return cast( + ListObject["MeterEventSummary"], + await cls._static_request_async( + "get", + "/v1/billing/meters/{id}/event_summaries".format( + id=sanitize_id(id) + ), + params=params, + ), + ) + + _inner_class_types = { + "customer_mapping": CustomerMapping, + "default_aggregation": DefaultAggregation, + "status_transitions": StatusTransitions, + "value_settings": ValueSettings, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event.py new file mode 100644 index 00000000..53dcfa56 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from typing import ClassVar, Dict, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.billing._meter_event_create_params import ( + MeterEventCreateParams, + ) + + +class MeterEvent(CreateableAPIResource["MeterEvent"]): + """ + Meter events represent actions that customers take in your system. You can use meter events to bill a customer based on their usage. Meter events are associated with billing meters, which define both the contents of the event's payload and how to aggregate those events. + """ + + OBJECT_NAME: ClassVar[Literal["billing.meter_event"]] = ( + "billing.meter_event" + ) + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + identifier: str + """ + A unique identifier for the event. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.meter_event"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + payload: Dict[str, str] + """ + The payload of the event. This contains the fields corresponding to a meter's `customer_mapping.event_payload_key` (default is `stripe_customer_id`) and `value_settings.event_payload_key` (default is `value`). Read more about the [payload](https://stripe.com/docs/billing/subscriptions/usage-based/recording-usage#payload-key-overrides). + """ + timestamp: int + """ + The timestamp passed in when creating the event. Measured in seconds since the Unix epoch. + """ + + @classmethod + def create( + cls, **params: Unpack["MeterEventCreateParams"] + ) -> "MeterEvent": + """ + Creates a billing meter event. + """ + return cast( + "MeterEvent", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["MeterEventCreateParams"] + ) -> "MeterEvent": + """ + Creates a billing meter event. + """ + return cast( + "MeterEvent", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment.py new file mode 100644 index 00000000..be7a0b93 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.billing._meter_event_adjustment_create_params import ( + MeterEventAdjustmentCreateParams, + ) + + +class MeterEventAdjustment(CreateableAPIResource["MeterEventAdjustment"]): + """ + A billing meter event adjustment is a resource that allows you to cancel a meter event. For example, you might create a billing meter event adjustment to cancel a meter event that was created in error or attached to the wrong customer. + """ + + OBJECT_NAME: ClassVar[Literal["billing.meter_event_adjustment"]] = ( + "billing.meter_event_adjustment" + ) + + class Cancel(StripeObject): + identifier: Optional[str] + """ + Unique identifier for the event. + """ + + cancel: Optional[Cancel] + """ + Specifies which event to cancel. + """ + event_name: str + """ + The name of the meter event. Corresponds with the `event_name` field on a meter. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["billing.meter_event_adjustment"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["complete", "pending"] + """ + The meter event adjustment's status. + """ + type: Literal["cancel"] + """ + Specifies whether to cancel a single event or a range of events for a time period. Time period cancellation is not supported yet. + """ + + @classmethod + def create( + cls, **params: Unpack["MeterEventAdjustmentCreateParams"] + ) -> "MeterEventAdjustment": + """ + Creates a billing meter event adjustment. + """ + return cast( + "MeterEventAdjustment", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["MeterEventAdjustmentCreateParams"] + ) -> "MeterEventAdjustment": + """ + Creates a billing meter event adjustment. + """ + return cast( + "MeterEventAdjustment", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + _inner_class_types = {"cancel": Cancel} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment_service.py new file mode 100644 index 00000000..eb292d60 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_adjustment_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.billing._meter_event_adjustment import MeterEventAdjustment + from stripe.params.billing._meter_event_adjustment_create_params import ( + MeterEventAdjustmentCreateParams, + ) + + +class MeterEventAdjustmentService(StripeService): + def create( + self, + params: "MeterEventAdjustmentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEventAdjustment": + """ + Creates a billing meter event adjustment. + """ + return cast( + "MeterEventAdjustment", + self._request( + "post", + "/v1/billing/meter_event_adjustments", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "MeterEventAdjustmentCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEventAdjustment": + """ + Creates a billing meter event adjustment. + """ + return cast( + "MeterEventAdjustment", + await self._request_async( + "post", + "/v1/billing/meter_event_adjustments", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_service.py new file mode 100644 index 00000000..93588099 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.billing._meter_event import MeterEvent + from stripe.params.billing._meter_event_create_params import ( + MeterEventCreateParams, + ) + + +class MeterEventService(StripeService): + def create( + self, + params: "MeterEventCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEvent": + """ + Creates a billing meter event. + """ + return cast( + "MeterEvent", + self._request( + "post", + "/v1/billing/meter_events", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "MeterEventCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "MeterEvent": + """ + Creates a billing meter event. + """ + return cast( + "MeterEvent", + await self._request_async( + "post", + "/v1/billing/meter_events", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary.py new file mode 100644 index 00000000..823b330c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal + + +class MeterEventSummary(StripeObject): + """ + A billing meter event summary represents an aggregated view of a customer's billing meter events within a specified timeframe. It indicates how much + usage was accrued by a customer for that period. + + Note: Meters events are aggregated asynchronously so the meter event summaries provide an eventually consistent view of the reported usage. + """ + + OBJECT_NAME: ClassVar[Literal["billing.meter_event_summary"]] = ( + "billing.meter_event_summary" + ) + aggregated_value: float + """ + Aggregated value of all the events within `start_time` (inclusive) and `end_time` (inclusive). The aggregation strategy is defined on meter via `default_aggregation`. + """ + end_time: int + """ + End timestamp for this event summary (exclusive). Must be aligned with minute boundaries. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + meter: str + """ + The meter associated with this event summary. + """ + object: Literal["billing.meter_event_summary"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + start_time: int + """ + Start timestamp for this event summary (inclusive). Must be aligned with minute boundaries. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary_service.py new file mode 100644 index 00000000..3cc196d0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_event_summary_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing._meter_event_summary import MeterEventSummary + from stripe.params.billing._meter_event_summary_list_params import ( + MeterEventSummaryListParams, + ) + + +class MeterEventSummaryService(StripeService): + def list( + self, + id: str, + params: "MeterEventSummaryListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[MeterEventSummary]": + """ + Retrieve a list of billing meter event summaries. + """ + return cast( + "ListObject[MeterEventSummary]", + self._request( + "get", + "/v1/billing/meters/{id}/event_summaries".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + id: str, + params: "MeterEventSummaryListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[MeterEventSummary]": + """ + Retrieve a list of billing meter event summaries. + """ + return cast( + "ListObject[MeterEventSummary]", + await self._request_async( + "get", + "/v1/billing/meters/{id}/event_summaries".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_service.py new file mode 100644 index 00000000..018b4ff7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing/_meter_service.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing._meter import Meter + from stripe.billing._meter_event_summary_service import ( + MeterEventSummaryService, + ) + from stripe.params.billing._meter_create_params import MeterCreateParams + from stripe.params.billing._meter_deactivate_params import ( + MeterDeactivateParams, + ) + from stripe.params.billing._meter_list_params import MeterListParams + from stripe.params.billing._meter_reactivate_params import ( + MeterReactivateParams, + ) + from stripe.params.billing._meter_retrieve_params import ( + MeterRetrieveParams, + ) + from stripe.params.billing._meter_update_params import MeterUpdateParams + +_subservices = { + "event_summaries": [ + "stripe.billing._meter_event_summary_service", + "MeterEventSummaryService", + ], +} + + +class MeterService(StripeService): + event_summaries: "MeterEventSummaryService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["MeterListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Meter]": + """ + Retrieve a list of billing meters. + """ + return cast( + "ListObject[Meter]", + self._request( + "get", + "/v1/billing/meters", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["MeterListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Meter]": + """ + Retrieve a list of billing meters. + """ + return cast( + "ListObject[Meter]", + await self._request_async( + "get", + "/v1/billing/meters", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "MeterCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Creates a billing meter. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "MeterCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Creates a billing meter. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["MeterRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Retrieves a billing meter given an ID. + """ + return cast( + "Meter", + self._request( + "get", + "/v1/billing/meters/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["MeterRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Retrieves a billing meter given an ID. + """ + return cast( + "Meter", + await self._request_async( + "get", + "/v1/billing/meters/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["MeterUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Updates a billing meter. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["MeterUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + Updates a billing meter. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def deactivate( + self, + id: str, + params: Optional["MeterDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def deactivate_async( + self, + id: str, + params: Optional["MeterDeactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + When a meter is deactivated, no more meter events will be accepted for this meter. You can't attach a deactivated meter to a price. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters/{id}/deactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) + + def reactivate( + self, + id: str, + params: Optional["MeterReactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + self._request( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def reactivate_async( + self, + id: str, + params: Optional["MeterReactivateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Meter": + """ + When a meter is reactivated, events for this meter can be accepted and you can attach the meter to a price. + """ + return cast( + "Meter", + await self._request_async( + "post", + "/v1/billing/meters/{id}/reactivate".format( + id=sanitize_id(id) + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__init__.py new file mode 100644 index 00000000..d3b7fb37 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__init__.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing_portal._configuration import ( + Configuration as Configuration, + ) + from stripe.billing_portal._configuration_service import ( + ConfigurationService as ConfigurationService, + ) + from stripe.billing_portal._session import Session as Session + from stripe.billing_portal._session_service import ( + SessionService as SessionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Configuration": ("stripe.billing_portal._configuration", False), + "ConfigurationService": ( + "stripe.billing_portal._configuration_service", + False, + ), + "Session": ("stripe.billing_portal._session", False), + "SessionService": ("stripe.billing_portal._session_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..806a5b4c783105d5d4a8039f19a1710fc84abb39 GIT binary patch literal 1294 zcmb7ENoy2A6n@p)%w&2dF`F6}LM909GK~v@pn{2siV}qA!9i#y>2hq-%TQHWCQKj% z4<5aFQShkbr+87k#6}OI7jL6uL~`;~cLw#K#@F<#?^V5}>%EVDQ7Ci)3ja3bnL5A+ zX>}A)c(r*}6O*v0pircVrs4S0i!Mr*x&v?G? zg*8VOt@>qW_SfW-ma=?wCyowJtIB|be+b~|*GQK`e|PzrO=EH(%#bQ0RTkAOLDdlr zfr@W?71blifxtDDChSFUTLD-hD~ga_i8RUjc7_$TsW7FfPJ`$S9-3+s)-guPG?YNd z;)#p`!!e3n$6ntCYh)3Y)LXDfEHY*3ao*|7uv%xbYMiN2Q5Ay4*{ifM!C1uN;svz5 znR!7I+tOk!tOhhTM3td;YF+1U4{10v?9F2F# z?u5%s{)&>GK8H3!V7;ievS-tQpJ)5glx*cwsIWhTY#KmD-@%dhYR{&k=*FgzDA319 rVz*2foFFYlJz%u3#b-7KFMaOLb}Os-&%KZxXltfkYUzmBK1}%o3)yoI literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28f4092d28ec1a226f205f0fd04acda5ba41dd32 GIT binary patch literal 11433 zcmcIqTW}OtdhVX?nd!M|F1m~aLL)$e0VLVR8^8f?1ZII41To+wlXZ1Q(=9Z3ZreS= zh?Tdzc%8z7m+vn0qE1$Lx=$4JK4Tl^_U99Y{&YWU6UYw~wxqYP zd@#SYFqj@>`A~jaVJJPs^5J~4Fq|G11($F_(7L`SXc1l1BK_Ex?zP_m{=V<#yH0PP zkEUY(MTL}T^&B(wOhwO3=k>{Rr(V&`(wvdiQPFk$YB^KXsNx$rJ+A@eKb`GmQ2H2 z%Gq)yS1M-mmYmI)m6T+8Pv2 z`qIo-N)U*cn=eGKXW z)Y}5}GpGWnuLT;=gJ1wZjpY;ckRH|oEpr5IxDRbYl-IkE3pZOk4Af;q{KQPGT?DzP z4W$`kE%~^e4*=fHT8H$g9?>H+t^4b-TZMFImR=iT;{m<2UHbJPgwZhd3@U`u_EUB8X@*LyXFZ;Ue3(yH&Vt&%OR5@>~evGoi$*W=N) zx3uYhOq(4oZ3bG}>}(llq@~T4$Fv!3X|q-L>3%(+?RsBI56%u!g3iXx&Y6``K{xDfukD_#RLbTH6BAk~ zYmS>tXN+e{g$bwOSRqr)T+$1Au`=N-SRdm%NR6`%UE4aH%ja{&ODYGWe~YABfwM<{ z`}na7>eS?!<83l&%agEj6x`D)le(nKLQ=05ix*uH>>hL8nq4 zOHtKgrl6~;Pk&ES4&438t#v6IMt#*1k0{ z3&c-cDqfv}!I}?2ac6rW#aMBK)Uz2s80i<=u#JZYD%xg2S!>%4M z^E#uBY(B^MFuYl z&zIiNHFb_zd(-mjMe+@_sg&0k!m5lUCBu{iDe0nQ2NFx3E|v1ePAW4hj}kE4z93^S zfQRsylmP<`4%Z`n_3kr|Bv&-{NRqdOR|Gi}ZuniH2-vB2;N}@HPAI~M{2DrKj>ZIP zHlmS8IqynIYmY4R+Vl z-?n_(_*Yu~p2tx8TxOp1>KPq!u5ps{Js1ZuRp)Bsn>8mCouS4rP{Igz1i7|l+773% zGJ~2{EHg3MAf6-?oK+zjZcU~s;JbJ=x6RU?Cd6w)6b{kA{5dhL%==RQwbWxaeSU75 z3?1_)k7bHkJ>Rxi3A52}Wpl~0r*3!F4#pPtZpPLPmb(O_ZCDZWja(%=3;DB6h!v=mN>I#&a$dh`g{Yuk zE$c-ycSW~6bHzDR*DP;|A;a86M%P()U0ORtG`7h$CV{{Uc+4>*VC4S6+abtdv>P%x zu&v&`rQ!1SZ+|5DdU_v8fq~eH5QxSa2{hm=^fJ0x@hqbb$B&BRNfSXXE0n3IW!=b? zG!-Vx3gij}UCY7m$j@6cOr(BKvcj4C8<}}i&2b^MqFHvtQOib&p8-s0Gg4zP#x_KC zoSdnYuTzT2gEwelT$CARNPAf^%uv(~HA@E*#wPkNJB@-Vs(^ z@lf~DH&+F`8heE8&)0(c*A)Qp79Ut1I9QDxss#@*l?Kr8?t0`1RNpYPo(o#f!?oUy zgUg3rULHPO4Q}J;d=)daF?mxWe~g+hmq;e38w@5HE-sTy3Kh+fOPoJ6uPrEkv|_%L z-Nu$w^z_*f=WK!#j%_@>TF|azh7+<+8X^3?D;=2cN=2SXvbi?feAC34U%u%!HRLFo zrZU2U+#O2Clk%=T`vlU@mo^TkP@BtE+LqWKb@BXNUoA3> zrE*<2cst1RiqNxXdGC>iK9F2dwF2c2d{ZoXVKR#uo9I zeMrEL1H<*i3Fy`>z0j>az0j>a2~M><8d(0Uvq+dtWm8*0?YNV>gL0d3S9}w^8{A96 zO7^jpthzkW#8Ploz^f4v28WmW@1Cti=s?7HY}fvuo?0GxvB^|L^g?{h%>=;;Lks2wgl7ktH*AJaHTizk(7^_n)9sBP94R0;zdm0WR7S8;#` zA$%~(cD9E>?DIg=zNTD;N#j7acJGEqDui-K8 zA|c@&2*nontqORp9t?%PzLZ}T@M>%mM)%-Av79(kjl2lrkG31u=5Ycls&8nqvUK9^ zo7LX2T5t@+UX|wEo~1sjrCP5(dueC zfOG61Wp&wJj5^ED8dgu4JMU_NdG9uYAr~#~t;#*94j>;9QZkR33_^=Rip?NpY`lqN zDizq2Aar~(4pBlbzCm7vL969@bTj@|oWrX@O8y`olcr+o(-&EUw-fY5R=3JLkJoAt z$r32T@*}=8;u3T$y;rBilcFz7MS3?bxP*b-HDy=5e;1`g&()OY>Vp$CWrC-l4UN_D zA30dx@iqJ(1w7mQRb_yS@OQ9?&Gj2aCt4Nn7a3lr>)Ip7a9ql5jDSSO{ms z(U);B(+Z4@nf2)~Jihgj-ol!yc+5d0P)*UEoA9P(1Wf!wxc64}-PdZ$065AQH=OL@6xtXVNfCm1?n4n-E0QksVh7Y_LToT=K4 zEG3T#$l131dD^yG#=b2D44FZwKVyuub(Gjef#v0Fr@=zApt})gwS1zih=TK@TbTf! z6*9SZgi5nc6BmTbjwNzhcT8ss{Jx!E5I<=~f9|_D@Vo#!b(w_^DJIIV1I%Qm zBPd##%~YN|GFqC!0Owe6^*j%UHYYF=nAeiaC9`r*G;X1gl8i9Hx>Pt`m0T7loNvwP zxa;uog9JF|p39Q5d6P9aY2nGF!NMXQPOxj;uwUzU8si*_TPMLJ2l6dpH7rEB>%lGc zVAq4-P&GJIkM!0f@jIdSLbto>eS;0J5K6L$$%@+>@izpo&(C;h13_+Lyp=0RUKYgv zccQ$FP~5jc*dMs=NPpyZ3+qHWAbel>k@SWLZFL)yGb|c^O1VEnGUec~rvry-#+)x^ zjXTtE5lI{Jf*eh}&9#BeP{`|W%_f*Hq5FRd|J#DgSkHsl-fC>`MqI}C0hjUc|4;~O z9ia^w#Wj=s%ex(k0xp5&hRja5;%vNZdB?xtOX+ z&cNkK;udpX@=~di95E4k`~g}sb|3|oD?;KB_%R4MmhS?b#^VM;0LJUoilUVFB!fH! zCU}+y@lW_kCKwa~XiK0>6JCq8GY`SWh-qF!)3=01SOBj?cUGf2>%k~w@K4UXd*4_F_iq(846;5z!v)tu^nTH5+?D+ zUmy#DzE2P)-+xItqNMRxlr(8*e1u{<(fmXpTkaDZNylp@iGVZ;lX}oFvE@PEGu6Il zHqtQhENGbUL*BnKAsc<@yJpe}<@)I4cJX6zGAZ9Xh@8;_Sk^XI$O=N!Fp|&qIQ?*+ zH5G&(ikesB;jdr-N5USD^LAUyasGu? zmI>0~NuT&LankGmM;~%VFQ#e}B+?cEJS%h}xr2`^7K8Ccny69Mrd{euUm>^%Q|SGz^`VXqFn2^O?2RI5Dj)> z`)>)4!a{f7Eu$LWx%euQ8%kY?JWvuB zeGuMR4ezXlM;|Do%gQK2K|>OJyKEy)t5Av+k#R8%S1P6_d>6=25$e(E5$CUhtlAloW_muntB^N0n!t=A@DCOvE!V)@Qnu{RxJHjKs%dNoM@a@9Z z-H}^~#a+wWf2%q$S&be=M9l43Rf6sy1yS%?-TJ#OxBu4RRe|2ChU|9-Z=GHh@MZ{4UbtUlj z2?rAGsma|=p)3COl#`DR)a3p;j>eV6V@vVHlka_}8pZ^pPJJMLYyZ1rHM!3Lgu0iz zpQ{G<*W~>UDBN7Mg2-FL6>|HbewMc#s`kCmkWl)}m-wX{?-j|ZNBHRJT1MTyY|I1I zzJm=3rO$lvTW71joxgOWU=NI3W0Vd2l+D9fF(QN#y_2KMyN*_q$5@H298h}#$OG2_-fM-u4{GHM-dx)RI<3?=S1oD-7kf z%bAw=bt<*P8nV9^Qu&FFt}oO~Ifs)p|9sIP|Hn!=t#I>cf61uM(5H+Bi5G%n{G%h4 zIfp!2!A}N*tu-45Cy(3eaoX^=YWF9xUSA#$eQX?o96BrLj4)TpIKRgz6$exdfVaD4(;u&xMh{r}O z0z34bBoEmfc$)qUr*>~T?^;hayX`dC{mCD;e)DN&Zz_I!1abtpvTIj>Ysz6vh3k(O zjekZH7zn|aVy(PhIX`oT$os>T=&=S5@Balt1@UEo18c1NW&Q-T(jq literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_configuration_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87a3a0009ad64be4f5f1149385f43d8bc04ec4c3 GIT binary patch literal 5357 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_session_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/__pycache__/_session_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06545eeeedd85eb0ba77dcce4d0fec704699903f GIT binary patch literal 1707 zcmbVM&2Jk;6rb5IuQ#@F>^1>MEv6_)+hDIk5F9`pl2#3>8Y;qtm0-2;P7*i!)tPmu zOAd%eNJvOlMwMos|v#G9QpNhp;Nqt)+y&b+tpy_s*zWdp%t zzc;!MRD^!!!eoJ*t9{Q6F7Ld1^QyD5dUfUcn`_rVQF)u(?h%#1%eP6YeCt8bORr}bS zN-KHb{8!deEzW||BAk^LqU^UA<>6C}lB7pNs)NwU>jEr7yi;5rEdv~&1Ov&IhxgE} z)1DK3mhv9nlOCvtc{dLwVO&S1Hh#@$=1WwBHQgo?)oMnY&19Q2J3W>}0in$}qKWIb z|K5@1mnw0@lJT6iyJ&56eZL!SIl|G(&ta+T#@+jJTH0_Kaa_-%5P+5-3t9#+CCW2P zb%%<^fvduZzj@-q_^&~pV`gnbD%Mtb$GSq;P7=k|YLpPawH!q|5ZYRHJ3A!wtX&fB zT7GxKiu=iS6fU(FU$R&?A*~o3+%3W^mQB__b9VBifo3Duj{B+B$%f_b`Liu-3w0Gz zV=n`IgpR7HdTvlUKPXi{zwzmfL3L(OZ4EA58q8i8JpJr&3Y8lpq?IcpwOBQVs8}>c zu6g9-f*>h`5{Ab+B&=%nqhqR;eiXoH7-A# zUKnycco_9jk#jHpC*LFPE5h=KYi1>#5kuK_1f2{a<>Q}fNk4`W7nx@_W?E<*awj1n zf8ZF^xaaKTnEXOHXI__!x%KRAg_z>ni(9>vJBdfC{RCepZ~LjIOjPd@q;XQwvHrT~ z!W+~C1An#HWq_fKF+SE1Ui<+)_XsWgBv&6PufTUKNvd{a%wyw=_l^;e?5w{4>AAC~ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration.py new file mode 100644 index 00000000..7006d604 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration.py @@ -0,0 +1,401 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._application import Application + from stripe.params.billing_portal._configuration_create_params import ( + ConfigurationCreateParams, + ) + from stripe.params.billing_portal._configuration_list_params import ( + ConfigurationListParams, + ) + from stripe.params.billing_portal._configuration_modify_params import ( + ConfigurationModifyParams, + ) + from stripe.params.billing_portal._configuration_retrieve_params import ( + ConfigurationRetrieveParams, + ) + + +class Configuration( + CreateableAPIResource["Configuration"], + ListableAPIResource["Configuration"], + UpdateableAPIResource["Configuration"], +): + """ + A portal configuration describes the functionality and behavior you embed in a portal session. Related guide: [Configure the customer portal](https://docs.stripe.com/customer-management/configure-portal). + """ + + OBJECT_NAME: ClassVar[Literal["billing_portal.configuration"]] = ( + "billing_portal.configuration" + ) + + class BusinessProfile(StripeObject): + headline: Optional[str] + """ + The messaging shown to customers in the portal. + """ + privacy_policy_url: Optional[str] + """ + A link to the business's publicly available privacy policy. + """ + terms_of_service_url: Optional[str] + """ + A link to the business's publicly available terms of service. + """ + + class Features(StripeObject): + class CustomerUpdate(StripeObject): + allowed_updates: List[ + Literal[ + "address", "email", "name", "phone", "shipping", "tax_id" + ] + ] + """ + The types of customer updates that are supported. When empty, customers are not updateable. + """ + enabled: bool + """ + Whether the feature is enabled. + """ + + class InvoiceHistory(StripeObject): + enabled: bool + """ + Whether the feature is enabled. + """ + + class PaymentMethodUpdate(StripeObject): + enabled: bool + """ + Whether the feature is enabled. + """ + + class SubscriptionCancel(StripeObject): + class CancellationReason(StripeObject): + enabled: bool + """ + Whether the feature is enabled. + """ + options: List[ + Literal[ + "customer_service", + "low_quality", + "missing_features", + "other", + "switched_service", + "too_complex", + "too_expensive", + "unused", + ] + ] + """ + Which cancellation reasons will be given as options to the customer. + """ + + cancellation_reason: CancellationReason + enabled: bool + """ + Whether the feature is enabled. + """ + mode: Literal["at_period_end", "immediately"] + """ + Whether to cancel subscriptions immediately or at the end of the billing period. + """ + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + """ + Whether to create prorations when canceling subscriptions. Possible values are `none` and `create_prorations`. + """ + _inner_class_types = {"cancellation_reason": CancellationReason} + + class SubscriptionUpdate(StripeObject): + class Product(StripeObject): + class AdjustableQuantity(StripeObject): + enabled: bool + """ + If true, the quantity can be adjusted to any non-negative integer. + """ + maximum: Optional[int] + """ + The maximum quantity that can be set for the product. + """ + minimum: int + """ + The minimum quantity that can be set for the product. + """ + + adjustable_quantity: AdjustableQuantity + prices: List[str] + """ + The list of price IDs which, when subscribed to, a subscription can be updated. + """ + product: str + """ + The product ID. + """ + _inner_class_types = { + "adjustable_quantity": AdjustableQuantity + } + + class ScheduleAtPeriodEnd(StripeObject): + class Condition(StripeObject): + type: Literal[ + "decreasing_item_amount", "shortening_interval" + ] + """ + The type of condition. + """ + + conditions: List[Condition] + """ + List of conditions. When any condition is true, an update will be scheduled at the end of the current period. + """ + _inner_class_types = {"conditions": Condition} + + default_allowed_updates: List[ + Literal["price", "promotion_code", "quantity"] + ] + """ + The types of subscription updates that are supported for items listed in the `products` attribute. When empty, subscriptions are not updateable. + """ + enabled: bool + """ + Whether the feature is enabled. + """ + products: Optional[List[Product]] + """ + The list of up to 10 products that support subscription updates. + """ + proration_behavior: Literal[ + "always_invoice", "create_prorations", "none" + ] + """ + Determines how to handle prorations resulting from subscription updates. Valid values are `none`, `create_prorations`, and `always_invoice`. Defaults to a value of `none` if you don't set it during creation. + """ + schedule_at_period_end: ScheduleAtPeriodEnd + trial_update_behavior: Literal["continue_trial", "end_trial"] + """ + Determines how handle updates to trialing subscriptions. Valid values are `end_trial` and `continue_trial`. Defaults to a value of `end_trial` if you don't set it during creation. + """ + _inner_class_types = { + "products": Product, + "schedule_at_period_end": ScheduleAtPeriodEnd, + } + + customer_update: CustomerUpdate + invoice_history: InvoiceHistory + payment_method_update: PaymentMethodUpdate + subscription_cancel: SubscriptionCancel + subscription_update: SubscriptionUpdate + _inner_class_types = { + "customer_update": CustomerUpdate, + "invoice_history": InvoiceHistory, + "payment_method_update": PaymentMethodUpdate, + "subscription_cancel": SubscriptionCancel, + "subscription_update": SubscriptionUpdate, + } + + class LoginPage(StripeObject): + enabled: bool + """ + If `true`, a shareable `url` will be generated that will take your customers to a hosted login page for the customer portal. + + If `false`, the previously generated `url`, if any, will be deactivated. + """ + url: Optional[str] + """ + A shareable URL to the hosted portal login page. Your customers will be able to log in with their [email](https://stripe.com/docs/api/customers/object#customer_object-email) and receive a link to their customer portal. + """ + + active: bool + """ + Whether the configuration is active and can be used to create portal sessions. + """ + application: Optional[ExpandableField["Application"]] + """ + ID of the Connect Application that created the configuration. + """ + business_profile: BusinessProfile + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + default_return_url: Optional[str] + """ + The default URL to redirect customers to when they click on the portal's link to return to your website. This can be [overriden](https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url) when creating the session. + """ + features: Features + id: str + """ + Unique identifier for the object. + """ + is_default: bool + """ + Whether the configuration is the default. If `true`, this configuration can be managed in the Dashboard and portal sessions will use this configuration unless it is overriden when creating the session. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + login_page: LoginPage + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + The name of the configuration. + """ + object: Literal["billing_portal.configuration"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + updated: int + """ + Time at which the object was last updated. Measured in seconds since the Unix epoch. + """ + + @classmethod + def create( + cls, **params: Unpack["ConfigurationCreateParams"] + ) -> "Configuration": + """ + Creates a configuration that describes the functionality and behavior of a PortalSession + """ + return cast( + "Configuration", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["ConfigurationCreateParams"] + ) -> "Configuration": + """ + Creates a configuration that describes the functionality and behavior of a PortalSession + """ + return cast( + "Configuration", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["ConfigurationListParams"] + ) -> ListObject["Configuration"]: + """ + Returns a list of configurations that describe the functionality of the customer portal. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ConfigurationListParams"] + ) -> ListObject["Configuration"]: + """ + Returns a list of configurations that describe the functionality of the customer portal. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["ConfigurationModifyParams"] + ) -> "Configuration": + """ + Updates a configuration that describes the functionality of the customer portal. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Configuration", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["ConfigurationModifyParams"] + ) -> "Configuration": + """ + Updates a configuration that describes the functionality of the customer portal. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Configuration", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ConfigurationRetrieveParams"] + ) -> "Configuration": + """ + Retrieves a configuration that describes the functionality of the customer portal. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ConfigurationRetrieveParams"] + ) -> "Configuration": + """ + Retrieves a configuration that describes the functionality of the customer portal. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "business_profile": BusinessProfile, + "features": Features, + "login_page": LoginPage, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration_service.py new file mode 100644 index 00000000..ba9084e7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_configuration_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.billing_portal._configuration import Configuration + from stripe.params.billing_portal._configuration_create_params import ( + ConfigurationCreateParams, + ) + from stripe.params.billing_portal._configuration_list_params import ( + ConfigurationListParams, + ) + from stripe.params.billing_portal._configuration_retrieve_params import ( + ConfigurationRetrieveParams, + ) + from stripe.params.billing_portal._configuration_update_params import ( + ConfigurationUpdateParams, + ) + + +class ConfigurationService(StripeService): + def list( + self, + params: Optional["ConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Configuration]": + """ + Returns a list of configurations that describe the functionality of the customer portal. + """ + return cast( + "ListObject[Configuration]", + self._request( + "get", + "/v1/billing_portal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ConfigurationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Configuration]": + """ + Returns a list of configurations that describe the functionality of the customer portal. + """ + return cast( + "ListObject[Configuration]", + await self._request_async( + "get", + "/v1/billing_portal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "ConfigurationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Creates a configuration that describes the functionality and behavior of a PortalSession + """ + return cast( + "Configuration", + self._request( + "post", + "/v1/billing_portal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "ConfigurationCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Creates a configuration that describes the functionality and behavior of a PortalSession + """ + return cast( + "Configuration", + await self._request_async( + "post", + "/v1/billing_portal/configurations", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + configuration: str, + params: Optional["ConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Retrieves a configuration that describes the functionality of the customer portal. + """ + return cast( + "Configuration", + self._request( + "get", + "/v1/billing_portal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + configuration: str, + params: Optional["ConfigurationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Retrieves a configuration that describes the functionality of the customer portal. + """ + return cast( + "Configuration", + await self._request_async( + "get", + "/v1/billing_portal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + configuration: str, + params: Optional["ConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Updates a configuration that describes the functionality of the customer portal. + """ + return cast( + "Configuration", + self._request( + "post", + "/v1/billing_portal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + configuration: str, + params: Optional["ConfigurationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Configuration": + """ + Updates a configuration that describes the functionality of the customer portal. + """ + return cast( + "Configuration", + await self._request_async( + "post", + "/v1/billing_portal/configurations/{configuration}".format( + configuration=sanitize_id(configuration), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session.py new file mode 100644 index 00000000..c8d22f30 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session.py @@ -0,0 +1,296 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.billing_portal._configuration import Configuration + from stripe.params.billing_portal._session_create_params import ( + SessionCreateParams, + ) + + +class Session(CreateableAPIResource["Session"]): + """ + The Billing customer portal is a Stripe-hosted UI for subscription and + billing management. + + A portal configuration describes the functionality and features that you + want to provide to your customers through the portal. + + A portal session describes the instantiation of the customer portal for + a particular customer. By visiting the session's URL, the customer + can manage their subscriptions and billing details. For security reasons, + sessions are short-lived and will expire if the customer does not visit the URL. + Create sessions on-demand when customers intend to manage their subscriptions + and billing details. + + Related guide: [Customer management](https://docs.stripe.com/customer-management) + """ + + OBJECT_NAME: ClassVar[Literal["billing_portal.session"]] = ( + "billing_portal.session" + ) + + class Flow(StripeObject): + class AfterCompletion(StripeObject): + class HostedConfirmation(StripeObject): + custom_message: Optional[str] + """ + A custom message to display to the customer after the flow is completed. + """ + + class Redirect(StripeObject): + return_url: str + """ + The URL the customer will be redirected to after the flow is completed. + """ + + hosted_confirmation: Optional[HostedConfirmation] + """ + Configuration when `after_completion.type=hosted_confirmation`. + """ + redirect: Optional[Redirect] + """ + Configuration when `after_completion.type=redirect`. + """ + type: Literal["hosted_confirmation", "portal_homepage", "redirect"] + """ + The specified type of behavior after the flow is completed. + """ + _inner_class_types = { + "hosted_confirmation": HostedConfirmation, + "redirect": Redirect, + } + + class SubscriptionCancel(StripeObject): + class Retention(StripeObject): + class CouponOffer(StripeObject): + coupon: str + """ + The ID of the coupon to be offered. + """ + + coupon_offer: Optional[CouponOffer] + """ + Configuration when `retention.type=coupon_offer`. + """ + type: Literal["coupon_offer"] + """ + Type of retention strategy that will be used. + """ + _inner_class_types = {"coupon_offer": CouponOffer} + + retention: Optional[Retention] + """ + Specify a retention strategy to be used in the cancellation flow. + """ + subscription: str + """ + The ID of the subscription to be canceled. + """ + _inner_class_types = {"retention": Retention} + + class SubscriptionUpdate(StripeObject): + subscription: str + """ + The ID of the subscription to be updated. + """ + + class SubscriptionUpdateConfirm(StripeObject): + class Discount(StripeObject): + coupon: Optional[str] + """ + The ID of the coupon to apply to this subscription update. + """ + promotion_code: Optional[str] + """ + The ID of a promotion code to apply to this subscription update. + """ + + class Item(StripeObject): + id: Optional[str] + """ + The ID of the [subscription item](https://stripe.com/docs/api/subscriptions/object#subscription_object-items-data-id) to be updated. + """ + price: Optional[str] + """ + The price the customer should subscribe to through this flow. The price must also be included in the configuration's [`features.subscription_update.products`](https://stripe.com/docs/api/customer_portal/configuration#portal_configuration_object-features-subscription_update-products). + """ + quantity: Optional[int] + """ + [Quantity](https://stripe.com/docs/subscriptions/quantities) for this item that the customer should subscribe to through this flow. + """ + + discounts: Optional[List[Discount]] + """ + The coupon or promotion code to apply to this subscription update. + """ + items: List[Item] + """ + The [subscription item](https://stripe.com/docs/api/subscription_items) to be updated through this flow. Currently, only up to one may be specified and subscriptions with multiple items are not updatable. + """ + subscription: str + """ + The ID of the subscription to be updated. + """ + _inner_class_types = {"discounts": Discount, "items": Item} + + after_completion: AfterCompletion + subscription_cancel: Optional[SubscriptionCancel] + """ + Configuration when `flow.type=subscription_cancel`. + """ + subscription_update: Optional[SubscriptionUpdate] + """ + Configuration when `flow.type=subscription_update`. + """ + subscription_update_confirm: Optional[SubscriptionUpdateConfirm] + """ + Configuration when `flow.type=subscription_update_confirm`. + """ + type: Literal[ + "payment_method_update", + "subscription_cancel", + "subscription_update", + "subscription_update_confirm", + ] + """ + Type of flow that the customer will go through. + """ + _inner_class_types = { + "after_completion": AfterCompletion, + "subscription_cancel": SubscriptionCancel, + "subscription_update": SubscriptionUpdate, + "subscription_update_confirm": SubscriptionUpdateConfirm, + } + + configuration: ExpandableField["Configuration"] + """ + The configuration used by this session, describing the features available. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + customer: str + """ + The ID of the customer for this session. + """ + flow: Optional[Flow] + """ + Information about a specific flow for the customer to go through. See the [docs](https://stripe.com/docs/customer-management/portal-deep-links) to learn more about using customer portal deep links and flows. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + locale: Optional[ + Literal[ + "auto", + "bg", + "cs", + "da", + "de", + "el", + "en", + "en-AU", + "en-CA", + "en-GB", + "en-IE", + "en-IN", + "en-NZ", + "en-SG", + "es", + "es-419", + "et", + "fi", + "fil", + "fr", + "fr-CA", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "lv", + "ms", + "mt", + "nb", + "nl", + "pl", + "pt", + "pt-BR", + "ro", + "ru", + "sk", + "sl", + "sv", + "th", + "tr", + "vi", + "zh", + "zh-HK", + "zh-TW", + ] + ] + """ + The IETF language tag of the locale Customer Portal is displayed in. If blank or auto, the customer's `preferred_locales` or browser's locale is used. + """ + object: Literal["billing_portal.session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + on_behalf_of: Optional[str] + """ + The account for which the session was created on behalf of. When specified, only subscriptions and invoices with this `on_behalf_of` account appear in the portal. For more information, see the [docs](https://stripe.com/docs/connect/separate-charges-and-transfers#settlement-merchant). Use the [Accounts API](https://stripe.com/docs/api/accounts/object#account_object-settings-branding) to modify the `on_behalf_of` account's branding settings, which the portal displays. + """ + return_url: Optional[str] + """ + The URL to redirect customers to when they click on the portal's link to return to your website. + """ + url: str + """ + The short-lived URL of the session that gives customers access to the customer portal. + """ + + @classmethod + def create(cls, **params: Unpack["SessionCreateParams"]) -> "Session": + """ + Creates a session of the customer portal. + """ + return cast( + "Session", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SessionCreateParams"] + ) -> "Session": + """ + Creates a session of the customer portal. + """ + return cast( + "Session", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + _inner_class_types = {"flow": Flow} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session_service.py new file mode 100644 index 00000000..c8e8224a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/billing_portal/_session_service.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.billing_portal._session import Session + from stripe.params.billing_portal._session_create_params import ( + SessionCreateParams, + ) + + +class SessionService(StripeService): + def create( + self, + params: "SessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Creates a session of the customer portal. + """ + return cast( + "Session", + self._request( + "post", + "/v1/billing_portal/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "SessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Creates a session of the customer portal. + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/billing_portal/sessions", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__init__.py new file mode 100644 index 00000000..f1c4611b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__init__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.checkout._session import Session as Session + from stripe.checkout._session_line_item_service import ( + SessionLineItemService as SessionLineItemService, + ) + from stripe.checkout._session_service import ( + SessionService as SessionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Session": ("stripe.checkout._session", False), + "SessionLineItemService": ( + "stripe.checkout._session_line_item_service", + False, + ), + "SessionService": ("stripe.checkout._session_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ead25c9c0f5fe5f06c32f719bd2f585406e6790a GIT binary patch literal 1131 zcmb7C&1(}u6o0dm-6Ty?V{B`Uh@tVaidp=?iyvTXYfDQJqKAgUk|smCWIw{}q&6jm zA|5#Xou2Y#q9;up-yaYNQDrI6y|yTseiUa;SGF!5 zcWK%f+O#k>x`)A~d*N93zfP2^SP<8wileF#R6~({rMUV#s9r!41n!Y^;S7RR1z?+O zD?)mO(j|L?2-~!)aHUJjAY_W@mUdwe-$*G#5roVe$_3yl0wOuI_Xgkzc?_F$1s)Tf zEbD5JGKYh+Be;}@UJeLQh?|Ma=%nQy1^``L;8>{wr=W1~Hw znbF@r6Of(!0R*4t3LkP)@6uB}iq?^z#>h|dI=o8huse2}F6-$a8FdqDh?;p)bXr)U z$u|QH-82d zmPyE=2IRtLxb%f)KgVt!DvGKdYN&c?$X@Fy^t{$f!0BmnkcppAc2WmfNR0PmX|>o> I5phZCKXDN`&;S4c literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be0c4ee3d922ef2057abb2d4b2e2fcfe10dd83b7 GIT binary patch literal 56060 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 M{C7Tj%VpF52Yz2=RR910 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_line_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_line_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c43eb9c3f1eefdedd521e4250348d8b0a69f8bfe GIT binary patch literal 2300 zcmcgu-ES0C6udl#4$WFnKZk;BzEj`6(BJ3>tedBGN)R4wI5H7Q(+ zcG{6^GKa8C_JVE7&Nxa<33Za4b#k>_$fxbRQ>Ya}Ubg$3Vy(y_9-TvG<~}kN%&iGg z4z*G%Tgm;*78NeYPx-`Z;3-TNtU3lkmKv_*TT58C%nBdKmm9w2xrQBxb%XlM&&!p72j-P5QH%(NCu}cr4TQ1Vdhs1 zVmP!OWf##*yy(6U%nHJ&#+j(bXHW*2S(C?tDPYkQ2SID5fRjQlZOSt;lndMUk1Q3i zlv-RR7YzIS+@dISL5w?MfK+}!Ky`7!&NP}ZZ}P1+QzC4 zi0c+WPSpnS8kqPkweGpTVYw_4c&RfMp}sn2xaLgLR=pVzdK5x2r>c5wJFZPV`10FV zC)CAI*7BNa9ljPPhNECj+g1-Zj9JSyd~8-A0SFF3St4=F?Yc-A$_<2B>~D=|3&*s2 zT$L7MNwwQC_kq?cWR)X@(9dXCt3r^QHYnB&(u#o4&QE&3O*iX5Cxb8BFJWuc4jyd~6>%?RoRCbJ}U6K95~f zTfpuDBsZ-!TCi{KtJPy;8il<((f|Wv7E_IebK5IUk89GmO9Dwa)YV2S5ZQ(;Js0CT z5f5zK=2fO-n?^4Kxr3gTQL(?Bd!d~xetPMnOYP$BcJbun;`n-T{JVWGKS+PO?`TIr zr88U?@uhM{LeIb0-m|~G_dur)<%haR&KJ6=Y*Fc;Y)0uqNc5K}xCg@SXFx6@?th$w zd&o@RhB^D3UlBe`rBH7&-asGAUkZy{MJD}_R@g&iH{%8v*~7?QM%YO+nY2M6X#?G$ zEw@hgF$;z^*$-qJcX9w$fx@;qGF%$|8zdr=!z_Rf48~d;BPnmm^9LsC6QVs^9IjZW>JDC{* zO@e}4qHOw>9pV~Deyah48kHO#1*J%$<6Ay<+1*A7JDr14;=DbO1pW$8u&XDBcJRWx zlCTRe*pq1DvqgXAnmHb8ql>7ToNADHbVcnL{IJn>Tv!nb75GLEnJxKb1nFC33>54V zp+|vq1dii2CBz-uKnK4^!y9PyiBQ}SM>fRjhWPp>&!?oP$|$FNaeWiPD~$LDuGv}+ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/__pycache__/_session_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0669699c6470a1b8a60cf85c18a7fdf555edc3f GIT binary patch literal 7509 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 VDR4P?SJFix{^m>f2>$YQ{2T063tIpH literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session.py new file mode 100644 index 00000000..469ccbfa --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session.py @@ -0,0 +1,2779 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account + from stripe._coupon import Coupon + from stripe._customer import Customer + from stripe._discount import Discount as DiscountResource + from stripe._invoice import Invoice + from stripe._line_item import LineItem + from stripe._payment_intent import PaymentIntent + from stripe._payment_link import PaymentLink + from stripe._promotion_code import PromotionCode + from stripe._setup_intent import SetupIntent + from stripe._shipping_rate import ShippingRate + from stripe._subscription import Subscription + from stripe._tax_id import TaxId as TaxIdResource + from stripe._tax_rate import TaxRate + from stripe.params.checkout._session_create_params import ( + SessionCreateParams, + ) + from stripe.params.checkout._session_expire_params import ( + SessionExpireParams, + ) + from stripe.params.checkout._session_list_line_items_params import ( + SessionListLineItemsParams, + ) + from stripe.params.checkout._session_list_params import SessionListParams + from stripe.params.checkout._session_modify_params import ( + SessionModifyParams, + ) + from stripe.params.checkout._session_retrieve_params import ( + SessionRetrieveParams, + ) + + +class Session( + CreateableAPIResource["Session"], + ListableAPIResource["Session"], + UpdateableAPIResource["Session"], +): + """ + A Checkout Session represents your customer's session as they pay for + one-time purchases or subscriptions through [Checkout](https://stripe.com/docs/payments/checkout) + or [Payment Links](https://stripe.com/docs/payments/payment-links). We recommend creating a + new Session each time your customer attempts to pay. + + Once payment is successful, the Checkout Session will contain a reference + to the [Customer](https://stripe.com/docs/api/customers), and either the successful + [PaymentIntent](https://stripe.com/docs/api/payment_intents) or an active + [Subscription](https://stripe.com/docs/api/subscriptions). + + You can create a Checkout Session on your server and redirect to its URL + to begin Checkout. + + Related guide: [Checkout quickstart](https://stripe.com/docs/checkout/quickstart) + """ + + OBJECT_NAME: ClassVar[Literal["checkout.session"]] = "checkout.session" + + class AdaptivePricing(StripeObject): + enabled: bool + """ + If enabled, Adaptive Pricing is available on [eligible sessions](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing?payment-ui=stripe-hosted#restrictions). + """ + + class AfterExpiration(StripeObject): + class Recovery(StripeObject): + allow_promotion_codes: bool + """ + Enables user redeemable promotion codes on the recovered Checkout Sessions. Defaults to `false` + """ + enabled: bool + """ + If `true`, a recovery url will be generated to recover this Checkout Session if it + expires before a transaction is completed. It will be attached to the + Checkout Session object upon expiration. + """ + expires_at: Optional[int] + """ + The timestamp at which the recovery URL will expire. + """ + url: Optional[str] + """ + URL that creates a new Checkout Session when clicked that is a copy of this expired Checkout Session + """ + + recovery: Optional[Recovery] + """ + When set, configuration used to recover the Checkout Session on expiry. + """ + _inner_class_types = {"recovery": Recovery} + + class AutomaticTax(StripeObject): + class Liability(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + enabled: bool + """ + Indicates whether automatic tax is enabled for the session + """ + liability: Optional[Liability] + """ + The account that's liable for tax. If set, the business address and tax registrations required to perform the tax calculation are loaded from this account. The tax transaction is returned in the report of the connected account. + """ + provider: Optional[str] + """ + The tax provider powering automatic tax. + """ + status: Optional[ + Literal["complete", "failed", "requires_location_inputs"] + ] + """ + The status of the most recent automated tax calculation for this session. + """ + _inner_class_types = {"liability": Liability} + + class BrandingSettings(StripeObject): + class Icon(StripeObject): + file: Optional[str] + """ + The ID of a [File upload](https://stripe.com/docs/api/files) representing the icon. Purpose must be `business_icon`. Required if `type` is `file` and disallowed otherwise. + """ + type: Literal["file", "url"] + """ + The type of image for the icon. Must be one of `file` or `url`. + """ + url: Optional[str] + """ + The URL of the image. Present when `type` is `url`. + """ + + class Logo(StripeObject): + file: Optional[str] + """ + The ID of a [File upload](https://stripe.com/docs/api/files) representing the logo. Purpose must be `business_logo`. Required if `type` is `file` and disallowed otherwise. + """ + type: Literal["file", "url"] + """ + The type of image for the logo. Must be one of `file` or `url`. + """ + url: Optional[str] + """ + The URL of the image. Present when `type` is `url`. + """ + + background_color: str + """ + A hex color value starting with `#` representing the background color for the Checkout Session. + """ + border_style: Literal["pill", "rectangular", "rounded"] + """ + The border style for the Checkout Session. Must be one of `rounded`, `rectangular`, or `pill`. + """ + button_color: str + """ + A hex color value starting with `#` representing the button color for the Checkout Session. + """ + display_name: str + """ + The display name shown on the Checkout Session. + """ + font_family: str + """ + The font family for the Checkout Session. Must be one of the [supported font families](https://docs.stripe.com/payments/checkout/customization/appearance?payment-ui=stripe-hosted#font-compatibility). + """ + icon: Optional[Icon] + """ + The icon for the Checkout Session. You cannot set both `logo` and `icon`. + """ + logo: Optional[Logo] + """ + The logo for the Checkout Session. You cannot set both `logo` and `icon`. + """ + _inner_class_types = {"icon": Icon, "logo": Logo} + + class CollectedInformation(StripeObject): + class ShippingDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + name: str + """ + Customer name. + """ + _inner_class_types = {"address": Address} + + business_name: Optional[str] + """ + Customer's business name for this Checkout Session + """ + individual_name: Optional[str] + """ + Customer's individual name for this Checkout Session + """ + shipping_details: Optional[ShippingDetails] + """ + Shipping information for this Checkout Session. + """ + _inner_class_types = {"shipping_details": ShippingDetails} + + class Consent(StripeObject): + promotions: Optional[Literal["opt_in", "opt_out"]] + """ + If `opt_in`, the customer consents to receiving promotional communications + from the merchant about this Checkout Session. + """ + terms_of_service: Optional[Literal["accepted"]] + """ + If `accepted`, the customer in this Checkout Session has agreed to the merchant's terms of service. + """ + + class ConsentCollection(StripeObject): + class PaymentMethodReuseAgreement(StripeObject): + position: Literal["auto", "hidden"] + """ + Determines the position and visibility of the payment method reuse agreement in the UI. When set to `auto`, Stripe's defaults will be used. + + When set to `hidden`, the payment method reuse agreement text will always be hidden in the UI. + """ + + payment_method_reuse_agreement: Optional[PaymentMethodReuseAgreement] + """ + If set to `hidden`, it will hide legal text related to the reuse of a payment method. + """ + promotions: Optional[Literal["auto", "none"]] + """ + If set to `auto`, enables the collection of customer consent for promotional communications. The Checkout + Session will determine whether to display an option to opt into promotional communication + from the merchant depending on the customer's locale. Only available to US merchants. + """ + terms_of_service: Optional[Literal["none", "required"]] + """ + If set to `required`, it requires customers to accept the terms of service before being able to pay. + """ + _inner_class_types = { + "payment_method_reuse_agreement": PaymentMethodReuseAgreement, + } + + class CurrencyConversion(StripeObject): + amount_subtotal: int + """ + Total of all items in source currency before discounts or taxes are applied. + """ + amount_total: int + """ + Total of all items in source currency after discounts and taxes are applied. + """ + fx_rate: str + """ + Exchange rate used to convert source currency amounts to customer currency amounts + """ + source_currency: str + """ + Creation currency of the CheckoutSession before localization + """ + + class CustomField(StripeObject): + class Dropdown(StripeObject): + class Option(StripeObject): + label: str + """ + The label for the option, displayed to the customer. Up to 100 characters. + """ + value: str + """ + The value for this option, not displayed to the customer, used by your integration to reconcile the option selected by the customer. Must be unique to this option, alphanumeric, and up to 100 characters. + """ + + default_value: Optional[str] + """ + The value that will pre-fill on the payment page. + """ + options: List[Option] + """ + The options available for the customer to select. Up to 200 options allowed. + """ + value: Optional[str] + """ + The option selected by the customer. This will be the `value` for the option. + """ + _inner_class_types = {"options": Option} + + class Label(StripeObject): + custom: Optional[str] + """ + Custom text for the label, displayed to the customer. Up to 50 characters. + """ + type: Literal["custom"] + """ + The type of the label. + """ + + class Numeric(StripeObject): + default_value: Optional[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: Optional[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: Optional[int] + """ + The minimum character length requirement for the customer's input. + """ + value: Optional[str] + """ + The value entered by the customer, containing only digits. + """ + + class Text(StripeObject): + default_value: Optional[str] + """ + The value that will pre-fill the field on the payment page. + """ + maximum_length: Optional[int] + """ + The maximum character length constraint for the customer's input. + """ + minimum_length: Optional[int] + """ + The minimum character length requirement for the customer's input. + """ + value: Optional[str] + """ + The value entered by the customer. + """ + + dropdown: Optional[Dropdown] + key: str + """ + String of your choice that your integration can use to reconcile this field. Must be unique to this field, alphanumeric, and up to 200 characters. + """ + label: Label + numeric: Optional[Numeric] + optional: bool + """ + Whether the customer is required to complete the field before completing the Checkout Session. Defaults to `false`. + """ + text: Optional[Text] + type: Literal["dropdown", "numeric", "text"] + """ + The type of the field. + """ + _inner_class_types = { + "dropdown": Dropdown, + "label": Label, + "numeric": Numeric, + "text": Text, + } + + class CustomText(StripeObject): + class AfterSubmit(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class ShippingAddress(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class Submit(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + class TermsOfServiceAcceptance(StripeObject): + message: str + """ + Text may be up to 1200 characters in length. + """ + + after_submit: Optional[AfterSubmit] + """ + Custom text that should be displayed after the payment confirmation button. + """ + shipping_address: Optional[ShippingAddress] + """ + Custom text that should be displayed alongside shipping address collection. + """ + submit: Optional[Submit] + """ + Custom text that should be displayed alongside the payment confirmation button. + """ + terms_of_service_acceptance: Optional[TermsOfServiceAcceptance] + """ + Custom text that should be displayed in place of the default terms of service agreement text. + """ + _inner_class_types = { + "after_submit": AfterSubmit, + "shipping_address": ShippingAddress, + "submit": Submit, + "terms_of_service_acceptance": TermsOfServiceAcceptance, + } + + class CustomerDetails(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class TaxId(StripeObject): + type: Literal[ + "ad_nrt", + "ae_trn", + "al_tin", + "am_tin", + "ao_tin", + "ar_cuit", + "au_abn", + "au_arn", + "aw_tin", + "az_tin", + "ba_tin", + "bb_tin", + "bd_bin", + "bf_ifu", + "bg_uic", + "bh_vat", + "bj_ifu", + "bo_tin", + "br_cnpj", + "br_cpf", + "bs_tin", + "by_tin", + "ca_bn", + "ca_gst_hst", + "ca_pst_bc", + "ca_pst_mb", + "ca_pst_sk", + "ca_qst", + "cd_nif", + "ch_uid", + "ch_vat", + "cl_tin", + "cm_niu", + "cn_tin", + "co_nit", + "cr_tin", + "cv_nif", + "de_stn", + "do_rcn", + "ec_ruc", + "eg_tin", + "es_cif", + "et_tin", + "eu_oss_vat", + "eu_vat", + "gb_vat", + "ge_vat", + "gn_nif", + "hk_br", + "hr_oib", + "hu_tin", + "id_npwp", + "il_vat", + "in_gst", + "is_vat", + "jp_cn", + "jp_rn", + "jp_trn", + "ke_pin", + "kg_tin", + "kh_tin", + "kr_brn", + "kz_bin", + "la_tin", + "li_uid", + "li_vat", + "ma_vat", + "md_vat", + "me_pib", + "mk_vat", + "mr_nif", + "mx_rfc", + "my_frp", + "my_itn", + "my_sst", + "ng_tin", + "no_vat", + "no_voec", + "np_pan", + "nz_gst", + "om_vat", + "pe_ruc", + "ph_tin", + "ro_tin", + "rs_pib", + "ru_inn", + "ru_kpp", + "sa_vat", + "sg_gst", + "sg_uen", + "si_tin", + "sn_ninea", + "sr_fin", + "sv_nit", + "th_vat", + "tj_tin", + "tr_tin", + "tw_vat", + "tz_vat", + "ua_vat", + "ug_tin", + "unknown", + "us_ein", + "uy_ruc", + "uz_tin", + "uz_vat", + "ve_rif", + "vn_tin", + "za_vat", + "zm_tin", + "zw_tin", + ] + """ + The type of the tax ID, one of `ad_nrt`, `ar_cuit`, `eu_vat`, `bo_tin`, `br_cnpj`, `br_cpf`, `cn_tin`, `co_nit`, `cr_tin`, `do_rcn`, `ec_ruc`, `eu_oss_vat`, `hr_oib`, `pe_ruc`, `ro_tin`, `rs_pib`, `sv_nit`, `uy_ruc`, `ve_rif`, `vn_tin`, `gb_vat`, `nz_gst`, `au_abn`, `au_arn`, `in_gst`, `no_vat`, `no_voec`, `za_vat`, `ch_vat`, `mx_rfc`, `sg_uen`, `ru_inn`, `ru_kpp`, `ca_bn`, `hk_br`, `es_cif`, `tw_vat`, `th_vat`, `jp_cn`, `jp_rn`, `jp_trn`, `li_uid`, `li_vat`, `my_itn`, `us_ein`, `kr_brn`, `ca_qst`, `ca_gst_hst`, `ca_pst_bc`, `ca_pst_mb`, `ca_pst_sk`, `my_sst`, `sg_gst`, `ae_trn`, `cl_tin`, `sa_vat`, `id_npwp`, `my_frp`, `il_vat`, `ge_vat`, `ua_vat`, `is_vat`, `bg_uic`, `hu_tin`, `si_tin`, `ke_pin`, `tr_tin`, `eg_tin`, `ph_tin`, `al_tin`, `bh_vat`, `kz_bin`, `ng_tin`, `om_vat`, `de_stn`, `ch_uid`, `tz_vat`, `uz_vat`, `uz_tin`, `md_vat`, `ma_vat`, `by_tin`, `ao_tin`, `bs_tin`, `bb_tin`, `cd_nif`, `mr_nif`, `me_pib`, `zw_tin`, `ba_tin`, `gn_nif`, `mk_vat`, `sr_fin`, `sn_ninea`, `am_tin`, `np_pan`, `tj_tin`, `ug_tin`, `zm_tin`, `kh_tin`, `aw_tin`, `az_tin`, `bd_bin`, `bj_ifu`, `et_tin`, `kg_tin`, `la_tin`, `cm_niu`, `cv_nif`, `bf_ifu`, or `unknown` + """ + value: Optional[str] + """ + The value of the tax ID. + """ + + address: Optional[Address] + """ + The customer's address after a completed Checkout Session. Note: This property is populated only for sessions on or after March 30, 2022. + """ + business_name: Optional[str] + """ + The customer's business name after a completed Checkout Session. + """ + email: Optional[str] + """ + The email associated with the Customer, if one exists, on the Checkout Session after a completed Checkout Session or at time of session expiry. + Otherwise, if the customer has consented to promotional content, this value is the most recent valid email provided by the customer on the Checkout form. + """ + individual_name: Optional[str] + """ + The customer's individual name after a completed Checkout Session. + """ + name: Optional[str] + """ + The customer's name after a completed Checkout Session. Note: This property is populated only for sessions on or after March 30, 2022. + """ + phone: Optional[str] + """ + The customer's phone number after a completed Checkout Session. + """ + tax_exempt: Optional[Literal["exempt", "none", "reverse"]] + """ + The customer's tax exempt status after a completed Checkout Session. + """ + tax_ids: Optional[List[TaxId]] + """ + The customer's tax IDs after a completed Checkout Session. + """ + _inner_class_types = {"address": Address, "tax_ids": TaxId} + + class Discount(StripeObject): + coupon: Optional[ExpandableField["Coupon"]] + """ + Coupon attached to the Checkout Session. + """ + promotion_code: Optional[ExpandableField["PromotionCode"]] + """ + Promotion code attached to the Checkout Session. + """ + + class InvoiceCreation(StripeObject): + class InvoiceData(StripeObject): + class CustomField(StripeObject): + name: str + """ + The name of the custom field. + """ + value: str + """ + The value of the custom field. + """ + + class Issuer(StripeObject): + account: Optional[ExpandableField["Account"]] + """ + The connected account being referenced when `type` is `account`. + """ + type: Literal["account", "self"] + """ + Type of the account referenced. + """ + + class RenderingOptions(StripeObject): + amount_tax_display: Optional[str] + """ + How line-item prices and amounts will be displayed with respect to tax on invoice PDFs. + """ + template: Optional[str] + """ + ID of the invoice rendering template to be used for the generated invoice. + """ + + account_tax_ids: Optional[List[ExpandableField["TaxIdResource"]]] + """ + The account tax IDs associated with the invoice. + """ + custom_fields: Optional[List[CustomField]] + """ + Custom fields displayed on the invoice. + """ + description: Optional[str] + """ + An arbitrary string attached to the object. Often useful for displaying to users. + """ + footer: Optional[str] + """ + Footer displayed on the invoice. + """ + issuer: Optional[Issuer] + """ + The connected account that issues the invoice. The invoice is presented with the branding and support information of the specified account. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + rendering_options: Optional[RenderingOptions] + """ + Options for invoice PDF rendering. + """ + _inner_class_types = { + "custom_fields": CustomField, + "issuer": Issuer, + "rendering_options": RenderingOptions, + } + + enabled: bool + """ + Indicates whether invoice creation is enabled for the Checkout Session. + """ + invoice_data: InvoiceData + _inner_class_types = {"invoice_data": InvoiceData} + + class NameCollection(StripeObject): + class Business(StripeObject): + enabled: bool + """ + Indicates whether business name collection is enabled for the session + """ + optional: bool + """ + Whether the customer is required to complete the field before completing the Checkout Session. Defaults to `false`. + """ + + class Individual(StripeObject): + enabled: bool + """ + Indicates whether individual name collection is enabled for the session + """ + optional: bool + """ + Whether the customer is required to complete the field before completing the Checkout Session. Defaults to `false`. + """ + + business: Optional[Business] + individual: Optional[Individual] + _inner_class_types = {"business": Business, "individual": Individual} + + class OptionalItem(StripeObject): + class AdjustableQuantity(StripeObject): + enabled: bool + """ + Set to true if the quantity can be adjusted to any non-negative integer. + """ + maximum: Optional[int] + """ + The maximum quantity of this item the customer can purchase. By default this value is 99. You can specify a value up to 999999. + """ + minimum: Optional[int] + """ + The minimum quantity of this item the customer must purchase, if they choose to purchase it. Because this item is optional, the customer will always be able to remove it from their order, even if the `minimum` configured here is greater than 0. By default this value is 0. + """ + + adjustable_quantity: Optional[AdjustableQuantity] + price: str + quantity: int + _inner_class_types = {"adjustable_quantity": AdjustableQuantity} + + class PaymentMethodConfigurationDetails(StripeObject): + id: str + """ + ID of the payment method configuration used. + """ + parent: Optional[str] + """ + ID of the parent payment method configuration used. + """ + + class PaymentMethodOptions(StripeObject): + class AcssDebit(StripeObject): + class MandateOptions(StripeObject): + custom_mandate_url: Optional[str] + """ + A URL for custom mandate text + """ + default_for: Optional[List[Literal["invoice", "subscription"]]] + """ + List of Stripe products where this mandate can be selected automatically. Returned when the Session is in `setup` mode. + """ + interval_description: Optional[str] + """ + Description of the interval. Only required if the 'payment_schedule' parameter is 'interval' or 'combined'. + """ + payment_schedule: Optional[ + Literal["combined", "interval", "sporadic"] + ] + """ + Payment schedule for the mandate. + """ + transaction_type: Optional[Literal["business", "personal"]] + """ + Transaction type of the mandate. + """ + + currency: Optional[Literal["cad", "usd"]] + """ + Currency supported by the bank account. Returned when the Session is in `setup` mode. + """ + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: Optional[ + Literal["automatic", "instant", "microdeposits"] + ] + """ + Bank account verification method. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Affirm(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class AfterpayClearpay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Alipay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Alma(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class AmazonPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class AuBecsDebit(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + + class BacsDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'DDIC' or 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Bancontact(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Billie(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Boleto(StripeObject): + expires_after_days: int + """ + The number of calendar days before a Boleto voucher expires. For example, if you create a Boleto voucher on Monday and you set expires_after_days to 2, the Boleto voucher will expire on Wednesday at 23:59 America/Sao_Paulo time. + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Card(StripeObject): + class Installments(StripeObject): + enabled: Optional[bool] + """ + Indicates if installments are enabled + """ + + class Restrictions(StripeObject): + brands_blocked: Optional[ + List[ + Literal[ + "american_express", + "discover_global_network", + "mastercard", + "visa", + ] + ] + ] + """ + Specify the card brands to block in the Checkout Session. If a customer enters or selects a card belonging to a blocked brand, they can't complete the Session. + """ + + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + installments: Optional[Installments] + request_extended_authorization: Optional[ + Literal["if_available", "never"] + ] + """ + Request ability to [capture beyond the standard authorization validity window](https://docs.stripe.com/payments/extended-authorization) for this CheckoutSession. + """ + request_incremental_authorization: Optional[ + Literal["if_available", "never"] + ] + """ + Request ability to [increment the authorization](https://docs.stripe.com/payments/incremental-authorization) for this CheckoutSession. + """ + request_multicapture: Optional[Literal["if_available", "never"]] + """ + Request ability to make [multiple captures](https://docs.stripe.com/payments/multicapture) for this CheckoutSession. + """ + request_overcapture: Optional[Literal["if_available", "never"]] + """ + Request ability to [overcapture](https://docs.stripe.com/payments/overcapture) for this CheckoutSession. + """ + request_three_d_secure: Literal["any", "automatic", "challenge"] + """ + We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and [other requirements](https://stripe.com/docs/strong-customer-authentication). However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. If not provided, this value defaults to `automatic`. Read our guide on [manually requesting 3D Secure](https://stripe.com/docs/payments/3d-secure/authentication-flow#manual-three-ds) for more information on how this configuration interacts with Radar and our SCA Engine. + """ + restrictions: Optional[Restrictions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + statement_descriptor_suffix_kana: Optional[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kana prefix (shortened Kana descriptor) or Kana statement descriptor that's set on the account to form the complete statement descriptor. Maximum 22 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 22 characters. + """ + statement_descriptor_suffix_kanji: Optional[str] + """ + Provides information about a card payment that customers see on their statements. Concatenated with the Kanji prefix (shortened Kanji descriptor) or Kanji statement descriptor that's set on the account to form the complete statement descriptor. Maximum 17 characters. On card statements, the *concatenation* of both prefix and suffix (including separators) will appear truncated to 17 characters. + """ + _inner_class_types = { + "installments": Installments, + "restrictions": Restrictions, + } + + class Cashapp(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class CustomerBalance(StripeObject): + class BankTransfer(StripeObject): + class EuBankTransfer(StripeObject): + country: Literal["BE", "DE", "ES", "FR", "IE", "NL"] + """ + The desired country code of the bank account information. Permitted values include: `BE`, `DE`, `ES`, `FR`, `IE`, or `NL`. + """ + + eu_bank_transfer: Optional[EuBankTransfer] + requested_address_types: Optional[ + List[ + Literal[ + "aba", + "iban", + "sepa", + "sort_code", + "spei", + "swift", + "zengin", + ] + ] + ] + """ + List of address types that should be returned in the financial_addresses response. If not specified, all valid types will be returned. + + Permitted values include: `sort_code`, `zengin`, `iban`, or `spei`. + """ + type: Optional[ + Literal[ + "eu_bank_transfer", + "gb_bank_transfer", + "jp_bank_transfer", + "mx_bank_transfer", + "us_bank_transfer", + ] + ] + """ + The bank transfer type that this PaymentIntent is allowed to use for funding Permitted values include: `eu_bank_transfer`, `gb_bank_transfer`, `jp_bank_transfer`, `mx_bank_transfer`, or `us_bank_transfer`. + """ + _inner_class_types = {"eu_bank_transfer": EuBankTransfer} + + bank_transfer: Optional[BankTransfer] + funding_type: Optional[Literal["bank_transfer"]] + """ + The funding method type to be used when there are not enough funds in the customer balance. Permitted values include: `bank_transfer`. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + _inner_class_types = {"bank_transfer": BankTransfer} + + class Eps(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Fpx(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Giropay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Grabpay(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Ideal(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class KakaoPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Klarna(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Konbini(StripeObject): + expires_after_days: Optional[int] + """ + The number of calendar days (between 1 and 60) after which Konbini payment instructions will expire. For example, if a PaymentIntent is confirmed with Konbini and `expires_after_days` set to 2 on Monday JST, the instructions will expire on Wednesday 23:59:59 JST. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class KrCard(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Link(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Mobilepay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Multibanco(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class NaverPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Oxxo(StripeObject): + expires_after_days: int + """ + The number of calendar days before an OXXO invoice expires. For example, if you create an OXXO invoice on Monday and you set expires_after_days to 2, the OXXO invoice will expire on Wednesday at 23:59 America/Mexico_City time. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class P24(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Payco(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Paynow(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Paypal(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + preferred_locale: Optional[str] + """ + Preferred locale of the PayPal checkout page that the customer is redirected to. + """ + reference: Optional[str] + """ + A reference of the PayPal transaction visible to customer which is mapped to PayPal's invoice ID. This must be a globally unique ID if you have configured in your PayPal settings to block multiple payments per invoice ID. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Pix(StripeObject): + amount_includes_iof: Optional[Literal["always", "never"]] + """ + Determines if the amount includes the IOF tax. + """ + expires_after_seconds: Optional[int] + """ + The number of seconds after which Pix payment will expire. + """ + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class RevolutPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + setup_future_usage: Optional[Literal["none", "off_session"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class SamsungPay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class Satispay(StripeObject): + capture_method: Optional[Literal["manual"]] + """ + Controls when the funds will be captured from the customer's account. + """ + + class SepaDebit(StripeObject): + class MandateOptions(StripeObject): + reference_prefix: Optional[str] + """ + Prefix used to generate the Mandate reference. Must be at most 12 characters long. Must consist of only uppercase letters, numbers, spaces, or the following special characters: '/', '_', '-', '&', '.'. Cannot begin with 'STRIPE'. + """ + + mandate_options: Optional[MandateOptions] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + _inner_class_types = {"mandate_options": MandateOptions} + + class Sofort(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class Swish(StripeObject): + reference: Optional[str] + """ + The order reference that will be displayed to customers in the Swish application. Defaults to the `id` of the Payment Intent. + """ + + class Twint(StripeObject): + setup_future_usage: Optional[Literal["none"]] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + + class UsBankAccount(StripeObject): + class FinancialConnections(StripeObject): + class Filters(StripeObject): + account_subcategories: Optional[ + List[Literal["checking", "savings"]] + ] + """ + The account subcategories to use to filter for possible accounts to link. Valid subcategories are `checking` and `savings`. + """ + + filters: Optional[Filters] + permissions: Optional[ + List[ + Literal[ + "balances", + "ownership", + "payment_method", + "transactions", + ] + ] + ] + """ + The list of permissions to request. The `payment_method` permission must be included. + """ + prefetch: Optional[ + List[Literal["balances", "ownership", "transactions"]] + ] + """ + Data features requested to be retrieved upon account creation. + """ + return_url: Optional[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + _inner_class_types = {"filters": Filters} + + financial_connections: Optional[FinancialConnections] + setup_future_usage: Optional[ + Literal["none", "off_session", "on_session"] + ] + """ + Indicates that you intend to make future payments with this PaymentIntent's payment method. + + If you provide a Customer with the PaymentIntent, you can use this parameter to [attach the payment method](https://docs.stripe.com/payments/save-during-payment) to the Customer after the PaymentIntent is confirmed and the customer completes any required actions. If you don't provide a Customer, you can still [attach](https://docs.stripe.com/api/payment_methods/attach) the payment method to a Customer after the transaction completes. + + If the payment method is `card_present` and isn't a digital wallet, Stripe creates and attaches a [generated_card](https://docs.stripe.com/api/charges/object#charge_object-payment_method_details-card_present-generated_card) payment method representing the card to the Customer instead. + + When processing card payments, Stripe uses `setup_future_usage` to help you comply with regional legislation and network rules, such as [SCA](https://docs.stripe.com/strong-customer-authentication). + """ + target_date: Optional[str] + """ + Controls when Stripe will attempt to debit the funds from the customer's account. The date must be a string in YYYY-MM-DD format. The date must be in the future and between 3 and 15 calendar days from now. + """ + verification_method: Optional[Literal["automatic", "instant"]] + """ + Bank account verification method. + """ + _inner_class_types = { + "financial_connections": FinancialConnections + } + + acss_debit: Optional[AcssDebit] + affirm: Optional[Affirm] + afterpay_clearpay: Optional[AfterpayClearpay] + alipay: Optional[Alipay] + alma: Optional[Alma] + amazon_pay: Optional[AmazonPay] + au_becs_debit: Optional[AuBecsDebit] + bacs_debit: Optional[BacsDebit] + bancontact: Optional[Bancontact] + billie: Optional[Billie] + boleto: Optional[Boleto] + card: Optional[Card] + cashapp: Optional[Cashapp] + customer_balance: Optional[CustomerBalance] + eps: Optional[Eps] + fpx: Optional[Fpx] + giropay: Optional[Giropay] + grabpay: Optional[Grabpay] + ideal: Optional[Ideal] + kakao_pay: Optional[KakaoPay] + klarna: Optional[Klarna] + konbini: Optional[Konbini] + kr_card: Optional[KrCard] + link: Optional[Link] + mobilepay: Optional[Mobilepay] + multibanco: Optional[Multibanco] + naver_pay: Optional[NaverPay] + oxxo: Optional[Oxxo] + p24: Optional[P24] + payco: Optional[Payco] + paynow: Optional[Paynow] + paypal: Optional[Paypal] + pix: Optional[Pix] + revolut_pay: Optional[RevolutPay] + samsung_pay: Optional[SamsungPay] + satispay: Optional[Satispay] + sepa_debit: Optional[SepaDebit] + sofort: Optional[Sofort] + swish: Optional[Swish] + twint: Optional[Twint] + us_bank_account: Optional[UsBankAccount] + _inner_class_types = { + "acss_debit": AcssDebit, + "affirm": Affirm, + "afterpay_clearpay": AfterpayClearpay, + "alipay": Alipay, + "alma": Alma, + "amazon_pay": AmazonPay, + "au_becs_debit": AuBecsDebit, + "bacs_debit": BacsDebit, + "bancontact": Bancontact, + "billie": Billie, + "boleto": Boleto, + "card": Card, + "cashapp": Cashapp, + "customer_balance": CustomerBalance, + "eps": Eps, + "fpx": Fpx, + "giropay": Giropay, + "grabpay": Grabpay, + "ideal": Ideal, + "kakao_pay": KakaoPay, + "klarna": Klarna, + "konbini": Konbini, + "kr_card": KrCard, + "link": Link, + "mobilepay": Mobilepay, + "multibanco": Multibanco, + "naver_pay": NaverPay, + "oxxo": Oxxo, + "p24": P24, + "payco": Payco, + "paynow": Paynow, + "paypal": Paypal, + "pix": Pix, + "revolut_pay": RevolutPay, + "samsung_pay": SamsungPay, + "satispay": Satispay, + "sepa_debit": SepaDebit, + "sofort": Sofort, + "swish": Swish, + "twint": Twint, + "us_bank_account": UsBankAccount, + } + + class Permissions(StripeObject): + update_shipping_details: Optional[ + Literal["client_only", "server_only"] + ] + """ + Determines which entity is allowed to update the shipping details. + + Default is `client_only`. Stripe Checkout client will automatically update the shipping details. If set to `server_only`, only your server is allowed to update the shipping details. + + When set to `server_only`, you must add the onShippingDetailsChange event handler when initializing the Stripe Checkout client and manually update the shipping details from your server using the Stripe API. + """ + + class PhoneNumberCollection(StripeObject): + enabled: bool + """ + Indicates whether phone number collection is enabled for the session + """ + + class PresentmentDetails(StripeObject): + presentment_amount: int + """ + Amount intended to be collected by this payment, denominated in `presentment_currency`. + """ + presentment_currency: str + """ + Currency presented to the customer during payment. + """ + + class SavedPaymentMethodOptions(StripeObject): + allow_redisplay_filters: Optional[ + List[Literal["always", "limited", "unspecified"]] + ] + """ + Uses the `allow_redisplay` value of each saved payment method to filter the set presented to a returning customer. By default, only saved payment methods with 'allow_redisplay: ‘always' are shown in Checkout. + """ + payment_method_remove: Optional[Literal["disabled", "enabled"]] + """ + Enable customers to choose if they wish to remove their saved payment methods. Disabled by default. + """ + payment_method_save: Optional[Literal["disabled", "enabled"]] + """ + Enable customers to choose if they wish to save their payment method for future use. Disabled by default. + """ + + class ShippingAddressCollection(StripeObject): + allowed_countries: List[ + Literal[ + "AC", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CV", + "CW", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MK", + "ML", + "MM", + "MN", + "MO", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SZ", + "TA", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + "ZZ", + ] + ] + """ + An array of two-letter ISO country codes representing which countries Checkout should provide as options for + shipping locations. Unsupported country codes: `AS, CX, CC, CU, HM, IR, KP, MH, FM, NF, MP, PW, SY, UM, VI`. + """ + + class ShippingCost(StripeObject): + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + amount_subtotal: int + """ + Total shipping cost before any discounts or taxes are applied. + """ + amount_tax: int + """ + Total tax amount applied due to shipping costs. If no tax was applied, defaults to 0. + """ + amount_total: int + """ + Total shipping cost after discounts and taxes are applied. + """ + shipping_rate: Optional[ExpandableField["ShippingRate"]] + """ + The ID of the ShippingRate for this order. + """ + taxes: Optional[List[Tax]] + """ + The taxes applied to the shipping rate. + """ + _inner_class_types = {"taxes": Tax} + + class ShippingOption(StripeObject): + shipping_amount: int + """ + A non-negative integer in cents representing how much to charge. + """ + shipping_rate: ExpandableField["ShippingRate"] + """ + The shipping rate. + """ + + class TaxIdCollection(StripeObject): + enabled: bool + """ + Indicates whether tax ID collection is enabled for the session + """ + required: Literal["if_supported", "never"] + """ + Indicates whether a tax ID is required on the payment page + """ + + class TotalDetails(StripeObject): + class Breakdown(StripeObject): + class Discount(StripeObject): + amount: int + """ + The amount discounted. + """ + discount: "DiscountResource" + """ + A discount represents the actual application of a [coupon](https://stripe.com/docs/api#coupons) or [promotion code](https://stripe.com/docs/api#promotion_codes). + It contains information about when the discount began, when it will end, and what it is applied to. + + Related guide: [Applying discounts to subscriptions](https://stripe.com/docs/billing/subscriptions/discounts) + """ + + class Tax(StripeObject): + amount: int + """ + Amount of tax applied for this rate. + """ + rate: "TaxRate" + """ + Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax. + + Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates) + """ + taxability_reason: Optional[ + Literal[ + "customer_exempt", + "not_collecting", + "not_subject_to_tax", + "not_supported", + "portion_product_exempt", + "portion_reduced_rated", + "portion_standard_rated", + "product_exempt", + "product_exempt_holiday", + "proportionally_rated", + "reduced_rated", + "reverse_charge", + "standard_rated", + "taxable_basis_reduced", + "zero_rated", + ] + ] + """ + The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported. + """ + taxable_amount: Optional[int] + """ + The amount on which tax is calculated, in cents (or local equivalent). + """ + + discounts: List[Discount] + """ + The aggregated discounts. + """ + taxes: List[Tax] + """ + The aggregated tax amounts by rate. + """ + _inner_class_types = {"discounts": Discount, "taxes": Tax} + + amount_discount: int + """ + This is the sum of all the discounts. + """ + amount_shipping: Optional[int] + """ + This is the sum of all the shipping amounts. + """ + amount_tax: int + """ + This is the sum of all the tax amounts. + """ + breakdown: Optional[Breakdown] + _inner_class_types = {"breakdown": Breakdown} + + class WalletOptions(StripeObject): + class Link(StripeObject): + display: Optional[Literal["auto", "never"]] + """ + Describes whether Checkout should display Link. Defaults to `auto`. + """ + + link: Optional[Link] + _inner_class_types = {"link": Link} + + adaptive_pricing: Optional[AdaptivePricing] + """ + Settings for price localization with [Adaptive Pricing](https://docs.stripe.com/payments/checkout/adaptive-pricing). + """ + after_expiration: Optional[AfterExpiration] + """ + When set, provides configuration for actions to take if this Checkout Session expires. + """ + allow_promotion_codes: Optional[bool] + """ + Enables user redeemable promotion codes. + """ + amount_subtotal: Optional[int] + """ + Total of all items before discounts or taxes are applied. + """ + amount_total: Optional[int] + """ + Total of all items after discounts and taxes are applied. + """ + automatic_tax: AutomaticTax + billing_address_collection: Optional[Literal["auto", "required"]] + """ + Describes whether Checkout should collect the customer's billing address. Defaults to `auto`. + """ + branding_settings: Optional[BrandingSettings] + cancel_url: Optional[str] + """ + If set, Checkout displays a back button and customers will be directed to this URL if they decide to cancel payment and return to your website. + """ + client_reference_id: Optional[str] + """ + A unique string to reference the Checkout Session. This can be a + customer ID, a cart ID, or similar, and can be used to reconcile the + Session with your internal systems. + """ + client_secret: Optional[str] + """ + The client secret of your Checkout Session. Applies to Checkout Sessions with `ui_mode: embedded` or `ui_mode: custom`. For `ui_mode: embedded`, the client secret is to be used when initializing Stripe.js embedded checkout. + For `ui_mode: custom`, use the client secret with [initCheckout](https://stripe.com/docs/js/custom_checkout/init) on your front end. + """ + collected_information: Optional[CollectedInformation] + """ + Information about the customer collected within the Checkout Session. + """ + consent: Optional[Consent] + """ + Results of `consent_collection` for this session. + """ + consent_collection: Optional[ConsentCollection] + """ + When set, provides configuration for the Checkout Session to gather active consent from customers. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: Optional[str] + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + currency_conversion: Optional[CurrencyConversion] + """ + Currency conversion details for [Adaptive Pricing](https://docs.stripe.com/payments/checkout/adaptive-pricing) sessions created before 2025-03-31. + """ + custom_fields: List[CustomField] + """ + Collect additional information from your customer using custom fields. Up to 3 fields are supported. + """ + custom_text: CustomText + customer: Optional[ExpandableField["Customer"]] + """ + The ID of the customer for this Session. + For Checkout Sessions in `subscription` mode or Checkout Sessions with `customer_creation` set as `always` in `payment` mode, Checkout + will create a new customer object based on information provided + during the payment flow unless an existing customer was provided when + the Session was created. + """ + customer_creation: Optional[Literal["always", "if_required"]] + """ + Configure whether a Checkout Session creates a Customer when the Checkout Session completes. + """ + customer_details: Optional[CustomerDetails] + """ + The customer details including the customer's tax exempt status and the customer's tax IDs. Customer's address details are not present on Sessions in `setup` mode. + """ + customer_email: Optional[str] + """ + If provided, this value will be used when the Customer object is created. + If not provided, customers will be asked to enter their email address. + Use this parameter to prefill customer data if you already have an email + on file. To access information about the customer once the payment flow is + complete, use the `customer` attribute. + """ + discounts: Optional[List[Discount]] + """ + List of coupons and promotion codes attached to the Checkout Session. + """ + excluded_payment_method_types: Optional[List[str]] + """ + A list of the types of payment methods (e.g., `card`) that should be excluded from this Checkout Session. This should only be used when payment methods for this Checkout Session are managed through the [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods). + """ + expires_at: int + """ + The timestamp at which the Checkout Session will expire. + """ + id: str + """ + Unique identifier for the object. + """ + invoice: Optional[ExpandableField["Invoice"]] + """ + ID of the invoice created by the Checkout Session, if it exists. + """ + invoice_creation: Optional[InvoiceCreation] + """ + Details on the state of invoice creation for the Checkout Session. + """ + line_items: Optional[ListObject["LineItem"]] + """ + The line items purchased by the customer. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + locale: Optional[ + Literal[ + "auto", + "bg", + "cs", + "da", + "de", + "el", + "en", + "en-GB", + "es", + "es-419", + "et", + "fi", + "fil", + "fr", + "fr-CA", + "hr", + "hu", + "id", + "it", + "ja", + "ko", + "lt", + "lv", + "ms", + "mt", + "nb", + "nl", + "pl", + "pt", + "pt-BR", + "ro", + "ru", + "sk", + "sl", + "sv", + "th", + "tr", + "vi", + "zh", + "zh-HK", + "zh-TW", + ] + ] + """ + The IETF language tag of the locale Checkout is displayed in. If blank or `auto`, the browser's locale is used. + """ + metadata: Optional[Dict[str, str]] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + mode: Literal["payment", "setup", "subscription"] + """ + The mode of the Checkout Session. + """ + name_collection: Optional[NameCollection] + object: Literal["checkout.session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + optional_items: Optional[List[OptionalItem]] + """ + The optional items presented to the customer at checkout. + """ + origin_context: Optional[Literal["mobile_app", "web"]] + """ + Where the user is coming from. This informs the optimizations that are applied to the session. + """ + payment_intent: Optional[ExpandableField["PaymentIntent"]] + """ + The ID of the PaymentIntent for Checkout Sessions in `payment` mode. You can't confirm or cancel the PaymentIntent for a Checkout Session. To cancel, [expire the Checkout Session](https://stripe.com/docs/api/checkout/sessions/expire) instead. + """ + payment_link: Optional[ExpandableField["PaymentLink"]] + """ + The ID of the Payment Link that created this Session. + """ + payment_method_collection: Optional[Literal["always", "if_required"]] + """ + Configure whether a Checkout Session should collect a payment method. Defaults to `always`. + """ + payment_method_configuration_details: Optional[ + PaymentMethodConfigurationDetails + ] + """ + Information about the payment method configuration used for this Checkout session if using dynamic payment methods. + """ + payment_method_options: Optional[PaymentMethodOptions] + """ + Payment-method-specific configuration for the PaymentIntent or SetupIntent of this CheckoutSession. + """ + payment_method_types: List[str] + """ + A list of the types of payment methods (e.g. card) this Checkout + Session is allowed to accept. + """ + payment_status: Literal["no_payment_required", "paid", "unpaid"] + """ + The payment status of the Checkout Session, one of `paid`, `unpaid`, or `no_payment_required`. + You can use this value to decide when to fulfill your customer's order. + """ + permissions: Optional[Permissions] + """ + This property is used to set up permissions for various actions (e.g., update) on the CheckoutSession object. + + For specific permissions, please refer to their dedicated subsections, such as `permissions.update_shipping_details`. + """ + phone_number_collection: Optional[PhoneNumberCollection] + presentment_details: Optional[PresentmentDetails] + recovered_from: Optional[str] + """ + The ID of the original expired Checkout Session that triggered the recovery flow. + """ + redirect_on_completion: Optional[Literal["always", "if_required", "never"]] + """ + This parameter applies to `ui_mode: embedded`. Learn more about the [redirect behavior](https://stripe.com/docs/payments/checkout/custom-success-page?payment-ui=embedded-form) of embedded sessions. Defaults to `always`. + """ + return_url: Optional[str] + """ + Applies to Checkout Sessions with `ui_mode: embedded` or `ui_mode: custom`. The URL to redirect your customer back to after they authenticate or cancel their payment on the payment method's app or site. + """ + saved_payment_method_options: Optional[SavedPaymentMethodOptions] + """ + Controls saved payment method settings for the session. Only available in `payment` and `subscription` mode. + """ + setup_intent: Optional[ExpandableField["SetupIntent"]] + """ + The ID of the SetupIntent for Checkout Sessions in `setup` mode. You can't confirm or cancel the SetupIntent for a Checkout Session. To cancel, [expire the Checkout Session](https://stripe.com/docs/api/checkout/sessions/expire) instead. + """ + shipping_address_collection: Optional[ShippingAddressCollection] + """ + When set, provides configuration for Checkout to collect a shipping address from a customer. + """ + shipping_cost: Optional[ShippingCost] + """ + The details of the customer cost of shipping, including the customer chosen ShippingRate. + """ + shipping_options: List[ShippingOption] + """ + The shipping rate options applied to this Session. + """ + status: Optional[Literal["complete", "expired", "open"]] + """ + The status of the Checkout Session, one of `open`, `complete`, or `expired`. + """ + submit_type: Optional[ + Literal["auto", "book", "donate", "pay", "subscribe"] + ] + """ + Describes the type of transaction being performed by Checkout in order to customize + relevant text on the page, such as the submit button. `submit_type` can only be + specified on Checkout Sessions in `payment` mode. If blank or `auto`, `pay` is used. + """ + subscription: Optional[ExpandableField["Subscription"]] + """ + The ID of the [Subscription](https://stripe.com/docs/api/subscriptions) for Checkout Sessions in `subscription` mode. + """ + success_url: Optional[str] + """ + The URL the customer will be directed to after the payment or + subscription creation is successful. + """ + tax_id_collection: Optional[TaxIdCollection] + total_details: Optional[TotalDetails] + """ + Tax and discount details for the computed total amount. + """ + ui_mode: Optional[Literal["custom", "embedded", "hosted"]] + """ + The UI mode of the Session. Defaults to `hosted`. + """ + url: Optional[str] + """ + The URL to the Checkout Session. Applies to Checkout Sessions with `ui_mode: hosted`. Redirect customers to this URL to take them to Checkout. If you're using [Custom Domains](https://stripe.com/docs/payments/checkout/custom-domains), the URL will use your subdomain. Otherwise, it'll use `checkout.stripe.com.` + This value is only present when the session is active. + """ + wallet_options: Optional[WalletOptions] + """ + Wallet-specific configuration for this Checkout Session. + """ + + @classmethod + def create(cls, **params: Unpack["SessionCreateParams"]) -> "Session": + """ + Creates a Checkout Session object. + """ + return cast( + "Session", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SessionCreateParams"] + ) -> "Session": + """ + Creates a Checkout Session object. + """ + return cast( + "Session", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def _cls_expire( + cls, session: str, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + cls._static_request( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + def expire( + session: str, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + ... + + @overload + def expire(self, **params: Unpack["SessionExpireParams"]) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + ... + + @class_method_variant("_cls_expire") + def expire( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + self._request( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_expire_async( + cls, session: str, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + await cls._static_request_async( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def expire_async( + session: str, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + ... + + @overload + async def expire_async( + self, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + ... + + @class_method_variant("_cls_expire_async") + async def expire_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SessionExpireParams"] + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["SessionListParams"] + ) -> ListObject["Session"]: + """ + Returns a list of Checkout Sessions. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SessionListParams"] + ) -> ListObject["Session"]: + """ + Returns a list of Checkout Sessions. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_list_line_items( + cls, session: str, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + cls._static_request( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_line_items( + session: str, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + def list_line_items( + self, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items") + def list_line_items( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + self._request( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_line_items_async( + cls, session: str, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await cls._static_request_async( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_line_items_async( + session: str, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @overload + async def list_line_items_async( + self, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + ... + + @class_method_variant("_cls_list_line_items_async") + async def list_line_items_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["SessionListLineItemsParams"] + ) -> ListObject["LineItem"]: + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + ListObject["LineItem"], + await self._request_async( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def modify( + cls, id: str, **params: Unpack["SessionModifyParams"] + ) -> "Session": + """ + Updates a Checkout Session object. + + Related guide: [Dynamically update Checkout](https://docs.stripe.com/payments/checkout/dynamic-updates) + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Session", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["SessionModifyParams"] + ) -> "Session": + """ + Updates a Checkout Session object. + + Related guide: [Dynamically update Checkout](https://docs.stripe.com/payments/checkout/dynamic-updates) + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Session", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SessionRetrieveParams"] + ) -> "Session": + """ + Retrieves a Checkout Session object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SessionRetrieveParams"] + ) -> "Session": + """ + Retrieves a Checkout Session object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "adaptive_pricing": AdaptivePricing, + "after_expiration": AfterExpiration, + "automatic_tax": AutomaticTax, + "branding_settings": BrandingSettings, + "collected_information": CollectedInformation, + "consent": Consent, + "consent_collection": ConsentCollection, + "currency_conversion": CurrencyConversion, + "custom_fields": CustomField, + "custom_text": CustomText, + "customer_details": CustomerDetails, + "discounts": Discount, + "invoice_creation": InvoiceCreation, + "name_collection": NameCollection, + "optional_items": OptionalItem, + "payment_method_configuration_details": PaymentMethodConfigurationDetails, + "payment_method_options": PaymentMethodOptions, + "permissions": Permissions, + "phone_number_collection": PhoneNumberCollection, + "presentment_details": PresentmentDetails, + "saved_payment_method_options": SavedPaymentMethodOptions, + "shipping_address_collection": ShippingAddressCollection, + "shipping_cost": ShippingCost, + "shipping_options": ShippingOption, + "tax_id_collection": TaxIdCollection, + "total_details": TotalDetails, + "wallet_options": WalletOptions, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_line_item_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_line_item_service.py new file mode 100644 index 00000000..e056ae2b --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_line_item_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._line_item import LineItem + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.params.checkout._session_line_item_list_params import ( + SessionLineItemListParams, + ) + + +class SessionLineItemService(StripeService): + def list( + self, + session: str, + params: Optional["SessionLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + self._request( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + session: str, + params: Optional["SessionLineItemListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[LineItem]": + """ + When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items. + """ + return cast( + "ListObject[LineItem]", + await self._request_async( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_service.py new file mode 100644 index 00000000..afe68a85 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/checkout/_session_service.py @@ -0,0 +1,274 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.checkout._session import Session + from stripe.checkout._session_line_item_service import ( + SessionLineItemService, + ) + from stripe.params.checkout._session_create_params import ( + SessionCreateParams, + ) + from stripe.params.checkout._session_expire_params import ( + SessionExpireParams, + ) + from stripe.params.checkout._session_list_params import SessionListParams + from stripe.params.checkout._session_retrieve_params import ( + SessionRetrieveParams, + ) + from stripe.params.checkout._session_update_params import ( + SessionUpdateParams, + ) + +_subservices = { + "line_items": [ + "stripe.checkout._session_line_item_service", + "SessionLineItemService", + ], +} + + +class SessionService(StripeService): + line_items: "SessionLineItemService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["SessionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Session]": + """ + Returns a list of Checkout Sessions. + """ + return cast( + "ListObject[Session]", + self._request( + "get", + "/v1/checkout/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["SessionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Session]": + """ + Returns a list of Checkout Sessions. + """ + return cast( + "ListObject[Session]", + await self._request_async( + "get", + "/v1/checkout/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["SessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Creates a Checkout Session object. + """ + return cast( + "Session", + self._request( + "post", + "/v1/checkout/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["SessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Creates a Checkout Session object. + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/checkout/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + session: str, + params: Optional["SessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Retrieves a Checkout Session object. + """ + return cast( + "Session", + self._request( + "get", + "/v1/checkout/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + session: str, + params: Optional["SessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Retrieves a Checkout Session object. + """ + return cast( + "Session", + await self._request_async( + "get", + "/v1/checkout/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + session: str, + params: Optional["SessionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Updates a Checkout Session object. + + Related guide: [Dynamically update Checkout](https://docs.stripe.com/payments/checkout/dynamic-updates) + """ + return cast( + "Session", + self._request( + "post", + "/v1/checkout/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + session: str, + params: Optional["SessionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Updates a Checkout Session object. + + Related guide: [Dynamically update Checkout](https://docs.stripe.com/payments/checkout/dynamic-updates) + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/checkout/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def expire( + self, + session: str, + params: Optional["SessionExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + self._request( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def expire_async( + self, + session: str, + params: Optional["SessionExpireParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + A Checkout Session can be expired when it is in one of these statuses: open + + After it expires, a customer can't complete a Checkout Session and customers loading the Checkout Session see a message saying the Checkout Session is expired. + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/__init__.py new file mode 100644 index 00000000..18b3c174 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/__init__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.climate._order import Order as Order + from stripe.climate._order_service import OrderService as OrderService + from stripe.climate._product import Product as Product + from stripe.climate._product_service import ( + ProductService as ProductService, + ) + from stripe.climate._supplier import Supplier as Supplier + from stripe.climate._supplier_service import ( + SupplierService as SupplierService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Order": ("stripe.climate._order", False), + "OrderService": ("stripe.climate._order_service", False), + "Product": ("stripe.climate._product", False), + "ProductService": ("stripe.climate._product_service", False), + "Supplier": ("stripe.climate._supplier", False), + "SupplierService": ("stripe.climate._supplier_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48323d248e8984f9d7e0212c059381639c45ef5e GIT binary patch literal 1392 zcmah{&2JM&6o30^JKnWTY70~ za-;}V6-RDdKYG_xAVkVr?VI15_c3qY{C+jf89+(@ zo%eehz@OZhN?`)VKOuMs9(Ym!q2x#s$8sQtilazC6uN}A5~!i(Xu_ukdRTA@0&77r zEIB2C^EKWp}H z-jpR}rXMCTWo{UITLIx4-`~2v;$FGBa^>3BYhU4p_8s*IMPLZ9PUyDZ<&lN!6qC9P zVPyi}IE(9BNfP)Xu{y<5w|uveGU_L!-3|P(!${kW`5~*8e0Sl!9yiU8o5MkIM3 z+;{2--`n{o-i=8ot?~lRqnvLl=oDWVsLmCCTUz9*#1$t&S3)%v6@h~Pcn{S>C;`JY zmjRqa@PiDnEA7gRM+q57`;!X0%0Q;_Kv@UIPt3i_0QND5%R01x@iv4k0YyeI-iMI= z$$C$^13StsxFcE8nx$oBclzX=gz{6fLXWTxV>ByXBmEUhW13YiqwQ~OF(PbB&D5w9 zl1yhEiqV}?Wl+kwAfCw+E1j?TBwePX9RBWDu~==4Zx=kH-ph+@00ANkC6+esg9;!Zku zUE0927w}JSqS}LzTrRbqx7xq3r>zT5jpqH;2j4z#EdKoIv&QNBtG`!29?mU1F#q~! zepov`tkuVwQm>3aF)OcM7NK_HACNG8w)t#!@i${}q@Z<}8d&+>yakWT7CfncuB=(J zSt%bTULl|5G1gD;f-c!%Buf1_N-3X8_I|<(CT0Imc|o-7DAEfCW*?%xplEg^@dbIa z4^m&yoAN1$X+ME6LZEe2hsBFI2QJYjnw-Gt4OBQeNqVJ&v~&Px{!nTM>V*UKn*;T; zSF)_>=+G_+G%}#l9@Z}otLKKtzZlle59gL&n1!mmSAJ20Vq>ftT5F^sqNlLze>2pK A7Vu=WXgT;SHExf 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 AEdT%j literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_product_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_product_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3878b8ba81e953f218a13fa15e463d07ccd32c0a GIT binary patch literal 3054 zcmbtW-ES0C6uHyS~`8{ssCU_(J0Yn~9AYU(}~H3u^YsbMMUbgJM9OhcoBibI!eY&hPxr zo$r!K4Z-97*>B&DBlHU$M2{3I?N32jKo+t%2UWQ;$5EYk_^MDAm@YVCRVqtWxh%7> z=)|f@S>X^?$RPMij#|~q8nekxyqYK{m>zSI)l@mfbj9ha>Sdkjs*|o}${7yv=nS&7 zd&r7oZb=BvQ_jvN^2y)mAkX>9D;}{M_zEU7b_K&k+%;>qXU}27w(`8Mj5R#FUNaqE zteCDxBi?!U(rM%5+0!S_pDUe#3GIUIdSm0)aD|#vm+_5h3==HQg_+nTQn#j=F&(Nj z;*v?sDz*27lb10Z1<&BXPzg>ONHrX^mqA%T7?n8-m3bAZ$m+6qELcJxSS%4ViD|MG zn~*K#o>Uf}>7{~~6nbe`X6wbbte2QjtR#5Gp35@@p2{qj*ZoxZd0~o6zT9A6PM}_p zAFBs>BJ>k|nP6|4)H>Pql)e{+U#*1rfgeJ&>gc$A0>lFHIC!zg;^xt{jh@jwZwZz- z&&~78(o$HNOMGCwg7R|bn3fA4y0@D%9Vchbn6_h%J2-dJv8$$sbBzGXT%Ez~7S@7D z2G;V0N$hpHi!-CeN)S*C16*G)8}_2$C&o<|8>VFu?7E~2f`|?x&l8z0pco`5A8-|2 z>`bh?xb&;wh#jXmRj=aWWbIb*6n3wB^+xe*-NVkviF*CIU7IYPFe}$_%_`2|+Dy^0 z$BT_wZ>nB_9=-M70X@G+{iQS^hihu2}MtEAo4d_s4%=)4O>6pugD1;yu=wueo zF&HC<|=tswwhffmKu^jz-~a7Tut;O~||0MZ%8i=K_VIQURMvZ5dPVaL9& zV&CsL*b-3sjW*)bnU;(OcZZDWVvJEJW8#!CaaAKju;dn8@4{sJK8XLqnE#J0a4hx= zjwxgh9E(+Bz%fb!vX6>2C`u6)JL&W*RM2dbJcuXqo{G{Nl5OB$vLBeo=mNBn1cZxV z*hIMJ1cFjgp;X+2MoWZY$E8(r=jd^n`-VF%YTv4$<@r)6uRFXBCX#9bHvK0K1=v zjMJX&uu}46Z?*xKVvuWg$EJfB1K;v+&4r&km(afEXQN=&(t{hGDAdv$S;EWN*!0s9 zS;H&85Z$7z^!?#5Hu&i&Jn3Yx%{KlK6`m2W#)B}3^?X(zqj1*sn&~KS1!Z@Pya@){ zuHC~RS^~#$k7dM-uA-NJL_1f}{+|VXRV=KEudj;5Rq?`Oo|oiD+S?qb-M{)6(KlQ6 EAB4~31poj5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_supplier.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/climate/__pycache__/_supplier.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e67ee6d4d1fa667f48797d9b92ff047fd1ca5252 GIT binary patch literal 3918 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order.py new file mode 100644 index 00000000..477690ee --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order.py @@ -0,0 +1,437 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.climate._product import Product + from stripe.climate._supplier import Supplier + from stripe.params.climate._order_cancel_params import OrderCancelParams + from stripe.params.climate._order_create_params import OrderCreateParams + from stripe.params.climate._order_list_params import OrderListParams + from stripe.params.climate._order_modify_params import OrderModifyParams + from stripe.params.climate._order_retrieve_params import ( + OrderRetrieveParams, + ) + + +class Order( + CreateableAPIResource["Order"], + ListableAPIResource["Order"], + UpdateableAPIResource["Order"], +): + """ + Orders represent your intent to purchase a particular Climate product. When you create an order, the + payment is deducted from your merchant balance. + """ + + OBJECT_NAME: ClassVar[Literal["climate.order"]] = "climate.order" + + class Beneficiary(StripeObject): + public_name: str + """ + Publicly displayable name for the end beneficiary of carbon removal. + """ + + class DeliveryDetail(StripeObject): + class Location(StripeObject): + city: Optional[str] + """ + The city where the supplier is located. + """ + country: str + """ + Two-letter ISO code representing the country where the supplier is located. + """ + latitude: Optional[float] + """ + The geographic latitude where the supplier is located. + """ + longitude: Optional[float] + """ + The geographic longitude where the supplier is located. + """ + region: Optional[str] + """ + The state/county/province/region where the supplier is located. + """ + + delivered_at: int + """ + Time at which the delivery occurred. Measured in seconds since the Unix epoch. + """ + location: Optional[Location] + """ + Specific location of this delivery. + """ + metric_tons: str + """ + Quantity of carbon removal supplied by this delivery. + """ + registry_url: Optional[str] + """ + Once retired, a URL to the registry entry for the tons from this delivery. + """ + supplier: "Supplier" + """ + A supplier of carbon removal. + """ + _inner_class_types = {"location": Location} + + amount_fees: int + """ + Total amount of [Frontier](https://frontierclimate.com/)'s service fees in the currency's smallest unit. + """ + amount_subtotal: int + """ + Total amount of the carbon removal in the currency's smallest unit. + """ + amount_total: int + """ + Total amount of the order including fees in the currency's smallest unit. + """ + beneficiary: Optional[Beneficiary] + canceled_at: Optional[int] + """ + Time at which the order was canceled. Measured in seconds since the Unix epoch. + """ + cancellation_reason: Optional[ + Literal["expired", "product_unavailable", "requested"] + ] + """ + Reason for the cancellation of this order. + """ + certificate: Optional[str] + """ + For delivered orders, a URL to a delivery certificate for the order. + """ + confirmed_at: Optional[int] + """ + Time at which the order was confirmed. Measured in seconds since the Unix epoch. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase, representing the currency for this order. + """ + delayed_at: Optional[int] + """ + Time at which the order's expected_delivery_year was delayed. Measured in seconds since the Unix epoch. + """ + delivered_at: Optional[int] + """ + Time at which the order was delivered. Measured in seconds since the Unix epoch. + """ + delivery_details: List[DeliveryDetail] + """ + Details about the delivery of carbon removal for this order. + """ + expected_delivery_year: int + """ + The year this order is expected to be delivered. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + metric_tons: str + """ + Quantity of carbon removal that is included in this order. + """ + object: Literal["climate.order"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + product: ExpandableField["Product"] + """ + Unique ID for the Climate `Product` this order is purchasing. + """ + product_substituted_at: Optional[int] + """ + Time at which the order's product was substituted for a different product. Measured in seconds since the Unix epoch. + """ + status: Literal[ + "awaiting_funds", "canceled", "confirmed", "delivered", "open" + ] + """ + The current status of this order. + """ + + @classmethod + def _cls_cancel( + cls, order: str, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + cls._static_request( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(order) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel(order: str, **params: Unpack["OrderCancelParams"]) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + ... + + @overload + def cancel(self, **params: Unpack["OrderCancelParams"]) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + self._request( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, order: str, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + await cls._static_request_async( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(order) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + order: str, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["OrderCancelParams"] + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + await self._request_async( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create(cls, **params: Unpack["OrderCreateParams"]) -> "Order": + """ + Creates a Climate order object for a given Climate product. The order will be processed immediately + after creation and payment will be deducted your Stripe balance. + """ + return cast( + "Order", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["OrderCreateParams"] + ) -> "Order": + """ + Creates a Climate order object for a given Climate product. The order will be processed immediately + after creation and payment will be deducted your Stripe balance. + """ + return cast( + "Order", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["OrderListParams"]) -> ListObject["Order"]: + """ + Lists all Climate order objects. The orders are returned sorted by creation date, with the + most recently created orders appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["OrderListParams"] + ) -> ListObject["Order"]: + """ + Lists all Climate order objects. The orders are returned sorted by creation date, with the + most recently created orders appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["OrderModifyParams"]) -> "Order": + """ + Updates the specified order by setting the values of the parameters passed. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Order", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["OrderModifyParams"] + ) -> "Order": + """ + Updates the specified order by setting the values of the parameters passed. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Order", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["OrderRetrieveParams"] + ) -> "Order": + """ + Retrieves the details of a Climate order object with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["OrderRetrieveParams"] + ) -> "Order": + """ + Retrieves the details of a Climate order object with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "beneficiary": Beneficiary, + "delivery_details": DeliveryDetail, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order_service.py new file mode 100644 index 00000000..0eb3b485 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_order_service.py @@ -0,0 +1,230 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.climate._order import Order + from stripe.params.climate._order_cancel_params import OrderCancelParams + from stripe.params.climate._order_create_params import OrderCreateParams + from stripe.params.climate._order_list_params import OrderListParams + from stripe.params.climate._order_retrieve_params import ( + OrderRetrieveParams, + ) + from stripe.params.climate._order_update_params import OrderUpdateParams + + +class OrderService(StripeService): + def list( + self, + params: Optional["OrderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Order]": + """ + Lists all Climate order objects. The orders are returned sorted by creation date, with the + most recently created orders appearing first. + """ + return cast( + "ListObject[Order]", + self._request( + "get", + "/v1/climate/orders", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["OrderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Order]": + """ + Lists all Climate order objects. The orders are returned sorted by creation date, with the + most recently created orders appearing first. + """ + return cast( + "ListObject[Order]", + await self._request_async( + "get", + "/v1/climate/orders", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "OrderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Creates a Climate order object for a given Climate product. The order will be processed immediately + after creation and payment will be deducted your Stripe balance. + """ + return cast( + "Order", + self._request( + "post", + "/v1/climate/orders", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "OrderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Creates a Climate order object for a given Climate product. The order will be processed immediately + after creation and payment will be deducted your Stripe balance. + """ + return cast( + "Order", + await self._request_async( + "post", + "/v1/climate/orders", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + order: str, + params: Optional["OrderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Retrieves the details of a Climate order object with the given ID. + """ + return cast( + "Order", + self._request( + "get", + "/v1/climate/orders/{order}".format(order=sanitize_id(order)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + order: str, + params: Optional["OrderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Retrieves the details of a Climate order object with the given ID. + """ + return cast( + "Order", + await self._request_async( + "get", + "/v1/climate/orders/{order}".format(order=sanitize_id(order)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + order: str, + params: Optional["OrderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Updates the specified order by setting the values of the parameters passed. + """ + return cast( + "Order", + self._request( + "post", + "/v1/climate/orders/{order}".format(order=sanitize_id(order)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + order: str, + params: Optional["OrderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Updates the specified order by setting the values of the parameters passed. + """ + return cast( + "Order", + await self._request_async( + "post", + "/v1/climate/orders/{order}".format(order=sanitize_id(order)), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + order: str, + params: Optional["OrderCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + self._request( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(order), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + order: str, + params: Optional["OrderCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Order": + """ + Cancels a Climate order. You can cancel an order within 24 hours of creation. Stripe refunds the + reservation amount_subtotal, but not the amount_fees for user-triggered cancellations. Frontier + might cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe + provides 90 days advance notice and refunds the amount_total. + """ + return cast( + "Order", + await self._request_async( + "post", + "/v1/climate/orders/{order}/cancel".format( + order=sanitize_id(order), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product.py new file mode 100644 index 00000000..613352ec --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Dict, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.climate._supplier import Supplier + from stripe.params.climate._product_list_params import ProductListParams + from stripe.params.climate._product_retrieve_params import ( + ProductRetrieveParams, + ) + + +class Product(ListableAPIResource["Product"]): + """ + A Climate product represents a type of carbon removal unit available for reservation. + You can retrieve it to see the current price and availability. + """ + + OBJECT_NAME: ClassVar[Literal["climate.product"]] = "climate.product" + + class CurrentPricesPerMetricTon(StripeObject): + amount_fees: int + """ + Fees for one metric ton of carbon removal in the currency's smallest unit. + """ + amount_subtotal: int + """ + Subtotal for one metric ton of carbon removal (excluding fees) in the currency's smallest unit. + """ + amount_total: int + """ + Total for one metric ton of carbon removal (including fees) in the currency's smallest unit. + """ + + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + current_prices_per_metric_ton: Dict[str, CurrentPricesPerMetricTon] + """ + Current prices for a metric ton of carbon removal in a currency's smallest unit. + """ + delivery_year: Optional[int] + """ + The year in which the carbon removal is expected to be delivered. + """ + id: str + """ + Unique identifier for the object. For convenience, Climate product IDs are human-readable strings + that start with `climsku_`. See [carbon removal inventory](https://stripe.com/docs/climate/orders/carbon-removal-inventory) + for a list of available carbon removal products. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metric_tons_available: str + """ + The quantity of metric tons available for reservation. + """ + name: str + """ + The Climate product's name. + """ + object: Literal["climate.product"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + suppliers: List["Supplier"] + """ + The carbon removal suppliers that fulfill orders for this Climate product. + """ + + @classmethod + def list( + cls, **params: Unpack["ProductListParams"] + ) -> ListObject["Product"]: + """ + Lists all available Climate product objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ProductListParams"] + ) -> ListObject["Product"]: + """ + Lists all available Climate product objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ProductRetrieveParams"] + ) -> "Product": + """ + Retrieves the details of a Climate product with the given ID. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ProductRetrieveParams"] + ) -> "Product": + """ + Retrieves the details of a Climate product with the given ID. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "current_prices_per_metric_ton": CurrentPricesPerMetricTon, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product_service.py new file mode 100644 index 00000000..d58cd419 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_product_service.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.climate._product import Product + from stripe.params.climate._product_list_params import ProductListParams + from stripe.params.climate._product_retrieve_params import ( + ProductRetrieveParams, + ) + + +class ProductService(StripeService): + def list( + self, + params: Optional["ProductListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Product]": + """ + Lists all available Climate product objects. + """ + return cast( + "ListObject[Product]", + self._request( + "get", + "/v1/climate/products", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["ProductListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Product]": + """ + Lists all available Climate product objects. + """ + return cast( + "ListObject[Product]", + await self._request_async( + "get", + "/v1/climate/products", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + product: str, + params: Optional["ProductRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Retrieves the details of a Climate product with the given ID. + """ + return cast( + "Product", + self._request( + "get", + "/v1/climate/products/{product}".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + product: str, + params: Optional["ProductRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Product": + """ + Retrieves the details of a Climate product with the given ID. + """ + return cast( + "Product", + await self._request_async( + "get", + "/v1/climate/products/{product}".format( + product=sanitize_id(product), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier.py new file mode 100644 index 00000000..d65e2100 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.climate._supplier_list_params import SupplierListParams + from stripe.params.climate._supplier_retrieve_params import ( + SupplierRetrieveParams, + ) + + +class Supplier(ListableAPIResource["Supplier"]): + """ + A supplier of carbon removal. + """ + + OBJECT_NAME: ClassVar[Literal["climate.supplier"]] = "climate.supplier" + + class Location(StripeObject): + city: Optional[str] + """ + The city where the supplier is located. + """ + country: str + """ + Two-letter ISO code representing the country where the supplier is located. + """ + latitude: Optional[float] + """ + The geographic latitude where the supplier is located. + """ + longitude: Optional[float] + """ + The geographic longitude where the supplier is located. + """ + region: Optional[str] + """ + The state/county/province/region where the supplier is located. + """ + + id: str + """ + Unique identifier for the object. + """ + info_url: str + """ + Link to a webpage to learn more about the supplier. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + locations: List[Location] + """ + The locations in which this supplier operates. + """ + name: str + """ + Name of this carbon removal supplier. + """ + object: Literal["climate.supplier"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + removal_pathway: Literal[ + "biomass_carbon_removal_and_storage", + "direct_air_capture", + "enhanced_weathering", + ] + """ + The scientific pathway used for carbon removal. + """ + + @classmethod + def list( + cls, **params: Unpack["SupplierListParams"] + ) -> ListObject["Supplier"]: + """ + Lists all available Climate supplier objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["SupplierListParams"] + ) -> ListObject["Supplier"]: + """ + Lists all available Climate supplier objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SupplierRetrieveParams"] + ) -> "Supplier": + """ + Retrieves a Climate supplier object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SupplierRetrieveParams"] + ) -> "Supplier": + """ + Retrieves a Climate supplier object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"locations": Location} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier_service.py new file mode 100644 index 00000000..f31a10f9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/climate/_supplier_service.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.climate._supplier import Supplier + from stripe.params.climate._supplier_list_params import SupplierListParams + from stripe.params.climate._supplier_retrieve_params import ( + SupplierRetrieveParams, + ) + + +class SupplierService(StripeService): + def list( + self, + params: Optional["SupplierListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Supplier]": + """ + Lists all available Climate supplier objects. + """ + return cast( + "ListObject[Supplier]", + self._request( + "get", + "/v1/climate/suppliers", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["SupplierListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Supplier]": + """ + Lists all available Climate supplier objects. + """ + return cast( + "ListObject[Supplier]", + await self._request_async( + "get", + "/v1/climate/suppliers", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + supplier: str, + params: Optional["SupplierRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Supplier": + """ + Retrieves a Climate supplier object. + """ + return cast( + "Supplier", + self._request( + "get", + "/v1/climate/suppliers/{supplier}".format( + supplier=sanitize_id(supplier), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + supplier: str, + params: Optional["SupplierRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Supplier": + """ + Retrieves a Climate supplier object. + """ + return cast( + "Supplier", + await self._request_async( + "get", + "/v1/climate/suppliers/{supplier}".format( + supplier=sanitize_id(supplier), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/data/ca-certificates.crt b/Backend/venv/lib/python3.12/site-packages/stripe/data/ca-certificates.crt new file mode 100644 index 00000000..26f13504 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/data/ca-certificates.crt @@ -0,0 +1,3347 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Tue Apr 26 03:12:05 2022 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: 34a54d5191775c1bd37be6cfd3f09e831e072555dc3a2e51f4a2c4b0f8ada5cc +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +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 +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +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 +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +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 +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +GlobalSign Root CA - R6 +======================= +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX +R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i +YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs +U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss +grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE +3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF +vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM +PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ +azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O +WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy +CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP +0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN +b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE +AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV +HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 +lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY +BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym +Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr +3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 +0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T +uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK +oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t +JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GC CA +=============================== +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD +SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo +MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa +Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL +ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr +VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab +NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E +AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk +AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +UCA Global G2 Root +================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x +NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU +cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT +oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV +8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS +h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o +LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ +R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe +KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa +4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc +OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 +8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo +5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A +Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 +yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX +c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo +jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk +bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x +ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn +RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== +-----END CERTIFICATE----- + +UCA Extended Validation Root +============================ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u +IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G +A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs +iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF +Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu +eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR +59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH +0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR +el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv +B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth +WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS +NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS +3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL +BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM +aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 +dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb ++7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW +F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi +GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc +GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi +djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr +dhh2n1ax +-----END CERTIFICATE----- + +Certigna Root CA +================ +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE +BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ +MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda +MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz +MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX +stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz +KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 +JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 +XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq +4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej +wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ +lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI +jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ +/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy +dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h +LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl +cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt +OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP +TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq +7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 +4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd +8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS +6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY +tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS +aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde +E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +emSign Root CA - G1 +=================== +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET +MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl +ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx +ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk +aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN +LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 +cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW +DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ +6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH +hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 +vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q +NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q ++Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih +U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +emSign ECC Root CA - G3 +======================= +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG +A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg +MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 +MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 +ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc +58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr +MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D +CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 +jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +emSign Root CA - C1 +=================== +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp +Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD +ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up +ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ +Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX +OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V +I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms +lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ +XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD +ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp +/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 +NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 +wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ +BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +emSign ECC Root CA - C3 +======================= +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG +A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF +Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD +ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd +6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 +SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA +B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA +MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU +ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 3 +======================= +-----BEGIN CERTIFICATE----- +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 +dBb9HxEGmpv0 +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G4 +========================================= +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu +bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 +dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT +AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D +umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV +3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds +8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ +e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 +ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X +xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV +7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW +Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n +MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q +jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht +7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK +YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt +jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ +m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW +RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA +JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G ++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT +kcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +Trustwave Global Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29 +zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf +LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq +stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o +WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+ +OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40 +Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE +uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm ++9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj +ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB +BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H +PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H +ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla +4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R +vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd +zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O +856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH +Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu +3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP +29FpHOTKyeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +Trustwave Global ECC P256 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 +NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj +43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm +P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt +0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz +RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +Trustwave Global ECC P384 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 +NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH +Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr +/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV +HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn +ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl +CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== +-----END CERTIFICATE----- + +NAVER Global Root Certification Authority +========================================= +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG +A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD +DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 +NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT +UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb +UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW ++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 +XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 +aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 +Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z +VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B +A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai +cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy +YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV +HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK +21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB +jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx +hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg +E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH +D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ +A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY +qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG +I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg +kpzNNIaRkPpkUZ3+/uul9XXeifdy +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF +UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy +NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 +MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt +UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB +QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 +LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG +SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD +zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= +-----END CERTIFICATE----- + +GlobalSign Root R46 +=================== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv +b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX +BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es +CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ +r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje +2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt +bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj +K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 +12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on +ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls +eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 +vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM +BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy +gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 +CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm +OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq +JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye +qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz +nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 +DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 +QEUxeCp6 +-----END CERTIFICATE----- + +GlobalSign Root E46 +=================== +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT +AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg +RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV +BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB +jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj +QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL +gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk +vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ +CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +ANF Secure Server Root CA +========================= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Certum EC-384 CA +================ +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ +TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 +MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh +dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq +vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn +iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo +ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 +QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +Certum Trusted Root CA +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud +DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w +gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A +bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL +4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb +LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il +I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP +cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA +LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A +lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH +9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf +NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE +ZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +vTrus ECC Root CA +================= +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE +BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS +b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa +BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c +ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n +TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT +QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL +YgmRWAD5Tfs0aNoJrSEGGJTO +-----END CERTIFICATE----- + +vTrus Root CA +============= +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG +A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv +b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG +A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots +SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI +ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF +XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA +YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 +kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 +AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu +/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu +1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO +9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg +scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC +AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr +jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 +8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn +xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg +icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 +sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW +nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc +SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H +l3s= +-----END CERTIFICATE----- + +ISRG Root X2 +============ +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV +UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT +UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT +MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS +RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb +d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF +cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 +U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +HiPKI Root CA - G1 +================== +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ +IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT +AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg +Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 +o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k +wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE +YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA +GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd +hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj +1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 +9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ +Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF +8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD +AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl +tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE +wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q +JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv +5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz +jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg +hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb +yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ +yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW +ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI +KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg +UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 +xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w +B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW +nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk +9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq +kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A +K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX +V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW +cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD +ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi +ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar +J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci +NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me +LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF +fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ +7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 +FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 +gm3c +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl +e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb +a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS ++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M +kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG +r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q +S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV +J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL +dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD +ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh +swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel +/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn +jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 +9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M +7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 +0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR +WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW +HYbL +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq +Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT +L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV +11RZt+cRLInUue4X +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 +PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C +r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh +4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +Telia Root CA v2 +================ +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT +AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2 +MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK +DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7 +6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q +9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn +pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl +tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW +5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr +RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E +BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4 +M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau +BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W +xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5 +tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H +eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C +y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC +QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15 +h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70 +sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9 +xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ +raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc= +-----END CERTIFICATE----- + +D-TRUST BR Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7 +dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu +QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom +AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +D-TRUST EV Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8 +ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ +raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR +AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__init__.py new file mode 100644 index 00000000..dcb37929 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__init__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.entitlements._active_entitlement import ( + ActiveEntitlement as ActiveEntitlement, + ) + from stripe.entitlements._active_entitlement_service import ( + ActiveEntitlementService as ActiveEntitlementService, + ) + from stripe.entitlements._active_entitlement_summary import ( + ActiveEntitlementSummary as ActiveEntitlementSummary, + ) + from stripe.entitlements._feature import Feature as Feature + from stripe.entitlements._feature_service import ( + FeatureService as FeatureService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ActiveEntitlement": ("stripe.entitlements._active_entitlement", False), + "ActiveEntitlementService": ( + "stripe.entitlements._active_entitlement_service", + False, + ), + "ActiveEntitlementSummary": ( + "stripe.entitlements._active_entitlement_summary", + False, + ), + "Feature": ("stripe.entitlements._feature", False), + "FeatureService": ("stripe.entitlements._feature_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..360ffd7a15da1aa96b29ddb17f3e2f88af6d929e GIT binary patch literal 1467 zcmb7D-ER{|5TCvCo$dJS7)XGcf*f3gxM@d$vF-Ldl$Nc4l^FXJ+>|zgMdh zfW-f8geOgaKczAz)D;caad`j%1SEo(xP(Yqi?mpGbpljpCs5a;LTtE(+ABn6Ty%>{ zHlk8ocFRgOqlviUR+Lcb}} z{GtJDkPS^pFGYQ_H9BEK?`ur!>x&>{vV2$X!xqL!T7)KuG5%l<7-B}q5)^HX*1P03 ztm`-6HnGWqZDbX13=zM>WY(;>LWM5`%Su;iugzG>vf6pn!=d{v|!=SnJQboxS?u7=5qbHQI;rAgqd z(PYhu!X>BE6Svaj>(-ZFIXo2fbO#;$70O4raNdIpcRVjlLg9I>P7mAhM&)}Ro5BJ< z!=L|zY!e1rrQCekZ2cylHNSag&D@*6f9>V;?Bj2rPoKIs|6=mk_L1ZFtA8D8Y}XHO z*QbVtK2;llUah_Trv&w*Z-8LpPlem^2F5v}i~|cA p*T_KAPnv_0Vo*P`eYpMlh&8EgR$e!tG(9X>Msr}G#E#?P{{el}v26eV literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_active_entitlement.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_active_entitlement.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0537bfe3659e488911da49852de5bf9d476b453e GIT binary patch literal 3516 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 F`2{5mKfC|{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26e3ddf1185020bddf81e8ef90e030d3456e8f1b GIT binary patch literal 5715 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 WwxpqDsj`r2Njswcodk~Z_5TB^g-g`{ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/__pycache__/_feature_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7085e0448119869d09f0d78dfa961f23919a96c3 GIT binary patch literal 4927 zcmdrQTW=dx`pkGdw#S!D>|B~asS5<;hS*I*31z#WUMQe~sVKYB8nL6P=Oj!!W4mW2 zS&{|`LABCKNbp48L0Tzl_Xi+&=sPcsc)%Jd0>lfv8My_Nr~SS&Gq!Va63S||+Ijf= zo$qok-|c+IU#8OvfzSDQ-25y@$oDu1zi5E8{|U$qVh}^Hh%HnE0ddh1?MNlU@rWha z(Mr^oD>5HTR?Lo9;sT*@b_8UjR>D>)3g^jI(oR)U9FJLPJ5$MUJZ=rxYDMLE!Wy)* zl`O{ zRw)pYj$SiebD3(UQ4qcOs}0wz*L2I1s=DK%#_NB%@Vs{B#plnQf2sTe5R{iq$9?tE zWm-jc<~4eCfdYZ+IY5b>qq@7maPnM$o?$?u7j&lEC@~n2aiR`!I3T`8VTW|FD;-Yq zr-sp)r0So|hlya&J}IC>D5(ersfY=ZAjYsE(uffm0}(?4EXpz2h|S4H{Ccz^?J1Q2 zsVK}eVu*&aX^te!kpiyVmzxG|ELb5!<9sgz+xC*2iyJCPCiW#c2$ISc$?T4E=0GyJ zFUcX0Of3n8Q7;pCAqbGNCpWm)SPCrY#p=G78JgUa83jMrHges7cq34Mvl>JncMawe zj@zdJ+#oKv$^Q&tgE;E_pp~K{(~> zbNM+x{+x~s8v<1?GEd!&vC`sniPl`xwWtlhPAQc3B6`DIjd-a`x=*UDmm1e>xwvd64=(p)zVvao0jHlZELrBIQe(+|t6rNaP9G~drc0+9AfV4vr{wT--MnKh*s|vMSzK%^ zc@iFeIZTzndqpHZ0Go221n@4os}gmnnL6A|sUN=bk5`)Na8sRZ9(=etda!xmP%BB& z<830RGwomd~y+-m` zMbtYB;0N++kF~NRUuP%QvJ>0wm3s{AmCO9H*=Q{ZY`D?JjCn6VC43@GDxW5%1eOE> z!(7;APz;>^Tyi|p34FiqI(a?Ji4KSF!;>0y2(ZmoWe?&ux0_I|@*=(**6GlEKKT?V zZH}_xPLz%86=m$+YOTPPaZ_o16!i1m-#wOur02J zo87qDYN6fYiaidqd7^2sG$2(8K=@&R@lbLB*>9b_9QHHeEb!~b!oiAgGpN?Lq!2Tr zE8K0H6Y7dA;mLGSthXU#qig>g*SP zxXnI)?v6V9m3n^H3hKx9Rxk0`{s%27XGdXMem3x$JB`C*2zm-{ z;DZSyWj9#on3FtU;O_>|=GGeGMo0GXTE;hvx4l%H9sxEp^%hF!g&UPRYXO z!YN7lA^{l70PTM+i_Ukl$nSc)75s50Z&O!?R#?y1S-wFb{%g?4SW9_>>Q&cVgeEy} zy2Z{6J(X<-U$PlE|4yEh7kIzDt={|O4?(M6mOwT8|Id<>XtwU1v4dsH?CCzHP5CzL zb93}EKSeX|mJoZ}dbfmN&%pczv0N?)ITdk(sRMR{~)9kvjU?HB;w5toc<#QO` z7VI#B#}G^+m;&HMpp#%v;qU~4KO%Szz$)P-ke6SkA{7DlZ_aJFTCS6pOs0=Fi^qP7 z4Mvr3)dP3No>)_-T2UAQD?5H?{K(qiWDB{iI8hF@6NnwTAEhTqX(m`^qVEDZe}Ug7 zd;A2RAd!U=qy}11_=UX>j@=nMx~5LIVmOX>&w_F-g($gp60suro$52QeO527sinPF zzfbkMxOv~X=+biGfH&g5SBjed8@^B&b|qdaWG=X-#cvExc9$CPAo8P%zpn;;ibmgd zY0ZJZA{>Uzh?fhMc_&}ze?PD|az;Z=@G#RhJyIVGxV>+_V)%mM3G7V=BK}LaxTB;N z^mD;$7&|R5c$^h?)#KakeM8UeXSL3)8E9gwx4(S`)g#cu%gs-^vxs4z%@c7We$vnH zXW0dyVT*Gf^bhJ!t^?M^c!+`olJfgQP-v7y7bh#^yEEJjLP@qP2jHbhA1c> Ly?Kw|FJI!{ZsUEA literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement.py new file mode 100644 index 00000000..9e95b282 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from typing import ClassVar +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.entitlements._feature import Feature + from stripe.params.entitlements._active_entitlement_list_params import ( + ActiveEntitlementListParams, + ) + from stripe.params.entitlements._active_entitlement_retrieve_params import ( + ActiveEntitlementRetrieveParams, + ) + + +class ActiveEntitlement(ListableAPIResource["ActiveEntitlement"]): + """ + An active entitlement describes access to a feature for a customer. + """ + + OBJECT_NAME: ClassVar[Literal["entitlements.active_entitlement"]] = ( + "entitlements.active_entitlement" + ) + feature: ExpandableField["Feature"] + """ + The [Feature](https://stripe.com/docs/api/entitlements/feature) that the customer is entitled to. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + lookup_key: str + """ + A unique key you provide as your own system identifier. This may be up to 80 characters. + """ + object: Literal["entitlements.active_entitlement"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def list( + cls, **params: Unpack["ActiveEntitlementListParams"] + ) -> ListObject["ActiveEntitlement"]: + """ + Retrieve a list of active entitlements for a customer + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["ActiveEntitlementListParams"] + ) -> ListObject["ActiveEntitlement"]: + """ + Retrieve a list of active entitlements for a customer + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["ActiveEntitlementRetrieveParams"] + ) -> "ActiveEntitlement": + """ + Retrieve an active entitlement + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["ActiveEntitlementRetrieveParams"] + ) -> "ActiveEntitlement": + """ + Retrieve an active entitlement + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_service.py new file mode 100644 index 00000000..db359907 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.entitlements._active_entitlement import ActiveEntitlement + from stripe.params.entitlements._active_entitlement_list_params import ( + ActiveEntitlementListParams, + ) + from stripe.params.entitlements._active_entitlement_retrieve_params import ( + ActiveEntitlementRetrieveParams, + ) + + +class ActiveEntitlementService(StripeService): + def list( + self, + params: "ActiveEntitlementListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ActiveEntitlement]": + """ + Retrieve a list of active entitlements for a customer + """ + return cast( + "ListObject[ActiveEntitlement]", + self._request( + "get", + "/v1/entitlements/active_entitlements", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "ActiveEntitlementListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[ActiveEntitlement]": + """ + Retrieve a list of active entitlements for a customer + """ + return cast( + "ListObject[ActiveEntitlement]", + await self._request_async( + "get", + "/v1/entitlements/active_entitlements", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["ActiveEntitlementRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ActiveEntitlement": + """ + Retrieve an active entitlement + """ + return cast( + "ActiveEntitlement", + self._request( + "get", + "/v1/entitlements/active_entitlements/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["ActiveEntitlementRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ActiveEntitlement": + """ + Retrieve an active entitlement + """ + return cast( + "ActiveEntitlement", + await self._request_async( + "get", + "/v1/entitlements/active_entitlements/{id}".format( + id=sanitize_id(id), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_summary.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_summary.py new file mode 100644 index 00000000..d6eb62ba --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_active_entitlement_summary.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.entitlements._active_entitlement import ActiveEntitlement + + +class ActiveEntitlementSummary(StripeObject): + """ + A summary of a customer's active entitlements. + """ + + OBJECT_NAME: ClassVar[ + Literal["entitlements.active_entitlement_summary"] + ] = "entitlements.active_entitlement_summary" + customer: str + """ + The customer that is entitled to this feature. + """ + entitlements: ListObject["ActiveEntitlement"] + """ + The list of entitlements this customer has. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["entitlements.active_entitlement_summary"] + """ + String representing the object's type. Objects of the same type share the same value. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature.py new file mode 100644 index 00000000..c9954ef1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature.py @@ -0,0 +1,192 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.entitlements._feature_create_params import ( + FeatureCreateParams, + ) + from stripe.params.entitlements._feature_list_params import ( + FeatureListParams, + ) + from stripe.params.entitlements._feature_modify_params import ( + FeatureModifyParams, + ) + from stripe.params.entitlements._feature_retrieve_params import ( + FeatureRetrieveParams, + ) + + +class Feature( + CreateableAPIResource["Feature"], + ListableAPIResource["Feature"], + UpdateableAPIResource["Feature"], +): + """ + A feature represents a monetizable ability or functionality in your system. + Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer. + """ + + OBJECT_NAME: ClassVar[Literal["entitlements.feature"]] = ( + "entitlements.feature" + ) + active: bool + """ + Inactive features cannot be attached to new products and will not be returned from the features list endpoint. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + lookup_key: str + """ + A unique key you provide as your own system identifier. This may be up to 80 characters. + """ + metadata: Dict[str, str] + """ + Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: str + """ + The feature's name, for your own purpose, not meant to be displayable to the customer. + """ + object: Literal["entitlements.feature"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + + @classmethod + def create(cls, **params: Unpack["FeatureCreateParams"]) -> "Feature": + """ + Creates a feature + """ + return cast( + "Feature", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["FeatureCreateParams"] + ) -> "Feature": + """ + Creates a feature + """ + return cast( + "Feature", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["FeatureListParams"] + ) -> ListObject["Feature"]: + """ + Retrieve a list of features + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["FeatureListParams"] + ) -> ListObject["Feature"]: + """ + Retrieve a list of features + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["FeatureModifyParams"] + ) -> "Feature": + """ + Update a feature's metadata or permanently deactivate it. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Feature", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["FeatureModifyParams"] + ) -> "Feature": + """ + Update a feature's metadata or permanently deactivate it. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Feature", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["FeatureRetrieveParams"] + ) -> "Feature": + """ + Retrieves a feature + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["FeatureRetrieveParams"] + ) -> "Feature": + """ + Retrieves a feature + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature_service.py new file mode 100644 index 00000000..6844a337 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/entitlements/_feature_service.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.entitlements._feature import Feature + from stripe.params.entitlements._feature_create_params import ( + FeatureCreateParams, + ) + from stripe.params.entitlements._feature_list_params import ( + FeatureListParams, + ) + from stripe.params.entitlements._feature_retrieve_params import ( + FeatureRetrieveParams, + ) + from stripe.params.entitlements._feature_update_params import ( + FeatureUpdateParams, + ) + + +class FeatureService(StripeService): + def list( + self, + params: Optional["FeatureListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Feature]": + """ + Retrieve a list of features + """ + return cast( + "ListObject[Feature]", + self._request( + "get", + "/v1/entitlements/features", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["FeatureListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Feature]": + """ + Retrieve a list of features + """ + return cast( + "ListObject[Feature]", + await self._request_async( + "get", + "/v1/entitlements/features", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "FeatureCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Creates a feature + """ + return cast( + "Feature", + self._request( + "post", + "/v1/entitlements/features", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "FeatureCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Creates a feature + """ + return cast( + "Feature", + await self._request_async( + "post", + "/v1/entitlements/features", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["FeatureRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Retrieves a feature + """ + return cast( + "Feature", + self._request( + "get", + "/v1/entitlements/features/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["FeatureRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Retrieves a feature + """ + return cast( + "Feature", + await self._request_async( + "get", + "/v1/entitlements/features/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + id: str, + params: Optional["FeatureUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Update a feature's metadata or permanently deactivate it. + """ + return cast( + "Feature", + self._request( + "post", + "/v1/entitlements/features/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + id: str, + params: Optional["FeatureUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Feature": + """ + Update a feature's metadata or permanently deactivate it. + """ + return cast( + "Feature", + await self._request_async( + "post", + "/v1/entitlements/features/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/events/__init__.py new file mode 100644 index 00000000..89de30b7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/events/__init__.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +from typing_extensions import TYPE_CHECKING +from stripe.v2.core._event import ( + UnknownEventNotification as UnknownEventNotification, +) + + +# The beginning of the section generated from our OpenAPI spec +from importlib import import_module + +if TYPE_CHECKING: + from stripe.events._event_classes import ( + ALL_EVENT_NOTIFICATIONS as ALL_EVENT_NOTIFICATIONS, + ) + from stripe.events._v1_billing_meter_error_report_triggered_event import ( + V1BillingMeterErrorReportTriggeredEvent as V1BillingMeterErrorReportTriggeredEvent, + V1BillingMeterErrorReportTriggeredEventNotification as V1BillingMeterErrorReportTriggeredEventNotification, + ) + from stripe.events._v1_billing_meter_no_meter_found_event import ( + V1BillingMeterNoMeterFoundEvent as V1BillingMeterNoMeterFoundEvent, + V1BillingMeterNoMeterFoundEventNotification as V1BillingMeterNoMeterFoundEventNotification, + ) + from stripe.events._v2_core_event_destination_ping_event import ( + V2CoreEventDestinationPingEvent as V2CoreEventDestinationPingEvent, + V2CoreEventDestinationPingEventNotification as V2CoreEventDestinationPingEventNotification, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "ALL_EVENT_NOTIFICATIONS": ("stripe.events._event_classes", False), + "V1BillingMeterErrorReportTriggeredEvent": ( + "stripe.events._v1_billing_meter_error_report_triggered_event", + False, + ), + "V1BillingMeterErrorReportTriggeredEventNotification": ( + "stripe.events._v1_billing_meter_error_report_triggered_event", + False, + ), + "V1BillingMeterNoMeterFoundEvent": ( + "stripe.events._v1_billing_meter_no_meter_found_event", + False, + ), + "V1BillingMeterNoMeterFoundEventNotification": ( + "stripe.events._v1_billing_meter_no_meter_found_event", + False, + ), + "V2CoreEventDestinationPingEvent": ( + "stripe.events._v2_core_event_destination_ping_event", + False, + ), + "V2CoreEventDestinationPingEventNotification": ( + "stripe.events._v2_core_event_destination_ping_event", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() + +# The end of the section generated from our OpenAPI spec diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c73206d1a3993dc5c77bd8249cc41d30a57a7677 GIT binary patch literal 1724 zcmbtUOK;mo5Z)yvin5+@>^OB_sudt*Q;YQjxzsISyHaArRf1YE5F)@rmNp7uK7{4^ zp+E+Vpa&mw%cTW+Y~Y{LOM_foBA24Q^rlpGTlmyjlB((yNP=VteLF+W%+Abys~<9% z5d`A>Icbi8_KPqEqDD&p0F;NQiJI6#Ha0L8x@1YVY{-EwTQNIs#4)0ny$9c7mSQK2 zMDQ(csdmyx+9SqDU@KP2P8(@EV`Kt5VP)-{k+btg9&ELlgl7bv6g=r~62=*dy;w8z zH8Ms!*-lo={U*xNu%D^jx=|*}SIf)SR;pLv#rd1grsM87{tgW~0tc*AdR9 z-F6u#w%gpYD7=_hTwNvQ^>VdFs@H2Pm6hei+RF9nnkM-d*JqYY%QBtTmy}ahX3S+@ zQ4wBaW~)URZ3bKTbFb)lsuszA|8!W@4YsMcTTYbs(n}ovmv462Wi+Vi3+i#x3A(-k z4TN=GT7R*_>3sLz@i;Tvv_!=my%Gsl(y;2DN4<(B-CKChVS9#bgaaeCm>8jAWP}AX zBakc{T9`;An15LU$Bi=G5mOlk&OIMEOB&F6RAO`3JZVGsgSZ4!fHEv0K#-ax1qkA^ zlz=oq0|N{s28s;7{yxA%ltdiXP`c%h0sgrnHZ3t4CfDB zhvR?YEeQzcztKGz($#;h>oO#{|2ns3cr#cQ+7C|Z5$c1A*g1d`bs?nB=j;P81@}D) z08_{KSV8#XV@bl&aT?(ZKg)SA;>ur&44@96mqmpuxF^YlGv>3Fdh2aOeAr+)xZ=m(+z literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_event_classes.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_event_classes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5536e0d9a2752a8d6acd4aa68bcbc0c6e07c463b GIT binary patch literal 2131 zcmc&#%}*Og6rbI-*9*2|Fdv~HT_KPy8Th1A3AS zZi)J(?;=`SPw4~tAYUH}*VC{*OeB5iEkLJ@><;Hg{$zmjf}b?3hC@AUIr<%wz(RE0 zHXNJntbMs!!t)EI`K873XRt7~ZtvL6w|1#XY_IHi#+Fg5dVzAH;!&ePRyMyOH4k)W zHm2tc(=_b*=foqlM5#l+Anc|!YSin568&XnuJs-(JN)!*=Z^gf_2Rrk3AgkqaXrK4 zcvj)si`K>STP_D#Aj|=`fSc2JGXRM#h7uD76H|^8gKhv6bA3P8i|v&z<;C+Gue->0 z!W*}kYvBbGy%$_?9t_XCXt;=LKtNys>(42`4dCFJ-G65(FYV=;(}j?V0;i(zaw_&F zE-3c8vX^ZZ3k*^~ayO&`gXBlO-3Gxmfu&#AqA*JEoqi471GJAk7=zXnsO*WIS*2@d zAF*8i3ij>^_e77`;LVG5q{Ils-8zF19d3TLADqV-$|qDZTtN-v+BCou3E%pN|Te5=Z3oNSVXPccU4Hm z9nWc~3yw$3>vN8?1D>mM)!GiRbrq7YshY;7+Sv8B9ebuQT~uAeBi9?CP^}YJ4T7u& zX{v_7tQqj+D%k?2Vt-TiK6V zk<7u;{qf^?`dAsczw?{&&Lbs#8kG`q8%a_56wac&NaHY2C6JR$hH}T&Q%q(>@c)Y+ z9b!--{*~tuEU&CB-d>!aU0Yl!_l8quct=>rqC`ib>%@z)^zkQpn6$fU8s>b{ENFeg zj&;#`vlY8}oXQ<3xhL7#U#_;Y3$LM-X23#T;*4@CIfv!^sNWZ46=VZP=*#drAXg~+ zo%n;n1e3cSv0bRME@f%%kAy{_^U{Jmpv>84dpOX+4ll?-UjL`^$HDt=RM@!7{+pC8 z&J!JGj!EDUPjdP;OnF@V%d^YN;VbUWfyyD`jPnqmE4PAQ+sAYY4zh~i9zfTY1VK2H zk?`&b8aqMPPSA%ZsPI@CI1|OFd?t6gc0zhzZY$Dztjozyhmzys5gKhzDuVod?G(Y# h9(z$G2P#*%%1<+a$|%ZAw!!kuQz?=WTj(-J_zweKX_^24 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_error_report_triggered_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_error_report_triggered_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be82bd18d3e5e480bc5ab7ba123d6dee8803d8c0 GIT binary patch literal 8006 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 D^USmW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_no_meter_found_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v1_billing_meter_no_meter_found_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de8ec8c70992bd3a9a6a57b7ad3821712a4dea64 GIT binary patch literal 4954 zcmcH-U2hZF^^V6LkH_Cmf|D#HfrJDrjZG2?(k_b@!smt!l)!Fltu!^Bn`DALz3`v7fLvkD>&YK&azXY<3F$4lmQ`p`6m}osS{^UO-!DfI^)RZB4teHOoY|r z7tdXyA1qMIHd)>k#D(5^r}{1+zXCl|k`*+P^;`jcXGQAOgf1ANKFxC!TS@cXAv1y| z-VQyjFU|U!RBsDazC*4H*}ybONzU-QqbKx2K{saKp}_5w$(z&Wf}wpw?DgKo(ezb! zcDjhu(}t;XM4iDEj@Mo)(Y#PU9vcaMXrJmK0G|jCiQOF41lt2d{@oRp$*%*1G&p}+ zADJdkJX22Z4os#*7J_XYpS4h;%n8m=J3psVwB8esCv%_ z1-2b2!Gzo_wK5iWr3^pO%BYK@YF$lr?QB+)%UQa##L$2@j_e>^tLLR#L`%S8s|Uc# zo8<4&wzbg67oqswGv!e4YG`lOC&rWt5d%sUW{_{#(%UX3nKhO zu;*_)55-^ld}PB;N60<-kK)e+whK0`8-#TN?!;SoR&&;pk!RgNubYAG0i5*#xbfz9 zRD`=J>e4y@;N?GBG?GX@7%C@*R}&-8Ln9kX`6@KBZlTZI>Kqh46$X^g0)qmCyu_%z zzzmjzp_Jmts%qqlR8<{CRg0#!P(VDSsvj)m3iXlT`3n~&uUu3y$XOWHIZ;*38HQ=| zTmcTpqCn-g=5jjWx+~^sp`fZy1hyN-EsTq|Ty3Cb8G;B7ybj>yM`SHAesgk7iLWHa z%gUiu@1d`J;hM+mQ>r47A{E3cA;30h9AoGqe6vm21!c#tdJn+P*@b6T5i+ZnO3lpb zr+&yjKFmG=LS;?T{GSP$OaoM*!5I%41oCr;hB>BaK`lfhT39193eQxL+mS}RXQMnP z#ULj|x$;>XtY+;1HnH8jdftbT)|AK@6o5ew6`KrtsSgsMSZ5Ge*SvKc=?%sams~oC z=hcO*f61Sc*C%#x$Mg>4Cv$dgd*qjsEz!BkMWP^Y`A#NVRWbgRvi`h8zQt;!M7&6?z(5KOg$J4djoqPl*hoM$7 z8Qi0m1y`-(XYRpMDS69b3=1ZPYuFDF;IU3Z)eVEP`qhusiNy}%D9?(Vn_!Ew*(i+R z9b(}Y9}&o)9lIa@phlp9ObWH`gK%L&!A*ecd_2=#~Y=jk>XWDYsNGbDDaME?JJ;C{>&` z8_u_E@I=s|IE5#%+6}ygW59ZM&m;Y} zP~9D95c&^3>ss0SMmf~uGCK*oI9(d}SHT1gHKInf7K+6jTf*`NbG#GbKEvx16)IdO z*3t))GyB`Z3lG=`uWc>VzeDc9Ymp7ZKKtQkT>yY`j|Yz4f4@ecsmu!)Xfg&`AOup! zlOIEQfNNr8GwF&T?tU(S_uEcPhd3*BbrjOj&!ALiid?*Z`F47BcdSArJ|+%U_+vS(Rb z_WnV5iYwszxzBFgJY*SOYmJ(jjoG*#|K{Zew$aWvvi$}L*3a{Ic?${9ttT$~)Rq&W zrV^)8UWQ@9C1#fqyMo|H08)}$r$-^r7?7|R@{o?0S#gd3S1oFl!32L_9*82~SDl3Id9+wabnBm39dy4Jdf z)^_!-b?m7GNOZ7Dd{O0&SPPL*+x_uJ(w~F9UnCDdPiD)>?DOP&IXSpCNMChnbuc5um$ScK~cx?bp1g1>eEX3pIjm<)ViK)2rSQ zaDSg%k%<(qC}jM|zXKhN6N`eg-=jOdw(T}10mAZ zT?r!=AmmAb6>e>wHY5MnA6c9yRB;SKUBDqoaC0VMgVfX zG*>Q;rSm4EY4=^sFen(hk0U{@g}aJzeRB2kdx2|~KltPB1eIR5-K)}a&4lkJ{_1L; z!I|D1==@RS`u66MU|l}yzV(jre`L^9)>{B7q96!gOGMcJf}~%Nu`kK%Uy`xEAabls ij{Q}Pz3`6Lq?n+rj7`)Cw6(!mL1=qSzb4pnb^aHYR`pZ> literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v2_core_event_destination_ping_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/events/__pycache__/_v2_core_event_destination_ping_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0687c8676941c75e4e6831df871ea151249fc592 GIT binary patch literal 4695 zcmd5<-EULL6`%X*Yx~-WLZeV1`6Fuy)So-?*tsKKX&d- z7N@Bc71}1ERkc;OENZ3A<07`|->}bp!HTL_qeX1hKC~~DC7UkFQ_sxxb?m?@i?k0N z$>*LqGd?qOzUDW7jYL8Sn)Bbi`Tyt${eyMUB3UMRO z=LGCTq1WgYkcciIOS_A#AXXnq-d>D8E)9V+jFq-@S4B@n{>`SO1gc+iNxqCPU!TJ{ zm-TO8*UXmlW}#%^lth*D3%KagIRDI)-27}lmv!@{B8^#q`(#)}myznRau zRL*4`7ycc%ly@=7+BEW`pIkX_PF_4eIXyLVfoi1%Oh_J9XzyUs&ci~`kMX76#EzRU z@|AMlX*{a7I*s1}^D8hkMuuP^LwpAeZb(?Rgnk&oiY1P*uL_*RI7`L>tl{9S$i^+j zQmufc&8jPCR$<;~^H%~AnpZWM24!1uS@QaN+6j!_ZBL7X>*ML8uT+6VGM=ZFxqfP?D9n~JS1h?fLaGC&43nJtPsqeUJ=%F}62X;6? zN+PU^5tartJd54jP0t1oMY4|#><8ko#gfb9022%XSv<9a+RoaL?$FA$9Rv+vn}7E7 z*7T9j_4w+Asy?u;A8II4EL2BeA;P9~83PXJ8AAml+(%1j4g}lVTss=KMl3MT9E+=M zZO*S99dekdb#z;-CEgG|l^(Tp{7i7e{v1pGihV@<8C%~a!R_&TUw=n_rhTgTZuP(5 zUUh~_P@rj_XW;I#kP>Os3w?<9qKj|4RGD`mBM93DR93BB*EJe|3}gkDhDr8)li>H} zq4e;4rP4gHX`rQo#|jNYVZtPzweyRZFtfB`g=z#l*n_cJZ|ZU4+w~yo zJKjJ_UuZ>Z>L}J%(+|S@-(Fh1w4ooa>W6EwJ)id3j0{*mk_SLQJ)kCgy6jV6h0`mM{9eJAA{lU>{ z;@Em(WJ4d>O4Tp)kxd8S54y8wSoouGIP|CBu<%0aaw83bVLTIkMcRNlwzqFOeYcza z|0kWn?H9S*kAMwQ8aW0Z8t=%*mdDu@OW5^7(v0xxonaiyMDiUVo!LkCzN|QSsutgR z^)Ts9N>9%jw&n^D9xk>110U~yuz#cfRJH%q&e^&5G-T)A(3js#iq<2L>6;F_f`2|P zPV@+$$-+cL{!AGULMJ7X-7rE90fCyud0q|U45}2f1#Fr$WHPinZ!=yu&G+WBc55Vj z>GI|2cdnQWy%Kf_&>qvw7KH0GE}y9N9a@(U z)#ZRPEkFTWlh&@SX%EiTB`!EI?lE5kBhM5jsV9&cZHlrIYDmD+VXa zi|>X2!Si+%1N4S_#Ywt1ak5o8lHRK&IZH|fE+4-#l}^5$y#>><#U%7#CdVJiQZWht zCY59^Yuo9zS`J{yFsw@@z%Yc}RDgE$>sbezS<3H$VW9LLIa%u zXRDM#?lHvcu-xl}E;~H}TKKlRGQP_+u@@G+0kkdHae4J}3#7z$)na`cv7u^gXd`yC z8arA$Fj(tPeRA?IV-Lq3?>P;?C2|-_BLg5B10Y%pfXt9npcc|&TMT|5q`WHeKqM?o zymG_~&LrzHRP7ZNRsnf_O#$P)4&)^@r77!*{*m59@Tu=dy9QZ>5k*C7YPw$#n4+1~ zYjl@~HPdDbb9!FpyPHt*(beoeKf`ww34%|TeS5*C_#=TwFFE_%2Pc+rjLg?}6WD~)+xgZP) Mp*8#r!H4_jf9@DIVgLXD literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/_event_classes.py b/Backend/venv/lib/python3.12/site-packages/stripe/events/_event_classes.py new file mode 100644 index 00000000..1ee18728 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/events/_event_classes.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing import Union +from typing_extensions import TYPE_CHECKING +from stripe.v2.core._event import UnknownEventNotification +from stripe._stripe_object import StripeObject + +if TYPE_CHECKING: + from stripe.events._v1_billing_meter_error_report_triggered_event import ( + V1BillingMeterErrorReportTriggeredEventNotification, + ) + from stripe.events._v1_billing_meter_no_meter_found_event import ( + V1BillingMeterNoMeterFoundEventNotification, + ) + from stripe.events._v2_core_event_destination_ping_event import ( + V2CoreEventDestinationPingEventNotification, + ) + + +_V2_EVENT_CLASS_LOOKUP = { + "v1.billing.meter.error_report_triggered": ( + "stripe.events._v1_billing_meter_error_report_triggered_event", + "V1BillingMeterErrorReportTriggeredEvent", + ), + "v1.billing.meter.no_meter_found": ( + "stripe.events._v1_billing_meter_no_meter_found_event", + "V1BillingMeterNoMeterFoundEvent", + ), + "v2.core.event_destination.ping": ( + "stripe.events._v2_core_event_destination_ping_event", + "V2CoreEventDestinationPingEvent", + ), +} + + +def get_v2_event_class(type_: str): + if type_ not in _V2_EVENT_CLASS_LOOKUP: + return StripeObject + + import_path, class_name = _V2_EVENT_CLASS_LOOKUP[type_] + return getattr( + import_module(import_path), + class_name, + ) + + +_V2_EVENT_NOTIFICATION_CLASS_LOOKUP = { + "v1.billing.meter.error_report_triggered": ( + "stripe.events._v1_billing_meter_error_report_triggered_event", + "V1BillingMeterErrorReportTriggeredEventNotification", + ), + "v1.billing.meter.no_meter_found": ( + "stripe.events._v1_billing_meter_no_meter_found_event", + "V1BillingMeterNoMeterFoundEventNotification", + ), + "v2.core.event_destination.ping": ( + "stripe.events._v2_core_event_destination_ping_event", + "V2CoreEventDestinationPingEventNotification", + ), +} + + +def get_v2_event_notification_class(type_: str): + if type_ not in _V2_EVENT_NOTIFICATION_CLASS_LOOKUP: + return UnknownEventNotification + + import_path, class_name = _V2_EVENT_NOTIFICATION_CLASS_LOOKUP[type_] + return getattr( + import_module(import_path), + class_name, + ) + + +ALL_EVENT_NOTIFICATIONS = Union[ + "V1BillingMeterErrorReportTriggeredEventNotification", + "V1BillingMeterNoMeterFoundEventNotification", + "V2CoreEventDestinationPingEventNotification", +] diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_error_report_triggered_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_error_report_triggered_event.py new file mode 100644 index 00000000..0d8d7e01 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_error_report_triggered_event.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_mode import ApiMode +from stripe._stripe_object import StripeObject +from stripe._stripe_response import StripeResponse +from stripe._util import get_api_mode +from stripe.v2.core._event import Event, EventNotification, RelatedObject +from typing import Any, Dict, List, Optional, cast +from typing_extensions import Literal, TYPE_CHECKING, override + +if TYPE_CHECKING: + from stripe._api_requestor import _APIRequestor + from stripe._stripe_client import StripeClient + from stripe.billing._meter import Meter + + +class V1BillingMeterErrorReportTriggeredEventNotification(EventNotification): + LOOKUP_TYPE = "v1.billing.meter.error_report_triggered" + type: Literal["v1.billing.meter.error_report_triggered"] + related_object: RelatedObject + + def __init__( + self, parsed_body: Dict[str, Any], client: "StripeClient" + ) -> None: + super().__init__( + parsed_body, + client, + ) + self.related_object = RelatedObject(parsed_body["related_object"]) + + @override + def fetch_event(self) -> "V1BillingMeterErrorReportTriggeredEvent": + return cast( + "V1BillingMeterErrorReportTriggeredEvent", + super().fetch_event(), + ) + + def fetch_related_object(self) -> "Meter": + response = self._client.raw_request( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object"], + ) + return cast( + "Meter", + self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ), + ) + + @override + async def fetch_event_async( + self, + ) -> "V1BillingMeterErrorReportTriggeredEvent": + return cast( + "V1BillingMeterErrorReportTriggeredEvent", + await super().fetch_event_async(), + ) + + async def fetch_related_object_async(self) -> "Meter": + response = await self._client.raw_request_async( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object"], + ) + return cast( + "Meter", + self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ), + ) + + +class V1BillingMeterErrorReportTriggeredEvent(Event): + LOOKUP_TYPE = "v1.billing.meter.error_report_triggered" + type: Literal["v1.billing.meter.error_report_triggered"] + + class V1BillingMeterErrorReportTriggeredEventData(StripeObject): + class Reason(StripeObject): + class ErrorType(StripeObject): + class SampleError(StripeObject): + class Request(StripeObject): + identifier: str + """ + The request idempotency key. + """ + + error_message: str + """ + The error message. + """ + request: Request + """ + The request causes the error. + """ + _inner_class_types = {"request": Request} + + code: Literal[ + "archived_meter", + "meter_event_customer_not_found", + "meter_event_dimension_count_too_high", + "meter_event_invalid_value", + "meter_event_no_customer_defined", + "missing_dimension_payload_keys", + "no_meter", + "timestamp_in_future", + "timestamp_too_far_in_past", + ] + """ + Open Enum. + """ + error_count: int + """ + The number of errors of this type. + """ + sample_errors: List[SampleError] + """ + A list of sample errors of this type. + """ + _inner_class_types = {"sample_errors": SampleError} + + error_count: int + """ + The total error count within this window. + """ + error_types: List[ErrorType] + """ + The error details. + """ + _inner_class_types = {"error_types": ErrorType} + + developer_message_summary: str + """ + Extra field included in the event's `data` when fetched from /v2/events. + """ + reason: Reason + """ + This contains information about why meter error happens. + """ + validation_end: str + """ + The end of the window that is encapsulated by this summary. + """ + validation_start: str + """ + The start of the window that is encapsulated by this summary. + """ + _inner_class_types = {"reason": Reason} + + data: V1BillingMeterErrorReportTriggeredEventData + """ + Data for the v1.billing.meter.error_report_triggered event + """ + + @classmethod + def _construct_from( + cls, + *, + values: Dict[str, Any], + last_response: Optional[StripeResponse] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + ) -> "V1BillingMeterErrorReportTriggeredEvent": + evt = super()._construct_from( + values=values, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + if hasattr(evt, "data"): + evt.data = V1BillingMeterErrorReportTriggeredEvent.V1BillingMeterErrorReportTriggeredEventData._construct_from( + values=evt.data, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + return evt + + class RelatedObject(StripeObject): + id: str + """ + Unique identifier for the object relevant to the event. + """ + type: str + """ + Type of the object relevant to the event. + """ + url: str + """ + URL to retrieve the resource. + """ + + related_object: RelatedObject + """ + Object containing the reference to API resource relevant to the event + """ + + def fetch_related_object(self) -> "Meter": + """ + Retrieves the related object from the API. Makes an API request on every call. + """ + return cast( + "Meter", + self._requestor.request( + "get", + self.related_object.url, + base_address="api", + options={"stripe_context": self.context}, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_no_meter_found_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_no_meter_found_event.py new file mode 100644 index 00000000..32b79f0e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v1_billing_meter_no_meter_found_event.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._api_mode import ApiMode +from stripe._stripe_object import StripeObject +from stripe._stripe_response import StripeResponse +from stripe.v2.core._event import Event, EventNotification +from typing import Any, Dict, List, Optional, cast +from typing_extensions import Literal, TYPE_CHECKING, override + +if TYPE_CHECKING: + from stripe._api_requestor import _APIRequestor + + +class V1BillingMeterNoMeterFoundEventNotification(EventNotification): + LOOKUP_TYPE = "v1.billing.meter.no_meter_found" + type: Literal["v1.billing.meter.no_meter_found"] + + @override + def fetch_event(self) -> "V1BillingMeterNoMeterFoundEvent": + return cast( + "V1BillingMeterNoMeterFoundEvent", + super().fetch_event(), + ) + + @override + async def fetch_event_async(self) -> "V1BillingMeterNoMeterFoundEvent": + return cast( + "V1BillingMeterNoMeterFoundEvent", + await super().fetch_event_async(), + ) + + +class V1BillingMeterNoMeterFoundEvent(Event): + LOOKUP_TYPE = "v1.billing.meter.no_meter_found" + type: Literal["v1.billing.meter.no_meter_found"] + + class V1BillingMeterNoMeterFoundEventData(StripeObject): + class Reason(StripeObject): + class ErrorType(StripeObject): + class SampleError(StripeObject): + class Request(StripeObject): + identifier: str + """ + The request idempotency key. + """ + + error_message: str + """ + The error message. + """ + request: Request + """ + The request causes the error. + """ + _inner_class_types = {"request": Request} + + code: Literal[ + "archived_meter", + "meter_event_customer_not_found", + "meter_event_dimension_count_too_high", + "meter_event_invalid_value", + "meter_event_no_customer_defined", + "missing_dimension_payload_keys", + "no_meter", + "timestamp_in_future", + "timestamp_too_far_in_past", + ] + """ + Open Enum. + """ + error_count: int + """ + The number of errors of this type. + """ + sample_errors: List[SampleError] + """ + A list of sample errors of this type. + """ + _inner_class_types = {"sample_errors": SampleError} + + error_count: int + """ + The total error count within this window. + """ + error_types: List[ErrorType] + """ + The error details. + """ + _inner_class_types = {"error_types": ErrorType} + + developer_message_summary: str + """ + Extra field included in the event's `data` when fetched from /v2/events. + """ + reason: Reason + """ + This contains information about why meter error happens. + """ + validation_end: str + """ + The end of the window that is encapsulated by this summary. + """ + validation_start: str + """ + The start of the window that is encapsulated by this summary. + """ + _inner_class_types = {"reason": Reason} + + data: V1BillingMeterNoMeterFoundEventData + """ + Data for the v1.billing.meter.no_meter_found event + """ + + @classmethod + def _construct_from( + cls, + *, + values: Dict[str, Any], + last_response: Optional[StripeResponse] = None, + requestor: "_APIRequestor", + api_mode: ApiMode, + ) -> "V1BillingMeterNoMeterFoundEvent": + evt = super()._construct_from( + values=values, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + if hasattr(evt, "data"): + evt.data = V1BillingMeterNoMeterFoundEvent.V1BillingMeterNoMeterFoundEventData._construct_from( + values=evt.data, + last_response=last_response, + requestor=requestor, + api_mode=api_mode, + ) + return evt diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/events/_v2_core_event_destination_ping_event.py b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v2_core_event_destination_ping_event.py new file mode 100644 index 00000000..222cfb42 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/events/_v2_core_event_destination_ping_event.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from stripe._util import get_api_mode +from stripe.v2.core._event import Event, EventNotification, RelatedObject +from typing import Any, Dict, cast +from typing_extensions import Literal, TYPE_CHECKING, override + +if TYPE_CHECKING: + from stripe._stripe_client import StripeClient + from stripe.v2.core._event_destination import EventDestination + + +class V2CoreEventDestinationPingEventNotification(EventNotification): + LOOKUP_TYPE = "v2.core.event_destination.ping" + type: Literal["v2.core.event_destination.ping"] + related_object: RelatedObject + + def __init__( + self, parsed_body: Dict[str, Any], client: "StripeClient" + ) -> None: + super().__init__( + parsed_body, + client, + ) + self.related_object = RelatedObject(parsed_body["related_object"]) + + @override + def fetch_event(self) -> "V2CoreEventDestinationPingEvent": + return cast( + "V2CoreEventDestinationPingEvent", + super().fetch_event(), + ) + + def fetch_related_object(self) -> "EventDestination": + response = self._client.raw_request( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object"], + ) + return cast( + "EventDestination", + self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ), + ) + + @override + async def fetch_event_async(self) -> "V2CoreEventDestinationPingEvent": + return cast( + "V2CoreEventDestinationPingEvent", + await super().fetch_event_async(), + ) + + async def fetch_related_object_async(self) -> "EventDestination": + response = await self._client.raw_request_async( + "get", + self.related_object.url, + stripe_context=self.context, + usage=["fetch_related_object"], + ) + return cast( + "EventDestination", + self._client.deserialize( + response, + api_mode=get_api_mode(self.related_object.url), + ), + ) + + +class V2CoreEventDestinationPingEvent(Event): + LOOKUP_TYPE = "v2.core.event_destination.ping" + type: Literal["v2.core.event_destination.ping"] + + class RelatedObject(StripeObject): + id: str + """ + Unique identifier for the object relevant to the event. + """ + type: str + """ + Type of the object relevant to the event. + """ + url: str + """ + URL to retrieve the resource. + """ + + related_object: RelatedObject + """ + Object containing the reference to API resource relevant to the event + """ + + def fetch_related_object(self) -> "EventDestination": + """ + Retrieves the related object from the API. Makes an API request on every call. + """ + return cast( + "EventDestination", + self._requestor.request( + "get", + self.related_object.url, + base_address="api", + options={"stripe_context": self.context}, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__init__.py new file mode 100644 index 00000000..2d77fae8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__init__.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.financial_connections._account import Account as Account + from stripe.financial_connections._account_owner import ( + AccountOwner as AccountOwner, + ) + from stripe.financial_connections._account_owner_service import ( + AccountOwnerService as AccountOwnerService, + ) + from stripe.financial_connections._account_ownership import ( + AccountOwnership as AccountOwnership, + ) + from stripe.financial_connections._account_service import ( + AccountService as AccountService, + ) + from stripe.financial_connections._session import Session as Session + from stripe.financial_connections._session_service import ( + SessionService as SessionService, + ) + from stripe.financial_connections._transaction import ( + Transaction as Transaction, + ) + from stripe.financial_connections._transaction_service import ( + TransactionService as TransactionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Account": ("stripe.financial_connections._account", False), + "AccountOwner": ("stripe.financial_connections._account_owner", False), + "AccountOwnerService": ( + "stripe.financial_connections._account_owner_service", + False, + ), + "AccountOwnership": ( + "stripe.financial_connections._account_ownership", + False, + ), + "AccountService": ("stripe.financial_connections._account_service", False), + "Session": ("stripe.financial_connections._session", False), + "SessionService": ("stripe.financial_connections._session_service", False), + "Transaction": ("stripe.financial_connections._transaction", False), + "TransactionService": ( + "stripe.financial_connections._transaction_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a70eefa107b3eeafe5983ebe3186e3d5ce11b676 GIT binary patch literal 2077 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 g{v;OnrP{u9d0)D5C literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_ownership.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_ownership.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb5a309d28312db547f9b833325698f2c8af7ebb GIT binary patch literal 1145 zcmZuwOK;RL5O$KyW4Bvqp{P6#L_&a8h>a**Kv0R6ss&1mL_s14EH`nxp@|)A7g&V2 z0QcVb4Tzt@g^CM`R3XHP+oA#oPK=W*0)ZuuzZs9m<8Q`qM@L%-hWv3jIo3evvsQ+~ zuEFj-0IyJtVk1SF5gLZZW@=_uXqDJX8<`#2C2pin=7w(Og`R<^Cmis#(`MERTLv=G zJc^wcD0Zp!#;W3nBYm&a{GyePQM48lsg_so(@25VzNJKx)8D!`n-VGS5YaIUcQH{^ zkhB{G;hPxLMt}I z2DPaZn}=XmPwK|jMZJ1}8X7ebZ34DyT>FB>sV%M8txtN|(r~ZDuHDC3p&vounYlQivdXG;Oc;-Z?B-%`g@N=Fpg_m;4J4 z9so+2$x>&e@Gxd1qZk)0j58i@rW&^~ey~Z>ddI~$<`KqX1P%+`Lc-Bu_F_yJDmAfX{n=iorrsSF@Av`+9}Is*I;AKkn!^j|1N8-R>JyhLA3)Aj~! z)SMdF$R67|_`%!zZtVQFcj2pL?sImLX-^Ftv}gSJ;-GYOP_zAfeuzgW-c4NEZco2& zO#e1bZav#>pLpLmQCh^o;jK%ZcCo)oyNgr!2e>YTW~ewY+^N>#9{gG;lIrKcPRVyM zUMZM9R+LFy{jvnY)t;y7DF3CU`!_9R15~6;>Kw~Nb$9>tE>`8A7DqufV9Mhl29{wM i-yLL}+CkkNbmSvC_sJUDX)JtmCJk@v>30N68Ri!;MnIVW literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_account_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8326af34d751058b3c1862d5a4baafc952d9da5f GIT binary patch literal 9136 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 VbS3>j_*$4te)R4`g1_uu{tqe1wjlrj literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfb4f475477d771a02837c7e261346b2ad3827be GIT binary patch literal 4733 zcmb_fO^n;d6(0UbqO=mF)!+WuyUQld+KSf_5*u;jIC1Tb?bvbFM(hNrfP&zXv%9n@ zQW;Wqyj_~y-d!Fz1>_*{wM9!xS+B~u;yWH*}^9;oqH3zPKW3i2J)xhZELnc2hNz-GC-BN zV7lJL<*QitpqIVu5wne>z8FZ0mgc%|Ya|e(zuHb;0y70Y&mH zyRGThg4~sFUplQWzIJ-?^>a&S!Ds5Et~(u@x|bF^uIIEc0l9P;yDs<&*Lq1KTFV7> zB~rhMVI}xF4hQt`Gs89&b+$g?Xv8pTat3PhZ$admg26XMoWMzgr})qxP8q^+cr)}w zKrex%A#Q1=O@cNxqRrqjoQ~#7bZ#2qtPyK6ktPS8$0B(QXCnJ7)nGc7i^gP-aTUw7uhE$%QM8bkZk;Xd=FCdG zG*y4Rw7MJ8G#I;h>ip@&E9%n8H%{-MW3&a)))D|cN=GbU(cmbUEK~`Dk3vQD!iZjs z^hqNTSthBbo2p6M@qVaByXZB?GB649Q8(V)K`Qzhl82drq{kbLCzGHc)Ndeq-8NpT zr2HOQzcfYq_6oK@9#I+_)ZkTjhp(rI~B)ok1G0Dp*;s**9#-bGu`qHWSx zgALtSwcl;Lirs6T({8-xc-T60%5kol_G;r4Bn506jqBLH-muK&M!V~+IricDbI&(i z$Q_4h*3ee5+i+R#X?$rI8fp}Wdb=Csc3?rOu#RuQ&pidrhp0b3wb9so_9cJ%xIg}K zPkMR4^Xcp$iAsAmPW%q?R>=g`We%L9O~8*5Vtj~Q`mwronXWCR9z!R zAOmZ$>a3`tGLTvh@m2w}AmwV;!Q2fhQT$c6v#dk%Uv(gTxYdUr&iSSJo-{uK^C9YAj@P~xlKbglk{HPmQOt*g zm!e5-kPDLlFa+T7g49X~XTY0AAX(;h3=GFX(g_baIMkLk3vv)e$GKqx@M~r}klR|f z1*t@BVW6iGWIdwUt`_E}V62Tv%Vg)3TNB6&uxfIYHZRikOKpNzu&1vD8CXDv*lLHs zf!Jne8YxhdWH_M1i8XvE@)Y>3CN#H^Hyks#b#ygOD?@Y0>pbWaBZ^3jv-~>uTOmH# zKIOx~%cv%9|C(hunt-o3quFza^NwV!bpQck-emh-S+SfO3ko0$q*AmvQ`eO%EKf5? z_PffC5GcB4E6bQ>T!SX?k$g?PfgULPI9-SNm#&VKV9|ltc3kf+M_z^wfK5v`$U!d6 zKe|frI~@#_NLr_r2?hEt9|*eTGIN)HHTYq)O@@oUDaZRP>|X;DmqzeC^e}@8<$ku( z&*txC=ltwkzfkQLO1E<#=YE>+Ps|KbD5q>8F(+>&QiaR_rP3L;FP@0wkHFv7b!c8k z-2Xk6?;}I}F7V;!{B7X}i3EBa+oR~m((i;DTrEMq1%J-)BPXduv(!?IUS$`0s^)fW zoxDm7PeZc+ZF0k?gAxDVp;GORZY>}jUuD$WWp{L42*1jEn)Eo@=e6YQ?t z70DU+Lvolll(d0l+CW#DVnpaNW-~@gkOf#(d$SP38f$(ChVDLS-a`*$RGzp+{L;RS zx1sq+>Pv-t(xfj<{zaPZ=O;eOhaB9E5aZw#a1nCw>!JiK<3?E)q6Q30GKTTw0=Qm+ z@6JWv9kGa(J-fbBj=w4*QFZs%hWek;nG`ifqbEOGuHKXP`SQM=JbzD`-<0Or#}5RQ z-XF1M<^cCgZeF~TI>6O8?qeJmhrbhG%@%Ydq^bW{Qd_vEo z@LZ&vBMZ<3;{oHI% zob5|v@1Kp;`O^DKv79S!mJj>cBR%m*tSVOfQhu{=&X>+V5cpz}t!t2s{&M1$w{doJ z-|PO~3;x6#zP!{Eht8lXD}9{ni8G-q2_?q|{8%Ehv9kHhF@N@@0fNqF=`ZMOONd7Y z(@e@GGLVipXAk=mM+O4){+cd+k$`t(3DRJeSxSk?{&;yH(6=(bx&IYkIl+2t256%h zAPvg@!;C}6K3nytmVB|wHX#e-Qf(%f3#->UEzzR8x2m;GIIqInH=*ZwFd19n;YD0s zp*Qic(k{ir7F@Q~uwWsSh(RSD3E%M;C2o)ehQWavlA4ustgvI}=6E=!;&(l4)9bby z(w=cQM`!0_&rv-^WYCfcI#h^<;@d=cxp*d0e`%p!S7Sf4Pz;VmwqY$)|B5MYc*lyc zQ%4J@<6q0cFz-Yz=t&apwVfsHwsbta_Pj!LFrjCMOY_)3;5hD45^<-v`{>Ah^z409 z{~SHnL(hGVj{E5N--N<_@z{N__6T-a@)7VpY#wIL^4vvkQ-1o+IbW_nLafUe@?RA; B%A^1Q literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_session_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7f7a00c12e89a144068aae4928e5f2cdef89e79 GIT binary patch literal 3148 zcmcgu-ES0C6uDcz-j8VnMl6i~u~lovPA$*^jv?=}t`XBg0;{%(CjT&F{ZOKwK`{cRv(Jw$CCf|`ZXO8I=;PFFIejL*w%fy zML9TOKojAh^#w5V2%{2bq7t7#31ntW9t);`MN`}gS~CWmcR%Op5hi3tJQ-s<~5GGqGz}Hr1*VnxUPt9K$JFhOLcO9S4_Lrcf>P z#p(k71wCOByY2mj>5;-jG)ph9%_@WrqlKFx_u&FZGH@bKFlyF<;H54b6zhg*5^yc) z01Z)rf4O{K&xqwOl-00|R3c(*pI8 z^pxxA;jN(ek(RH`crqk_pZ&9aq0hqn$w!KAI3_(0o6RwLE+seJXz|T<3B!>4IbViA0!B zNDm{ujPxBhwTiP;JW6`__@;689Z%2_Vl~CrojUo8#}ro`8C({q-tnFI6?$s5|8;AN5ZLx={xt5Np<8xYs7^>h=9v z*{}1O5mkY_b_uFRnEZRGR<cKn@7hf)^@(h2~dJ z7nBsSR;6xx*RyNNT9V{=zgm!f@YsSt2B2G46__)jCwQbt(Gp$#B+P*X;)9%oH++KzL+um41#p_+BNZV2jnFpuROSDDiXP@-_yc3r(mVP> z3#`5k>ppQoejI?s)^esT9}Uv(7&!t8_S5ofLsQ^5Zbd@e$TE8QXY|rC8v0dGm&MnX b#Wz=YJ|?Y5KprXYa-4Ga{T0M|f7O2gODqwZ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00cb61e4f867f2e418b2c159a96106282c81ad33 GIT binary patch literal 4114 zcmb^!+in}z@$7}mCB-{+mle>CESs)P%DLG^l^~L$IH_&fh@Ai>P%PHmBYExRE^~IN zT8e@OmJ_&0(K;wl3w>!G@({!6e-!A82nCREkRU1g(!SB5-4=T4%wBBz_TaV)aCXkj z?3pvyGyF?Boh0zM{~R^7JRyI>Mf4~k(!B=AO=1v3ut-Cw2?FAxB{rm*&NJP1^*Vlnn$GG>Z@9o1>0!J>K^a}90ka+)I)L$T(Y+#|A1SE`2C0eff>XFKWRFWqB{f2}646>*gBRw*Or^t-<$P|q%O_)Nhe`Tz^hxhe_YxQ!n1kX&V zhgM>=$*41AVPMyrI~u&Y1v-s zf^GqqR(vh1dlw^Nt^Po`(z847J2U&!`MLAj!p!OUhq6ZsJV&}yfb?b$m8k5;D`p5` z1RhXCq^w9~d3U_W!pb>M_gbz`G5rJcMALCSYG}I0JuGV z)p|TxX|C}6V|FrVZe$F8?mhq?lbzz&#@uJGZmFe?C?--Jg%n0Np8sroOMT8Kuu%|W zdjRmb9>kO@dIMw2)q0CDYS&kIpF!O^^cXaoi>AR<%Uq`5F3J@r=uXgJnqVOq%ay>@ zTt+{01zHxwf)|2!U_uy_bYxEum}0a9H5#LfkfaxRywx;xh#YL|_aoMahgBH$TFkCP zr@8-NA4g{QD*!ji8oAWV4aE!r=uxhPG<-#syC!@kMqTJb(ThbQYoZt36XdoSP~E*= zBH|m8hr0b|O}rgyzLbh+58kV=PsG0}tcm9cWbcAsKv=5KV8Jk~JPUeo$yt0#1^USy zH0x3j12?Eb+=NR@)Vn3H!=QF||NNCE)Gal_9sPin7Mas1!9{YowB&fD{cbr9>5VZm z>)`wMTh#Sj11 zo{QpeCWdLrWwdHF*K_&`QqBR-{W*Y-NGC%I1KatDc79?fmETEae|!2@r$0TjQyl5U zNnwAN$c5x}9|4ZJi6GQp{tp2@tQ~D$pBhQpa@_(O4$H=db{Ym!)Gn8UD>vZDYN*b4w5!UK;)Skv7VyUt!h!Iu$Wtk^3Ejv>I9vf}_A4q_5R7JR!p z_-H5t`VxM08NlDkzx|jFk8KZ4wTGr2kLmDHi0N?hU;jg3J428ZyKWZrU7eiSCwwW) zl;m5-0b^K!^{`+8B?LK z@NmicGm#5-CoLJ&(@o38%6;1H+2gYNbq{k^JnVV5WcFjw#P%Y<66R`Dd#(&iD5kKQ zRA_^~>ec?9Ju4CQ0}ys60DMI5WJv$e4c0DBY`h2Hy1Jw0w$CpBtBWHp9h^?8(sxa|JpJZ{s z`vkv!5rCh3kDHzu+|Eq2GZR~x$!&FVQ=Rl3(2+>uz^;o4b9MZn@JC@%{yctASSSw! zbua)7HVA;nHO+A9n#M5U7~Ts^MKFv2^DDSfCAiGl5G=WT!Er3!=eN@ag{$9Scyk2h z_7lWjL+}QI699NYGhx_bTF`*8zq$;Epy0m7PRcS7C;;OA0dAa+$sJLQsnF~ahryUw z?#A%Ofz5sM?a?>e`4e3t#+19N8cS`Qx=Y~I=_i@|`YD(L;2VXcbL%G~JX=^l9pQz6 zExA8hBvR`qB0O7MUx@H@|7QQOcIx<+e7u)bZKtNTa%f8~?-U2O6+6nT)V!5m#fwJNf>O zgzwVi=7HIEY0h7LpBVfh2GmdiVBjh|&$E3oR^6PM*&LZ|%Y#AKFk%bk0xt$bUPbfU zXmEK4m+E*g2mk45deemKIQXx}u=x2vBon-~@Ow-12o|KIKey%sibk(^)OK-f z4N}!lKm1S3r^Ee%@v8E~$+OZsc?QSsoyJ~&<}L2ma<~l^U69caXZfx=9Zcn~F>FFO zR=GIxcO*d&?kPn0(YNH)Z%O4lvj00W-6qq2m2&qWp_O|IW_$9Nf-om+7WRMMXcu0( KNBpH9jQ;>-;t;0* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/__pycache__/_transaction_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e03b30db617abafb7c23f4e42baf36c56f3cb3fe GIT binary patch literal 3194 zcmbtW&2Jk;6rc5ec)k9J?IcZ;lGbfWi<`z)+Cp1V5dAJHaX&8@!D{Orr`xXA?#w1M zX+Ws0kdP2?A{;oug(&4Ofd7C?BM!AzM1Z)!&6OKKKJjMO8#}b6Y1zY@_vXEMJM-TA zy_p~4aSg#o{~WT)F@%0&Lh#9Lruhjl^TbH>`+B4ikug1sUjEUic(a# zEZO0TT2uvuRk9guWjj*QiW=7`cC->J#yB6g9n)e?P_EnOHXd2NSY_7r)>VtA;ONGHsPGOhl>SSgtjTb<50#JoQY?wW^L` zds4}uE?aT&&9le#qo;Skygp=?X3}b>cj}Hicn=ucOT4MPfMAC^0`E z_IHVFraTBb zQ!&G3#Z+(0Md`8H2x#R90)5iduwsT_b(F8}_7f|sW*jWT>#|IMr8*;IQ(n63NbL|8 zJf+4@Oro$yFI@HGMA)%BgQL`3AFLueGST{_Q zU`k03xFJa(*$`2fOI0U+k%6g1v0d(%P8s*CNh zBh~6v%bCm{F-ljlW9Fx^Go81sOZnQ2d%5cD&5iHLQ_IC;H83zHG0jsBk;iOb@7ljk zeHi6xGoHi(H#^W3pmqV|n4%wcN%sNy06j>eWM4ftQjaA+o%m>?p6stD57dXZ)dz;_ z8@Du~C_dCgN<7h&BT21+A`z_#>(E1`a0@1z?*KWCgl8^?TY#Dy5W>$x^WulHj5_79 zAAPKTE50ja!=w*>!gEX5F~|l+1{m20q!1)25hO`B=!{b$n?M<4hYW+@X)F@Hc6RtN zf%4Tau(ij4{Eq(aidcHXz4XXZdgS4l_3nU}^(OvW8@Pr9acog&)aYhrO!!I|)xM65 zL5J$fAz@m=uvLZ+-C0-{=a|dkX^D&OEH9J}Yr}k|CJ& zlya3+441GVE=c4#X35Q0(M*|&^&7t$ROo&DP_vsJQ44|cWmrSc0D&?{bKnei1LwrO zZEh9B7CrRS=pelu9=gw0V0QQ#~A0D#KKiVJaHY$QJPVP{wb;Wb-p1 zPlKudpLIZC_z5Uf$p~zV*Qt-f9ZcNG$Z9?cK|;2&X@()54Uz@!U%^iV@omF#>wl!c zH#x_g=sz=0Tm8v;qGd`y4*QN~H*ANCmvYC->Ks*uJIoZX;-9Q!)&paB!hf}ilOLAvJh7l?$J#=?y*HUVYZue8!9(<*q+jBqC2d?`! zHe?vVb!zbL;J&5gi;Xao)y}V&T|-0KKr_m?J?I&iKVZxKL$jk6vVGnL|Ax!y{uo?i zL?w8nWPwiqAGi^8g=HN9n4kzr?RZBhO zm*%U4wJ+B6>3$#$Q4oX`1qtKJ==q<~)@3yMtC(Dta?8?7%hK_cP)Jr*6d(_@bAq6K LF}#A<$Q}O!Tp=Vm literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account.py new file mode 100644 index 00000000..c3cb71fb --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account.py @@ -0,0 +1,870 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account as AccountResource + from stripe._customer import Customer + from stripe.financial_connections._account_owner import AccountOwner + from stripe.financial_connections._account_ownership import ( + AccountOwnership, + ) + from stripe.params.financial_connections._account_disconnect_params import ( + AccountDisconnectParams, + ) + from stripe.params.financial_connections._account_list_owners_params import ( + AccountListOwnersParams, + ) + from stripe.params.financial_connections._account_list_params import ( + AccountListParams, + ) + from stripe.params.financial_connections._account_refresh_account_params import ( + AccountRefreshAccountParams, + ) + from stripe.params.financial_connections._account_retrieve_params import ( + AccountRetrieveParams, + ) + from stripe.params.financial_connections._account_subscribe_params import ( + AccountSubscribeParams, + ) + from stripe.params.financial_connections._account_unsubscribe_params import ( + AccountUnsubscribeParams, + ) + + +class Account(ListableAPIResource["Account"]): + """ + A Financial Connections Account represents an account that exists outside of Stripe, to which you have been granted some degree of access. + """ + + OBJECT_NAME: ClassVar[Literal["financial_connections.account"]] = ( + "financial_connections.account" + ) + + class AccountHolder(StripeObject): + account: Optional[ExpandableField["AccountResource"]] + """ + The ID of the Stripe account this account belongs to. Should only be present if `account_holder.type` is `account`. + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the Stripe customer this account belongs to. Present if and only if `account_holder.type` is `customer`. + """ + type: Literal["account", "customer"] + """ + Type of account holder that this account belongs to. + """ + + class Balance(StripeObject): + class Cash(StripeObject): + available: Optional[Dict[str, int]] + """ + The funds available to the account holder. Typically this is the current balance after subtracting any outbound pending transactions and adding any inbound pending transactions. + + Each key is a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. + + Each value is a integer amount. A positive amount indicates money owed to the account holder. A negative amount indicates money owed by the account holder. + """ + + class Credit(StripeObject): + used: Optional[Dict[str, int]] + """ + The credit that has been used by the account holder. + + Each key is a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. + + Each value is a integer amount. A positive amount indicates money owed to the account holder. A negative amount indicates money owed by the account holder. + """ + + as_of: int + """ + The time that the external institution calculated this balance. Measured in seconds since the Unix epoch. + """ + cash: Optional[Cash] + credit: Optional[Credit] + current: Dict[str, int] + """ + The balances owed to (or by) the account holder, before subtracting any outbound pending transactions or adding any inbound pending transactions. + + Each key is a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. + + Each value is a integer amount. A positive amount indicates money owed to the account holder. A negative amount indicates money owed by the account holder. + """ + type: Literal["cash", "credit"] + """ + The `type` of the balance. An additional hash is included on the balance with a name matching this value. + """ + _inner_class_types = {"cash": Cash, "credit": Credit} + + class BalanceRefresh(StripeObject): + last_attempted_at: int + """ + The time at which the last refresh attempt was initiated. Measured in seconds since the Unix epoch. + """ + next_refresh_available_at: Optional[int] + """ + Time at which the next balance refresh can be initiated. This value will be `null` when `status` is `pending`. Measured in seconds since the Unix epoch. + """ + status: Literal["failed", "pending", "succeeded"] + """ + The status of the last refresh attempt. + """ + + class OwnershipRefresh(StripeObject): + last_attempted_at: int + """ + The time at which the last refresh attempt was initiated. Measured in seconds since the Unix epoch. + """ + next_refresh_available_at: Optional[int] + """ + Time at which the next ownership refresh can be initiated. This value will be `null` when `status` is `pending`. Measured in seconds since the Unix epoch. + """ + status: Literal["failed", "pending", "succeeded"] + """ + The status of the last refresh attempt. + """ + + class TransactionRefresh(StripeObject): + id: str + """ + Unique identifier for the object. + """ + last_attempted_at: int + """ + The time at which the last refresh attempt was initiated. Measured in seconds since the Unix epoch. + """ + next_refresh_available_at: Optional[int] + """ + Time at which the next transaction refresh can be initiated. This value will be `null` when `status` is `pending`. Measured in seconds since the Unix epoch. + """ + status: Literal["failed", "pending", "succeeded"] + """ + The status of the last refresh attempt. + """ + + account_holder: Optional[AccountHolder] + """ + The account holder that this account belongs to. + """ + balance: Optional[Balance] + """ + The most recent information about the account's balance. + """ + balance_refresh: Optional[BalanceRefresh] + """ + The state of the most recent attempt to refresh the account balance. + """ + category: Literal["cash", "credit", "investment", "other"] + """ + The type of the account. Account category is further divided in `subcategory`. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + display_name: Optional[str] + """ + A human-readable name that has been assigned to this account, either by the account holder or by the institution. + """ + id: str + """ + Unique identifier for the object. + """ + institution_name: str + """ + The name of the institution that holds this account. + """ + last4: Optional[str] + """ + The last 4 digits of the account number. If present, this will be 4 numeric characters. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["financial_connections.account"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + ownership: Optional[ExpandableField["AccountOwnership"]] + """ + The most recent information about the account's owners. + """ + ownership_refresh: Optional[OwnershipRefresh] + """ + The state of the most recent attempt to refresh the account owners. + """ + permissions: Optional[ + List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + ] + """ + The list of permissions granted by this account. + """ + status: Literal["active", "disconnected", "inactive"] + """ + The status of the link to the account. + """ + subcategory: Literal[ + "checking", + "credit_card", + "line_of_credit", + "mortgage", + "other", + "savings", + ] + """ + If `category` is `cash`, one of: + + - `checking` + - `savings` + - `other` + + If `category` is `credit`, one of: + + - `mortgage` + - `line_of_credit` + - `credit_card` + - `other` + + If `category` is `investment` or `other`, this will be `other`. + """ + subscriptions: Optional[List[Literal["transactions"]]] + """ + The list of data refresh subscriptions requested on this account. + """ + supported_payment_method_types: List[Literal["link", "us_bank_account"]] + """ + The [PaymentMethod type](https://stripe.com/docs/api/payment_methods/object#payment_method_object-type)(s) that can be created from this account. + """ + transaction_refresh: Optional[TransactionRefresh] + """ + The state of the most recent attempt to refresh the account transactions. + """ + + @classmethod + def _cls_disconnect( + cls, account: str, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def disconnect( + account: str, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + ... + + @overload + def disconnect( + self, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + ... + + @class_method_variant("_cls_disconnect") + def disconnect( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_disconnect_async( + cls, account: str, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + await cls._static_request_async( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def disconnect_async( + account: str, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + ... + + @overload + async def disconnect_async( + self, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + ... + + @class_method_variant("_cls_disconnect_async") + async def disconnect_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountDisconnectParams"] + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["AccountListParams"] + ) -> ListObject["Account"]: + """ + Returns a list of Financial Connections Account objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["AccountListParams"] + ) -> ListObject["Account"]: + """ + Returns a list of Financial Connections Account objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def _cls_list_owners( + cls, account: str, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + return cast( + ListObject["AccountOwner"], + cls._static_request( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def list_owners( + account: str, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + ... + + @overload + def list_owners( + self, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + ... + + @class_method_variant("_cls_list_owners") + def list_owners( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + return cast( + ListObject["AccountOwner"], + self._request( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_list_owners_async( + cls, account: str, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + return cast( + ListObject["AccountOwner"], + await cls._static_request_async( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def list_owners_async( + account: str, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + ... + + @overload + async def list_owners_async( + self, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + ... + + @class_method_variant("_cls_list_owners_async") + async def list_owners_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountListOwnersParams"] + ) -> ListObject["AccountOwner"]: + """ + Lists all owners for a given Account + """ + return cast( + ListObject["AccountOwner"], + await self._request_async( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_refresh_account( + cls, account: str, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def refresh_account( + account: str, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + ... + + @overload + def refresh_account( + self, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + ... + + @class_method_variant("_cls_refresh_account") + def refresh_account( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_refresh_account_async( + cls, account: str, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + await cls._static_request_async( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def refresh_account_async( + account: str, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + ... + + @overload + async def refresh_account_async( + self, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + ... + + @class_method_variant("_cls_refresh_account_async") + async def refresh_account_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountRefreshAccountParams"] + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["AccountRetrieveParams"] + ) -> "Account": + """ + Retrieves the details of an Financial Connections Account. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["AccountRetrieveParams"] + ) -> "Account": + """ + Retrieves the details of an Financial Connections Account. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_subscribe( + cls, account: str, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def subscribe( + account: str, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + ... + + @overload + def subscribe( + self, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + ... + + @class_method_variant("_cls_subscribe") + def subscribe( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_subscribe_async( + cls, account: str, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + await cls._static_request_async( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def subscribe_async( + account: str, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + ... + + @overload + async def subscribe_async( + self, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + ... + + @class_method_variant("_cls_subscribe_async") + async def subscribe_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountSubscribeParams"] + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_unsubscribe( + cls, account: str, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + def unsubscribe( + account: str, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + ... + + @overload + def unsubscribe( + self, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + ... + + @class_method_variant("_cls_unsubscribe") + def unsubscribe( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_unsubscribe_async( + cls, account: str, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + await cls._static_request_async( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(account) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def unsubscribe_async( + account: str, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + ... + + @overload + async def unsubscribe_async( + self, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + ... + + @class_method_variant("_cls_unsubscribe_async") + async def unsubscribe_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AccountUnsubscribeParams"] + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = { + "account_holder": AccountHolder, + "balance": Balance, + "balance_refresh": BalanceRefresh, + "ownership_refresh": OwnershipRefresh, + "transaction_refresh": TransactionRefresh, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner.py new file mode 100644 index 00000000..86e2a5c8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal + + +class AccountOwner(StripeObject): + """ + Describes an owner of an account. + """ + + OBJECT_NAME: ClassVar[Literal["financial_connections.account_owner"]] = ( + "financial_connections.account_owner" + ) + email: Optional[str] + """ + The email address of the owner. + """ + id: str + """ + Unique identifier for the object. + """ + name: str + """ + The full name of the owner. + """ + object: Literal["financial_connections.account_owner"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + ownership: str + """ + The ownership object that this owner belongs to. + """ + phone: Optional[str] + """ + The raw phone number of the owner. + """ + raw_address: Optional[str] + """ + The raw physical address of the owner. + """ + refreshed_at: Optional[int] + """ + The timestamp of the refresh that updated this owner. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner_service.py new file mode 100644 index 00000000..fa285126 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_owner_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.financial_connections._account_owner import AccountOwner + from stripe.params.financial_connections._account_owner_list_params import ( + AccountOwnerListParams, + ) + + +class AccountOwnerService(StripeService): + def list( + self, + account: str, + params: "AccountOwnerListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[AccountOwner]": + """ + Lists all owners for a given Account + """ + return cast( + "ListObject[AccountOwner]", + self._request( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + account: str, + params: "AccountOwnerListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[AccountOwner]": + """ + Lists all owners for a given Account + """ + return cast( + "ListObject[AccountOwner]", + await self._request_async( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_ownership.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_ownership.py new file mode 100644 index 00000000..5280daff --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_ownership.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.financial_connections._account_owner import AccountOwner + + +class AccountOwnership(StripeObject): + """ + Describes a snapshot of the owners of an account at a particular point in time. + """ + + OBJECT_NAME: ClassVar[ + Literal["financial_connections.account_ownership"] + ] = "financial_connections.account_ownership" + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + object: Literal["financial_connections.account_ownership"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + owners: ListObject["AccountOwner"] + """ + A paginated list of owners for this account. + """ diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_service.py new file mode 100644 index 00000000..a036dc40 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_account_service.py @@ -0,0 +1,321 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.financial_connections._account import Account + from stripe.financial_connections._account_owner_service import ( + AccountOwnerService, + ) + from stripe.params.financial_connections._account_disconnect_params import ( + AccountDisconnectParams, + ) + from stripe.params.financial_connections._account_list_params import ( + AccountListParams, + ) + from stripe.params.financial_connections._account_refresh_params import ( + AccountRefreshParams, + ) + from stripe.params.financial_connections._account_retrieve_params import ( + AccountRetrieveParams, + ) + from stripe.params.financial_connections._account_subscribe_params import ( + AccountSubscribeParams, + ) + from stripe.params.financial_connections._account_unsubscribe_params import ( + AccountUnsubscribeParams, + ) + +_subservices = { + "owners": [ + "stripe.financial_connections._account_owner_service", + "AccountOwnerService", + ], +} + + +class AccountService(StripeService): + owners: "AccountOwnerService" + + def __init__(self, requestor): + super().__init__(requestor) + + def __getattr__(self, name): + try: + import_from, service = _subservices[name] + service_class = getattr( + import_module(import_from), + service, + ) + setattr( + self, + name, + service_class(self._requestor), + ) + return getattr(self, name) + except KeyError: + raise AttributeError() + + def list( + self, + params: Optional["AccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Account]": + """ + Returns a list of Financial Connections Account objects. + """ + return cast( + "ListObject[Account]", + self._request( + "get", + "/v1/financial_connections/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["AccountListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Account]": + """ + Returns a list of Financial Connections Account objects. + """ + return cast( + "ListObject[Account]", + await self._request_async( + "get", + "/v1/financial_connections/accounts", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + account: str, + params: Optional["AccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an Financial Connections Account. + """ + return cast( + "Account", + self._request( + "get", + "/v1/financial_connections/accounts/{account}".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + account: str, + params: Optional["AccountRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Retrieves the details of an Financial Connections Account. + """ + return cast( + "Account", + await self._request_async( + "get", + "/v1/financial_connections/accounts/{account}".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def disconnect( + self, + account: str, + params: Optional["AccountDisconnectParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def disconnect_async( + self, + account: str, + params: Optional["AccountDisconnectParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Disables your access to a Financial Connections Account. You will no longer be able to access data associated with the account (e.g. balances, transactions). + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def refresh( + self, + account: str, + params: "AccountRefreshParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def refresh_async( + self, + account: str, + params: "AccountRefreshParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Refreshes the data associated with a Financial Connections Account. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def subscribe( + self, + account: str, + params: "AccountSubscribeParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def subscribe_async( + self, + account: str, + params: "AccountSubscribeParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Subscribes to periodic refreshes of data associated with a Financial Connections Account. When the account status is active, data is typically refreshed once a day. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/subscribe".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def unsubscribe( + self, + account: str, + params: "AccountUnsubscribeParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + self._request( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def unsubscribe_async( + self, + account: str, + params: "AccountUnsubscribeParams", + options: Optional["RequestOptions"] = None, + ) -> "Account": + """ + Unsubscribes from periodic refreshes of data associated with a Financial Connections Account. + """ + return cast( + "Account", + await self._request_async( + "post", + "/v1/financial_connections/accounts/{account}/unsubscribe".format( + account=sanitize_id(account), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session.py new file mode 100644 index 00000000..bbd15a82 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._stripe_object import StripeObject +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._account import Account as AccountResource + from stripe._customer import Customer + from stripe.financial_connections._account import ( + Account as FinancialConnectionsAccountResource, + ) + from stripe.params.financial_connections._session_create_params import ( + SessionCreateParams, + ) + from stripe.params.financial_connections._session_retrieve_params import ( + SessionRetrieveParams, + ) + + +class Session(CreateableAPIResource["Session"]): + """ + A Financial Connections Session is the secure way to programmatically launch the client-side Stripe.js modal that lets your users link their accounts. + """ + + OBJECT_NAME: ClassVar[Literal["financial_connections.session"]] = ( + "financial_connections.session" + ) + + class AccountHolder(StripeObject): + account: Optional[ExpandableField["AccountResource"]] + """ + The ID of the Stripe account this account belongs to. Should only be present if `account_holder.type` is `account`. + """ + customer: Optional[ExpandableField["Customer"]] + """ + ID of the Stripe customer this account belongs to. Present if and only if `account_holder.type` is `customer`. + """ + type: Literal["account", "customer"] + """ + Type of account holder that this account belongs to. + """ + + class Filters(StripeObject): + account_subcategories: Optional[ + List[ + Literal[ + "checking", + "credit_card", + "line_of_credit", + "mortgage", + "savings", + ] + ] + ] + """ + Restricts the Session to subcategories of accounts that can be linked. Valid subcategories are: `checking`, `savings`, `mortgage`, `line_of_credit`, `credit_card`. + """ + countries: Optional[List[str]] + """ + List of countries from which to filter accounts. + """ + + account_holder: Optional[AccountHolder] + """ + The account holder for whom accounts are collected in this session. + """ + accounts: ListObject["FinancialConnectionsAccountResource"] + """ + The accounts that were collected as part of this Session. + """ + client_secret: str + """ + A value that will be passed to the client to launch the authentication flow. + """ + filters: Optional[Filters] + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["financial_connections.session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + permissions: List[ + Literal["balances", "ownership", "payment_method", "transactions"] + ] + """ + Permissions requested for accounts collected during this session. + """ + prefetch: Optional[List[Literal["balances", "ownership", "transactions"]]] + """ + Data features requested to be retrieved upon account creation. + """ + return_url: Optional[str] + """ + For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. + """ + + @classmethod + def create(cls, **params: Unpack["SessionCreateParams"]) -> "Session": + """ + To launch the Financial Connections authorization flow, create a Session. The session's client_secret can be used to launch the flow using Stripe.js. + """ + return cast( + "Session", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["SessionCreateParams"] + ) -> "Session": + """ + To launch the Financial Connections authorization flow, create a Session. The session's client_secret can be used to launch the flow using Stripe.js. + """ + return cast( + "Session", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["SessionRetrieveParams"] + ) -> "Session": + """ + Retrieves the details of a Financial Connections Session + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["SessionRetrieveParams"] + ) -> "Session": + """ + Retrieves the details of a Financial Connections Session + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"account_holder": AccountHolder, "filters": Filters} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session_service.py new file mode 100644 index 00000000..ca7477e0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_session_service.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._request_options import RequestOptions + from stripe.financial_connections._session import Session + from stripe.params.financial_connections._session_create_params import ( + SessionCreateParams, + ) + from stripe.params.financial_connections._session_retrieve_params import ( + SessionRetrieveParams, + ) + + +class SessionService(StripeService): + def retrieve( + self, + session: str, + params: Optional["SessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Retrieves the details of a Financial Connections Session + """ + return cast( + "Session", + self._request( + "get", + "/v1/financial_connections/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + session: str, + params: Optional["SessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + Retrieves the details of a Financial Connections Session + """ + return cast( + "Session", + await self._request_async( + "get", + "/v1/financial_connections/sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "SessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + To launch the Financial Connections authorization flow, create a Session. The session's client_secret can be used to launch the flow using Stripe.js. + """ + return cast( + "Session", + self._request( + "post", + "/v1/financial_connections/sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "SessionCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Session": + """ + To launch the Financial Connections authorization flow, create a Session. The session's client_secret can be used to launch the flow using Stripe.js. + """ + return cast( + "Session", + await self._request_async( + "post", + "/v1/financial_connections/sessions", + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction.py new file mode 100644 index 00000000..9a536958 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar, Optional +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.financial_connections._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.financial_connections._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + + +class Transaction(ListableAPIResource["Transaction"]): + """ + A Transaction represents a real transaction that affects a Financial Connections Account balance. + """ + + OBJECT_NAME: ClassVar[Literal["financial_connections.transaction"]] = ( + "financial_connections.transaction" + ) + + class StatusTransitions(StripeObject): + posted_at: Optional[int] + """ + Time at which this transaction posted. Measured in seconds since the Unix epoch. + """ + void_at: Optional[int] + """ + Time at which this transaction was voided. Measured in seconds since the Unix epoch. + """ + + account: str + """ + The ID of the Financial Connections Account this transaction belongs to. + """ + amount: int + """ + The amount of this transaction, in cents (or local equivalent). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + description: str + """ + The description of this transaction. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + object: Literal["financial_connections.transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["pending", "posted", "void"] + """ + The status of the transaction. + """ + status_transitions: StatusTransitions + transacted_at: int + """ + Time at which the transaction was transacted. Measured in seconds since the Unix epoch. + """ + transaction_refresh: str + """ + The token of the transaction refresh that last updated or created this transaction. + """ + updated: int + """ + Time at which the object was last updated. Measured in seconds since the Unix epoch. + """ + + @classmethod + def list( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Returns a list of Financial Connections Transaction objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Returns a list of Financial Connections Transaction objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves the details of a Financial Connections Transaction + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves the details of a Financial Connections Transaction + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"status_transitions": StatusTransitions} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction_service.py new file mode 100644 index 00000000..bf33c3b6 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/financial_connections/_transaction_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.financial_connections._transaction import Transaction + from stripe.params.financial_connections._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.financial_connections._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + + +class TransactionService(StripeService): + def list( + self, + params: "TransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Returns a list of Financial Connections Transaction objects. + """ + return cast( + "ListObject[Transaction]", + self._request( + "get", + "/v1/financial_connections/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "TransactionListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Returns a list of Financial Connections Transaction objects. + """ + return cast( + "ListObject[Transaction]", + await self._request_async( + "get", + "/v1/financial_connections/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves the details of a Financial Connections Transaction + """ + return cast( + "Transaction", + self._request( + "get", + "/v1/financial_connections/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves the details of a Financial Connections Transaction + """ + return cast( + "Transaction", + await self._request_async( + "get", + "/v1/financial_connections/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__init__.py new file mode 100644 index 00000000..8d01032a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__init__.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.forwarding._request import Request as Request + from stripe.forwarding._request_service import ( + RequestService as RequestService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Request": ("stripe.forwarding._request", False), + "RequestService": ("stripe.forwarding._request_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2bb55494ef40fa5b98621d19fda170a1b510567 GIT binary patch literal 987 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 Hl^Oe=<*6(h literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/_request_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/__pycache__/_request_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aacc84838a233429a585f9710f602f782e8e8752 GIT binary patch literal 3873 zcmcf^O>Yxd@a=kcZLdGFw(~&(X+ld-4a6p)0in`Lgl|y-f~rzo(bdMg35N9tZ#RL2 zRH^_~s#K{xHByi5DGL1saOl04L_J`w6tz_^^ybRYRylR%?XI1~Bmr7=594|B@!q`o zdgC8sF`2+;{n=9pw-NFiF8ojQkoq@(%oCmHoJopYj^hyLO}-e&1sEPMg`$`fi&9Qv zYrzZ_L%9$~j1b)evZ5I-$~l?wBr{Ts=AsM_nz3R$7iW0LY%3}`h2dc{QB3BN442JR zu|3z$5uThOdgMOQqXxGaaBa(V%*4|1-*J)VoY)nc7AnRSgH9Ln1`r~aRw~$qSwk)8 zY2FE4tk{KeNi!WGuUR%~y#L{)Q|gJcr%s$dH+BXH@_Pl#zBqo}$Rj&`*|<4n0DD(N-zE;ww^LjuR=D0cjfw<@;{vz)(uaLB~ zdRXrFK0Mp%*G#kjbeZ1Ls9q>ddPek@S>{-ohA>UR9!_A=uvfdX(?i*bhDw&Yxn(&4 ztx{MBIMH#=ku)tFZ_Xw$;0*DHhVNNtfEW8j{w_46#D;JIIWa)PH zq+#8#%a!cevTc}yqvi4qFf%)<YJX@Kuua!%OGDE{zt6&?06%f!S z4J&K0Qd(=Tf4*wD^_8j2ID!eznDr~c3t?P?FFVE3fcz? zM@CPmj62)y<;YqmxvVtmodocN{Jq9o$=P)M}!*Lv_jSt2wLU{l`hXn3nr zr95l6vwlzY9qN*gfztZC>uBU%=XQBVcY}6|oBqGNdlPSr4xyM68~iaw-#}ukL!$1@ zy*%5wAaI;XcJ@v||73xqgJ4{< zFQf(5sOc`CIubPcqGnU{%7Q>&LrEsy=<61;@JVr7MF^fYHX6)!Z3v*x7zcUlGyv!k zN!C%DnGGE^^H>>KRz@D}{NeJ$z9nVkC*|ChJ=V?jjZtH{{uLbZGClU+M-IAjaGS0i zqFFG@tq#_e58`qNL9;dcG1!CTVFY+VdI-P( z_5s+clq?v%$=##JCGH`2T#z4y0Za2^V`*+I9f6l$EontVRUKJXi)DSvL_DghH>Why zmiqZj+J>(rTu;~FQ_kfp^9XX0O z2q)nN(YBfhzhHZ!d#U^2vNBW);yTp43(D1GBB$yR#4_X+)t{oe>t6KiSh~~cbf>6{ z>i+tZ6UE->M1AIzT`*amI+8t8ficaECY$;aE=4tN+eXQPKQ9)=mguB>Wj0~BVgJq{3(W&mg5b68FvWJJV#FTUKDRk$6oIYdfRTH#SC3L+7E57 z)2LBT4<8ygZQn)=Uu%}itD$3VUA#-NLE=MUy#t^Y;5hD?M7W_9vgc>Adxh-(HK42r hnHAyiiZJ|)=S2zF;w6ruPi2ea "Request": + """ + Creates a ForwardingRequest object. + """ + return cast( + "Request", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["RequestCreateParams"] + ) -> "Request": + """ + Creates a ForwardingRequest object. + """ + return cast( + "Request", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["RequestListParams"] + ) -> ListObject["Request"]: + """ + Lists all ForwardingRequest objects. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["RequestListParams"] + ) -> ListObject["Request"]: + """ + Lists all ForwardingRequest objects. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["RequestRetrieveParams"] + ) -> "Request": + """ + Retrieves a ForwardingRequest object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["RequestRetrieveParams"] + ) -> "Request": + """ + Retrieves a ForwardingRequest object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "request_context": RequestContext, + "request_details": RequestDetails, + "response_details": ResponseDetails, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/_request_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/_request_service.py new file mode 100644 index 00000000..b52e6a3a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/forwarding/_request_service.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.forwarding._request import Request + from stripe.params.forwarding._request_create_params import ( + RequestCreateParams, + ) + from stripe.params.forwarding._request_list_params import RequestListParams + from stripe.params.forwarding._request_retrieve_params import ( + RequestRetrieveParams, + ) + + +class RequestService(StripeService): + def list( + self, + params: Optional["RequestListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Request]": + """ + Lists all ForwardingRequest objects. + """ + return cast( + "ListObject[Request]", + self._request( + "get", + "/v1/forwarding/requests", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["RequestListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Request]": + """ + Lists all ForwardingRequest objects. + """ + return cast( + "ListObject[Request]", + await self._request_async( + "get", + "/v1/forwarding/requests", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "RequestCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Request": + """ + Creates a ForwardingRequest object. + """ + return cast( + "Request", + self._request( + "post", + "/v1/forwarding/requests", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "RequestCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Request": + """ + Creates a ForwardingRequest object. + """ + return cast( + "Request", + await self._request_async( + "post", + "/v1/forwarding/requests", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + id: str, + params: Optional["RequestRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Request": + """ + Retrieves a ForwardingRequest object. + """ + return cast( + "Request", + self._request( + "get", + "/v1/forwarding/requests/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + id: str, + params: Optional["RequestRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Request": + """ + Retrieves a ForwardingRequest object. + """ + return cast( + "Request", + await self._request_async( + "get", + "/v1/forwarding/requests/{id}".format(id=sanitize_id(id)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/identity/__init__.py new file mode 100644 index 00000000..037286c9 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/identity/__init__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.identity._verification_report import ( + VerificationReport as VerificationReport, + ) + from stripe.identity._verification_report_service import ( + VerificationReportService as VerificationReportService, + ) + from stripe.identity._verification_session import ( + VerificationSession as VerificationSession, + ) + from stripe.identity._verification_session_service import ( + VerificationSessionService as VerificationSessionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "VerificationReport": ("stripe.identity._verification_report", False), + "VerificationReportService": ( + "stripe.identity._verification_report_service", + False, + ), + "VerificationSession": ("stripe.identity._verification_session", False), + "VerificationSessionService": ( + "stripe.identity._verification_session_service", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a3669574575a64963a4782e6bbb3b9366d9cab8 GIT binary patch literal 1352 zcmb7EOKTKC5U!rr?q(l}d1y=&LN*>o%?>{Bq=M1JCm|RWvIxT_)5bCLSh_op4I2pJ z!DDV-6g(=q`zO38UgDq!(Tlf@YeaIgdM1mCBC&?4{;H;`tGnuBUgq;{fWp7^xi55p zkJ4xf+Oah6;qnL^aEJ#!DH9^G;wipbRtZp*^`fnMny;7j_?zY#eyW^`vF@e)OgR%{ z!)x=idiVe7ouq8RosoNV{rYi|a*mnk?)!_om82{W zalzawEx8U2gez(#d*PSDHj68dnac9f-2~b^IgLy>^zQ_o98g9M?<(@=-WrnwWQJ5J zsnV!s2&$H72vmHVtEe791_Z8&)L}n@+X}!6Sy6k3oq>LiF3QJ}8Y zVI6a%OhOTaEFQ}cFdVzcwCwdAaGxx~k~#&8#3bXU9%b#;%qvwUt466=Dk?&-D1DXI zMi~oPR5*vWJ3TLGY@1r71r?u0hNv)%j&d%y`TTT3o5)C3E^j-4vQ4eKp--*ZV9B~b z`J4!=)}>HTZ+IjO=iFe{8mY|8(ZI15Xs}>;?zB~{iMwHNqIB%I#a%&%s~Aw3rQAwJ zVzp>t*|rgwC**t^lu-PG0YLIc!%;rrJ#bo71!g6W+DZ#oBGBWYQi1p*9KL8g5i>?3w literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_report.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/identity/__pycache__/_verification_report.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..243d22356f04e6bcc1f8f44819d9c7b0c084a344 GIT binary patch literal 11628 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 Io`Tqa09h0zeE ListObject["VerificationReport"]: + """ + List all verification reports. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["VerificationReportListParams"] + ) -> ListObject["VerificationReport"]: + """ + List all verification reports. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["VerificationReportRetrieveParams"] + ) -> "VerificationReport": + """ + Retrieves an existing VerificationReport + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["VerificationReportRetrieveParams"] + ) -> "VerificationReport": + """ + Retrieves an existing VerificationReport + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "document": Document, + "email": Email, + "id_number": IdNumber, + "options": Options, + "phone": Phone, + "selfie": Selfie, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_report_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_report_service.py new file mode 100644 index 00000000..65b8b163 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_report_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.identity._verification_report import VerificationReport + from stripe.params.identity._verification_report_list_params import ( + VerificationReportListParams, + ) + from stripe.params.identity._verification_report_retrieve_params import ( + VerificationReportRetrieveParams, + ) + + +class VerificationReportService(StripeService): + def list( + self, + params: Optional["VerificationReportListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[VerificationReport]": + """ + List all verification reports. + """ + return cast( + "ListObject[VerificationReport]", + self._request( + "get", + "/v1/identity/verification_reports", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["VerificationReportListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[VerificationReport]": + """ + List all verification reports. + """ + return cast( + "ListObject[VerificationReport]", + await self._request_async( + "get", + "/v1/identity/verification_reports", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + report: str, + params: Optional["VerificationReportRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationReport": + """ + Retrieves an existing VerificationReport + """ + return cast( + "VerificationReport", + self._request( + "get", + "/v1/identity/verification_reports/{report}".format( + report=sanitize_id(report), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + report: str, + params: Optional["VerificationReportRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationReport": + """ + Retrieves an existing VerificationReport + """ + return cast( + "VerificationReport", + await self._request_async( + "get", + "/v1/identity/verification_reports/{report}".format( + report=sanitize_id(report), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session.py b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session.py new file mode 100644 index 00000000..7c7fe498 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session.py @@ -0,0 +1,875 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.identity._verification_report import VerificationReport + from stripe.params.identity._verification_session_cancel_params import ( + VerificationSessionCancelParams, + ) + from stripe.params.identity._verification_session_create_params import ( + VerificationSessionCreateParams, + ) + from stripe.params.identity._verification_session_list_params import ( + VerificationSessionListParams, + ) + from stripe.params.identity._verification_session_modify_params import ( + VerificationSessionModifyParams, + ) + from stripe.params.identity._verification_session_redact_params import ( + VerificationSessionRedactParams, + ) + from stripe.params.identity._verification_session_retrieve_params import ( + VerificationSessionRetrieveParams, + ) + + +class VerificationSession( + CreateableAPIResource["VerificationSession"], + ListableAPIResource["VerificationSession"], + UpdateableAPIResource["VerificationSession"], +): + """ + A VerificationSession guides you through the process of collecting and verifying the identities + of your users. It contains details about the type of verification, such as what [verification + check](https://docs.stripe.com/docs/identity/verification-checks) to perform. Only create one VerificationSession for + each verification in your system. + + A VerificationSession transitions through [multiple + statuses](https://docs.stripe.com/docs/identity/how-sessions-work) throughout its lifetime as it progresses through + the verification flow. The VerificationSession contains the user's verified data after + verification checks are complete. + + Related guide: [The Verification Sessions API](https://stripe.com/docs/identity/verification-sessions) + """ + + OBJECT_NAME: ClassVar[Literal["identity.verification_session"]] = ( + "identity.verification_session" + ) + + class LastError(StripeObject): + code: Optional[ + Literal[ + "abandoned", + "consent_declined", + "country_not_supported", + "device_not_supported", + "document_expired", + "document_type_not_supported", + "document_unverified_other", + "email_unverified_other", + "email_verification_declined", + "id_number_insufficient_document_data", + "id_number_mismatch", + "id_number_unverified_other", + "phone_unverified_other", + "phone_verification_declined", + "selfie_document_missing_photo", + "selfie_face_mismatch", + "selfie_manipulated", + "selfie_unverified_other", + "under_supported_age", + ] + ] + """ + A short machine-readable string giving the reason for the verification or user-session failure. + """ + reason: Optional[str] + """ + A message that explains the reason for verification or user-session failure. + """ + + class Options(StripeObject): + class Document(StripeObject): + allowed_types: Optional[ + List[Literal["driving_license", "id_card", "passport"]] + ] + """ + Array of strings of allowed identity document types. If the provided identity document isn't one of the allowed types, the verification check will fail with a document_type_not_allowed error code. + """ + require_id_number: Optional[bool] + """ + Collect an ID number and perform an [ID number check](https://stripe.com/docs/identity/verification-checks?type=id-number) with the document's extracted name and date of birth. + """ + require_live_capture: Optional[bool] + """ + Disable image uploads, identity document images have to be captured using the device's camera. + """ + require_matching_selfie: Optional[bool] + """ + Capture a face image and perform a [selfie check](https://stripe.com/docs/identity/verification-checks?type=selfie) comparing a photo ID and a picture of your user's face. [Learn more](https://stripe.com/docs/identity/selfie). + """ + + class Email(StripeObject): + require_verification: Optional[bool] + """ + Request one time password verification of `provided_details.email`. + """ + + class IdNumber(StripeObject): + pass + + class Matching(StripeObject): + dob: Optional[Literal["none", "similar"]] + """ + Strictness of the DOB matching policy to apply. + """ + name: Optional[Literal["none", "similar"]] + """ + Strictness of the name matching policy to apply. + """ + + class Phone(StripeObject): + require_verification: Optional[bool] + """ + Request one time password verification of `provided_details.phone`. + """ + + document: Optional[Document] + email: Optional[Email] + id_number: Optional[IdNumber] + matching: Optional[Matching] + phone: Optional[Phone] + _inner_class_types = { + "document": Document, + "email": Email, + "id_number": IdNumber, + "matching": Matching, + "phone": Phone, + } + + class ProvidedDetails(StripeObject): + email: Optional[str] + """ + Email of user being verified + """ + phone: Optional[str] + """ + Phone number of user being verified + """ + + class Redaction(StripeObject): + status: Literal["processing", "redacted"] + """ + Indicates whether this object and its related objects have been redacted or not. + """ + + class RelatedPerson(StripeObject): + account: str + """ + Token referencing the associated Account of the related Person resource. + """ + person: str + """ + Token referencing the related Person resource. + """ + + class VerifiedOutputs(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class Dob(StripeObject): + day: Optional[int] + """ + Numerical day between 1 and 31. + """ + month: Optional[int] + """ + Numerical month between 1 and 12. + """ + year: Optional[int] + """ + The four-digit year. + """ + + address: Optional[Address] + """ + The user's verified address. + """ + dob: Optional[Dob] + """ + The user's verified date of birth. + """ + email: Optional[str] + """ + The user's verified email address + """ + first_name: Optional[str] + """ + The user's verified first name. + """ + id_number: Optional[str] + """ + The user's verified id number. + """ + id_number_type: Optional[Literal["br_cpf", "sg_nric", "us_ssn"]] + """ + The user's verified id number type. + """ + last_name: Optional[str] + """ + The user's verified last name. + """ + phone: Optional[str] + """ + The user's verified phone number + """ + sex: Optional[Literal["[redacted]", "female", "male", "unknown"]] + """ + The user's verified sex. + """ + unparsed_place_of_birth: Optional[str] + """ + The user's verified place of birth as it appears in the document. + """ + unparsed_sex: Optional[str] + """ + The user's verified sex as it appears in the document. + """ + _inner_class_types = {"address": Address, "dob": Dob} + + client_reference_id: Optional[str] + """ + A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. + """ + client_secret: Optional[str] + """ + The short-lived client secret used by Stripe.js to [show a verification modal](https://stripe.com/docs/js/identity/modal) inside your app. This client secret expires after 24 hours and can only be used once. Don't store it, log it, embed it in a URL, or expose it to anyone other than the user. Make sure that you have TLS enabled on any page that includes the client secret. Refer to our docs on [passing the client secret to the frontend](https://stripe.com/docs/identity/verification-sessions#client-secret) to learn more. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + last_error: Optional[LastError] + """ + If present, this property tells you the last error encountered when processing the verification. + """ + last_verification_report: Optional[ExpandableField["VerificationReport"]] + """ + ID of the most recent VerificationReport. [Learn more about accessing detailed verification results.](https://stripe.com/docs/identity/verification-sessions#results) + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["identity.verification_session"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + options: Optional[Options] + """ + A set of options for the session's verification checks. + """ + provided_details: Optional[ProvidedDetails] + """ + Details provided about the user being verified. These details may be shown to the user. + """ + redaction: Optional[Redaction] + """ + Redaction status of this VerificationSession. If the VerificationSession is not redacted, this field will be null. + """ + related_customer: Optional[str] + """ + Customer ID + """ + related_person: Optional[RelatedPerson] + status: Literal["canceled", "processing", "requires_input", "verified"] + """ + Status of this VerificationSession. [Learn more about the lifecycle of sessions](https://stripe.com/docs/identity/how-sessions-work). + """ + type: Literal["document", "id_number", "verification_flow"] + """ + The type of [verification check](https://stripe.com/docs/identity/verification-checks) to be performed. + """ + url: Optional[str] + """ + The short-lived URL that you use to redirect a user to Stripe to submit their identity information. This URL expires after 48 hours and can only be used once. Don't store it, log it, send it in emails or expose it to anyone other than the user. Refer to our docs on [verifying identity documents](https://stripe.com/docs/identity/verify-identity-documents?platform=web&type=redirect) to learn how to redirect users to Stripe. + """ + verification_flow: Optional[str] + """ + The configuration token of a verification flow from the dashboard. + """ + verified_outputs: Optional[VerifiedOutputs] + """ + The user's verified data. + """ + + @classmethod + def _cls_cancel( + cls, session: str, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + cls._static_request( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + def cancel( + session: str, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + ... + + @overload + def cancel( + self, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + ... + + @class_method_variant("_cls_cancel") + def cancel( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_cancel_async( + cls, session: str, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + await cls._static_request_async( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def cancel_async( + session: str, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + ... + + @overload + async def cancel_async( + self, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + ... + + @class_method_variant("_cls_cancel_async") + async def cancel_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["VerificationSessionCancelParams"] + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["VerificationSessionCreateParams"] + ) -> "VerificationSession": + """ + Creates a VerificationSession object. + + After the VerificationSession is created, display a verification modal using the session client_secret or send your users to the session's url. + + If your API key is in test mode, verification checks won't actually process, though everything else will occur as if in live mode. + + Related guide: [Verify your users' identity documents](https://docs.stripe.com/docs/identity/verify-identity-documents) + """ + return cast( + "VerificationSession", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["VerificationSessionCreateParams"] + ) -> "VerificationSession": + """ + Creates a VerificationSession object. + + After the VerificationSession is created, display a verification modal using the session client_secret or send your users to the session's url. + + If your API key is in test mode, verification checks won't actually process, though everything else will occur as if in live mode. + + Related guide: [Verify your users' identity documents](https://docs.stripe.com/docs/identity/verify-identity-documents) + """ + return cast( + "VerificationSession", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["VerificationSessionListParams"] + ) -> ListObject["VerificationSession"]: + """ + Returns a list of VerificationSessions + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["VerificationSessionListParams"] + ) -> ListObject["VerificationSession"]: + """ + Returns a list of VerificationSessions + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["VerificationSessionModifyParams"] + ) -> "VerificationSession": + """ + Updates a VerificationSession object. + + When the session status is requires_input, you can use this method to update the + verification check and options. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "VerificationSession", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["VerificationSessionModifyParams"] + ) -> "VerificationSession": + """ + Updates a VerificationSession object. + + When the session status is requires_input, you can use this method to update the + verification check and options. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "VerificationSession", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def _cls_redact( + cls, session: str, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + cls._static_request( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + def redact( + session: str, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + ... + + @overload + def redact( + self, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + ... + + @class_method_variant("_cls_redact") + def redact( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_redact_async( + cls, session: str, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + await cls._static_request_async( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(session) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def redact_async( + session: str, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + ... + + @overload + async def redact_async( + self, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + ... + + @class_method_variant("_cls_redact_async") + async def redact_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["VerificationSessionRedactParams"] + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["VerificationSessionRetrieveParams"] + ) -> "VerificationSession": + """ + Retrieves the details of a VerificationSession that was previously created. + + When the session status is requires_input, you can use this method to retrieve a valid + client_secret or url to allow re-submission. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["VerificationSessionRetrieveParams"] + ) -> "VerificationSession": + """ + Retrieves the details of a VerificationSession that was previously created. + + When the session status is requires_input, you can use this method to retrieve a valid + client_secret or url to allow re-submission. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "last_error": LastError, + "options": Options, + "provided_details": ProvidedDetails, + "redaction": Redaction, + "related_person": RelatedPerson, + "verified_outputs": VerifiedOutputs, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session_service.py new file mode 100644 index 00000000..69aace00 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/identity/_verification_session_service.py @@ -0,0 +1,347 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.identity._verification_session import VerificationSession + from stripe.params.identity._verification_session_cancel_params import ( + VerificationSessionCancelParams, + ) + from stripe.params.identity._verification_session_create_params import ( + VerificationSessionCreateParams, + ) + from stripe.params.identity._verification_session_list_params import ( + VerificationSessionListParams, + ) + from stripe.params.identity._verification_session_redact_params import ( + VerificationSessionRedactParams, + ) + from stripe.params.identity._verification_session_retrieve_params import ( + VerificationSessionRetrieveParams, + ) + from stripe.params.identity._verification_session_update_params import ( + VerificationSessionUpdateParams, + ) + + +class VerificationSessionService(StripeService): + def list( + self, + params: Optional["VerificationSessionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[VerificationSession]": + """ + Returns a list of VerificationSessions + """ + return cast( + "ListObject[VerificationSession]", + self._request( + "get", + "/v1/identity/verification_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["VerificationSessionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[VerificationSession]": + """ + Returns a list of VerificationSessions + """ + return cast( + "ListObject[VerificationSession]", + await self._request_async( + "get", + "/v1/identity/verification_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["VerificationSessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Creates a VerificationSession object. + + After the VerificationSession is created, display a verification modal using the session client_secret or send your users to the session's url. + + If your API key is in test mode, verification checks won't actually process, though everything else will occur as if in live mode. + + Related guide: [Verify your users' identity documents](https://docs.stripe.com/docs/identity/verify-identity-documents) + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["VerificationSessionCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Creates a VerificationSession object. + + After the VerificationSession is created, display a verification modal using the session client_secret or send your users to the session's url. + + If your API key is in test mode, verification checks won't actually process, though everything else will occur as if in live mode. + + Related guide: [Verify your users' identity documents](https://docs.stripe.com/docs/identity/verify-identity-documents) + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + session: str, + params: Optional["VerificationSessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Retrieves the details of a VerificationSession that was previously created. + + When the session status is requires_input, you can use this method to retrieve a valid + client_secret or url to allow re-submission. + """ + return cast( + "VerificationSession", + self._request( + "get", + "/v1/identity/verification_sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + session: str, + params: Optional["VerificationSessionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Retrieves the details of a VerificationSession that was previously created. + + When the session status is requires_input, you can use this method to retrieve a valid + client_secret or url to allow re-submission. + """ + return cast( + "VerificationSession", + await self._request_async( + "get", + "/v1/identity/verification_sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + session: str, + params: Optional["VerificationSessionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Updates a VerificationSession object. + + When the session status is requires_input, you can use this method to update the + verification check and options. + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + session: str, + params: Optional["VerificationSessionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Updates a VerificationSession object. + + When the session status is requires_input, you can use this method to update the + verification check and options. + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions/{session}".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def cancel( + self, + session: str, + params: Optional["VerificationSessionCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def cancel_async( + self, + session: str, + params: Optional["VerificationSessionCancelParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + A VerificationSession object can be canceled when it is in requires_input [status](https://docs.stripe.com/docs/identity/how-sessions-work). + + Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel). + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def redact( + self, + session: str, + params: Optional["VerificationSessionRedactParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + self._request( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def redact_async( + self, + session: str, + params: Optional["VerificationSessionRedactParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "VerificationSession": + """ + Redact a VerificationSession to remove all collected information from Stripe. This will redact + the VerificationSession and all objects related to it, including VerificationReports, Events, + request logs, etc. + + A VerificationSession object can be redacted when it is in requires_input or verified + [status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in requires_action + state will automatically cancel it. + + The redaction process may take up to four days. When the redaction process is in progress, the + VerificationSession's redaction.status field will be set to processing; when the process is + finished, it will change to redacted and an identity.verification_session.redacted event + will be emitted. + + Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the + fields that contain personal data will be replaced by the string [redacted] or a similar + placeholder. The metadata field will also be erased. Redacted objects cannot be updated or + used for any purpose. + + [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact). + """ + return cast( + "VerificationSession", + await self._request_async( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=sanitize_id(session), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__init__.py new file mode 100644 index 00000000..1755c40f --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__init__.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._authorization import Authorization as Authorization + from stripe.issuing._authorization_service import ( + AuthorizationService as AuthorizationService, + ) + from stripe.issuing._card import Card as Card + from stripe.issuing._card_service import CardService as CardService + from stripe.issuing._cardholder import Cardholder as Cardholder + from stripe.issuing._cardholder_service import ( + CardholderService as CardholderService, + ) + from stripe.issuing._dispute import Dispute as Dispute + from stripe.issuing._dispute_service import ( + DisputeService as DisputeService, + ) + from stripe.issuing._personalization_design import ( + PersonalizationDesign as PersonalizationDesign, + ) + from stripe.issuing._personalization_design_service import ( + PersonalizationDesignService as PersonalizationDesignService, + ) + from stripe.issuing._physical_bundle import ( + PhysicalBundle as PhysicalBundle, + ) + from stripe.issuing._physical_bundle_service import ( + PhysicalBundleService as PhysicalBundleService, + ) + from stripe.issuing._token import Token as Token + from stripe.issuing._token_service import TokenService as TokenService + from stripe.issuing._transaction import Transaction as Transaction + from stripe.issuing._transaction_service import ( + TransactionService as TransactionService, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "Authorization": ("stripe.issuing._authorization", False), + "AuthorizationService": ("stripe.issuing._authorization_service", False), + "Card": ("stripe.issuing._card", False), + "CardService": ("stripe.issuing._card_service", False), + "Cardholder": ("stripe.issuing._cardholder", False), + "CardholderService": ("stripe.issuing._cardholder_service", False), + "Dispute": ("stripe.issuing._dispute", False), + "DisputeService": ("stripe.issuing._dispute_service", False), + "PersonalizationDesign": ("stripe.issuing._personalization_design", False), + "PersonalizationDesignService": ( + "stripe.issuing._personalization_design_service", + False, + ), + "PhysicalBundle": ("stripe.issuing._physical_bundle", False), + "PhysicalBundleService": ( + "stripe.issuing._physical_bundle_service", + False, + ), + "Token": ("stripe.issuing._token", False), + "TokenService": ("stripe.issuing._token_service", False), + "Transaction": ("stripe.issuing._transaction", False), + "TransactionService": ("stripe.issuing._transaction_service", False), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4666eb8dcb01fd21faf19a43fc0800aea6fec78f GIT binary patch literal 2869 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 V(!@QlwBMBa%ToWJO1rpr{eSh#{6PQ! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_authorization_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_authorization_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d4b2e75945d6d0449c9eec1bca5fba87da0e36d GIT binary patch literal 7420 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 OMfoRZ9}D=)$N3j#QdwgF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51caf3606f586ad64d08842a56b954555dd8df44 GIT binary patch literal 35483 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 Di-k$u literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_card_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57ff73e8ba19e28d785e148d39030dcc3a9af8cf GIT binary patch literal 5058 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_cardholder_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_cardholder_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..977c68924a202ebeb9c1226282725f04613fcaee GIT binary patch literal 5296 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_dispute_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_dispute_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f79512912aa58e4710af1ddb8f76686b558a115 GIT binary patch literal 6979 zcmd^DO>7)V74Dw@X^+P<{h+GkS*^nRsS2%Fz5(|k~Eh31xz-`bZfPCV;s_vQbc*Zta1PjdJ zP1UPcuc}|Y@4Z*`>)u{Pf*gR369IysUgS_2i4q3ycVcyP|Bi3kXRF)#r1xfF{E9qGxKZuGwm&TU+ zCUSqq&V=muUiYZslIw&n85IJI9;VrbXWSuWL!XHFsVlB$IJRc`v5Lk#obl$@uD(`2 z_r`1IE?u0x01V|T2J^1W-6Rzp&R!#LR|zoqJO-TPd4suC50wuD&2yA!9=WPf%|eNM zz(z$4=1{=AMqr0zsVN;Qxn7;KjHZ0Ze#_Mxx+~(71x*K?`VVD1Ga{8_T`EP=Qd-hS z^$3aT(J>IwW6+B8RzgqCC-l_acqz86R2rn>EmF!RT|J;H15$}?rFuas8AxSGitnwj zgT9oW1IhG`B=aDtv`O}N)Hwi>Jv)*d1j$UBqDS@Eio6ne7=IAJ{y{_xUY8~k>pxZ0;0K-xdtj=jn&8N)Gp}A`tZLW`YOod6 z;V5AR_02^Rc2tcLl{wTSx@y>}PFRK5I?i&aPN+J!tX2>%fI<~Lds4k^c#EnB8Y~Bv zp#H?sp(iV(sxroiQbkcl5_+X;b%riv4!}e<49ftG8-O8Haw29#+L00-3x=^InaI3 z@fEa$7`-zVcx0=Q#846Eod@zK>F+Jp>K}gGe_*x$z-D_590Yp}WdF9&XtfyFaJ`OD zeP5lDepaKr&N5pxY*2s1#h2t_be^FYR6s_PiGS5QT6RUI49xulr}!k2*rh#__i z3TSQU!)bstz_O}WIc^yyIK}|@1@#)4hgje_Y8ci)gT@?;Hg;3VjaL>u&te=pop&e%8~9S4c$#6tqH|8wYwkVx z8VfehS^^E8vmbLIO0{_{-HmRr*+mmP(vdr1?hoBlurXwBMDb7q#lzd7nC^$!o1E_7 zhvLKd#b^+E1W6l;=>cSJHb_Q%d4SrN+ECj%_!cPGgxjIDCT`m;v=wgYE1=C!22MeH zp;w6k34e%Uj#m#FJI$gu!=gFV0{>nz?5xNSf?WJC7Pj>GN@OMaFwr6JCf83k;2lH3~d*{}F+@YUbEFH;PL%~*Rs#xoz?16)4=n6NaDqFG=-MM*B+NR$kR zurv_iHw7gMFJ$kGv>jtOun6*O76`=Mex9Y8{ta2`=;PeXYHsFtyAFMv{LQYTwWyT; zTwRLf`)dhl&;B5P_3`|b!u-{P`Ku?b2+wanKJNJ+!eakS{`%xc2pKQAO~y;nY1mft zoaiy^9!JuW_JXrGi0l(c@B`^dAZ>QfhUN`Gw7ZM-#qhUK0j714{=#Eu!f59QfdETk zV%%^VwHS2Q>wU1q`=`z%!{`L_}6Js;f5fZaef=qi$_0Sv5dmSQ5gWl9)Pc zma$kNqM{&q9>O84Pxuq)9Bm@caA1P@&;eGwU)&)V47vx@BD(W5)g!rb2 zAlSb`7wwYl!8>Oj=T5KYPPZoeFa2*Od#vhPBEmWBwk7-S5kc6pOGIcL{4JV$n~1PO zn{OKtCL*)56MgVNQnodVl*_(SE?bUXHL;y3m*0k4rWm1E64RHF96~aQqyWT^LRz9T z*nJhrX(V4pavsU+K<-Ptu;axg%_A2Hz6r3a@IG}{g0gV>#9HClUy}K_@`v2$qp``= z+*B8r0HGiarqqUTz?5(G! z&>sjV^Vcfz$U;*%G7^pi?~dgSFTmkw@S0f&9|(D9@h5}1;sv?TE>sR~(!m2WUT^)w z+f3p6YkiRppIf@E(YS{Mlkir(?Z$!_7EHlXW7{b~Arwr(ON9szm$0=T2|fp|r@kO! z(rNlt=;Ga*T>w&x%Ch`CA<5HEq|f|b+V?~{@-&)z5-U83oqQ52K95A=2^fxFmV+km T19_%giOR}{H=axQ&lma!lsCOo literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a61a4e46a0cf8f70c3551210aa1144cbb64ddfc8 GIT binary patch literal 18678 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_personalization_design_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef7b752db6be3e1fea533376cdc20ab41b328316 GIT binary patch literal 5472 zcmd@YO>Y~=b#}R2lFJW~lq}h59Iv9-0j-Fv?Z$~6Ifg77PLY@qV!J?Dw3{_|B(J?o zGP5fsk`{xNPwj}Y<~9E4vqK-#|oDk+Y~thAk}WH=tThU{!5 z%khMjv-6ca#}#YX9;u9QJZT-WM=PTO5y@3zr0x?VO@)UMU(d?eN~SRMHyjiMFMZu* zW`ka*Y}u?*m`FN$&2-IGs+mSX^y2R|T(e%&El;ZIj*Ba9e0%L}|nb1W6F%kRj5D5rIe` zh6EVK1TkbIwjdkv`_YQDCszWvq9AG15DjIAj3mfN0af0Wng(ht*dasXT$iCfU6KoN zBMY2~eR1Z1Q|aN%50p6!oXLH0jsRzBMJSAUFAVfh5OifvZg6k26j;%V)&0m}=m1Y< z)Lmk=t%+`seP^Js?^c8OhE;@Mw&J*b3BUv5f(!l65Z1_@?VRDfXhaNYO;{5jMIQzk z{ZRCY*GWO%`a)5I4+0A`a#UTlAPUv`g4);_;HtqRT&?q*aEj`U+cX@gI-{ynXD&5V zvxb~iS~JYrqFQGLW$LXJwTcMjZxrtt$+)J_?xJDqd|3s zau!VHxW$gPYy=MBMHZ>MHCb9dRWcoC3D`4w3mGTw{Kk1FPgvYoW{Hpmo7iTlY%0>ozSd);=yl%HMVCjndn7ms-=8>h-&* z!X>?W7Y<)qrnTjgW!@?^R@~e5+L_|1(2w1a^hN5F9A2b4x@&`#*Brl!6&ov_ zguYoFobo~36_Mp@pse!^0N*E1vLrjwOqH6c?2oVg@LDr_sF{7OdGw{`*wNBy{V~y2M)r zI|{R&yijMh?lLqT5RM@yXYX_t2T9mr{gM=izR$03tH+-i2O--ctaj!BKrPDiI^Ine zsN>}?vo|-gH~%no_VMf2em_-iMM&;jLYs)Wd`l)TP6jo8h}ZZy*7zjW_+&!yQ>oYG zJe7U|+a09Fe|5J*SBUM=72@pcpq8I}yepi-;b{chT0`KQ<2a4ok2{9F23U_DGNFNk zteo1HH+<$#P}~Oq{1y?qrJI)raSY~c9NWhZ@3bTsZncMClTXjh%EGUOSxNa#0x*_= zx&OITeWR1A{<{McwW>3tujlyJx}Ij^SJMFwWoO{9gWM-C@#oDR9mi+-DahC@g`k4| zKc&zNnzP%#23Wkz-q^+DDc_p=>SEhj*U|hR0N5>C4&sAnWeYnGn-s)yxgeAaX}HR3 zHQlC~<|&$H*Nr6$@sy^0xTIS?g<-#969`Tqm_jfOz>C1$hn>aYIRqCFTm-OAc-`c+ zoMmwq0bWa;-$HY{PoU~voD-VG(|?cUqROALhaVp~zma{j6@?Md^5c)kPj2LBy7adoy76|Bfi`u|^B-puwLPcoX!_9ZUj0%=SM&E*xxqr#S~Q z@OpaCQv@|Akbqs&PuRfssxu3q6%hpCsZ4}Zo8;v`l8H?+ l_2)=-Qz~vsXE&vHpNe8sek$((Pn4=CC_lgOl;AJl;@`JEPwoH! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..141b928432e2e0bec1519db7bc9d2787b96e4b24 GIT binary patch literal 4117 zcmb^!*=`%x_0GcKa2G{MlqJiU8rtZE^wPw3qXdy;#c>nMhU26tfnqS?T!~{1XPA43 zvZX43VJC$P7pZ{)wcnbDJXCNBw0}{cFC-K|!XQRd^rd~HL%S{X)N^N%DLDb^win=; zbI&<#yvf&uvf$x@Db^z8 zh=+@&REw6Q9v(5}TC5za#mn(pqMYCmPLL$5mCR%4R~(q-*i2h6@${98S2494q=JE*e9s|9 z9q)?Cv!+Jr2O22|ZuDKl!9+7%>3yrNRhHeVmJt|V4q*{FYLo;FzL*2On(@aIUSYx_d$gj$%-SR*iZc>xyG5 znzz1cn>sAJQN@g0FbgnE|BRjUY@o&w!%N2L^mj@mvWUEMfmSsB{JD95K2I{aE@0g{kUBjg%>t^XZ zrpu09FTHI$*gQUC+smNA(hS5dw)D~p7^!3$3#Iz1Q?;$r#gnH>6byWv1-G_@X^DEt zpcJUSr0&ywvA*icp%MtBK{O0MdJe!RXgfF59DcKvo8FYC+dLmjwk4E5)I2oX8aTfx zpASg`Bh8VSR{!j#JnNCjL0C-=0dVETK))_;=&o!UD;V^FU6EkD8!ZtIeAY+he7UXlNOb0 z5cs}oL7ZTPdj6{zmZD=?0lxtkQf$H^cVX3!S@1tahtNHy+%TM~mpW=T978b3J7ypS zq3`djXpjdq!uDA-2zC4jXV-LvCG2c)~nz%A5Hqu&0l>}V@Hx}D5!Co{ji^z%#i zE^p@!w4V^$u_MocSu3e<=NGYAZL{%1u5Ixa^UR zAmq|*B&5=9kRG_3@}lAezq|*>cK!(99mM@#eDe;{g`dL1f6YG-ein(Km-1EdzxUNM z=oe>xC*0r)5mJQbkP-tY0L+t<0Kvxn`)sUgbk(Ym(@gOD3@~$%R~XneD|r>Bd+iu! zCiB;>9rzY&`m7(Zb;|($hW_Q5b#Qnqf1;H?@uFD=Pl8zoldIZvJ zaA;kC%)sru(w!N+K8)ptFum^Y?B1t?e(LA!8Zj=_r6(=t&y&?0Pf1$a?h4L*pdgol!vx6`MViE z687ul9<1(M1K>x(%jyOEp6m8|Ur*qblIN8?c>}hdhv%n)=LhchCXn|%Hyyqz@UoG8 zUbdIL!Zu(|?0MRYuTKwbrAJ%o(arSumOS2+$2}di1r(dup{xwt9+~8R!;OodMJKuW zLZ6q;$RIEX>u}tts_J${RY{tWSgrAT2QtJk=1hL26`;_&;(~3PZo2k{ZE^J%f~r$X`A3Q^B>Z$zSDWe%i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_physical_bundle_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c027e18c4937267902b7b087884b845360a30aa3 GIT binary patch literal 3275 zcmbtWOK%iM5boKTot>S1c)gg19RmXx!UEnEj{s2+B0K~U!8|Y7C>f1++IV30LHF2T zaHI%Oq)1VcQ^+|vS#~7u$v?;iD+jDmtR%`Mk#g8*aT4t*RXsDd*E~b!P*c@a)m>dx zUw40>$>;<={#TzfkRjw(6rwL4GObU6xkqebOD?HOWl2Il=EkaWSr)wPD%E&7URBGg zkQFyk)ykSgsKz#cZQM;(^|CH>s++2&%W1(U+)OoF&I(?0yQ;ZzPVh;$yP7ZOB@!bi ziLKuyc8W^Vau82>)kM0G`5lFVX{5Plp-&W%oRr((HB z$7;5VYpm-WLH~0Wv#My_->JJmAwD`z1AQgfLO_$D(3%0}9-*Wx*`ypxk|eRa>=>18 zxfe9H0$f~hs+|~7ZS8KntUT8$30CpYN~fxrFZI}b=@HG&fMw!^EVE##O-O~Dzq)gm zVfu%BwITArQV_VGs0TS@xKm$c)Ei^9cHdIE-|d{`y-HYOFed~X6Xn)XAoqwT!B2d) zG)b;3w~WSPwrnet(qwEVJ{>mibSzL_Bn7p7UpK-Jssf>K!!lf`olze#8exr%VNqnG zF8YBNjZ3365)6w`gV&iyZNsS~O7_#k7N@3V+l+F~y1<#`fD~d(#fdbN1-%WX3a9SKk_pFrLUP((X|!IYrOUM& zrQ?)e_3Dk%sk%qq!K3y1Rb2b1Rk;egE{)ULc*%8!ON|L{v|ig=+`Xs79ghw+z`(jp zd5H^TE(UF`h}z@ z@*5&=;Mr9Otj^;+CXfJqQ8_x$_o4+sU}^}=j;b^j5ZfHP=JxAvs?xX8n~MHj61YNa zXsD2c)84FERce~PZkpA)J?0{xHqC2emK$go0*!4zvKfdk!;#H)ptuXj6cLpdUC6RH ziUbcc{s)k|1p4OSp}FFoKNHoTK^uhChX{cEnX~HYq?08#k47K3{p}6v{6=3l9gjT^Dt@t!!Q!KvxA-Dep9T$-j zI*U6&bk1(r!%{c3wL?Ke9%guG;c?Cn0BOpSBrT{!+C5JOej=OZ$l@X3k3gS;(q}|4LU6V literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cccd1362813f6aa0bbd452e71ca3f5e9212510ea GIT binary patch literal 8910 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/__pycache__/_token_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf486547666b201cb314632952b1a39034b5ad9f GIT binary patch literal 4017 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 Nv|mj>Aov!m{|C@aJx2fl literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization.py new file mode 100644 index 00000000..60e775d0 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization.py @@ -0,0 +1,1676 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe.issuing._card import Card + from stripe.issuing._cardholder import Cardholder + from stripe.issuing._token import Token + from stripe.issuing._transaction import Transaction + from stripe.params.issuing._authorization_approve_params import ( + AuthorizationApproveParams, + ) + from stripe.params.issuing._authorization_capture_params import ( + AuthorizationCaptureParams, + ) + from stripe.params.issuing._authorization_create_params import ( + AuthorizationCreateParams, + ) + from stripe.params.issuing._authorization_decline_params import ( + AuthorizationDeclineParams, + ) + from stripe.params.issuing._authorization_expire_params import ( + AuthorizationExpireParams, + ) + from stripe.params.issuing._authorization_finalize_amount_params import ( + AuthorizationFinalizeAmountParams, + ) + from stripe.params.issuing._authorization_increment_params import ( + AuthorizationIncrementParams, + ) + from stripe.params.issuing._authorization_list_params import ( + AuthorizationListParams, + ) + from stripe.params.issuing._authorization_modify_params import ( + AuthorizationModifyParams, + ) + from stripe.params.issuing._authorization_respond_params import ( + AuthorizationRespondParams, + ) + from stripe.params.issuing._authorization_retrieve_params import ( + AuthorizationRetrieveParams, + ) + from stripe.params.issuing._authorization_reverse_params import ( + AuthorizationReverseParams, + ) + + +class Authorization( + ListableAPIResource["Authorization"], + UpdateableAPIResource["Authorization"], +): + """ + When an [issued card](https://stripe.com/docs/issuing) is used to make a purchase, an Issuing `Authorization` + object is created. [Authorizations](https://stripe.com/docs/issuing/purchases/authorizations) must be approved for the + purchase to be completed successfully. + + Related guide: [Issued card authorizations](https://stripe.com/docs/issuing/purchases/authorizations) + """ + + OBJECT_NAME: ClassVar[Literal["issuing.authorization"]] = ( + "issuing.authorization" + ) + + class AmountDetails(StripeObject): + atm_fee: Optional[int] + """ + The fee charged by the ATM for the cash withdrawal. + """ + cashback_amount: Optional[int] + """ + The amount of cash requested by the cardholder. + """ + + class Fleet(StripeObject): + class CardholderPromptData(StripeObject): + alphanumeric_id: Optional[str] + """ + [Deprecated] An alphanumeric ID, though typical point of sales only support numeric entry. The card program can be configured to prompt for a vehicle ID, driver ID, or generic ID. + """ + driver_id: Optional[str] + """ + Driver ID. + """ + odometer: Optional[int] + """ + Odometer reading. + """ + unspecified_id: Optional[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: Optional[str] + """ + User ID. + """ + vehicle_number: Optional[str] + """ + Vehicle number. + """ + + class ReportedBreakdown(StripeObject): + class Fuel(StripeObject): + gross_amount_decimal: Optional[str] + """ + Gross fuel amount that should equal Fuel Quantity multiplied by Fuel Unit Cost, inclusive of taxes. + """ + + class NonFuel(StripeObject): + gross_amount_decimal: Optional[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + class Tax(StripeObject): + local_amount_decimal: Optional[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. `null` if not reported by merchant or not subject to tax. + """ + national_amount_decimal: Optional[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. `null` if not reported by merchant or not subject to tax. + """ + + fuel: Optional[Fuel] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: Optional[NonFuel] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: Optional[Tax] + """ + Information about tax included in this transaction. + """ + _inner_class_types = { + "fuel": Fuel, + "non_fuel": NonFuel, + "tax": Tax, + } + + cardholder_prompt_data: Optional[CardholderPromptData] + """ + Answers to prompts presented to the cardholder at the point of sale. Prompted fields vary depending on the configuration of your physical fleet cards. Typical points of sale support only numeric entry. + """ + purchase_type: Optional[ + Literal[ + "fuel_and_non_fuel_purchase", + "fuel_purchase", + "non_fuel_purchase", + ] + ] + """ + The type of purchase. + """ + reported_breakdown: Optional[ReportedBreakdown] + """ + More information about the total amount. Typically this information is received from the merchant after the authorization has been approved and the fuel dispensed. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: Optional[ + Literal["full_service", "non_fuel_transaction", "self_service"] + ] + """ + The type of fuel service. + """ + _inner_class_types = { + "cardholder_prompt_data": CardholderPromptData, + "reported_breakdown": ReportedBreakdown, + } + + class FraudChallenge(StripeObject): + channel: Literal["sms"] + """ + The method by which the fraud challenge was delivered to the cardholder. + """ + status: Literal[ + "expired", "pending", "rejected", "undeliverable", "verified" + ] + """ + The status of the fraud challenge. + """ + undeliverable_reason: Optional[ + Literal["no_phone_number", "unsupported_phone_number"] + ] + """ + If the challenge is not deliverable, the reason why. + """ + + class Fuel(StripeObject): + industry_product_code: Optional[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: Optional[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: Optional[ + Literal[ + "diesel", + "other", + "unleaded_plus", + "unleaded_regular", + "unleaded_super", + ] + ] + """ + The type of fuel that was purchased. + """ + unit: Optional[ + Literal[ + "charging_minute", + "imperial_gallon", + "kilogram", + "kilowatt_hour", + "liter", + "other", + "pound", + "us_gallon", + ] + ] + """ + The units for `quantity_decimal`. + """ + unit_cost_decimal: Optional[str] + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + class MerchantData(StripeObject): + category: str + """ + A categorization of the seller's type of business. See our [merchant categories guide](https://stripe.com/docs/issuing/merchant-categories) for a list of possible values. + """ + category_code: str + """ + The merchant category code for the seller's business + """ + city: Optional[str] + """ + City where the seller is located + """ + country: Optional[str] + """ + Country where the seller is located + """ + name: Optional[str] + """ + Name of the seller + """ + network_id: str + """ + Identifier assigned to the seller by the card network. Different card networks may assign different network_id fields to the same merchant. + """ + postal_code: Optional[str] + """ + Postal code where the seller is located + """ + state: Optional[str] + """ + State where the seller is located + """ + tax_id: Optional[str] + """ + The seller's tax identification number. Currently populated for French merchants only. + """ + terminal_id: Optional[str] + """ + An ID assigned by the seller to the location of the sale. + """ + url: Optional[str] + """ + URL provided by the merchant on a 3DS request + """ + + class NetworkData(StripeObject): + acquiring_institution_id: Optional[str] + """ + Identifier assigned to the acquirer by the card network. Sometimes this value is not provided by the network; in this case, the value will be `null`. + """ + system_trace_audit_number: Optional[str] + """ + The System Trace Audit Number (STAN) is a 6-digit identifier assigned by the acquirer. Prefer `network_data.transaction_id` if present, unless you have special requirements. + """ + transaction_id: Optional[str] + """ + Unique identifier for the authorization assigned by the card network used to match subsequent messages, disputes, and transactions. + """ + + class PendingRequest(StripeObject): + class AmountDetails(StripeObject): + atm_fee: Optional[int] + """ + The fee charged by the ATM for the cash withdrawal. + """ + cashback_amount: Optional[int] + """ + The amount of cash requested by the cardholder. + """ + + amount: int + """ + The additional amount Stripe will hold if the authorization is approved, in the card's [currency](https://stripe.com/docs/api#issuing_authorization_object-pending-request-currency) and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + amount_details: Optional[AmountDetails] + """ + Detailed breakdown of amount components. These amounts are denominated in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + is_amount_controllable: bool + """ + If set `true`, you may provide [amount](https://stripe.com/docs/api/issuing/authorizations/approve#approve_issuing_authorization-amount) to control how much to hold for the authorization. + """ + merchant_amount: int + """ + The amount the merchant is requesting to be authorized in the `merchant_currency`. The amount is in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + merchant_currency: str + """ + The local currency the merchant is requesting to authorize. + """ + network_risk_score: Optional[int] + """ + The card network's estimate of the likelihood that an authorization is fraudulent. Takes on values between 1 and 99. + """ + _inner_class_types = {"amount_details": AmountDetails} + + class RequestHistory(StripeObject): + class AmountDetails(StripeObject): + atm_fee: Optional[int] + """ + The fee charged by the ATM for the cash withdrawal. + """ + cashback_amount: Optional[int] + """ + The amount of cash requested by the cardholder. + """ + + amount: int + """ + The `pending_request.amount` at the time of the request, presented in your card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Stripe held this amount from your account to fund the authorization if the request was approved. + """ + amount_details: Optional[AmountDetails] + """ + Detailed breakdown of amount components. These amounts are denominated in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + approved: bool + """ + Whether this request was approved. + """ + authorization_code: Optional[str] + """ + A code created by Stripe which is shared with the merchant to validate the authorization. This field will be populated if the authorization message was approved. The code typically starts with the letter "S", followed by a six-digit number. For example, "S498162". Please note that the code is not guaranteed to be unique across authorizations. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + merchant_amount: int + """ + The `pending_request.merchant_amount` at the time of the request, presented in the `merchant_currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + merchant_currency: str + """ + The currency that was collected by the merchant and presented to the cardholder for the authorization. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + network_risk_score: Optional[int] + """ + The card network's estimate of the likelihood that an authorization is fraudulent. Takes on values between 1 and 99. + """ + reason: Literal[ + "account_disabled", + "card_active", + "card_canceled", + "card_expired", + "card_inactive", + "cardholder_blocked", + "cardholder_inactive", + "cardholder_verification_required", + "insecure_authorization_method", + "insufficient_funds", + "network_fallback", + "not_allowed", + "pin_blocked", + "spending_controls", + "suspected_fraud", + "verification_failed", + "webhook_approved", + "webhook_declined", + "webhook_error", + "webhook_timeout", + ] + """ + When an authorization is approved or declined by you or by Stripe, this field provides additional detail on the reason for the outcome. + """ + reason_message: Optional[str] + """ + If the `request_history.reason` is `webhook_error` because the direct webhook response is invalid (for example, parsing errors or missing parameters), we surface a more detailed error message via this field. + """ + requested_at: Optional[int] + """ + Time when the card network received an authorization request from the acquirer in UTC. Referred to by networks as transmission time. + """ + _inner_class_types = {"amount_details": AmountDetails} + + class Treasury(StripeObject): + received_credits: List[str] + """ + The array of [ReceivedCredits](https://stripe.com/docs/api/treasury/received_credits) associated with this authorization + """ + received_debits: List[str] + """ + The array of [ReceivedDebits](https://stripe.com/docs/api/treasury/received_debits) associated with this authorization + """ + transaction: Optional[str] + """ + The Treasury [Transaction](https://stripe.com/docs/api/treasury/transactions) associated with this authorization + """ + + class VerificationData(StripeObject): + class AuthenticationExemption(StripeObject): + claimed_by: Literal["acquirer", "issuer"] + """ + The entity that requested the exemption, either the acquiring merchant or the Issuing user. + """ + type: Literal[ + "low_value_transaction", "transaction_risk_analysis", "unknown" + ] + """ + The specific exemption claimed for this authorization. + """ + + class ThreeDSecure(StripeObject): + result: Literal[ + "attempt_acknowledged", "authenticated", "failed", "required" + ] + """ + The outcome of the 3D Secure authentication request. + """ + + address_line1_check: Literal["match", "mismatch", "not_provided"] + """ + Whether the cardholder provided an address first line and if it matched the cardholder's `billing.address.line1`. + """ + address_postal_code_check: Literal["match", "mismatch", "not_provided"] + """ + Whether the cardholder provided a postal code and if it matched the cardholder's `billing.address.postal_code`. + """ + authentication_exemption: Optional[AuthenticationExemption] + """ + The exemption applied to this authorization. + """ + cvc_check: Literal["match", "mismatch", "not_provided"] + """ + Whether the cardholder provided a CVC and if it matched Stripe's record. + """ + expiry_check: Literal["match", "mismatch", "not_provided"] + """ + Whether the cardholder provided an expiry date and if it matched Stripe's record. + """ + postal_code: Optional[str] + """ + The postal code submitted as part of the authorization used for postal code verification. + """ + three_d_secure: Optional[ThreeDSecure] + """ + 3D Secure details. + """ + _inner_class_types = { + "authentication_exemption": AuthenticationExemption, + "three_d_secure": ThreeDSecure, + } + + amount: int + """ + The total amount that was authorized or rejected. This amount is in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). `amount` should be the same as `merchant_amount`, unless `currency` and `merchant_currency` are different. + """ + amount_details: Optional[AmountDetails] + """ + Detailed breakdown of amount components. These amounts are denominated in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + approved: bool + """ + Whether the authorization has been approved. + """ + authorization_method: Literal[ + "chip", "contactless", "keyed_in", "online", "swipe" + ] + """ + How the card details were provided. + """ + balance_transactions: List["BalanceTransaction"] + """ + List of balance transactions associated with this authorization. + """ + card: "Card" + """ + You can [create physical or virtual cards](https://stripe.com/docs/issuing) that are issued to cardholders. + """ + cardholder: Optional[ExpandableField["Cardholder"]] + """ + The cardholder to whom this authorization belongs. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + The currency of the cardholder. This currency can be different from the currency presented at authorization and the `merchant_currency` field on this authorization. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + fleet: Optional[Fleet] + """ + Fleet-specific information for authorizations using Fleet cards. + """ + fraud_challenges: Optional[List[FraudChallenge]] + """ + Fraud challenges sent to the cardholder, if this authorization was declined for fraud risk reasons. + """ + fuel: Optional[Fuel] + """ + Information about fuel that was purchased with this transaction. Typically this information is received from the merchant after the authorization has been approved and the fuel dispensed. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + merchant_amount: int + """ + The total amount that was authorized or rejected. This amount is in the `merchant_currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). `merchant_amount` should be the same as `amount`, unless `merchant_currency` and `currency` are different. + """ + merchant_currency: str + """ + The local currency that was presented to the cardholder for the authorization. This currency can be different from the cardholder currency and the `currency` field on this authorization. Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + merchant_data: MerchantData + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + network_data: Optional[NetworkData] + """ + Details about the authorization, such as identifiers, set by the card network. + """ + object: Literal["issuing.authorization"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + pending_request: Optional[PendingRequest] + """ + The pending authorization request. This field will only be non-null during an `issuing_authorization.request` webhook. + """ + request_history: List[RequestHistory] + """ + History of every time a `pending_request` authorization was approved/declined, either by you directly or by Stripe (e.g. based on your spending_controls). If the merchant changes the authorization by performing an incremental authorization, you can look at this field to see the previous requests for the authorization. This field can be helpful in determining why a given authorization was approved/declined. + """ + status: Literal["closed", "expired", "pending", "reversed"] + """ + The current status of the authorization in its lifecycle. + """ + token: Optional[ExpandableField["Token"]] + """ + [Token](https://stripe.com/docs/api/issuing/tokens/object) object used for this authorization. If a network token was not used for this authorization, this field will be null. + """ + transactions: List["Transaction"] + """ + List of [transactions](https://stripe.com/docs/api/issuing/transactions) associated with this authorization. + """ + treasury: Optional[Treasury] + """ + [Treasury](https://stripe.com/docs/api/treasury) details related to this authorization if it was created on a [FinancialAccount](https://stripe.com/docs/api/treasury/financial_accounts). + """ + verification_data: VerificationData + verified_by_fraud_challenge: Optional[bool] + """ + Whether the authorization bypassed fraud risk checks because the cardholder has previously completed a fraud challenge on a similar high-risk authorization from the same merchant. + """ + wallet: Optional[str] + """ + The digital wallet used for this transaction. One of `apple_pay`, `google_pay`, or `samsung_pay`. Will populate as `null` when no digital wallet was utilized. + """ + + @classmethod + def _cls_approve( + cls, authorization: str, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def approve( + authorization: str, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @overload + def approve( + self, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @class_method_variant("_cls_approve") + def approve( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_approve_async( + cls, authorization: str, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def approve_async( + authorization: str, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @overload + async def approve_async( + self, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @class_method_variant("_cls_approve_async") + async def approve_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationApproveParams"] + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_decline( + cls, authorization: str, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def decline( + authorization: str, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @overload + def decline( + self, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @class_method_variant("_cls_decline") + def decline( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_decline_async( + cls, authorization: str, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def decline_async( + authorization: str, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @overload + async def decline_async( + self, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + ... + + @class_method_variant("_cls_decline_async") + async def decline_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationDeclineParams"] + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["AuthorizationListParams"] + ) -> ListObject["Authorization"]: + """ + Returns a list of Issuing Authorization objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["AuthorizationListParams"] + ) -> ListObject["Authorization"]: + """ + Returns a list of Issuing Authorization objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["AuthorizationModifyParams"] + ) -> "Authorization": + """ + Updates the specified Issuing Authorization object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Authorization", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["AuthorizationModifyParams"] + ) -> "Authorization": + """ + Updates the specified Issuing Authorization object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Authorization", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["AuthorizationRetrieveParams"] + ) -> "Authorization": + """ + Retrieves an Issuing Authorization object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["AuthorizationRetrieveParams"] + ) -> "Authorization": + """ + Retrieves an Issuing Authorization object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["Authorization"]): + _resource_cls: Type["Authorization"] + + @classmethod + def _cls_capture( + cls, + authorization: str, + **params: Unpack["AuthorizationCaptureParams"], + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def capture( + authorization: str, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + ... + + @overload + def capture( + self, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + ... + + @class_method_variant("_cls_capture") + def capture( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_capture_async( + cls, + authorization: str, + **params: Unpack["AuthorizationCaptureParams"], + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def capture_async( + authorization: str, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + ... + + @overload + async def capture_async( + self, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + ... + + @class_method_variant("_cls_capture_async") + async def capture_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationCaptureParams"] + ) -> "Authorization": + """ + Capture a test-mode authorization. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/capture".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def create( + cls, **params: Unpack["AuthorizationCreateParams"] + ) -> "Authorization": + """ + Create a test-mode authorization. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations", + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["AuthorizationCreateParams"] + ) -> "Authorization": + """ + Create a test-mode authorization. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations", + params=params, + ), + ) + + @classmethod + def _cls_expire( + cls, + authorization: str, + **params: Unpack["AuthorizationExpireParams"], + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def expire( + authorization: str, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + ... + + @overload + def expire( + self, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_expire") + def expire( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_expire_async( + cls, + authorization: str, + **params: Unpack["AuthorizationExpireParams"], + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def expire_async( + authorization: str, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + ... + + @overload + async def expire_async( + self, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_expire_async") + async def expire_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationExpireParams"] + ) -> "Authorization": + """ + Expire a test-mode Authorization. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/expire".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_finalize_amount( + cls, + authorization: str, + **params: Unpack["AuthorizationFinalizeAmountParams"], + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def finalize_amount( + authorization: str, + **params: Unpack["AuthorizationFinalizeAmountParams"], + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + ... + + @overload + def finalize_amount( + self, **params: Unpack["AuthorizationFinalizeAmountParams"] + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + ... + + @class_method_variant("_cls_finalize_amount") + def finalize_amount( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationFinalizeAmountParams"] + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_finalize_amount_async( + cls, + authorization: str, + **params: Unpack["AuthorizationFinalizeAmountParams"], + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def finalize_amount_async( + authorization: str, + **params: Unpack["AuthorizationFinalizeAmountParams"], + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + ... + + @overload + async def finalize_amount_async( + self, **params: Unpack["AuthorizationFinalizeAmountParams"] + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + ... + + @class_method_variant("_cls_finalize_amount_async") + async def finalize_amount_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationFinalizeAmountParams"] + ) -> "Authorization": + """ + Finalize the amount on an Authorization prior to capture, when the initial authorization was for an estimated amount. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/finalize_amount".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_increment( + cls, + authorization: str, + **params: Unpack["AuthorizationIncrementParams"], + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def increment( + authorization: str, + **params: Unpack["AuthorizationIncrementParams"], + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + ... + + @overload + def increment( + self, **params: Unpack["AuthorizationIncrementParams"] + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_increment") + def increment( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationIncrementParams"] + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_increment_async( + cls, + authorization: str, + **params: Unpack["AuthorizationIncrementParams"], + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def increment_async( + authorization: str, + **params: Unpack["AuthorizationIncrementParams"], + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + ... + + @overload + async def increment_async( + self, **params: Unpack["AuthorizationIncrementParams"] + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_increment_async") + async def increment_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationIncrementParams"] + ) -> "Authorization": + """ + Increment a test-mode Authorization. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/increment".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_respond( + cls, + authorization: str, + **params: Unpack["AuthorizationRespondParams"], + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def respond( + authorization: str, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + ... + + @overload + def respond( + self, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + ... + + @class_method_variant("_cls_respond") + def respond( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_respond_async( + cls, + authorization: str, + **params: Unpack["AuthorizationRespondParams"], + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def respond_async( + authorization: str, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + ... + + @overload + async def respond_async( + self, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + ... + + @class_method_variant("_cls_respond_async") + async def respond_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationRespondParams"] + ) -> "Authorization": + """ + Respond to a fraud challenge on a testmode Issuing authorization, simulating either a confirmation of fraud or a correction of legitimacy. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/fraud_challenges/respond".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_reverse( + cls, + authorization: str, + **params: Unpack["AuthorizationReverseParams"], + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + cls._static_request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + def reverse( + authorization: str, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + ... + + @overload + def reverse( + self, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_reverse") + def reverse( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + self.resource._request( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_reverse_async( + cls, + authorization: str, + **params: Unpack["AuthorizationReverseParams"], + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(authorization) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def reverse_async( + authorization: str, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + ... + + @overload + async def reverse_async( + self, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + ... + + @class_method_variant("_cls_reverse_async") + async def reverse_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["AuthorizationReverseParams"] + ) -> "Authorization": + """ + Reverse a test-mode Authorization. + """ + return cast( + "Authorization", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/authorizations/{authorization}/reverse".format( + authorization=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "amount_details": AmountDetails, + "fleet": Fleet, + "fraud_challenges": FraudChallenge, + "fuel": Fuel, + "merchant_data": MerchantData, + "network_data": NetworkData, + "pending_request": PendingRequest, + "request_history": RequestHistory, + "treasury": Treasury, + "verification_data": VerificationData, + } + + +Authorization.TestHelpers._resource_cls = Authorization diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization_service.py new file mode 100644 index 00000000..0e2c82d5 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_authorization_service.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._authorization import Authorization + from stripe.params.issuing._authorization_approve_params import ( + AuthorizationApproveParams, + ) + from stripe.params.issuing._authorization_decline_params import ( + AuthorizationDeclineParams, + ) + from stripe.params.issuing._authorization_list_params import ( + AuthorizationListParams, + ) + from stripe.params.issuing._authorization_retrieve_params import ( + AuthorizationRetrieveParams, + ) + from stripe.params.issuing._authorization_update_params import ( + AuthorizationUpdateParams, + ) + + +class AuthorizationService(StripeService): + def list( + self, + params: Optional["AuthorizationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Authorization]": + """ + Returns a list of Issuing Authorization objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Authorization]", + self._request( + "get", + "/v1/issuing/authorizations", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["AuthorizationListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Authorization]": + """ + Returns a list of Issuing Authorization objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Authorization]", + await self._request_async( + "get", + "/v1/issuing/authorizations", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + authorization: str, + params: Optional["AuthorizationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Retrieves an Issuing Authorization object. + """ + return cast( + "Authorization", + self._request( + "get", + "/v1/issuing/authorizations/{authorization}".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + authorization: str, + params: Optional["AuthorizationRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Retrieves an Issuing Authorization object. + """ + return cast( + "Authorization", + await self._request_async( + "get", + "/v1/issuing/authorizations/{authorization}".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + authorization: str, + params: Optional["AuthorizationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Updates the specified Issuing Authorization object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/issuing/authorizations/{authorization}".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + authorization: str, + params: Optional["AuthorizationUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + Updates the specified Issuing Authorization object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/issuing/authorizations/{authorization}".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def approve( + self, + authorization: str, + params: Optional["AuthorizationApproveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def approve_async( + self, + authorization: str, + params: Optional["AuthorizationApproveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + [Deprecated] Approves a pending Issuing Authorization object. This request should be made within the timeout window of the [real-time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to approve an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def decline( + self, + authorization: str, + params: Optional["AuthorizationDeclineParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + self._request( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def decline_async( + self, + authorization: str, + params: Optional["AuthorizationDeclineParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Authorization": + """ + [Deprecated] Declines a pending Issuing Authorization object. This request should be made within the timeout window of the [real time authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations) flow. + This method is deprecated. Instead, [respond directly to the webhook request to decline an authorization](https://docs.stripe.com/docs/issuing/controls/real-time-authorizations#authorization-handling). + """ + return cast( + "Authorization", + await self._request_async( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=sanitize_id(authorization), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card.py new file mode 100644 index 00000000..ebce1fe2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card.py @@ -0,0 +1,1967 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._cardholder import Cardholder + from stripe.issuing._personalization_design import PersonalizationDesign + from stripe.params.issuing._card_create_params import CardCreateParams + from stripe.params.issuing._card_deliver_card_params import ( + CardDeliverCardParams, + ) + from stripe.params.issuing._card_fail_card_params import CardFailCardParams + from stripe.params.issuing._card_list_params import CardListParams + from stripe.params.issuing._card_modify_params import CardModifyParams + from stripe.params.issuing._card_retrieve_params import CardRetrieveParams + from stripe.params.issuing._card_return_card_params import ( + CardReturnCardParams, + ) + from stripe.params.issuing._card_ship_card_params import CardShipCardParams + from stripe.params.issuing._card_submit_card_params import ( + CardSubmitCardParams, + ) + + +class Card( + CreateableAPIResource["Card"], + ListableAPIResource["Card"], + UpdateableAPIResource["Card"], +): + """ + You can [create physical or virtual cards](https://stripe.com/docs/issuing) that are issued to cardholders. + """ + + OBJECT_NAME: ClassVar[Literal["issuing.card"]] = "issuing.card" + + class Shipping(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + class AddressValidation(StripeObject): + class NormalizedAddress(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + mode: Literal[ + "disabled", + "normalization_only", + "validation_and_normalization", + ] + """ + The address validation capabilities to use. + """ + normalized_address: Optional[NormalizedAddress] + """ + The normalized shipping address. + """ + result: Optional[ + Literal[ + "indeterminate", + "likely_deliverable", + "likely_undeliverable", + ] + ] + """ + The validation result for the shipping address. + """ + _inner_class_types = {"normalized_address": NormalizedAddress} + + class Customs(StripeObject): + eori_number: Optional[str] + """ + A registration number used for customs in Europe. See [https://www.gov.uk/eori](https://www.gov.uk/eori) for the UK and [https://ec.europa.eu/taxation_customs/business/customs-procedures-import-and-export/customs-procedures/economic-operators-registration-and-identification-number-eori_en](https://ec.europa.eu/taxation_customs/business/customs-procedures-import-and-export/customs-procedures/economic-operators-registration-and-identification-number-eori_en) for the EU. + """ + + address: Address + address_validation: Optional[AddressValidation] + """ + Address validation details for the shipment. + """ + carrier: Optional[Literal["dhl", "fedex", "royal_mail", "usps"]] + """ + The delivery company that shipped a card. + """ + customs: Optional[Customs] + """ + Additional information that may be required for clearing customs. + """ + eta: Optional[int] + """ + A unix timestamp representing a best estimate of when the card will be delivered. + """ + name: str + """ + Recipient name. + """ + phone_number: Optional[str] + """ + The phone number of the receiver of the shipment. Our courier partners will use this number to contact you in the event of card delivery issues. For individual shipments to the EU/UK, if this field is empty, we will provide them with the phone number provided when the cardholder was initially created. + """ + require_signature: Optional[bool] + """ + Whether a signature is required for card delivery. This feature is only supported for US users. Standard shipping service does not support signature on delivery. The default value for standard shipping service is false and for express and priority services is true. + """ + service: Literal["express", "priority", "standard"] + """ + Shipment service, such as `standard` or `express`. + """ + status: Optional[ + Literal[ + "canceled", + "delivered", + "failure", + "pending", + "returned", + "shipped", + "submitted", + ] + ] + """ + The delivery status of the card. + """ + tracking_number: Optional[str] + """ + A tracking number for a card shipment. + """ + tracking_url: Optional[str] + """ + A link to the shipping carrier's site where you can view detailed information about a card shipment. + """ + type: Literal["bulk", "individual"] + """ + Packaging options. + """ + _inner_class_types = { + "address": Address, + "address_validation": AddressValidation, + "customs": Customs, + } + + class SpendingControls(StripeObject): + class SpendingLimit(StripeObject): + amount: int + """ + Maximum amount allowed to spend per interval. This amount is in the card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) this limit applies to. Omitting this field will apply the limit to all categories. + """ + interval: Literal[ + "all_time", + "daily", + "monthly", + "per_authorization", + "weekly", + "yearly", + ] + """ + Interval (or event) to which the amount applies. + """ + + allowed_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) of authorizations to allow. All other categories will be blocked. Cannot be set with `blocked_categories`. + """ + allowed_merchant_countries: Optional[List[str]] + """ + Array of strings containing representing countries from which authorizations will be allowed. Authorizations from merchants in all other countries will be declined. Country codes should be ISO 3166 alpha-2 country codes (e.g. `US`). Cannot be set with `blocked_merchant_countries`. Provide an empty value to unset this control. + """ + blocked_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) of authorizations to decline. All other categories will be allowed. Cannot be set with `allowed_categories`. + """ + blocked_merchant_countries: Optional[List[str]] + """ + Array of strings containing representing countries from which authorizations will be declined. Country codes should be ISO 3166 alpha-2 country codes (e.g. `US`). Cannot be set with `allowed_merchant_countries`. Provide an empty value to unset this control. + """ + spending_limits: Optional[List[SpendingLimit]] + """ + Limit spending with amount-based rules that apply across any cards this card replaced (i.e., its `replacement_for` card and _that_ card's `replacement_for` card, up the chain). + """ + spending_limits_currency: Optional[str] + """ + Currency of the amounts within `spending_limits`. Always the same as the currency of the card. + """ + _inner_class_types = {"spending_limits": SpendingLimit} + + class Wallets(StripeObject): + class ApplePay(StripeObject): + eligible: bool + """ + Apple Pay Eligibility + """ + ineligible_reason: Optional[ + Literal[ + "missing_agreement", + "missing_cardholder_contact", + "unsupported_region", + ] + ] + """ + Reason the card is ineligible for Apple Pay + """ + + class GooglePay(StripeObject): + eligible: bool + """ + Google Pay Eligibility + """ + ineligible_reason: Optional[ + Literal[ + "missing_agreement", + "missing_cardholder_contact", + "unsupported_region", + ] + ] + """ + Reason the card is ineligible for Google Pay + """ + + apple_pay: ApplePay + google_pay: GooglePay + primary_account_identifier: Optional[str] + """ + Unique identifier for a card used with digital wallets + """ + _inner_class_types = {"apple_pay": ApplePay, "google_pay": GooglePay} + + brand: str + """ + The brand of the card. + """ + cancellation_reason: Optional[Literal["design_rejected", "lost", "stolen"]] + """ + The reason why the card was canceled. + """ + cardholder: "Cardholder" + """ + An Issuing `Cardholder` object represents an individual or business entity who is [issued](https://stripe.com/docs/issuing) cards. + + Related guide: [How to create a cardholder](https://stripe.com/docs/issuing/cards/virtual/issue-cards#create-cardholder) + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Supported currencies are `usd` in the US, `eur` in the EU, and `gbp` in the UK. + """ + cvc: Optional[str] + """ + The card's CVC. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with [the `expand` parameter](https://stripe.com/docs/api/expanding_objects). Additionally, it's only available via the ["Retrieve a card" endpoint](https://stripe.com/docs/api/issuing/cards/retrieve), not via "List all cards" or any other endpoint. + """ + exp_month: int + """ + The expiration month of the card. + """ + exp_year: int + """ + The expiration year of the card. + """ + financial_account: Optional[str] + """ + The financial account this card is attached to. + """ + id: str + """ + Unique identifier for the object. + """ + last4: str + """ + The last 4 digits of the card number. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + number: Optional[str] + """ + The full unredacted card number. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with [the `expand` parameter](https://stripe.com/docs/api/expanding_objects). Additionally, it's only available via the ["Retrieve a card" endpoint](https://stripe.com/docs/api/issuing/cards/retrieve), not via "List all cards" or any other endpoint. + """ + object: Literal["issuing.card"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + personalization_design: Optional[ExpandableField["PersonalizationDesign"]] + """ + The personalization design object belonging to this card. + """ + replaced_by: Optional[ExpandableField["Card"]] + """ + The latest card that replaces this card, if any. + """ + replacement_for: Optional[ExpandableField["Card"]] + """ + The card this card replaces, if any. + """ + replacement_reason: Optional[ + Literal["damaged", "expired", "lost", "stolen"] + ] + """ + The reason why the previous card needed to be replaced. + """ + second_line: Optional[str] + """ + Text separate from cardholder name, printed on the card. + """ + shipping: Optional[Shipping] + """ + Where and how the card will be shipped. + """ + spending_controls: SpendingControls + status: Literal["active", "canceled", "inactive"] + """ + Whether authorizations can be approved on this card. May be blocked from activating cards depending on past-due Cardholder requirements. Defaults to `inactive`. + """ + type: Literal["physical", "virtual"] + """ + The type of the card. + """ + wallets: Optional[Wallets] + """ + Information relating to digital wallets (like Apple Pay and Google Pay). + """ + + @classmethod + def create(cls, **params: Unpack["CardCreateParams"]) -> "Card": + """ + Creates an Issuing Card object. + """ + return cast( + "Card", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CardCreateParams"] + ) -> "Card": + """ + Creates an Issuing Card object. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list(cls, **params: Unpack["CardListParams"]) -> ListObject["Card"]: + """ + Returns a list of Issuing Card objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CardListParams"] + ) -> ListObject["Card"]: + """ + Returns a list of Issuing Card objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["CardModifyParams"]) -> "Card": + """ + Updates the specified Issuing Card object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Card", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CardModifyParams"] + ) -> "Card": + """ + Updates the specified Issuing Card object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Card", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CardRetrieveParams"] + ) -> "Card": + """ + Retrieves an Issuing Card object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CardRetrieveParams"] + ) -> "Card": + """ + Retrieves an Issuing Card object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["Card"]): + _resource_cls: Type["Card"] + + @classmethod + def _cls_deliver_card( + cls, card: str, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + def deliver_card( + card: str, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + ... + + @overload + def deliver_card( + self, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + ... + + @class_method_variant("_cls_deliver_card") + def deliver_card( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_deliver_card_async( + cls, card: str, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def deliver_card_async( + card: str, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + ... + + @overload + async def deliver_card_async( + self, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + ... + + @class_method_variant("_cls_deliver_card_async") + async def deliver_card_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardDeliverCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to delivered. + """ + return cast( + "Card", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_fail_card( + cls, card: str, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + def fail_card( + card: str, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + ... + + @overload + def fail_card(self, **params: Unpack["CardFailCardParams"]) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + ... + + @class_method_variant("_cls_fail_card") + def fail_card( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_fail_card_async( + cls, card: str, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def fail_card_async( + card: str, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + ... + + @overload + async def fail_card_async( + self, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + ... + + @class_method_variant("_cls_fail_card_async") + async def fail_card_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardFailCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to failure. + """ + return cast( + "Card", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_return_card( + cls, card: str, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + def return_card( + card: str, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + ... + + @overload + def return_card( + self, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + ... + + @class_method_variant("_cls_return_card") + def return_card( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_return_card_async( + cls, card: str, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def return_card_async( + card: str, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + ... + + @overload + async def return_card_async( + self, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + ... + + @class_method_variant("_cls_return_card_async") + async def return_card_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardReturnCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to returned. + """ + return cast( + "Card", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_ship_card( + cls, card: str, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + def ship_card( + card: str, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + ... + + @overload + def ship_card(self, **params: Unpack["CardShipCardParams"]) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + ... + + @class_method_variant("_cls_ship_card") + def ship_card( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_ship_card_async( + cls, card: str, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def ship_card_async( + card: str, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + ... + + @overload + async def ship_card_async( + self, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + ... + + @class_method_variant("_cls_ship_card_async") + async def ship_card_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardShipCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to shipped. + """ + return cast( + "Card", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + def _cls_submit_card( + cls, card: str, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + def submit_card( + card: str, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + ... + + @overload + def submit_card( + self, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + ... + + @class_method_variant("_cls_submit_card") + def submit_card( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_submit_card_async( + cls, card: str, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(card) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def submit_card_async( + card: str, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + ... + + @overload + async def submit_card_async( + self, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + ... + + @class_method_variant("_cls_submit_card_async") + async def submit_card_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["CardSubmitCardParams"] + ) -> "Card": + """ + Updates the shipping status of the specified Issuing Card object to submitted. This method requires Stripe Version ‘2024-09-30.acacia' or later. + """ + return cast( + "Card", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/submit".format( + card=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "shipping": Shipping, + "spending_controls": SpendingControls, + "wallets": Wallets, + } + + +Card.TestHelpers._resource_cls = Card diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card_service.py new file mode 100644 index 00000000..21529012 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_card_service.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._card import Card + from stripe.params.issuing._card_create_params import CardCreateParams + from stripe.params.issuing._card_list_params import CardListParams + from stripe.params.issuing._card_retrieve_params import CardRetrieveParams + from stripe.params.issuing._card_update_params import CardUpdateParams + + +class CardService(StripeService): + def list( + self, + params: Optional["CardListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Card]": + """ + Returns a list of Issuing Card objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Card]", + self._request( + "get", + "/v1/issuing/cards", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CardListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Card]": + """ + Returns a list of Issuing Card objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Card]", + await self._request_async( + "get", + "/v1/issuing/cards", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CardCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Creates an Issuing Card object. + """ + return cast( + "Card", + self._request( + "post", + "/v1/issuing/cards", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CardCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Creates an Issuing Card object. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/issuing/cards", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + card: str, + params: Optional["CardRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Retrieves an Issuing Card object. + """ + return cast( + "Card", + self._request( + "get", + "/v1/issuing/cards/{card}".format(card=sanitize_id(card)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + card: str, + params: Optional["CardRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Retrieves an Issuing Card object. + """ + return cast( + "Card", + await self._request_async( + "get", + "/v1/issuing/cards/{card}".format(card=sanitize_id(card)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + card: str, + params: Optional["CardUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the specified Issuing Card object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Card", + self._request( + "post", + "/v1/issuing/cards/{card}".format(card=sanitize_id(card)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + card: str, + params: Optional["CardUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Card": + """ + Updates the specified Issuing Card object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Card", + await self._request_async( + "post", + "/v1/issuing/cards/{card}".format(card=sanitize_id(card)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder.py new file mode 100644 index 00000000..673668b8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder.py @@ -0,0 +1,1330 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, Dict, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe.params.issuing._cardholder_create_params import ( + CardholderCreateParams, + ) + from stripe.params.issuing._cardholder_list_params import ( + CardholderListParams, + ) + from stripe.params.issuing._cardholder_modify_params import ( + CardholderModifyParams, + ) + from stripe.params.issuing._cardholder_retrieve_params import ( + CardholderRetrieveParams, + ) + + +class Cardholder( + CreateableAPIResource["Cardholder"], + ListableAPIResource["Cardholder"], + UpdateableAPIResource["Cardholder"], +): + """ + An Issuing `Cardholder` object represents an individual or business entity who is [issued](https://stripe.com/docs/issuing) cards. + + Related guide: [How to create a cardholder](https://stripe.com/docs/issuing/cards/virtual/issue-cards#create-cardholder) + """ + + OBJECT_NAME: ClassVar[Literal["issuing.cardholder"]] = "issuing.cardholder" + + class Billing(StripeObject): + class Address(StripeObject): + city: Optional[str] + """ + City, district, suburb, town, or village. + """ + country: Optional[str] + """ + Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). + """ + line1: Optional[str] + """ + Address line 1, such as the street, PO Box, or company name. + """ + line2: Optional[str] + """ + Address line 2, such as the apartment, suite, unit, or building. + """ + postal_code: Optional[str] + """ + ZIP or postal code. + """ + state: Optional[str] + """ + State, county, province, or region. + """ + + address: Address + _inner_class_types = {"address": Address} + + class Company(StripeObject): + tax_id_provided: bool + """ + Whether the company's business ID number was provided. + """ + + class Individual(StripeObject): + class CardIssuing(StripeObject): + class UserTermsAcceptance(StripeObject): + date: Optional[int] + """ + The Unix timestamp marking when the cardholder accepted the Authorized User Terms. + """ + ip: Optional[str] + """ + The IP address from which the cardholder accepted the Authorized User Terms. + """ + user_agent: Optional[str] + """ + The user agent of the browser from which the cardholder accepted the Authorized User Terms. + """ + + user_terms_acceptance: Optional[UserTermsAcceptance] + """ + Information about cardholder acceptance of Celtic [Authorized User Terms](https://stripe.com/docs/issuing/cards#accept-authorized-user-terms). Required for cards backed by a Celtic program. + """ + _inner_class_types = {"user_terms_acceptance": UserTermsAcceptance} + + class Dob(StripeObject): + day: Optional[int] + """ + The day of birth, between 1 and 31. + """ + month: Optional[int] + """ + The month of birth, between 1 and 12. + """ + year: Optional[int] + """ + The four-digit year of birth. + """ + + class Verification(StripeObject): + class Document(StripeObject): + back: Optional[ExpandableField["File"]] + """ + The back of a document returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + front: Optional[ExpandableField["File"]] + """ + The front of a document returned by a [file upload](https://stripe.com/docs/api#create_file) with a `purpose` value of `identity_document`. + """ + + document: Optional[Document] + """ + An identifying document, either a passport or local ID card. + """ + _inner_class_types = {"document": Document} + + card_issuing: Optional[CardIssuing] + """ + Information related to the card_issuing program for this cardholder. + """ + dob: Optional[Dob] + """ + The date of birth of this cardholder. + """ + first_name: Optional[str] + """ + The first name of this cardholder. Required before activating Cards. This field cannot contain any numbers, special characters (except periods, commas, hyphens, spaces and apostrophes) or non-latin letters. + """ + last_name: Optional[str] + """ + The last name of this cardholder. Required before activating Cards. This field cannot contain any numbers, special characters (except periods, commas, hyphens, spaces and apostrophes) or non-latin letters. + """ + verification: Optional[Verification] + """ + Government-issued ID document for this cardholder. + """ + _inner_class_types = { + "card_issuing": CardIssuing, + "dob": Dob, + "verification": Verification, + } + + class Requirements(StripeObject): + disabled_reason: Optional[ + Literal[ + "listed", + "rejected.listed", + "requirements.past_due", + "under_review", + ] + ] + """ + If `disabled_reason` is present, all cards will decline authorizations with `cardholder_verification_required` reason. + """ + past_due: Optional[ + List[ + Literal[ + "company.tax_id", + "individual.card_issuing.user_terms_acceptance.date", + "individual.card_issuing.user_terms_acceptance.ip", + "individual.dob.day", + "individual.dob.month", + "individual.dob.year", + "individual.first_name", + "individual.last_name", + "individual.verification.document", + ] + ] + ] + """ + Array of fields that need to be collected in order to verify and re-enable the cardholder. + """ + + class SpendingControls(StripeObject): + class SpendingLimit(StripeObject): + amount: int + """ + Maximum amount allowed to spend per interval. This amount is in the card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) this limit applies to. Omitting this field will apply the limit to all categories. + """ + interval: Literal[ + "all_time", + "daily", + "monthly", + "per_authorization", + "weekly", + "yearly", + ] + """ + Interval (or event) to which the amount applies. + """ + + allowed_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) of authorizations to allow. All other categories will be blocked. Cannot be set with `blocked_categories`. + """ + allowed_merchant_countries: Optional[List[str]] + """ + Array of strings containing representing countries from which authorizations will be allowed. Authorizations from merchants in all other countries will be declined. Country codes should be ISO 3166 alpha-2 country codes (e.g. `US`). Cannot be set with `blocked_merchant_countries`. Provide an empty value to unset this control. + """ + blocked_categories: Optional[ + List[ + Literal[ + "ac_refrigeration_repair", + "accounting_bookkeeping_services", + "advertising_services", + "agricultural_cooperative", + "airlines_air_carriers", + "airports_flying_fields", + "ambulance_services", + "amusement_parks_carnivals", + "antique_reproductions", + "antique_shops", + "aquariums", + "architectural_surveying_services", + "art_dealers_and_galleries", + "artists_supply_and_craft_shops", + "auto_and_home_supply_stores", + "auto_body_repair_shops", + "auto_paint_shops", + "auto_service_shops", + "automated_cash_disburse", + "automated_fuel_dispensers", + "automobile_associations", + "automotive_parts_and_accessories_stores", + "automotive_tire_stores", + "bail_and_bond_payments", + "bakeries", + "bands_orchestras", + "barber_and_beauty_shops", + "betting_casino_gambling", + "bicycle_shops", + "billiard_pool_establishments", + "boat_dealers", + "boat_rentals_and_leases", + "book_stores", + "books_periodicals_and_newspapers", + "bowling_alleys", + "bus_lines", + "business_secretarial_schools", + "buying_shopping_services", + "cable_satellite_and_other_pay_television_and_radio", + "camera_and_photographic_supply_stores", + "candy_nut_and_confectionery_stores", + "car_and_truck_dealers_new_used", + "car_and_truck_dealers_used_only", + "car_rental_agencies", + "car_washes", + "carpentry_services", + "carpet_upholstery_cleaning", + "caterers", + "charitable_and_social_service_organizations_fundraising", + "chemicals_and_allied_products", + "child_care_services", + "childrens_and_infants_wear_stores", + "chiropodists_podiatrists", + "chiropractors", + "cigar_stores_and_stands", + "civic_social_fraternal_associations", + "cleaning_and_maintenance", + "clothing_rental", + "colleges_universities", + "commercial_equipment", + "commercial_footwear", + "commercial_photography_art_and_graphics", + "commuter_transport_and_ferries", + "computer_network_services", + "computer_programming", + "computer_repair", + "computer_software_stores", + "computers_peripherals_and_software", + "concrete_work_services", + "construction_materials", + "consulting_public_relations", + "correspondence_schools", + "cosmetic_stores", + "counseling_services", + "country_clubs", + "courier_services", + "court_costs", + "credit_reporting_agencies", + "cruise_lines", + "dairy_products_stores", + "dance_hall_studios_schools", + "dating_escort_services", + "dentists_orthodontists", + "department_stores", + "detective_agencies", + "digital_goods_applications", + "digital_goods_games", + "digital_goods_large_volume", + "digital_goods_media", + "direct_marketing_catalog_merchant", + "direct_marketing_combination_catalog_and_retail_merchant", + "direct_marketing_inbound_telemarketing", + "direct_marketing_insurance_services", + "direct_marketing_other", + "direct_marketing_outbound_telemarketing", + "direct_marketing_subscription", + "direct_marketing_travel", + "discount_stores", + "doctors", + "door_to_door_sales", + "drapery_window_covering_and_upholstery_stores", + "drinking_places", + "drug_stores_and_pharmacies", + "drugs_drug_proprietaries_and_druggist_sundries", + "dry_cleaners", + "durable_goods", + "duty_free_stores", + "eating_places_restaurants", + "educational_services", + "electric_razor_stores", + "electric_vehicle_charging", + "electrical_parts_and_equipment", + "electrical_services", + "electronics_repair_shops", + "electronics_stores", + "elementary_secondary_schools", + "emergency_services_gcas_visa_use_only", + "employment_temp_agencies", + "equipment_rental", + "exterminating_services", + "family_clothing_stores", + "fast_food_restaurants", + "financial_institutions", + "fines_government_administrative_entities", + "fireplace_fireplace_screens_and_accessories_stores", + "floor_covering_stores", + "florists", + "florists_supplies_nursery_stock_and_flowers", + "freezer_and_locker_meat_provisioners", + "fuel_dealers_non_automotive", + "funeral_services_crematories", + "furniture_home_furnishings_and_equipment_stores_except_appliances", + "furniture_repair_refinishing", + "furriers_and_fur_shops", + "general_services", + "gift_card_novelty_and_souvenir_shops", + "glass_paint_and_wallpaper_stores", + "glassware_crystal_stores", + "golf_courses_public", + "government_licensed_horse_dog_racing_us_region_only", + "government_licensed_online_casions_online_gambling_us_region_only", + "government_owned_lotteries_non_us_region", + "government_owned_lotteries_us_region_only", + "government_services", + "grocery_stores_supermarkets", + "hardware_equipment_and_supplies", + "hardware_stores", + "health_and_beauty_spas", + "hearing_aids_sales_and_supplies", + "heating_plumbing_a_c", + "hobby_toy_and_game_shops", + "home_supply_warehouse_stores", + "hospitals", + "hotels_motels_and_resorts", + "household_appliance_stores", + "industrial_supplies", + "information_retrieval_services", + "insurance_default", + "insurance_underwriting_premiums", + "intra_company_purchases", + "jewelry_stores_watches_clocks_and_silverware_stores", + "landscaping_services", + "laundries", + "laundry_cleaning_services", + "legal_services_attorneys", + "luggage_and_leather_goods_stores", + "lumber_building_materials_stores", + "manual_cash_disburse", + "marinas_service_and_supplies", + "marketplaces", + "masonry_stonework_and_plaster", + "massage_parlors", + "medical_and_dental_labs", + "medical_dental_ophthalmic_and_hospital_equipment_and_supplies", + "medical_services", + "membership_organizations", + "mens_and_boys_clothing_and_accessories_stores", + "mens_womens_clothing_stores", + "metal_service_centers", + "miscellaneous", + "miscellaneous_apparel_and_accessory_shops", + "miscellaneous_auto_dealers", + "miscellaneous_business_services", + "miscellaneous_food_stores", + "miscellaneous_general_merchandise", + "miscellaneous_general_services", + "miscellaneous_home_furnishing_specialty_stores", + "miscellaneous_publishing_and_printing", + "miscellaneous_recreation_services", + "miscellaneous_repair_shops", + "miscellaneous_specialty_retail", + "mobile_home_dealers", + "motion_picture_theaters", + "motor_freight_carriers_and_trucking", + "motor_homes_dealers", + "motor_vehicle_supplies_and_new_parts", + "motorcycle_shops_and_dealers", + "motorcycle_shops_dealers", + "music_stores_musical_instruments_pianos_and_sheet_music", + "news_dealers_and_newsstands", + "non_fi_money_orders", + "non_fi_stored_value_card_purchase_load", + "nondurable_goods", + "nurseries_lawn_and_garden_supply_stores", + "nursing_personal_care", + "office_and_commercial_furniture", + "opticians_eyeglasses", + "optometrists_ophthalmologist", + "orthopedic_goods_prosthetic_devices", + "osteopaths", + "package_stores_beer_wine_and_liquor", + "paints_varnishes_and_supplies", + "parking_lots_garages", + "passenger_railways", + "pawn_shops", + "pet_shops_pet_food_and_supplies", + "petroleum_and_petroleum_products", + "photo_developing", + "photographic_photocopy_microfilm_equipment_and_supplies", + "photographic_studios", + "picture_video_production", + "piece_goods_notions_and_other_dry_goods", + "plumbing_heating_equipment_and_supplies", + "political_organizations", + "postal_services_government_only", + "precious_stones_and_metals_watches_and_jewelry", + "professional_services", + "public_warehousing_and_storage", + "quick_copy_repro_and_blueprint", + "railroads", + "real_estate_agents_and_managers_rentals", + "record_stores", + "recreational_vehicle_rentals", + "religious_goods_stores", + "religious_organizations", + "roofing_siding_sheet_metal", + "secretarial_support_services", + "security_brokers_dealers", + "service_stations", + "sewing_needlework_fabric_and_piece_goods_stores", + "shoe_repair_hat_cleaning", + "shoe_stores", + "small_appliance_repair", + "snowmobile_dealers", + "special_trade_services", + "specialty_cleaning", + "sporting_goods_stores", + "sporting_recreation_camps", + "sports_and_riding_apparel_stores", + "sports_clubs_fields", + "stamp_and_coin_stores", + "stationary_office_supplies_printing_and_writing_paper", + "stationery_stores_office_and_school_supply_stores", + "swimming_pools_sales", + "t_ui_travel_germany", + "tailors_alterations", + "tax_payments_government_agencies", + "tax_preparation_services", + "taxicabs_limousines", + "telecommunication_equipment_and_telephone_sales", + "telecommunication_services", + "telegraph_services", + "tent_and_awning_shops", + "testing_laboratories", + "theatrical_ticket_agencies", + "timeshares", + "tire_retreading_and_repair", + "tolls_bridge_fees", + "tourist_attractions_and_exhibits", + "towing_services", + "trailer_parks_campgrounds", + "transportation_services", + "travel_agencies_tour_operators", + "truck_stop_iteration", + "truck_utility_trailer_rentals", + "typesetting_plate_making_and_related_services", + "typewriter_stores", + "u_s_federal_government_agencies_or_departments", + "uniforms_commercial_clothing", + "used_merchandise_and_secondhand_stores", + "utilities", + "variety_stores", + "veterinary_services", + "video_amusement_game_supplies", + "video_game_arcades", + "video_tape_rental_stores", + "vocational_trade_schools", + "watch_jewelry_repair", + "welding_repair", + "wholesale_clubs", + "wig_and_toupee_stores", + "wires_money_orders", + "womens_accessory_and_specialty_shops", + "womens_ready_to_wear_stores", + "wrecking_and_salvage_yards", + ] + ] + ] + """ + Array of strings containing [categories](https://stripe.com/docs/api#issuing_authorization_object-merchant_data-category) of authorizations to decline. All other categories will be allowed. Cannot be set with `allowed_categories`. + """ + blocked_merchant_countries: Optional[List[str]] + """ + Array of strings containing representing countries from which authorizations will be declined. Country codes should be ISO 3166 alpha-2 country codes (e.g. `US`). Cannot be set with `allowed_merchant_countries`. Provide an empty value to unset this control. + """ + spending_limits: Optional[List[SpendingLimit]] + """ + Limit spending with amount-based rules that apply across this cardholder's cards. + """ + spending_limits_currency: Optional[str] + """ + Currency of the amounts within `spending_limits`. + """ + _inner_class_types = {"spending_limits": SpendingLimit} + + billing: Billing + company: Optional[Company] + """ + Additional information about a `company` cardholder. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + email: Optional[str] + """ + The cardholder's email address. + """ + id: str + """ + Unique identifier for the object. + """ + individual: Optional[Individual] + """ + Additional information about an `individual` cardholder. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: str + """ + The cardholder's name. This will be printed on cards issued to them. + """ + object: Literal["issuing.cardholder"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + phone_number: Optional[str] + """ + The cardholder's phone number. This is required for all cardholders who will be creating EU cards. See the [3D Secure documentation](https://stripe.com/docs/issuing/3d-secure#when-is-3d-secure-applied) for more details. + """ + preferred_locales: Optional[List[Literal["de", "en", "es", "fr", "it"]]] + """ + The cardholder's preferred locales (languages), ordered by preference. Locales can be `de`, `en`, `es`, `fr`, or `it`. + This changes the language of the [3D Secure flow](https://stripe.com/docs/issuing/3d-secure) and one-time password messages sent to the cardholder. + """ + requirements: Requirements + spending_controls: Optional[SpendingControls] + """ + Rules that control spending across this cardholder's cards. Refer to our [documentation](https://stripe.com/docs/issuing/controls/spending-controls) for more details. + """ + status: Literal["active", "blocked", "inactive"] + """ + Specifies whether to permit authorizations on this cardholder's cards. + """ + type: Literal["company", "individual"] + """ + One of `individual` or `company`. See [Choose a cardholder type](https://stripe.com/docs/issuing/other/choose-cardholder) for more details. + """ + + @classmethod + def create( + cls, **params: Unpack["CardholderCreateParams"] + ) -> "Cardholder": + """ + Creates a new Issuing Cardholder object that can be issued cards. + """ + return cast( + "Cardholder", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["CardholderCreateParams"] + ) -> "Cardholder": + """ + Creates a new Issuing Cardholder object that can be issued cards. + """ + return cast( + "Cardholder", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["CardholderListParams"] + ) -> ListObject["Cardholder"]: + """ + Returns a list of Issuing Cardholder objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["CardholderListParams"] + ) -> ListObject["Cardholder"]: + """ + Returns a list of Issuing Cardholder objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["CardholderModifyParams"] + ) -> "Cardholder": + """ + Updates the specified Issuing Cardholder object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Cardholder", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["CardholderModifyParams"] + ) -> "Cardholder": + """ + Updates the specified Issuing Cardholder object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Cardholder", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["CardholderRetrieveParams"] + ) -> "Cardholder": + """ + Retrieves an Issuing Cardholder object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["CardholderRetrieveParams"] + ) -> "Cardholder": + """ + Retrieves an Issuing Cardholder object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = { + "billing": Billing, + "company": Company, + "individual": Individual, + "requirements": Requirements, + "spending_controls": SpendingControls, + } diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder_service.py new file mode 100644 index 00000000..54affd26 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_cardholder_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._cardholder import Cardholder + from stripe.params.issuing._cardholder_create_params import ( + CardholderCreateParams, + ) + from stripe.params.issuing._cardholder_list_params import ( + CardholderListParams, + ) + from stripe.params.issuing._cardholder_retrieve_params import ( + CardholderRetrieveParams, + ) + from stripe.params.issuing._cardholder_update_params import ( + CardholderUpdateParams, + ) + + +class CardholderService(StripeService): + def list( + self, + params: Optional["CardholderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Cardholder]": + """ + Returns a list of Issuing Cardholder objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Cardholder]", + self._request( + "get", + "/v1/issuing/cardholders", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["CardholderListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Cardholder]": + """ + Returns a list of Issuing Cardholder objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Cardholder]", + await self._request_async( + "get", + "/v1/issuing/cardholders", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "CardholderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Creates a new Issuing Cardholder object that can be issued cards. + """ + return cast( + "Cardholder", + self._request( + "post", + "/v1/issuing/cardholders", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "CardholderCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Creates a new Issuing Cardholder object that can be issued cards. + """ + return cast( + "Cardholder", + await self._request_async( + "post", + "/v1/issuing/cardholders", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + cardholder: str, + params: Optional["CardholderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Retrieves an Issuing Cardholder object. + """ + return cast( + "Cardholder", + self._request( + "get", + "/v1/issuing/cardholders/{cardholder}".format( + cardholder=sanitize_id(cardholder), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + cardholder: str, + params: Optional["CardholderRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Retrieves an Issuing Cardholder object. + """ + return cast( + "Cardholder", + await self._request_async( + "get", + "/v1/issuing/cardholders/{cardholder}".format( + cardholder=sanitize_id(cardholder), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + cardholder: str, + params: Optional["CardholderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Updates the specified Issuing Cardholder object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Cardholder", + self._request( + "post", + "/v1/issuing/cardholders/{cardholder}".format( + cardholder=sanitize_id(cardholder), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + cardholder: str, + params: Optional["CardholderUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Cardholder": + """ + Updates the specified Issuing Cardholder object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Cardholder", + await self._request_async( + "post", + "/v1/issuing/cardholders/{cardholder}".format( + cardholder=sanitize_id(cardholder), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute.py new file mode 100644 index 00000000..2be6f914 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute.py @@ -0,0 +1,571 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe._file import File + from stripe.issuing._transaction import Transaction + from stripe.params.issuing._dispute_create_params import ( + DisputeCreateParams, + ) + from stripe.params.issuing._dispute_list_params import DisputeListParams + from stripe.params.issuing._dispute_modify_params import ( + DisputeModifyParams, + ) + from stripe.params.issuing._dispute_retrieve_params import ( + DisputeRetrieveParams, + ) + from stripe.params.issuing._dispute_submit_params import ( + DisputeSubmitParams, + ) + + +class Dispute( + CreateableAPIResource["Dispute"], + ListableAPIResource["Dispute"], + UpdateableAPIResource["Dispute"], +): + """ + As a [card issuer](https://stripe.com/docs/issuing), you can dispute transactions that the cardholder does not recognize, suspects to be fraudulent, or has other issues with. + + Related guide: [Issuing disputes](https://stripe.com/docs/issuing/purchases/disputes) + """ + + OBJECT_NAME: ClassVar[Literal["issuing.dispute"]] = "issuing.dispute" + + class Evidence(StripeObject): + class Canceled(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + canceled_at: Optional[int] + """ + Date when order was canceled. + """ + cancellation_policy_provided: Optional[bool] + """ + Whether the cardholder was provided with a cancellation policy. + """ + cancellation_reason: Optional[str] + """ + Reason for canceling the order. + """ + expected_at: Optional[int] + """ + Date when the cardholder expected to receive the product. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + product_description: Optional[str] + """ + Description of the merchandise or service that was purchased. + """ + product_type: Optional[Literal["merchandise", "service"]] + """ + Whether the product was a merchandise or service. + """ + return_status: Optional[Literal["merchant_rejected", "successful"]] + """ + Result of cardholder's attempt to return the product. + """ + returned_at: Optional[int] + """ + Date when the product was returned or attempted to be returned. + """ + + class Duplicate(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + card_statement: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Copy of the card statement showing that the product had already been paid for. + """ + cash_receipt: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Copy of the receipt showing that the product had been paid for in cash. + """ + check_image: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Image of the front and back of the check that was used to pay for the product. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + original_transaction: Optional[str] + """ + Transaction (e.g., ipi_...) that the disputed transaction is a duplicate of. Of the two or more transactions that are copies of each other, this is original undisputed one. + """ + + class Fraudulent(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + + class MerchandiseNotAsDescribed(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + received_at: Optional[int] + """ + Date when the product was received. + """ + return_description: Optional[str] + """ + Description of the cardholder's attempt to return the product. + """ + return_status: Optional[Literal["merchant_rejected", "successful"]] + """ + Result of cardholder's attempt to return the product. + """ + returned_at: Optional[int] + """ + Date when the product was returned or attempted to be returned. + """ + + class NoValidAuthorization(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + + class NotReceived(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + expected_at: Optional[int] + """ + Date when the cardholder expected to receive the product. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + product_description: Optional[str] + """ + Description of the merchandise or service that was purchased. + """ + product_type: Optional[Literal["merchandise", "service"]] + """ + Whether the product was a merchandise or service. + """ + + class Other(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + product_description: Optional[str] + """ + Description of the merchandise or service that was purchased. + """ + product_type: Optional[Literal["merchandise", "service"]] + """ + Whether the product was a merchandise or service. + """ + + class ServiceNotAsDescribed(StripeObject): + additional_documentation: Optional[ExpandableField["File"]] + """ + (ID of a [file upload](https://stripe.com/docs/guides/file-upload)) Additional documentation supporting the dispute. + """ + canceled_at: Optional[int] + """ + Date when order was canceled. + """ + cancellation_reason: Optional[str] + """ + Reason for canceling the order. + """ + explanation: Optional[str] + """ + Explanation of why the cardholder is disputing this transaction. + """ + received_at: Optional[int] + """ + Date when the product was received. + """ + + canceled: Optional[Canceled] + duplicate: Optional[Duplicate] + fraudulent: Optional[Fraudulent] + merchandise_not_as_described: Optional[MerchandiseNotAsDescribed] + no_valid_authorization: Optional[NoValidAuthorization] + not_received: Optional[NotReceived] + other: Optional[Other] + reason: Literal[ + "canceled", + "duplicate", + "fraudulent", + "merchandise_not_as_described", + "no_valid_authorization", + "not_received", + "other", + "service_not_as_described", + ] + """ + The reason for filing the dispute. Its value will match the field containing the evidence. + """ + service_not_as_described: Optional[ServiceNotAsDescribed] + _inner_class_types = { + "canceled": Canceled, + "duplicate": Duplicate, + "fraudulent": Fraudulent, + "merchandise_not_as_described": MerchandiseNotAsDescribed, + "no_valid_authorization": NoValidAuthorization, + "not_received": NotReceived, + "other": Other, + "service_not_as_described": ServiceNotAsDescribed, + } + + class Treasury(StripeObject): + debit_reversal: Optional[str] + """ + The Treasury [DebitReversal](https://stripe.com/docs/api/treasury/debit_reversals) representing this Issuing dispute + """ + received_debit: str + """ + The Treasury [ReceivedDebit](https://stripe.com/docs/api/treasury/received_debits) that is being disputed. + """ + + amount: int + """ + Disputed amount in the card's currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). Usually the amount of the `transaction`, but can differ (usually because of currency fluctuation). + """ + balance_transactions: Optional[List["BalanceTransaction"]] + """ + List of balance transactions associated with the dispute. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + The currency the `transaction` was made in. + """ + evidence: Evidence + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + loss_reason: Optional[ + Literal[ + "cardholder_authentication_issuer_liability", + "eci5_token_transaction_with_tavv", + "excess_disputes_in_timeframe", + "has_not_met_the_minimum_dispute_amount_requirements", + "invalid_duplicate_dispute", + "invalid_incorrect_amount_dispute", + "invalid_no_authorization", + "invalid_use_of_disputes", + "merchandise_delivered_or_shipped", + "merchandise_or_service_as_described", + "not_cancelled", + "other", + "refund_issued", + "submitted_beyond_allowable_time_limit", + "transaction_3ds_required", + "transaction_approved_after_prior_fraud_dispute", + "transaction_authorized", + "transaction_electronically_read", + "transaction_qualifies_for_visa_easy_payment_service", + "transaction_unattended", + ] + ] + """ + The enum that describes the dispute loss outcome. If the dispute is not lost, this field will be absent. New enum values may be added in the future, so be sure to handle unknown values. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + object: Literal["issuing.dispute"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["expired", "lost", "submitted", "unsubmitted", "won"] + """ + Current status of the dispute. + """ + transaction: ExpandableField["Transaction"] + """ + The transaction being disputed. + """ + treasury: Optional[Treasury] + """ + [Treasury](https://stripe.com/docs/api/treasury) details related to this dispute if it was created on a [FinancialAccount](/docs/api/treasury/financial_accounts + """ + + @classmethod + def create(cls, **params: Unpack["DisputeCreateParams"]) -> "Dispute": + """ + Creates an Issuing Dispute object. Individual pieces of evidence within the evidence object are optional at this point. Stripe only validates that required evidence is present during submission. Refer to [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence) for more details about evidence requirements. + """ + return cast( + "Dispute", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["DisputeCreateParams"] + ) -> "Dispute": + """ + Creates an Issuing Dispute object. Individual pieces of evidence within the evidence object are optional at this point. Stripe only validates that required evidence is present during submission. Refer to [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence) for more details about evidence requirements. + """ + return cast( + "Dispute", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["DisputeListParams"] + ) -> ListObject["Dispute"]: + """ + Returns a list of Issuing Dispute objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["DisputeListParams"] + ) -> ListObject["Dispute"]: + """ + Returns a list of Issuing Dispute objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["DisputeModifyParams"] + ) -> "Dispute": + """ + Updates the specified Issuing Dispute object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Properties on the evidence object can be unset by passing in an empty string. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Dispute", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["DisputeModifyParams"] + ) -> "Dispute": + """ + Updates the specified Issuing Dispute object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Properties on the evidence object can be unset by passing in an empty string. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Dispute", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["DisputeRetrieveParams"] + ) -> "Dispute": + """ + Retrieves an Issuing Dispute object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["DisputeRetrieveParams"] + ) -> "Dispute": + """ + Retrieves an Issuing Dispute object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + @classmethod + def _cls_submit( + cls, dispute: str, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + cls._static_request( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(dispute) + ), + params=params, + ), + ) + + @overload + @staticmethod + def submit( + dispute: str, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + ... + + @overload + def submit(self, **params: Unpack["DisputeSubmitParams"]) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + ... + + @class_method_variant("_cls_submit") + def submit( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_submit_async( + cls, dispute: str, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + await cls._static_request_async( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(dispute) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def submit_async( + dispute: str, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + ... + + @overload + async def submit_async( + self, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + ... + + @class_method_variant("_cls_submit_async") + async def submit_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["DisputeSubmitParams"] + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(self.get("id")) + ), + params=params, + ), + ) + + _inner_class_types = {"evidence": Evidence, "treasury": Treasury} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute_service.py new file mode 100644 index 00000000..2631bd19 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_dispute_service.py @@ -0,0 +1,234 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._dispute import Dispute + from stripe.params.issuing._dispute_create_params import ( + DisputeCreateParams, + ) + from stripe.params.issuing._dispute_list_params import DisputeListParams + from stripe.params.issuing._dispute_retrieve_params import ( + DisputeRetrieveParams, + ) + from stripe.params.issuing._dispute_submit_params import ( + DisputeSubmitParams, + ) + from stripe.params.issuing._dispute_update_params import ( + DisputeUpdateParams, + ) + + +class DisputeService(StripeService): + def list( + self, + params: Optional["DisputeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Dispute]": + """ + Returns a list of Issuing Dispute objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Dispute]", + self._request( + "get", + "/v1/issuing/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["DisputeListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Dispute]": + """ + Returns a list of Issuing Dispute objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Dispute]", + await self._request_async( + "get", + "/v1/issuing/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: Optional["DisputeCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Creates an Issuing Dispute object. Individual pieces of evidence within the evidence object are optional at this point. Stripe only validates that required evidence is present during submission. Refer to [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence) for more details about evidence requirements. + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/issuing/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: Optional["DisputeCreateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Creates an Issuing Dispute object. Individual pieces of evidence within the evidence object are optional at this point. Stripe only validates that required evidence is present during submission. Refer to [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence) for more details about evidence requirements. + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/issuing/disputes", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + dispute: str, + params: Optional["DisputeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Retrieves an Issuing Dispute object. + """ + return cast( + "Dispute", + self._request( + "get", + "/v1/issuing/disputes/{dispute}".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + dispute: str, + params: Optional["DisputeRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Retrieves an Issuing Dispute object. + """ + return cast( + "Dispute", + await self._request_async( + "get", + "/v1/issuing/disputes/{dispute}".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + dispute: str, + params: Optional["DisputeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Updates the specified Issuing Dispute object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Properties on the evidence object can be unset by passing in an empty string. + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/issuing/disputes/{dispute}".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + dispute: str, + params: Optional["DisputeUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Updates the specified Issuing Dispute object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Properties on the evidence object can be unset by passing in an empty string. + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/issuing/disputes/{dispute}".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def submit( + self, + dispute: str, + params: Optional["DisputeSubmitParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + self._request( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def submit_async( + self, + dispute: str, + params: Optional["DisputeSubmitParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Dispute": + """ + Submits an Issuing Dispute to the card network. Stripe validates that all evidence fields required for the dispute's reason are present. For more details, see [Dispute reasons and evidence](https://docs.stripe.com/docs/issuing/purchases/disputes#dispute-reasons-and-evidence). + """ + return cast( + "Dispute", + await self._request_async( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=sanitize_id(dispute), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design.py new file mode 100644 index 00000000..fd65ab0a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design.py @@ -0,0 +1,677 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._createable_api_resource import CreateableAPIResource +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._file import File + from stripe.issuing._physical_bundle import PhysicalBundle + from stripe.params.issuing._personalization_design_activate_params import ( + PersonalizationDesignActivateParams, + ) + from stripe.params.issuing._personalization_design_create_params import ( + PersonalizationDesignCreateParams, + ) + from stripe.params.issuing._personalization_design_deactivate_params import ( + PersonalizationDesignDeactivateParams, + ) + from stripe.params.issuing._personalization_design_list_params import ( + PersonalizationDesignListParams, + ) + from stripe.params.issuing._personalization_design_modify_params import ( + PersonalizationDesignModifyParams, + ) + from stripe.params.issuing._personalization_design_reject_params import ( + PersonalizationDesignRejectParams, + ) + from stripe.params.issuing._personalization_design_retrieve_params import ( + PersonalizationDesignRetrieveParams, + ) + + +class PersonalizationDesign( + CreateableAPIResource["PersonalizationDesign"], + ListableAPIResource["PersonalizationDesign"], + UpdateableAPIResource["PersonalizationDesign"], +): + """ + A Personalization Design is a logical grouping of a Physical Bundle, card logo, and carrier text that represents a product line. + """ + + OBJECT_NAME: ClassVar[Literal["issuing.personalization_design"]] = ( + "issuing.personalization_design" + ) + + class CarrierText(StripeObject): + footer_body: Optional[str] + """ + The footer body text of the carrier letter. + """ + footer_title: Optional[str] + """ + The footer title text of the carrier letter. + """ + header_body: Optional[str] + """ + The header body text of the carrier letter. + """ + header_title: Optional[str] + """ + The header title text of the carrier letter. + """ + + class Preferences(StripeObject): + is_default: bool + """ + Whether we use this personalization design to create cards when one isn't specified. A connected account uses the Connect platform's default design if no personalization design is set as the default design. + """ + is_platform_default: Optional[bool] + """ + Whether this personalization design is used to create cards when one is not specified and a default for this connected account does not exist. + """ + + class RejectionReasons(StripeObject): + card_logo: Optional[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_binary_image", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + """ + The reason(s) the card logo was rejected. + """ + carrier_text: Optional[ + List[ + Literal[ + "geographic_location", + "inappropriate", + "network_name", + "non_fiat_currency", + "other", + "other_entity", + "promotional_material", + ] + ] + ] + """ + The reason(s) the carrier text was rejected. + """ + + card_logo: Optional[ExpandableField["File"]] + """ + The file for the card logo to use with physical bundles that support card logos. Must have a `purpose` value of `issuing_logo`. + """ + carrier_text: Optional[CarrierText] + """ + Hash containing carrier text, for use with physical bundles that support carrier text. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + lookup_key: Optional[str] + """ + A lookup key used to retrieve personalization designs dynamically from a static string. This may be up to 200 characters. + """ + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + name: Optional[str] + """ + Friendly display name. + """ + object: Literal["issuing.personalization_design"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + physical_bundle: ExpandableField["PhysicalBundle"] + """ + The physical bundle object belonging to this personalization design. + """ + preferences: Preferences + rejection_reasons: RejectionReasons + status: Literal["active", "inactive", "rejected", "review"] + """ + Whether this personalization design can be used to create cards. + """ + + @classmethod + def create( + cls, **params: Unpack["PersonalizationDesignCreateParams"] + ) -> "PersonalizationDesign": + """ + Creates a personalization design object. + """ + return cast( + "PersonalizationDesign", + cls._static_request( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + async def create_async( + cls, **params: Unpack["PersonalizationDesignCreateParams"] + ) -> "PersonalizationDesign": + """ + Creates a personalization design object. + """ + return cast( + "PersonalizationDesign", + await cls._static_request_async( + "post", + cls.class_url(), + params=params, + ), + ) + + @classmethod + def list( + cls, **params: Unpack["PersonalizationDesignListParams"] + ) -> ListObject["PersonalizationDesign"]: + """ + Returns a list of personalization design objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PersonalizationDesignListParams"] + ) -> ListObject["PersonalizationDesign"]: + """ + Returns a list of personalization design objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["PersonalizationDesignModifyParams"] + ) -> "PersonalizationDesign": + """ + Updates a card personalization object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PersonalizationDesign", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["PersonalizationDesignModifyParams"] + ) -> "PersonalizationDesign": + """ + Updates a card personalization object. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "PersonalizationDesign", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PersonalizationDesignRetrieveParams"] + ) -> "PersonalizationDesign": + """ + Retrieves a personalization design object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PersonalizationDesignRetrieveParams"] + ) -> "PersonalizationDesign": + """ + Retrieves a personalization design object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["PersonalizationDesign"]): + _resource_cls: Type["PersonalizationDesign"] + + @classmethod + def _cls_activate( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignActivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + cls._static_request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + def activate( + personalization_design: str, + **params: Unpack["PersonalizationDesignActivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + ... + + @overload + def activate( + self, **params: Unpack["PersonalizationDesignActivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + ... + + @class_method_variant("_cls_activate") + def activate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignActivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + self.resource._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @classmethod + async def _cls_activate_async( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignActivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def activate_async( + personalization_design: str, + **params: Unpack["PersonalizationDesignActivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + ... + + @overload + async def activate_async( + self, **params: Unpack["PersonalizationDesignActivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + ... + + @class_method_variant("_cls_activate_async") + async def activate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignActivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to active. + """ + return cast( + "PersonalizationDesign", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/activate".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @classmethod + def _cls_deactivate( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignDeactivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + cls._static_request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + def deactivate( + personalization_design: str, + **params: Unpack["PersonalizationDesignDeactivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + ... + + @overload + def deactivate( + self, **params: Unpack["PersonalizationDesignDeactivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + ... + + @class_method_variant("_cls_deactivate") + def deactivate( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignDeactivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + self.resource._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @classmethod + async def _cls_deactivate_async( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignDeactivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def deactivate_async( + personalization_design: str, + **params: Unpack["PersonalizationDesignDeactivateParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + ... + + @overload + async def deactivate_async( + self, **params: Unpack["PersonalizationDesignDeactivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + ... + + @class_method_variant("_cls_deactivate_async") + async def deactivate_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignDeactivateParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to inactive. + """ + return cast( + "PersonalizationDesign", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/deactivate".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @classmethod + def _cls_reject( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignRejectParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + cls._static_request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + def reject( + personalization_design: str, + **params: Unpack["PersonalizationDesignRejectParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + ... + + @overload + def reject( + self, **params: Unpack["PersonalizationDesignRejectParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + ... + + @class_method_variant("_cls_reject") + def reject( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignRejectParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + self.resource._request( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @classmethod + async def _cls_reject_async( + cls, + personalization_design: str, + **params: Unpack["PersonalizationDesignRejectParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id( + personalization_design + ) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def reject_async( + personalization_design: str, + **params: Unpack["PersonalizationDesignRejectParams"], + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + ... + + @overload + async def reject_async( + self, **params: Unpack["PersonalizationDesignRejectParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + ... + + @class_method_variant("_cls_reject_async") + async def reject_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["PersonalizationDesignRejectParams"] + ) -> "PersonalizationDesign": + """ + Updates the status of the specified testmode personalization design object to rejected. + """ + return cast( + "PersonalizationDesign", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/personalization_designs/{personalization_design}/reject".format( + personalization_design=sanitize_id( + self.resource.get("id") + ) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "carrier_text": CarrierText, + "preferences": Preferences, + "rejection_reasons": RejectionReasons, + } + + +PersonalizationDesign.TestHelpers._resource_cls = PersonalizationDesign diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design_service.py new file mode 100644 index 00000000..0738bf40 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_personalization_design_service.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._personalization_design import PersonalizationDesign + from stripe.params.issuing._personalization_design_create_params import ( + PersonalizationDesignCreateParams, + ) + from stripe.params.issuing._personalization_design_list_params import ( + PersonalizationDesignListParams, + ) + from stripe.params.issuing._personalization_design_retrieve_params import ( + PersonalizationDesignRetrieveParams, + ) + from stripe.params.issuing._personalization_design_update_params import ( + PersonalizationDesignUpdateParams, + ) + + +class PersonalizationDesignService(StripeService): + def list( + self, + params: Optional["PersonalizationDesignListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PersonalizationDesign]": + """ + Returns a list of personalization design objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[PersonalizationDesign]", + self._request( + "get", + "/v1/issuing/personalization_designs", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PersonalizationDesignListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PersonalizationDesign]": + """ + Returns a list of personalization design objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[PersonalizationDesign]", + await self._request_async( + "get", + "/v1/issuing/personalization_designs", + base_address="api", + params=params, + options=options, + ), + ) + + def create( + self, + params: "PersonalizationDesignCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Creates a personalization design object. + """ + return cast( + "PersonalizationDesign", + self._request( + "post", + "/v1/issuing/personalization_designs", + base_address="api", + params=params, + options=options, + ), + ) + + async def create_async( + self, + params: "PersonalizationDesignCreateParams", + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Creates a personalization design object. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "post", + "/v1/issuing/personalization_designs", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + personalization_design: str, + params: Optional["PersonalizationDesignRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Retrieves a personalization design object. + """ + return cast( + "PersonalizationDesign", + self._request( + "get", + "/v1/issuing/personalization_designs/{personalization_design}".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + personalization_design: str, + params: Optional["PersonalizationDesignRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Retrieves a personalization design object. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "get", + "/v1/issuing/personalization_designs/{personalization_design}".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + personalization_design: str, + params: Optional["PersonalizationDesignUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates a card personalization object. + """ + return cast( + "PersonalizationDesign", + self._request( + "post", + "/v1/issuing/personalization_designs/{personalization_design}".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + personalization_design: str, + params: Optional["PersonalizationDesignUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PersonalizationDesign": + """ + Updates a card personalization object. + """ + return cast( + "PersonalizationDesign", + await self._request_async( + "post", + "/v1/issuing/personalization_designs/{personalization_design}".format( + personalization_design=sanitize_id(personalization_design), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle.py new file mode 100644 index 00000000..0e5b3387 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from typing import ClassVar +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params.issuing._physical_bundle_list_params import ( + PhysicalBundleListParams, + ) + from stripe.params.issuing._physical_bundle_retrieve_params import ( + PhysicalBundleRetrieveParams, + ) + + +class PhysicalBundle(ListableAPIResource["PhysicalBundle"]): + """ + A Physical Bundle represents the bundle of physical items - card stock, carrier letter, and envelope - that is shipped to a cardholder when you create a physical card. + """ + + OBJECT_NAME: ClassVar[Literal["issuing.physical_bundle"]] = ( + "issuing.physical_bundle" + ) + + class Features(StripeObject): + card_logo: Literal["optional", "required", "unsupported"] + """ + The policy for how to use card logo images in a card design with this physical bundle. + """ + carrier_text: Literal["optional", "required", "unsupported"] + """ + The policy for how to use carrier letter text in a card design with this physical bundle. + """ + second_line: Literal["optional", "required", "unsupported"] + """ + The policy for how to use a second line on a card with this physical bundle. + """ + + features: Features + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + name: str + """ + Friendly display name. + """ + object: Literal["issuing.physical_bundle"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "inactive", "review"] + """ + Whether this physical bundle can be used to create cards. + """ + type: Literal["custom", "standard"] + """ + Whether this physical bundle is a standard Stripe offering or custom-made for you. + """ + + @classmethod + def list( + cls, **params: Unpack["PhysicalBundleListParams"] + ) -> ListObject["PhysicalBundle"]: + """ + Returns a list of physical bundle objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["PhysicalBundleListParams"] + ) -> ListObject["PhysicalBundle"]: + """ + Returns a list of physical bundle objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["PhysicalBundleRetrieveParams"] + ) -> "PhysicalBundle": + """ + Retrieves a physical bundle object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["PhysicalBundleRetrieveParams"] + ) -> "PhysicalBundle": + """ + Retrieves a physical bundle object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"features": Features} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle_service.py new file mode 100644 index 00000000..d3cba200 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_physical_bundle_service.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._physical_bundle import PhysicalBundle + from stripe.params.issuing._physical_bundle_list_params import ( + PhysicalBundleListParams, + ) + from stripe.params.issuing._physical_bundle_retrieve_params import ( + PhysicalBundleRetrieveParams, + ) + + +class PhysicalBundleService(StripeService): + def list( + self, + params: Optional["PhysicalBundleListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PhysicalBundle]": + """ + Returns a list of physical bundle objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[PhysicalBundle]", + self._request( + "get", + "/v1/issuing/physical_bundles", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["PhysicalBundleListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[PhysicalBundle]": + """ + Returns a list of physical bundle objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[PhysicalBundle]", + await self._request_async( + "get", + "/v1/issuing/physical_bundles", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + physical_bundle: str, + params: Optional["PhysicalBundleRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PhysicalBundle": + """ + Retrieves a physical bundle object. + """ + return cast( + "PhysicalBundle", + self._request( + "get", + "/v1/issuing/physical_bundles/{physical_bundle}".format( + physical_bundle=sanitize_id(physical_bundle), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + physical_bundle: str, + params: Optional["PhysicalBundleRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "PhysicalBundle": + """ + Retrieves a physical bundle object. + """ + return cast( + "PhysicalBundle", + await self._request_async( + "get", + "/v1/issuing/physical_bundles/{physical_bundle}".format( + physical_bundle=sanitize_id(physical_bundle), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token.py new file mode 100644 index 00000000..85434e3e --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token.py @@ -0,0 +1,333 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import sanitize_id +from typing import ClassVar, List, Optional, cast +from typing_extensions import Literal, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.issuing._card import Card + from stripe.params.issuing._token_list_params import TokenListParams + from stripe.params.issuing._token_modify_params import TokenModifyParams + from stripe.params.issuing._token_retrieve_params import ( + TokenRetrieveParams, + ) + + +class Token(ListableAPIResource["Token"], UpdateableAPIResource["Token"]): + """ + An issuing token object is created when an issued card is added to a digital wallet. As a [card issuer](https://stripe.com/docs/issuing), you can [view and manage these tokens](https://stripe.com/docs/issuing/controls/token-management) through Stripe. + """ + + OBJECT_NAME: ClassVar[Literal["issuing.token"]] = "issuing.token" + + class NetworkData(StripeObject): + class Device(StripeObject): + device_fingerprint: Optional[str] + """ + An obfuscated ID derived from the device ID. + """ + ip_address: Optional[str] + """ + The IP address of the device at provisioning time. + """ + location: Optional[str] + """ + The geographic latitude/longitude coordinates of the device at provisioning time. The format is [+-]decimal/[+-]decimal. + """ + name: Optional[str] + """ + The name of the device used for tokenization. + """ + phone_number: Optional[str] + """ + The phone number of the device used for tokenization. + """ + type: Optional[Literal["other", "phone", "watch"]] + """ + The type of device used for tokenization. + """ + + class Mastercard(StripeObject): + card_reference_id: Optional[str] + """ + A unique reference ID from MasterCard to represent the card account number. + """ + token_reference_id: str + """ + The network-unique identifier for the token. + """ + token_requestor_id: str + """ + The ID of the entity requesting tokenization, specific to MasterCard. + """ + token_requestor_name: Optional[str] + """ + The name of the entity requesting tokenization, if known. This is directly provided from MasterCard. + """ + + class Visa(StripeObject): + card_reference_id: str + """ + A unique reference ID from Visa to represent the card account number. + """ + token_reference_id: str + """ + The network-unique identifier for the token. + """ + token_requestor_id: str + """ + The ID of the entity requesting tokenization, specific to Visa. + """ + token_risk_score: Optional[str] + """ + Degree of risk associated with the token between `01` and `99`, with higher number indicating higher risk. A `00` value indicates the token was not scored by Visa. + """ + + class WalletProvider(StripeObject): + class CardholderAddress(StripeObject): + line1: str + """ + The street address of the cardholder tokenizing the card. + """ + postal_code: str + """ + The postal code of the cardholder tokenizing the card. + """ + + account_id: Optional[str] + """ + The wallet provider-given account ID of the digital wallet the token belongs to. + """ + account_trust_score: Optional[int] + """ + An evaluation on the trustworthiness of the wallet account between 1 and 5. A higher score indicates more trustworthy. + """ + card_number_source: Optional[ + Literal["app", "manual", "on_file", "other"] + ] + """ + The method used for tokenizing a card. + """ + cardholder_address: Optional[CardholderAddress] + cardholder_name: Optional[str] + """ + The name of the cardholder tokenizing the card. + """ + device_trust_score: Optional[int] + """ + An evaluation on the trustworthiness of the device. A higher score indicates more trustworthy. + """ + hashed_account_email_address: Optional[str] + """ + The hashed email address of the cardholder's account with the wallet provider. + """ + reason_codes: Optional[ + List[ + Literal[ + "account_card_too_new", + "account_recently_changed", + "account_too_new", + "account_too_new_since_launch", + "additional_device", + "data_expired", + "defer_id_v_decision", + "device_recently_lost", + "good_activity_history", + "has_suspended_tokens", + "high_risk", + "inactive_account", + "long_account_tenure", + "low_account_score", + "low_device_score", + "low_phone_number_score", + "network_service_error", + "outside_home_territory", + "provisioning_cardholder_mismatch", + "provisioning_device_and_cardholder_mismatch", + "provisioning_device_mismatch", + "same_device_no_prior_authentication", + "same_device_successful_prior_authentication", + "software_update", + "suspicious_activity", + "too_many_different_cardholders", + "too_many_recent_attempts", + "too_many_recent_tokens", + ] + ] + ] + """ + The reasons for suggested tokenization given by the card network. + """ + suggested_decision: Optional[ + Literal["approve", "decline", "require_auth"] + ] + """ + The recommendation on responding to the tokenization request. + """ + suggested_decision_version: Optional[str] + """ + The version of the standard for mapping reason codes followed by the wallet provider. + """ + _inner_class_types = {"cardholder_address": CardholderAddress} + + device: Optional[Device] + mastercard: Optional[Mastercard] + type: Literal["mastercard", "visa"] + """ + The network that the token is associated with. An additional hash is included with a name matching this value, containing tokenization data specific to the card network. + """ + visa: Optional[Visa] + wallet_provider: Optional[WalletProvider] + _inner_class_types = { + "device": Device, + "mastercard": Mastercard, + "visa": Visa, + "wallet_provider": WalletProvider, + } + + card: ExpandableField["Card"] + """ + Card associated with this token. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + device_fingerprint: Optional[str] + """ + The hashed ID derived from the device ID from the card network associated with the token. + """ + id: str + """ + Unique identifier for the object. + """ + last4: Optional[str] + """ + The last four digits of the token. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + network: Literal["mastercard", "visa"] + """ + The token service provider / card network associated with the token. + """ + network_data: Optional[NetworkData] + network_updated_at: int + """ + Time at which the token was last updated by the card network. Measured in seconds since the Unix epoch. + """ + object: Literal["issuing.token"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + status: Literal["active", "deleted", "requested", "suspended"] + """ + The usage state of the token. + """ + wallet_provider: Optional[ + Literal["apple_pay", "google_pay", "samsung_pay"] + ] + """ + The digital wallet for this token, if one was used. + """ + + @classmethod + def list(cls, **params: Unpack["TokenListParams"]) -> ListObject["Token"]: + """ + Lists all Issuing Token objects for a given card. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TokenListParams"] + ) -> ListObject["Token"]: + """ + Lists all Issuing Token objects for a given card. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify(cls, id: str, **params: Unpack["TokenModifyParams"]) -> "Token": + """ + Attempts to update the specified Issuing Token object to the status specified. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Token", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["TokenModifyParams"] + ) -> "Token": + """ + Attempts to update the specified Issuing Token object to the status specified. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Token", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TokenRetrieveParams"] + ) -> "Token": + """ + Retrieves an Issuing Token object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TokenRetrieveParams"] + ) -> "Token": + """ + Retrieves an Issuing Token object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + _inner_class_types = {"network_data": NetworkData} diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token_service.py new file mode 100644 index 00000000..8146af5c --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_token_service.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._token import Token + from stripe.params.issuing._token_list_params import TokenListParams + from stripe.params.issuing._token_retrieve_params import ( + TokenRetrieveParams, + ) + from stripe.params.issuing._token_update_params import TokenUpdateParams + + +class TokenService(StripeService): + def list( + self, + params: "TokenListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Token]": + """ + Lists all Issuing Token objects for a given card. + """ + return cast( + "ListObject[Token]", + self._request( + "get", + "/v1/issuing/tokens", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: "TokenListParams", + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Token]": + """ + Lists all Issuing Token objects for a given card. + """ + return cast( + "ListObject[Token]", + await self._request_async( + "get", + "/v1/issuing/tokens", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + token: str, + params: Optional["TokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Retrieves an Issuing Token object. + """ + return cast( + "Token", + self._request( + "get", + "/v1/issuing/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + token: str, + params: Optional["TokenRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Retrieves an Issuing Token object. + """ + return cast( + "Token", + await self._request_async( + "get", + "/v1/issuing/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + token: str, + params: "TokenUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Attempts to update the specified Issuing Token object to the status specified. + """ + return cast( + "Token", + self._request( + "post", + "/v1/issuing/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + token: str, + params: "TokenUpdateParams", + options: Optional["RequestOptions"] = None, + ) -> "Token": + """ + Attempts to update the specified Issuing Token object to the status specified. + """ + return cast( + "Token", + await self._request_async( + "post", + "/v1/issuing/tokens/{token}".format(token=sanitize_id(token)), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction.py new file mode 100644 index 00000000..4677555a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction.py @@ -0,0 +1,725 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._expandable_field import ExpandableField +from stripe._list_object import ListObject +from stripe._listable_api_resource import ListableAPIResource +from stripe._stripe_object import StripeObject +from stripe._test_helpers import APIResourceTestHelpers +from stripe._updateable_api_resource import UpdateableAPIResource +from stripe._util import class_method_variant, sanitize_id +from typing import ClassVar, Dict, List, Optional, cast, overload +from typing_extensions import Literal, Type, Unpack, TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._balance_transaction import BalanceTransaction + from stripe.issuing._authorization import Authorization + from stripe.issuing._card import Card + from stripe.issuing._cardholder import Cardholder + from stripe.issuing._dispute import Dispute + from stripe.issuing._token import Token + from stripe.params.issuing._transaction_create_force_capture_params import ( + TransactionCreateForceCaptureParams, + ) + from stripe.params.issuing._transaction_create_unlinked_refund_params import ( + TransactionCreateUnlinkedRefundParams, + ) + from stripe.params.issuing._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.issuing._transaction_modify_params import ( + TransactionModifyParams, + ) + from stripe.params.issuing._transaction_refund_params import ( + TransactionRefundParams, + ) + from stripe.params.issuing._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + + +class Transaction( + ListableAPIResource["Transaction"], + UpdateableAPIResource["Transaction"], +): + """ + Any use of an [issued card](https://stripe.com/docs/issuing) that results in funds entering or leaving + your Stripe account, such as a completed purchase or refund, is represented by an Issuing + `Transaction` object. + + Related guide: [Issued card transactions](https://stripe.com/docs/issuing/purchases/transactions) + """ + + OBJECT_NAME: ClassVar[Literal["issuing.transaction"]] = ( + "issuing.transaction" + ) + + class AmountDetails(StripeObject): + atm_fee: Optional[int] + """ + The fee charged by the ATM for the cash withdrawal. + """ + cashback_amount: Optional[int] + """ + The amount of cash requested by the cardholder. + """ + + class MerchantData(StripeObject): + category: str + """ + A categorization of the seller's type of business. See our [merchant categories guide](https://stripe.com/docs/issuing/merchant-categories) for a list of possible values. + """ + category_code: str + """ + The merchant category code for the seller's business + """ + city: Optional[str] + """ + City where the seller is located + """ + country: Optional[str] + """ + Country where the seller is located + """ + name: Optional[str] + """ + Name of the seller + """ + network_id: str + """ + Identifier assigned to the seller by the card network. Different card networks may assign different network_id fields to the same merchant. + """ + postal_code: Optional[str] + """ + Postal code where the seller is located + """ + state: Optional[str] + """ + State where the seller is located + """ + tax_id: Optional[str] + """ + The seller's tax identification number. Currently populated for French merchants only. + """ + terminal_id: Optional[str] + """ + An ID assigned by the seller to the location of the sale. + """ + url: Optional[str] + """ + URL provided by the merchant on a 3DS request + """ + + class NetworkData(StripeObject): + authorization_code: Optional[str] + """ + A code created by Stripe which is shared with the merchant to validate the authorization. This field will be populated if the authorization message was approved. The code typically starts with the letter "S", followed by a six-digit number. For example, "S498162". Please note that the code is not guaranteed to be unique across authorizations. + """ + processing_date: Optional[str] + """ + The date the transaction was processed by the card network. This can be different from the date the seller recorded the transaction depending on when the acquirer submits the transaction to the network. + """ + transaction_id: Optional[str] + """ + Unique identifier for the authorization assigned by the card network used to match subsequent messages, disputes, and transactions. + """ + + class PurchaseDetails(StripeObject): + class Fleet(StripeObject): + class CardholderPromptData(StripeObject): + driver_id: Optional[str] + """ + Driver ID. + """ + odometer: Optional[int] + """ + Odometer reading. + """ + unspecified_id: Optional[str] + """ + An alphanumeric ID. This field is used when a vehicle ID, driver ID, or generic ID is entered by the cardholder, but the merchant or card network did not specify the prompt type. + """ + user_id: Optional[str] + """ + User ID. + """ + vehicle_number: Optional[str] + """ + Vehicle number. + """ + + class ReportedBreakdown(StripeObject): + class Fuel(StripeObject): + gross_amount_decimal: Optional[str] + """ + Gross fuel amount that should equal Fuel Volume multipled by Fuel Unit Cost, inclusive of taxes. + """ + + class NonFuel(StripeObject): + gross_amount_decimal: Optional[str] + """ + Gross non-fuel amount that should equal the sum of the line items, inclusive of taxes. + """ + + class Tax(StripeObject): + local_amount_decimal: Optional[str] + """ + Amount of state or provincial Sales Tax included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + national_amount_decimal: Optional[str] + """ + Amount of national Sales Tax or VAT included in the transaction amount. Null if not reported by merchant or not subject to tax. + """ + + fuel: Optional[Fuel] + """ + Breakdown of fuel portion of the purchase. + """ + non_fuel: Optional[NonFuel] + """ + Breakdown of non-fuel portion of the purchase. + """ + tax: Optional[Tax] + """ + Information about tax included in this transaction. + """ + _inner_class_types = { + "fuel": Fuel, + "non_fuel": NonFuel, + "tax": Tax, + } + + cardholder_prompt_data: Optional[CardholderPromptData] + """ + Answers to prompts presented to cardholder at point of sale. + """ + purchase_type: Optional[str] + """ + The type of purchase. One of `fuel_purchase`, `non_fuel_purchase`, or `fuel_and_non_fuel_purchase`. + """ + reported_breakdown: Optional[ReportedBreakdown] + """ + More information about the total amount. This information is not guaranteed to be accurate as some merchants may provide unreliable data. + """ + service_type: Optional[str] + """ + The type of fuel service. One of `non_fuel_transaction`, `full_service`, or `self_service`. + """ + _inner_class_types = { + "cardholder_prompt_data": CardholderPromptData, + "reported_breakdown": ReportedBreakdown, + } + + class Flight(StripeObject): + class Segment(StripeObject): + arrival_airport_code: Optional[str] + """ + The three-letter IATA airport code of the flight's destination. + """ + carrier: Optional[str] + """ + The airline carrier code. + """ + departure_airport_code: Optional[str] + """ + The three-letter IATA airport code that the flight departed from. + """ + flight_number: Optional[str] + """ + The flight number. + """ + service_class: Optional[str] + """ + The flight's service class. + """ + stopover_allowed: Optional[bool] + """ + Whether a stopover is allowed on this flight. + """ + + departure_at: Optional[int] + """ + The time that the flight departed. + """ + passenger_name: Optional[str] + """ + The name of the passenger. + """ + refundable: Optional[bool] + """ + Whether the ticket is refundable. + """ + segments: Optional[List[Segment]] + """ + The legs of the trip. + """ + travel_agency: Optional[str] + """ + The travel agency that issued the ticket. + """ + _inner_class_types = {"segments": Segment} + + class Fuel(StripeObject): + industry_product_code: Optional[str] + """ + [Conexxus Payment System Product Code](https://www.conexxus.org/conexxus-payment-system-product-codes) identifying the primary fuel product purchased. + """ + quantity_decimal: Optional[str] + """ + The quantity of `unit`s of fuel that was dispensed, represented as a decimal string with at most 12 decimal places. + """ + type: str + """ + The type of fuel that was purchased. One of `diesel`, `unleaded_plus`, `unleaded_regular`, `unleaded_super`, or `other`. + """ + unit: str + """ + The units for `quantity_decimal`. One of `charging_minute`, `imperial_gallon`, `kilogram`, `kilowatt_hour`, `liter`, `pound`, `us_gallon`, or `other`. + """ + unit_cost_decimal: str + """ + The cost in cents per each unit of fuel, represented as a decimal string with at most 12 decimal places. + """ + + class Lodging(StripeObject): + check_in_at: Optional[int] + """ + The time of checking into the lodging. + """ + nights: Optional[int] + """ + The number of nights stayed at the lodging. + """ + + class Receipt(StripeObject): + description: Optional[str] + """ + The description of the item. The maximum length of this field is 26 characters. + """ + quantity: Optional[float] + """ + The quantity of the item. + """ + total: Optional[int] + """ + The total for this line item in cents. + """ + unit_cost: Optional[int] + """ + The unit cost of the item in cents. + """ + + fleet: Optional[Fleet] + """ + Fleet-specific information for transactions using Fleet cards. + """ + flight: Optional[Flight] + """ + Information about the flight that was purchased with this transaction. + """ + fuel: Optional[Fuel] + """ + Information about fuel that was purchased with this transaction. + """ + lodging: Optional[Lodging] + """ + Information about lodging that was purchased with this transaction. + """ + receipt: Optional[List[Receipt]] + """ + The line items in the purchase. + """ + reference: Optional[str] + """ + A merchant-specific order number. + """ + _inner_class_types = { + "fleet": Fleet, + "flight": Flight, + "fuel": Fuel, + "lodging": Lodging, + "receipt": Receipt, + } + + class Treasury(StripeObject): + received_credit: Optional[str] + """ + The Treasury [ReceivedCredit](https://stripe.com/docs/api/treasury/received_credits) representing this Issuing transaction if it is a refund + """ + received_debit: Optional[str] + """ + The Treasury [ReceivedDebit](https://stripe.com/docs/api/treasury/received_debits) representing this Issuing transaction if it is a capture + """ + + amount: int + """ + The transaction amount, which will be reflected in your balance. This amount is in your currency and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + amount_details: Optional[AmountDetails] + """ + Detailed breakdown of amount components. These amounts are denominated in `currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). + """ + authorization: Optional[ExpandableField["Authorization"]] + """ + The `Authorization` object that led to this transaction. + """ + balance_transaction: Optional[ExpandableField["BalanceTransaction"]] + """ + ID of the [balance transaction](https://stripe.com/docs/api/balance_transactions) associated with this transaction. + """ + card: ExpandableField["Card"] + """ + The card used to make this transaction. + """ + cardholder: Optional[ExpandableField["Cardholder"]] + """ + The cardholder to whom this transaction belongs. + """ + created: int + """ + Time at which the object was created. Measured in seconds since the Unix epoch. + """ + currency: str + """ + Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies). + """ + dispute: Optional[ExpandableField["Dispute"]] + """ + If you've disputed the transaction, the ID of the dispute. + """ + id: str + """ + Unique identifier for the object. + """ + livemode: bool + """ + Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. + """ + merchant_amount: int + """ + The amount that the merchant will receive, denominated in `merchant_currency` and in the [smallest currency unit](https://stripe.com/docs/currencies#zero-decimal). It will be different from `amount` if the merchant is taking payment in a different currency. + """ + merchant_currency: str + """ + The currency with which the merchant is taking payment. + """ + merchant_data: MerchantData + metadata: Dict[str, str] + """ + Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. + """ + network_data: Optional[NetworkData] + """ + Details about the transaction, such as processing dates, set by the card network. + """ + object: Literal["issuing.transaction"] + """ + String representing the object's type. Objects of the same type share the same value. + """ + purchase_details: Optional[PurchaseDetails] + """ + Additional purchase information that is optionally provided by the merchant. + """ + token: Optional[ExpandableField["Token"]] + """ + [Token](https://stripe.com/docs/api/issuing/tokens/object) object used for this transaction. If a network token was not used for this transaction, this field will be null. + """ + treasury: Optional[Treasury] + """ + [Treasury](https://stripe.com/docs/api/treasury) details related to this transaction if it was created on a [FinancialAccount](/docs/api/treasury/financial_accounts + """ + type: Literal["capture", "refund"] + """ + The nature of the transaction. + """ + wallet: Optional[Literal["apple_pay", "google_pay", "samsung_pay"]] + """ + The digital wallet used for this transaction. One of `apple_pay`, `google_pay`, or `samsung_pay`. + """ + + @classmethod + def list( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Returns a list of Issuing Transaction objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = cls._static_request( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + async def list_async( + cls, **params: Unpack["TransactionListParams"] + ) -> ListObject["Transaction"]: + """ + Returns a list of Issuing Transaction objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + result = await cls._static_request_async( + "get", + cls.class_url(), + params=params, + ) + if not isinstance(result, ListObject): + raise TypeError( + "Expected list object from API, got %s" + % (type(result).__name__) + ) + + return result + + @classmethod + def modify( + cls, id: str, **params: Unpack["TransactionModifyParams"] + ) -> "Transaction": + """ + Updates the specified Issuing Transaction object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Transaction", + cls._static_request( + "post", + url, + params=params, + ), + ) + + @classmethod + async def modify_async( + cls, id: str, **params: Unpack["TransactionModifyParams"] + ) -> "Transaction": + """ + Updates the specified Issuing Transaction object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + url = "%s/%s" % (cls.class_url(), sanitize_id(id)) + return cast( + "Transaction", + await cls._static_request_async( + "post", + url, + params=params, + ), + ) + + @classmethod + def retrieve( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves an Issuing Transaction object. + """ + instance = cls(id, **params) + instance.refresh() + return instance + + @classmethod + async def retrieve_async( + cls, id: str, **params: Unpack["TransactionRetrieveParams"] + ) -> "Transaction": + """ + Retrieves an Issuing Transaction object. + """ + instance = cls(id, **params) + await instance.refresh_async() + return instance + + class TestHelpers(APIResourceTestHelpers["Transaction"]): + _resource_cls: Type["Transaction"] + + @classmethod + def create_force_capture( + cls, **params: Unpack["TransactionCreateForceCaptureParams"] + ) -> "Transaction": + """ + Allows the user to capture an arbitrary amount, also known as a forced capture. + """ + return cast( + "Transaction", + cls._static_request( + "post", + "/v1/test_helpers/issuing/transactions/create_force_capture", + params=params, + ), + ) + + @classmethod + async def create_force_capture_async( + cls, **params: Unpack["TransactionCreateForceCaptureParams"] + ) -> "Transaction": + """ + Allows the user to capture an arbitrary amount, also known as a forced capture. + """ + return cast( + "Transaction", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/transactions/create_force_capture", + params=params, + ), + ) + + @classmethod + def create_unlinked_refund( + cls, **params: Unpack["TransactionCreateUnlinkedRefundParams"] + ) -> "Transaction": + """ + Allows the user to refund an arbitrary amount, also known as a unlinked refund. + """ + return cast( + "Transaction", + cls._static_request( + "post", + "/v1/test_helpers/issuing/transactions/create_unlinked_refund", + params=params, + ), + ) + + @classmethod + async def create_unlinked_refund_async( + cls, **params: Unpack["TransactionCreateUnlinkedRefundParams"] + ) -> "Transaction": + """ + Allows the user to refund an arbitrary amount, also known as a unlinked refund. + """ + return cast( + "Transaction", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/transactions/create_unlinked_refund", + params=params, + ), + ) + + @classmethod + def _cls_refund( + cls, transaction: str, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + cls._static_request( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(transaction) + ), + params=params, + ), + ) + + @overload + @staticmethod + def refund( + transaction: str, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + ... + + @overload + def refund( + self, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + ... + + @class_method_variant("_cls_refund") + def refund( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + self.resource._request( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @classmethod + async def _cls_refund_async( + cls, transaction: str, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + await cls._static_request_async( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(transaction) + ), + params=params, + ), + ) + + @overload + @staticmethod + async def refund_async( + transaction: str, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + ... + + @overload + async def refund_async( + self, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + ... + + @class_method_variant("_cls_refund_async") + async def refund_async( # pyright: ignore[reportGeneralTypeIssues] + self, **params: Unpack["TransactionRefundParams"] + ) -> "Transaction": + """ + Refund a test-mode Transaction. + """ + return cast( + "Transaction", + await self.resource._request_async( + "post", + "/v1/test_helpers/issuing/transactions/{transaction}/refund".format( + transaction=sanitize_id(self.resource.get("id")) + ), + params=params, + ), + ) + + @property + def test_helpers(self): + return self.TestHelpers(self) + + _inner_class_types = { + "amount_details": AmountDetails, + "merchant_data": MerchantData, + "network_data": NetworkData, + "purchase_details": PurchaseDetails, + "treasury": Treasury, + } + + +Transaction.TestHelpers._resource_cls = Transaction diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction_service.py b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction_service.py new file mode 100644 index 00000000..8c888266 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/issuing/_transaction_service.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from stripe._stripe_service import StripeService +from stripe._util import sanitize_id +from typing import Optional, cast +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe._list_object import ListObject + from stripe._request_options import RequestOptions + from stripe.issuing._transaction import Transaction + from stripe.params.issuing._transaction_list_params import ( + TransactionListParams, + ) + from stripe.params.issuing._transaction_retrieve_params import ( + TransactionRetrieveParams, + ) + from stripe.params.issuing._transaction_update_params import ( + TransactionUpdateParams, + ) + + +class TransactionService(StripeService): + def list( + self, + params: Optional["TransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Returns a list of Issuing Transaction objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Transaction]", + self._request( + "get", + "/v1/issuing/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + async def list_async( + self, + params: Optional["TransactionListParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "ListObject[Transaction]": + """ + Returns a list of Issuing Transaction objects. The objects are sorted in descending order by creation date, with the most recently created object appearing first. + """ + return cast( + "ListObject[Transaction]", + await self._request_async( + "get", + "/v1/issuing/transactions", + base_address="api", + params=params, + options=options, + ), + ) + + def retrieve( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves an Issuing Transaction object. + """ + return cast( + "Transaction", + self._request( + "get", + "/v1/issuing/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def retrieve_async( + self, + transaction: str, + params: Optional["TransactionRetrieveParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Retrieves an Issuing Transaction object. + """ + return cast( + "Transaction", + await self._request_async( + "get", + "/v1/issuing/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + def update( + self, + transaction: str, + params: Optional["TransactionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Updates the specified Issuing Transaction object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Transaction", + self._request( + "post", + "/v1/issuing/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) + + async def update_async( + self, + transaction: str, + params: Optional["TransactionUpdateParams"] = None, + options: Optional["RequestOptions"] = None, + ) -> "Transaction": + """ + Updates the specified Issuing Transaction object by setting the values of the parameters passed. Any parameters not provided will be left unchanged. + """ + return cast( + "Transaction", + await self._request_async( + "post", + "/v1/issuing/transactions/{transaction}".format( + transaction=sanitize_id(transaction), + ), + base_address="api", + params=params, + options=options, + ), + ) diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/oauth_error.py b/Backend/venv/lib/python3.12/site-packages/stripe/oauth_error.py new file mode 100644 index 00000000..14f75c2a --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/oauth_error.py @@ -0,0 +1,53 @@ +from stripe._error import StripeError +from stripe._error_object import OAuthErrorObject + + +class OAuthError(StripeError): + def __init__( + self, + code, + description, + http_body=None, + http_status=None, + json_body=None, + headers=None, + ): + super(OAuthError, self).__init__( + description, http_body, http_status, json_body, headers, code + ) + + def _construct_error_object(self): + if self.json_body is None: + return None + + from stripe._api_requestor import _APIRequestor + + return OAuthErrorObject._construct_from( + values=self.json_body, # type: ignore + requestor=_APIRequestor._global_instance(), + api_mode="V1", + ) + + +class InvalidClientError(OAuthError): + pass + + +class InvalidGrantError(OAuthError): + pass + + +class InvalidRequestError(OAuthError): + pass + + +class InvalidScopeError(OAuthError): + pass + + +class UnsupportedGrantTypeError(OAuthError): + pass + + +class UnsupportedResponseTypeError(OAuthError): + pass diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__init__.py b/Backend/venv/lib/python3.12/site-packages/stripe/params/__init__.py new file mode 100644 index 00000000..a35054a7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/stripe/params/__init__.py @@ -0,0 +1,15174 @@ +# -*- coding: utf-8 -*- +# File generated from our OpenAPI spec +from importlib import import_module +from typing_extensions import TYPE_CHECKING + +if TYPE_CHECKING: + from stripe.params import ( + apps as apps, + billing as billing, + billing_portal as billing_portal, + checkout as checkout, + climate as climate, + entitlements as entitlements, + financial_connections as financial_connections, + forwarding as forwarding, + identity as identity, + issuing as issuing, + radar as radar, + reporting as reporting, + sigma as sigma, + tax as tax, + terminal as terminal, + test_helpers as test_helpers, + treasury as treasury, + ) + from stripe.params._account_capability_list_params import ( + AccountCapabilityListParams as AccountCapabilityListParams, + ) + from stripe.params._account_capability_retrieve_params import ( + AccountCapabilityRetrieveParams as AccountCapabilityRetrieveParams, + ) + from stripe.params._account_capability_update_params import ( + AccountCapabilityUpdateParams as AccountCapabilityUpdateParams, + ) + from stripe.params._account_create_external_account_params import ( + AccountCreateExternalAccountParams as AccountCreateExternalAccountParams, + AccountCreateExternalAccountParamsBankAccount as AccountCreateExternalAccountParamsBankAccount, + AccountCreateExternalAccountParamsCard as AccountCreateExternalAccountParamsCard, + AccountCreateExternalAccountParamsCardToken as AccountCreateExternalAccountParamsCardToken, + ) + from stripe.params._account_create_login_link_params import ( + AccountCreateLoginLinkParams as AccountCreateLoginLinkParams, + ) + from stripe.params._account_create_params import ( + AccountCreateParams as AccountCreateParams, + AccountCreateParamsBankAccount as AccountCreateParamsBankAccount, + AccountCreateParamsBusinessProfile as AccountCreateParamsBusinessProfile, + AccountCreateParamsBusinessProfileAnnualRevenue as AccountCreateParamsBusinessProfileAnnualRevenue, + AccountCreateParamsBusinessProfileMonthlyEstimatedRevenue as AccountCreateParamsBusinessProfileMonthlyEstimatedRevenue, + AccountCreateParamsBusinessProfileSupportAddress as AccountCreateParamsBusinessProfileSupportAddress, + AccountCreateParamsCapabilities as AccountCreateParamsCapabilities, + AccountCreateParamsCapabilitiesAcssDebitPayments as AccountCreateParamsCapabilitiesAcssDebitPayments, + AccountCreateParamsCapabilitiesAffirmPayments as AccountCreateParamsCapabilitiesAffirmPayments, + AccountCreateParamsCapabilitiesAfterpayClearpayPayments as AccountCreateParamsCapabilitiesAfterpayClearpayPayments, + AccountCreateParamsCapabilitiesAlmaPayments as AccountCreateParamsCapabilitiesAlmaPayments, + AccountCreateParamsCapabilitiesAmazonPayPayments as AccountCreateParamsCapabilitiesAmazonPayPayments, + AccountCreateParamsCapabilitiesAuBecsDebitPayments as AccountCreateParamsCapabilitiesAuBecsDebitPayments, + AccountCreateParamsCapabilitiesBacsDebitPayments as AccountCreateParamsCapabilitiesBacsDebitPayments, + AccountCreateParamsCapabilitiesBancontactPayments as AccountCreateParamsCapabilitiesBancontactPayments, + AccountCreateParamsCapabilitiesBankTransferPayments as AccountCreateParamsCapabilitiesBankTransferPayments, + AccountCreateParamsCapabilitiesBilliePayments as AccountCreateParamsCapabilitiesBilliePayments, + AccountCreateParamsCapabilitiesBlikPayments as AccountCreateParamsCapabilitiesBlikPayments, + AccountCreateParamsCapabilitiesBoletoPayments as AccountCreateParamsCapabilitiesBoletoPayments, + AccountCreateParamsCapabilitiesCardIssuing as AccountCreateParamsCapabilitiesCardIssuing, + AccountCreateParamsCapabilitiesCardPayments as AccountCreateParamsCapabilitiesCardPayments, + AccountCreateParamsCapabilitiesCartesBancairesPayments as AccountCreateParamsCapabilitiesCartesBancairesPayments, + AccountCreateParamsCapabilitiesCashappPayments as AccountCreateParamsCapabilitiesCashappPayments, + AccountCreateParamsCapabilitiesCryptoPayments as AccountCreateParamsCapabilitiesCryptoPayments, + AccountCreateParamsCapabilitiesEpsPayments as AccountCreateParamsCapabilitiesEpsPayments, + AccountCreateParamsCapabilitiesFpxPayments as AccountCreateParamsCapabilitiesFpxPayments, + AccountCreateParamsCapabilitiesGbBankTransferPayments as AccountCreateParamsCapabilitiesGbBankTransferPayments, + AccountCreateParamsCapabilitiesGiropayPayments as AccountCreateParamsCapabilitiesGiropayPayments, + AccountCreateParamsCapabilitiesGrabpayPayments as AccountCreateParamsCapabilitiesGrabpayPayments, + AccountCreateParamsCapabilitiesIdealPayments as AccountCreateParamsCapabilitiesIdealPayments, + AccountCreateParamsCapabilitiesIndiaInternationalPayments as AccountCreateParamsCapabilitiesIndiaInternationalPayments, + AccountCreateParamsCapabilitiesJcbPayments as AccountCreateParamsCapabilitiesJcbPayments, + AccountCreateParamsCapabilitiesJpBankTransferPayments as AccountCreateParamsCapabilitiesJpBankTransferPayments, + AccountCreateParamsCapabilitiesKakaoPayPayments as AccountCreateParamsCapabilitiesKakaoPayPayments, + AccountCreateParamsCapabilitiesKlarnaPayments as AccountCreateParamsCapabilitiesKlarnaPayments, + AccountCreateParamsCapabilitiesKonbiniPayments as AccountCreateParamsCapabilitiesKonbiniPayments, + AccountCreateParamsCapabilitiesKrCardPayments as AccountCreateParamsCapabilitiesKrCardPayments, + AccountCreateParamsCapabilitiesLegacyPayments as AccountCreateParamsCapabilitiesLegacyPayments, + AccountCreateParamsCapabilitiesLinkPayments as AccountCreateParamsCapabilitiesLinkPayments, + AccountCreateParamsCapabilitiesMbWayPayments as AccountCreateParamsCapabilitiesMbWayPayments, + AccountCreateParamsCapabilitiesMobilepayPayments as AccountCreateParamsCapabilitiesMobilepayPayments, + AccountCreateParamsCapabilitiesMultibancoPayments as AccountCreateParamsCapabilitiesMultibancoPayments, + AccountCreateParamsCapabilitiesMxBankTransferPayments as AccountCreateParamsCapabilitiesMxBankTransferPayments, + AccountCreateParamsCapabilitiesNaverPayPayments as AccountCreateParamsCapabilitiesNaverPayPayments, + AccountCreateParamsCapabilitiesNzBankAccountBecsDebitPayments as AccountCreateParamsCapabilitiesNzBankAccountBecsDebitPayments, + AccountCreateParamsCapabilitiesOxxoPayments as AccountCreateParamsCapabilitiesOxxoPayments, + AccountCreateParamsCapabilitiesP24Payments as AccountCreateParamsCapabilitiesP24Payments, + AccountCreateParamsCapabilitiesPayByBankPayments as AccountCreateParamsCapabilitiesPayByBankPayments, + AccountCreateParamsCapabilitiesPaycoPayments as AccountCreateParamsCapabilitiesPaycoPayments, + AccountCreateParamsCapabilitiesPaynowPayments as AccountCreateParamsCapabilitiesPaynowPayments, + AccountCreateParamsCapabilitiesPixPayments as AccountCreateParamsCapabilitiesPixPayments, + AccountCreateParamsCapabilitiesPromptpayPayments as AccountCreateParamsCapabilitiesPromptpayPayments, + AccountCreateParamsCapabilitiesRevolutPayPayments as AccountCreateParamsCapabilitiesRevolutPayPayments, + AccountCreateParamsCapabilitiesSamsungPayPayments as AccountCreateParamsCapabilitiesSamsungPayPayments, + AccountCreateParamsCapabilitiesSatispayPayments as AccountCreateParamsCapabilitiesSatispayPayments, + AccountCreateParamsCapabilitiesSepaBankTransferPayments as AccountCreateParamsCapabilitiesSepaBankTransferPayments, + AccountCreateParamsCapabilitiesSepaDebitPayments as AccountCreateParamsCapabilitiesSepaDebitPayments, + AccountCreateParamsCapabilitiesSofortPayments as AccountCreateParamsCapabilitiesSofortPayments, + AccountCreateParamsCapabilitiesSwishPayments as AccountCreateParamsCapabilitiesSwishPayments, + AccountCreateParamsCapabilitiesTaxReportingUs1099K as AccountCreateParamsCapabilitiesTaxReportingUs1099K, + AccountCreateParamsCapabilitiesTaxReportingUs1099Misc as AccountCreateParamsCapabilitiesTaxReportingUs1099Misc, + AccountCreateParamsCapabilitiesTransfers as AccountCreateParamsCapabilitiesTransfers, + AccountCreateParamsCapabilitiesTreasury as AccountCreateParamsCapabilitiesTreasury, + AccountCreateParamsCapabilitiesTwintPayments as AccountCreateParamsCapabilitiesTwintPayments, + AccountCreateParamsCapabilitiesUsBankAccountAchPayments as AccountCreateParamsCapabilitiesUsBankAccountAchPayments, + AccountCreateParamsCapabilitiesUsBankTransferPayments as AccountCreateParamsCapabilitiesUsBankTransferPayments, + AccountCreateParamsCapabilitiesZipPayments as AccountCreateParamsCapabilitiesZipPayments, + AccountCreateParamsCard as AccountCreateParamsCard, + AccountCreateParamsCardToken as AccountCreateParamsCardToken, + AccountCreateParamsCompany as AccountCreateParamsCompany, + AccountCreateParamsCompanyAddress as AccountCreateParamsCompanyAddress, + AccountCreateParamsCompanyAddressKana as AccountCreateParamsCompanyAddressKana, + AccountCreateParamsCompanyAddressKanji as AccountCreateParamsCompanyAddressKanji, + AccountCreateParamsCompanyDirectorshipDeclaration as AccountCreateParamsCompanyDirectorshipDeclaration, + AccountCreateParamsCompanyOwnershipDeclaration as AccountCreateParamsCompanyOwnershipDeclaration, + AccountCreateParamsCompanyRegistrationDate as AccountCreateParamsCompanyRegistrationDate, + AccountCreateParamsCompanyRepresentativeDeclaration as AccountCreateParamsCompanyRepresentativeDeclaration, + AccountCreateParamsCompanyVerification as AccountCreateParamsCompanyVerification, + AccountCreateParamsCompanyVerificationDocument as AccountCreateParamsCompanyVerificationDocument, + AccountCreateParamsController as AccountCreateParamsController, + AccountCreateParamsControllerFees as AccountCreateParamsControllerFees, + AccountCreateParamsControllerLosses as AccountCreateParamsControllerLosses, + AccountCreateParamsControllerStripeDashboard as AccountCreateParamsControllerStripeDashboard, + AccountCreateParamsDocuments as AccountCreateParamsDocuments, + AccountCreateParamsDocumentsBankAccountOwnershipVerification as AccountCreateParamsDocumentsBankAccountOwnershipVerification, + AccountCreateParamsDocumentsCompanyLicense as AccountCreateParamsDocumentsCompanyLicense, + AccountCreateParamsDocumentsCompanyMemorandumOfAssociation as AccountCreateParamsDocumentsCompanyMemorandumOfAssociation, + AccountCreateParamsDocumentsCompanyMinisterialDecree as AccountCreateParamsDocumentsCompanyMinisterialDecree, + AccountCreateParamsDocumentsCompanyRegistrationVerification as AccountCreateParamsDocumentsCompanyRegistrationVerification, + AccountCreateParamsDocumentsCompanyTaxIdVerification as AccountCreateParamsDocumentsCompanyTaxIdVerification, + AccountCreateParamsDocumentsProofOfAddress as AccountCreateParamsDocumentsProofOfAddress, + AccountCreateParamsDocumentsProofOfRegistration as AccountCreateParamsDocumentsProofOfRegistration, + AccountCreateParamsDocumentsProofOfUltimateBeneficialOwnership as AccountCreateParamsDocumentsProofOfUltimateBeneficialOwnership, + AccountCreateParamsGroups as AccountCreateParamsGroups, + AccountCreateParamsIndividual as AccountCreateParamsIndividual, + AccountCreateParamsIndividualAddress as AccountCreateParamsIndividualAddress, + AccountCreateParamsIndividualAddressKana as AccountCreateParamsIndividualAddressKana, + AccountCreateParamsIndividualAddressKanji as AccountCreateParamsIndividualAddressKanji, + AccountCreateParamsIndividualDob as AccountCreateParamsIndividualDob, + AccountCreateParamsIndividualRegisteredAddress as AccountCreateParamsIndividualRegisteredAddress, + AccountCreateParamsIndividualRelationship as AccountCreateParamsIndividualRelationship, + AccountCreateParamsIndividualVerification as AccountCreateParamsIndividualVerification, + AccountCreateParamsIndividualVerificationAdditionalDocument as AccountCreateParamsIndividualVerificationAdditionalDocument, + AccountCreateParamsIndividualVerificationDocument as AccountCreateParamsIndividualVerificationDocument, + AccountCreateParamsSettings as AccountCreateParamsSettings, + AccountCreateParamsSettingsBacsDebitPayments as AccountCreateParamsSettingsBacsDebitPayments, + AccountCreateParamsSettingsBranding as AccountCreateParamsSettingsBranding, + AccountCreateParamsSettingsCardIssuing as AccountCreateParamsSettingsCardIssuing, + AccountCreateParamsSettingsCardIssuingTosAcceptance as AccountCreateParamsSettingsCardIssuingTosAcceptance, + AccountCreateParamsSettingsCardPayments as AccountCreateParamsSettingsCardPayments, + AccountCreateParamsSettingsCardPaymentsDeclineOn as AccountCreateParamsSettingsCardPaymentsDeclineOn, + AccountCreateParamsSettingsInvoices as AccountCreateParamsSettingsInvoices, + AccountCreateParamsSettingsPayments as AccountCreateParamsSettingsPayments, + AccountCreateParamsSettingsPayouts as AccountCreateParamsSettingsPayouts, + AccountCreateParamsSettingsPayoutsSchedule as AccountCreateParamsSettingsPayoutsSchedule, + AccountCreateParamsSettingsTreasury as AccountCreateParamsSettingsTreasury, + AccountCreateParamsSettingsTreasuryTosAcceptance as AccountCreateParamsSettingsTreasuryTosAcceptance, + AccountCreateParamsTosAcceptance as AccountCreateParamsTosAcceptance, + ) + from stripe.params._account_create_person_params import ( + AccountCreatePersonParams as AccountCreatePersonParams, + AccountCreatePersonParamsAdditionalTosAcceptances as AccountCreatePersonParamsAdditionalTosAcceptances, + AccountCreatePersonParamsAdditionalTosAcceptancesAccount as AccountCreatePersonParamsAdditionalTosAcceptancesAccount, + AccountCreatePersonParamsAddress as AccountCreatePersonParamsAddress, + AccountCreatePersonParamsAddressKana as AccountCreatePersonParamsAddressKana, + AccountCreatePersonParamsAddressKanji as AccountCreatePersonParamsAddressKanji, + AccountCreatePersonParamsDob as AccountCreatePersonParamsDob, + AccountCreatePersonParamsDocuments as AccountCreatePersonParamsDocuments, + AccountCreatePersonParamsDocumentsCompanyAuthorization as AccountCreatePersonParamsDocumentsCompanyAuthorization, + AccountCreatePersonParamsDocumentsPassport as AccountCreatePersonParamsDocumentsPassport, + AccountCreatePersonParamsDocumentsVisa as AccountCreatePersonParamsDocumentsVisa, + AccountCreatePersonParamsRegisteredAddress as AccountCreatePersonParamsRegisteredAddress, + AccountCreatePersonParamsRelationship as AccountCreatePersonParamsRelationship, + AccountCreatePersonParamsUsCfpbData as AccountCreatePersonParamsUsCfpbData, + AccountCreatePersonParamsUsCfpbDataEthnicityDetails as AccountCreatePersonParamsUsCfpbDataEthnicityDetails, + AccountCreatePersonParamsUsCfpbDataRaceDetails as AccountCreatePersonParamsUsCfpbDataRaceDetails, + AccountCreatePersonParamsVerification as AccountCreatePersonParamsVerification, + AccountCreatePersonParamsVerificationAdditionalDocument as AccountCreatePersonParamsVerificationAdditionalDocument, + AccountCreatePersonParamsVerificationDocument as AccountCreatePersonParamsVerificationDocument, + ) + from stripe.params._account_delete_external_account_params import ( + AccountDeleteExternalAccountParams as AccountDeleteExternalAccountParams, + ) + from stripe.params._account_delete_params import ( + AccountDeleteParams as AccountDeleteParams, + ) + from stripe.params._account_delete_person_params import ( + AccountDeletePersonParams as AccountDeletePersonParams, + ) + from stripe.params._account_external_account_create_params import ( + AccountExternalAccountCreateParams as AccountExternalAccountCreateParams, + AccountExternalAccountCreateParamsBankAccount as AccountExternalAccountCreateParamsBankAccount, + AccountExternalAccountCreateParamsCard as AccountExternalAccountCreateParamsCard, + AccountExternalAccountCreateParamsCardToken as AccountExternalAccountCreateParamsCardToken, + ) + from stripe.params._account_external_account_delete_params import ( + AccountExternalAccountDeleteParams as AccountExternalAccountDeleteParams, + ) + from stripe.params._account_external_account_list_params import ( + AccountExternalAccountListParams as AccountExternalAccountListParams, + ) + from stripe.params._account_external_account_retrieve_params import ( + AccountExternalAccountRetrieveParams as AccountExternalAccountRetrieveParams, + ) + from stripe.params._account_external_account_update_params import ( + AccountExternalAccountUpdateParams as AccountExternalAccountUpdateParams, + AccountExternalAccountUpdateParamsDocuments as AccountExternalAccountUpdateParamsDocuments, + AccountExternalAccountUpdateParamsDocumentsBankAccountOwnershipVerification as AccountExternalAccountUpdateParamsDocumentsBankAccountOwnershipVerification, + ) + from stripe.params._account_link_create_params import ( + AccountLinkCreateParams as AccountLinkCreateParams, + AccountLinkCreateParamsCollectionOptions as AccountLinkCreateParamsCollectionOptions, + ) + from stripe.params._account_list_capabilities_params import ( + AccountListCapabilitiesParams as AccountListCapabilitiesParams, + ) + from stripe.params._account_list_external_accounts_params import ( + AccountListExternalAccountsParams as AccountListExternalAccountsParams, + ) + from stripe.params._account_list_params import ( + AccountListParams as AccountListParams, + AccountListParamsCreated as AccountListParamsCreated, + ) + from stripe.params._account_list_persons_params import ( + AccountListPersonsParams as AccountListPersonsParams, + AccountListPersonsParamsRelationship as AccountListPersonsParamsRelationship, + ) + from stripe.params._account_login_link_create_params import ( + AccountLoginLinkCreateParams as AccountLoginLinkCreateParams, + ) + from stripe.params._account_modify_capability_params import ( + AccountModifyCapabilityParams as AccountModifyCapabilityParams, + ) + from stripe.params._account_modify_external_account_params import ( + AccountModifyExternalAccountParams as AccountModifyExternalAccountParams, + AccountModifyExternalAccountParamsDocuments as AccountModifyExternalAccountParamsDocuments, + AccountModifyExternalAccountParamsDocumentsBankAccountOwnershipVerification as AccountModifyExternalAccountParamsDocumentsBankAccountOwnershipVerification, + ) + from stripe.params._account_modify_person_params import ( + AccountModifyPersonParams as AccountModifyPersonParams, + AccountModifyPersonParamsAdditionalTosAcceptances as AccountModifyPersonParamsAdditionalTosAcceptances, + AccountModifyPersonParamsAdditionalTosAcceptancesAccount as AccountModifyPersonParamsAdditionalTosAcceptancesAccount, + AccountModifyPersonParamsAddress as AccountModifyPersonParamsAddress, + AccountModifyPersonParamsAddressKana as AccountModifyPersonParamsAddressKana, + AccountModifyPersonParamsAddressKanji as AccountModifyPersonParamsAddressKanji, + AccountModifyPersonParamsDob as AccountModifyPersonParamsDob, + AccountModifyPersonParamsDocuments as AccountModifyPersonParamsDocuments, + AccountModifyPersonParamsDocumentsCompanyAuthorization as AccountModifyPersonParamsDocumentsCompanyAuthorization, + AccountModifyPersonParamsDocumentsPassport as AccountModifyPersonParamsDocumentsPassport, + AccountModifyPersonParamsDocumentsVisa as AccountModifyPersonParamsDocumentsVisa, + AccountModifyPersonParamsRegisteredAddress as AccountModifyPersonParamsRegisteredAddress, + AccountModifyPersonParamsRelationship as AccountModifyPersonParamsRelationship, + AccountModifyPersonParamsUsCfpbData as AccountModifyPersonParamsUsCfpbData, + AccountModifyPersonParamsUsCfpbDataEthnicityDetails as AccountModifyPersonParamsUsCfpbDataEthnicityDetails, + AccountModifyPersonParamsUsCfpbDataRaceDetails as AccountModifyPersonParamsUsCfpbDataRaceDetails, + AccountModifyPersonParamsVerification as AccountModifyPersonParamsVerification, + AccountModifyPersonParamsVerificationAdditionalDocument as AccountModifyPersonParamsVerificationAdditionalDocument, + AccountModifyPersonParamsVerificationDocument as AccountModifyPersonParamsVerificationDocument, + ) + from stripe.params._account_person_create_params import ( + AccountPersonCreateParams as AccountPersonCreateParams, + AccountPersonCreateParamsAdditionalTosAcceptances as AccountPersonCreateParamsAdditionalTosAcceptances, + AccountPersonCreateParamsAdditionalTosAcceptancesAccount as AccountPersonCreateParamsAdditionalTosAcceptancesAccount, + AccountPersonCreateParamsAddress as AccountPersonCreateParamsAddress, + AccountPersonCreateParamsAddressKana as AccountPersonCreateParamsAddressKana, + AccountPersonCreateParamsAddressKanji as AccountPersonCreateParamsAddressKanji, + AccountPersonCreateParamsDob as AccountPersonCreateParamsDob, + AccountPersonCreateParamsDocuments as AccountPersonCreateParamsDocuments, + AccountPersonCreateParamsDocumentsCompanyAuthorization as AccountPersonCreateParamsDocumentsCompanyAuthorization, + AccountPersonCreateParamsDocumentsPassport as AccountPersonCreateParamsDocumentsPassport, + AccountPersonCreateParamsDocumentsVisa as AccountPersonCreateParamsDocumentsVisa, + AccountPersonCreateParamsRegisteredAddress as AccountPersonCreateParamsRegisteredAddress, + AccountPersonCreateParamsRelationship as AccountPersonCreateParamsRelationship, + AccountPersonCreateParamsUsCfpbData as AccountPersonCreateParamsUsCfpbData, + AccountPersonCreateParamsUsCfpbDataEthnicityDetails as AccountPersonCreateParamsUsCfpbDataEthnicityDetails, + AccountPersonCreateParamsUsCfpbDataRaceDetails as AccountPersonCreateParamsUsCfpbDataRaceDetails, + AccountPersonCreateParamsVerification as AccountPersonCreateParamsVerification, + AccountPersonCreateParamsVerificationAdditionalDocument as AccountPersonCreateParamsVerificationAdditionalDocument, + AccountPersonCreateParamsVerificationDocument as AccountPersonCreateParamsVerificationDocument, + ) + from stripe.params._account_person_delete_params import ( + AccountPersonDeleteParams as AccountPersonDeleteParams, + ) + from stripe.params._account_person_list_params import ( + AccountPersonListParams as AccountPersonListParams, + AccountPersonListParamsRelationship as AccountPersonListParamsRelationship, + ) + from stripe.params._account_person_retrieve_params import ( + AccountPersonRetrieveParams as AccountPersonRetrieveParams, + ) + from stripe.params._account_person_update_params import ( + AccountPersonUpdateParams as AccountPersonUpdateParams, + AccountPersonUpdateParamsAdditionalTosAcceptances as AccountPersonUpdateParamsAdditionalTosAcceptances, + AccountPersonUpdateParamsAdditionalTosAcceptancesAccount as AccountPersonUpdateParamsAdditionalTosAcceptancesAccount, + AccountPersonUpdateParamsAddress as AccountPersonUpdateParamsAddress, + AccountPersonUpdateParamsAddressKana as AccountPersonUpdateParamsAddressKana, + AccountPersonUpdateParamsAddressKanji as AccountPersonUpdateParamsAddressKanji, + AccountPersonUpdateParamsDob as AccountPersonUpdateParamsDob, + AccountPersonUpdateParamsDocuments as AccountPersonUpdateParamsDocuments, + AccountPersonUpdateParamsDocumentsCompanyAuthorization as AccountPersonUpdateParamsDocumentsCompanyAuthorization, + AccountPersonUpdateParamsDocumentsPassport as AccountPersonUpdateParamsDocumentsPassport, + AccountPersonUpdateParamsDocumentsVisa as AccountPersonUpdateParamsDocumentsVisa, + AccountPersonUpdateParamsRegisteredAddress as AccountPersonUpdateParamsRegisteredAddress, + AccountPersonUpdateParamsRelationship as AccountPersonUpdateParamsRelationship, + AccountPersonUpdateParamsUsCfpbData as AccountPersonUpdateParamsUsCfpbData, + AccountPersonUpdateParamsUsCfpbDataEthnicityDetails as AccountPersonUpdateParamsUsCfpbDataEthnicityDetails, + AccountPersonUpdateParamsUsCfpbDataRaceDetails as AccountPersonUpdateParamsUsCfpbDataRaceDetails, + AccountPersonUpdateParamsVerification as AccountPersonUpdateParamsVerification, + AccountPersonUpdateParamsVerificationAdditionalDocument as AccountPersonUpdateParamsVerificationAdditionalDocument, + AccountPersonUpdateParamsVerificationDocument as AccountPersonUpdateParamsVerificationDocument, + ) + from stripe.params._account_persons_params import ( + AccountPersonsParams as AccountPersonsParams, + AccountPersonsParamsRelationship as AccountPersonsParamsRelationship, + ) + from stripe.params._account_reject_params import ( + AccountRejectParams as AccountRejectParams, + ) + from stripe.params._account_retrieve_capability_params import ( + AccountRetrieveCapabilityParams as AccountRetrieveCapabilityParams, + ) + from stripe.params._account_retrieve_current_params import ( + AccountRetrieveCurrentParams as AccountRetrieveCurrentParams, + ) + from stripe.params._account_retrieve_external_account_params import ( + AccountRetrieveExternalAccountParams as AccountRetrieveExternalAccountParams, + ) + from stripe.params._account_retrieve_params import ( + AccountRetrieveParams as AccountRetrieveParams, + ) + from stripe.params._account_retrieve_person_params import ( + AccountRetrievePersonParams as AccountRetrievePersonParams, + ) + from stripe.params._account_session_create_params import ( + AccountSessionCreateParams as AccountSessionCreateParams, + AccountSessionCreateParamsComponents as AccountSessionCreateParamsComponents, + AccountSessionCreateParamsComponentsAccountManagement as AccountSessionCreateParamsComponentsAccountManagement, + AccountSessionCreateParamsComponentsAccountManagementFeatures as AccountSessionCreateParamsComponentsAccountManagementFeatures, + AccountSessionCreateParamsComponentsAccountOnboarding as AccountSessionCreateParamsComponentsAccountOnboarding, + AccountSessionCreateParamsComponentsAccountOnboardingFeatures as AccountSessionCreateParamsComponentsAccountOnboardingFeatures, + AccountSessionCreateParamsComponentsBalances as AccountSessionCreateParamsComponentsBalances, + AccountSessionCreateParamsComponentsBalancesFeatures as AccountSessionCreateParamsComponentsBalancesFeatures, + AccountSessionCreateParamsComponentsDisputesList as AccountSessionCreateParamsComponentsDisputesList, + AccountSessionCreateParamsComponentsDisputesListFeatures as AccountSessionCreateParamsComponentsDisputesListFeatures, + AccountSessionCreateParamsComponentsDocuments as AccountSessionCreateParamsComponentsDocuments, + AccountSessionCreateParamsComponentsDocumentsFeatures as AccountSessionCreateParamsComponentsDocumentsFeatures, + AccountSessionCreateParamsComponentsFinancialAccount as AccountSessionCreateParamsComponentsFinancialAccount, + AccountSessionCreateParamsComponentsFinancialAccountFeatures as AccountSessionCreateParamsComponentsFinancialAccountFeatures, + AccountSessionCreateParamsComponentsFinancialAccountTransactions as AccountSessionCreateParamsComponentsFinancialAccountTransactions, + AccountSessionCreateParamsComponentsFinancialAccountTransactionsFeatures as AccountSessionCreateParamsComponentsFinancialAccountTransactionsFeatures, + AccountSessionCreateParamsComponentsInstantPayoutsPromotion as AccountSessionCreateParamsComponentsInstantPayoutsPromotion, + AccountSessionCreateParamsComponentsInstantPayoutsPromotionFeatures as AccountSessionCreateParamsComponentsInstantPayoutsPromotionFeatures, + AccountSessionCreateParamsComponentsIssuingCard as AccountSessionCreateParamsComponentsIssuingCard, + AccountSessionCreateParamsComponentsIssuingCardFeatures as AccountSessionCreateParamsComponentsIssuingCardFeatures, + AccountSessionCreateParamsComponentsIssuingCardsList as AccountSessionCreateParamsComponentsIssuingCardsList, + AccountSessionCreateParamsComponentsIssuingCardsListFeatures as AccountSessionCreateParamsComponentsIssuingCardsListFeatures, + AccountSessionCreateParamsComponentsNotificationBanner as AccountSessionCreateParamsComponentsNotificationBanner, + AccountSessionCreateParamsComponentsNotificationBannerFeatures as AccountSessionCreateParamsComponentsNotificationBannerFeatures, + AccountSessionCreateParamsComponentsPaymentDetails as AccountSessionCreateParamsComponentsPaymentDetails, + AccountSessionCreateParamsComponentsPaymentDetailsFeatures as AccountSessionCreateParamsComponentsPaymentDetailsFeatures, + AccountSessionCreateParamsComponentsPaymentDisputes as AccountSessionCreateParamsComponentsPaymentDisputes, + AccountSessionCreateParamsComponentsPaymentDisputesFeatures as AccountSessionCreateParamsComponentsPaymentDisputesFeatures, + AccountSessionCreateParamsComponentsPayments as AccountSessionCreateParamsComponentsPayments, + AccountSessionCreateParamsComponentsPaymentsFeatures as AccountSessionCreateParamsComponentsPaymentsFeatures, + AccountSessionCreateParamsComponentsPayoutDetails as AccountSessionCreateParamsComponentsPayoutDetails, + AccountSessionCreateParamsComponentsPayoutDetailsFeatures as AccountSessionCreateParamsComponentsPayoutDetailsFeatures, + AccountSessionCreateParamsComponentsPayouts as AccountSessionCreateParamsComponentsPayouts, + AccountSessionCreateParamsComponentsPayoutsFeatures as AccountSessionCreateParamsComponentsPayoutsFeatures, + AccountSessionCreateParamsComponentsPayoutsList as AccountSessionCreateParamsComponentsPayoutsList, + AccountSessionCreateParamsComponentsPayoutsListFeatures as AccountSessionCreateParamsComponentsPayoutsListFeatures, + AccountSessionCreateParamsComponentsTaxRegistrations as AccountSessionCreateParamsComponentsTaxRegistrations, + AccountSessionCreateParamsComponentsTaxRegistrationsFeatures as AccountSessionCreateParamsComponentsTaxRegistrationsFeatures, + AccountSessionCreateParamsComponentsTaxSettings as AccountSessionCreateParamsComponentsTaxSettings, + AccountSessionCreateParamsComponentsTaxSettingsFeatures as AccountSessionCreateParamsComponentsTaxSettingsFeatures, + ) + from stripe.params._account_update_params import ( + AccountUpdateParams as AccountUpdateParams, + AccountUpdateParamsBankAccount as AccountUpdateParamsBankAccount, + AccountUpdateParamsBusinessProfile as AccountUpdateParamsBusinessProfile, + AccountUpdateParamsBusinessProfileAnnualRevenue as AccountUpdateParamsBusinessProfileAnnualRevenue, + AccountUpdateParamsBusinessProfileMonthlyEstimatedRevenue as AccountUpdateParamsBusinessProfileMonthlyEstimatedRevenue, + AccountUpdateParamsBusinessProfileSupportAddress as AccountUpdateParamsBusinessProfileSupportAddress, + AccountUpdateParamsCapabilities as AccountUpdateParamsCapabilities, + AccountUpdateParamsCapabilitiesAcssDebitPayments as AccountUpdateParamsCapabilitiesAcssDebitPayments, + AccountUpdateParamsCapabilitiesAffirmPayments as AccountUpdateParamsCapabilitiesAffirmPayments, + AccountUpdateParamsCapabilitiesAfterpayClearpayPayments as AccountUpdateParamsCapabilitiesAfterpayClearpayPayments, + AccountUpdateParamsCapabilitiesAlmaPayments as AccountUpdateParamsCapabilitiesAlmaPayments, + AccountUpdateParamsCapabilitiesAmazonPayPayments as AccountUpdateParamsCapabilitiesAmazonPayPayments, + AccountUpdateParamsCapabilitiesAuBecsDebitPayments as AccountUpdateParamsCapabilitiesAuBecsDebitPayments, + AccountUpdateParamsCapabilitiesBacsDebitPayments as AccountUpdateParamsCapabilitiesBacsDebitPayments, + AccountUpdateParamsCapabilitiesBancontactPayments as AccountUpdateParamsCapabilitiesBancontactPayments, + AccountUpdateParamsCapabilitiesBankTransferPayments as AccountUpdateParamsCapabilitiesBankTransferPayments, + AccountUpdateParamsCapabilitiesBilliePayments as AccountUpdateParamsCapabilitiesBilliePayments, + AccountUpdateParamsCapabilitiesBlikPayments as AccountUpdateParamsCapabilitiesBlikPayments, + AccountUpdateParamsCapabilitiesBoletoPayments as AccountUpdateParamsCapabilitiesBoletoPayments, + AccountUpdateParamsCapabilitiesCardIssuing as AccountUpdateParamsCapabilitiesCardIssuing, + AccountUpdateParamsCapabilitiesCardPayments as AccountUpdateParamsCapabilitiesCardPayments, + AccountUpdateParamsCapabilitiesCartesBancairesPayments as AccountUpdateParamsCapabilitiesCartesBancairesPayments, + AccountUpdateParamsCapabilitiesCashappPayments as AccountUpdateParamsCapabilitiesCashappPayments, + AccountUpdateParamsCapabilitiesCryptoPayments as AccountUpdateParamsCapabilitiesCryptoPayments, + AccountUpdateParamsCapabilitiesEpsPayments as AccountUpdateParamsCapabilitiesEpsPayments, + AccountUpdateParamsCapabilitiesFpxPayments as AccountUpdateParamsCapabilitiesFpxPayments, + AccountUpdateParamsCapabilitiesGbBankTransferPayments as AccountUpdateParamsCapabilitiesGbBankTransferPayments, + AccountUpdateParamsCapabilitiesGiropayPayments as AccountUpdateParamsCapabilitiesGiropayPayments, + AccountUpdateParamsCapabilitiesGrabpayPayments as AccountUpdateParamsCapabilitiesGrabpayPayments, + AccountUpdateParamsCapabilitiesIdealPayments as AccountUpdateParamsCapabilitiesIdealPayments, + AccountUpdateParamsCapabilitiesIndiaInternationalPayments as AccountUpdateParamsCapabilitiesIndiaInternationalPayments, + AccountUpdateParamsCapabilitiesJcbPayments as AccountUpdateParamsCapabilitiesJcbPayments, + AccountUpdateParamsCapabilitiesJpBankTransferPayments as AccountUpdateParamsCapabilitiesJpBankTransferPayments, + AccountUpdateParamsCapabilitiesKakaoPayPayments as AccountUpdateParamsCapabilitiesKakaoPayPayments, + AccountUpdateParamsCapabilitiesKlarnaPayments as AccountUpdateParamsCapabilitiesKlarnaPayments, + AccountUpdateParamsCapabilitiesKonbiniPayments as AccountUpdateParamsCapabilitiesKonbiniPayments, + AccountUpdateParamsCapabilitiesKrCardPayments as AccountUpdateParamsCapabilitiesKrCardPayments, + AccountUpdateParamsCapabilitiesLegacyPayments as AccountUpdateParamsCapabilitiesLegacyPayments, + AccountUpdateParamsCapabilitiesLinkPayments as AccountUpdateParamsCapabilitiesLinkPayments, + AccountUpdateParamsCapabilitiesMbWayPayments as AccountUpdateParamsCapabilitiesMbWayPayments, + AccountUpdateParamsCapabilitiesMobilepayPayments as AccountUpdateParamsCapabilitiesMobilepayPayments, + AccountUpdateParamsCapabilitiesMultibancoPayments as AccountUpdateParamsCapabilitiesMultibancoPayments, + AccountUpdateParamsCapabilitiesMxBankTransferPayments as AccountUpdateParamsCapabilitiesMxBankTransferPayments, + AccountUpdateParamsCapabilitiesNaverPayPayments as AccountUpdateParamsCapabilitiesNaverPayPayments, + AccountUpdateParamsCapabilitiesNzBankAccountBecsDebitPayments as AccountUpdateParamsCapabilitiesNzBankAccountBecsDebitPayments, + AccountUpdateParamsCapabilitiesOxxoPayments as AccountUpdateParamsCapabilitiesOxxoPayments, + AccountUpdateParamsCapabilitiesP24Payments as AccountUpdateParamsCapabilitiesP24Payments, + AccountUpdateParamsCapabilitiesPayByBankPayments as AccountUpdateParamsCapabilitiesPayByBankPayments, + AccountUpdateParamsCapabilitiesPaycoPayments as AccountUpdateParamsCapabilitiesPaycoPayments, + AccountUpdateParamsCapabilitiesPaynowPayments as AccountUpdateParamsCapabilitiesPaynowPayments, + AccountUpdateParamsCapabilitiesPixPayments as AccountUpdateParamsCapabilitiesPixPayments, + AccountUpdateParamsCapabilitiesPromptpayPayments as AccountUpdateParamsCapabilitiesPromptpayPayments, + AccountUpdateParamsCapabilitiesRevolutPayPayments as AccountUpdateParamsCapabilitiesRevolutPayPayments, + AccountUpdateParamsCapabilitiesSamsungPayPayments as AccountUpdateParamsCapabilitiesSamsungPayPayments, + AccountUpdateParamsCapabilitiesSatispayPayments as AccountUpdateParamsCapabilitiesSatispayPayments, + AccountUpdateParamsCapabilitiesSepaBankTransferPayments as AccountUpdateParamsCapabilitiesSepaBankTransferPayments, + AccountUpdateParamsCapabilitiesSepaDebitPayments as AccountUpdateParamsCapabilitiesSepaDebitPayments, + AccountUpdateParamsCapabilitiesSofortPayments as AccountUpdateParamsCapabilitiesSofortPayments, + AccountUpdateParamsCapabilitiesSwishPayments as AccountUpdateParamsCapabilitiesSwishPayments, + AccountUpdateParamsCapabilitiesTaxReportingUs1099K as AccountUpdateParamsCapabilitiesTaxReportingUs1099K, + AccountUpdateParamsCapabilitiesTaxReportingUs1099Misc as AccountUpdateParamsCapabilitiesTaxReportingUs1099Misc, + AccountUpdateParamsCapabilitiesTransfers as AccountUpdateParamsCapabilitiesTransfers, + AccountUpdateParamsCapabilitiesTreasury as AccountUpdateParamsCapabilitiesTreasury, + AccountUpdateParamsCapabilitiesTwintPayments as AccountUpdateParamsCapabilitiesTwintPayments, + AccountUpdateParamsCapabilitiesUsBankAccountAchPayments as AccountUpdateParamsCapabilitiesUsBankAccountAchPayments, + AccountUpdateParamsCapabilitiesUsBankTransferPayments as AccountUpdateParamsCapabilitiesUsBankTransferPayments, + AccountUpdateParamsCapabilitiesZipPayments as AccountUpdateParamsCapabilitiesZipPayments, + AccountUpdateParamsCard as AccountUpdateParamsCard, + AccountUpdateParamsCardToken as AccountUpdateParamsCardToken, + AccountUpdateParamsCompany as AccountUpdateParamsCompany, + AccountUpdateParamsCompanyAddress as AccountUpdateParamsCompanyAddress, + AccountUpdateParamsCompanyAddressKana as AccountUpdateParamsCompanyAddressKana, + AccountUpdateParamsCompanyAddressKanji as AccountUpdateParamsCompanyAddressKanji, + AccountUpdateParamsCompanyDirectorshipDeclaration as AccountUpdateParamsCompanyDirectorshipDeclaration, + AccountUpdateParamsCompanyOwnershipDeclaration as AccountUpdateParamsCompanyOwnershipDeclaration, + AccountUpdateParamsCompanyRegistrationDate as AccountUpdateParamsCompanyRegistrationDate, + AccountUpdateParamsCompanyRepresentativeDeclaration as AccountUpdateParamsCompanyRepresentativeDeclaration, + AccountUpdateParamsCompanyVerification as AccountUpdateParamsCompanyVerification, + AccountUpdateParamsCompanyVerificationDocument as AccountUpdateParamsCompanyVerificationDocument, + AccountUpdateParamsDocuments as AccountUpdateParamsDocuments, + AccountUpdateParamsDocumentsBankAccountOwnershipVerification as AccountUpdateParamsDocumentsBankAccountOwnershipVerification, + AccountUpdateParamsDocumentsCompanyLicense as AccountUpdateParamsDocumentsCompanyLicense, + AccountUpdateParamsDocumentsCompanyMemorandumOfAssociation as AccountUpdateParamsDocumentsCompanyMemorandumOfAssociation, + AccountUpdateParamsDocumentsCompanyMinisterialDecree as AccountUpdateParamsDocumentsCompanyMinisterialDecree, + AccountUpdateParamsDocumentsCompanyRegistrationVerification as AccountUpdateParamsDocumentsCompanyRegistrationVerification, + AccountUpdateParamsDocumentsCompanyTaxIdVerification as AccountUpdateParamsDocumentsCompanyTaxIdVerification, + AccountUpdateParamsDocumentsProofOfAddress as AccountUpdateParamsDocumentsProofOfAddress, + AccountUpdateParamsDocumentsProofOfRegistration as AccountUpdateParamsDocumentsProofOfRegistration, + AccountUpdateParamsDocumentsProofOfUltimateBeneficialOwnership as AccountUpdateParamsDocumentsProofOfUltimateBeneficialOwnership, + AccountUpdateParamsGroups as AccountUpdateParamsGroups, + AccountUpdateParamsIndividual as AccountUpdateParamsIndividual, + AccountUpdateParamsIndividualAddress as AccountUpdateParamsIndividualAddress, + AccountUpdateParamsIndividualAddressKana as AccountUpdateParamsIndividualAddressKana, + AccountUpdateParamsIndividualAddressKanji as AccountUpdateParamsIndividualAddressKanji, + AccountUpdateParamsIndividualDob as AccountUpdateParamsIndividualDob, + AccountUpdateParamsIndividualRegisteredAddress as AccountUpdateParamsIndividualRegisteredAddress, + AccountUpdateParamsIndividualRelationship as AccountUpdateParamsIndividualRelationship, + AccountUpdateParamsIndividualVerification as AccountUpdateParamsIndividualVerification, + AccountUpdateParamsIndividualVerificationAdditionalDocument as AccountUpdateParamsIndividualVerificationAdditionalDocument, + AccountUpdateParamsIndividualVerificationDocument as AccountUpdateParamsIndividualVerificationDocument, + AccountUpdateParamsSettings as AccountUpdateParamsSettings, + AccountUpdateParamsSettingsBacsDebitPayments as AccountUpdateParamsSettingsBacsDebitPayments, + AccountUpdateParamsSettingsBranding as AccountUpdateParamsSettingsBranding, + AccountUpdateParamsSettingsCardIssuing as AccountUpdateParamsSettingsCardIssuing, + AccountUpdateParamsSettingsCardIssuingTosAcceptance as AccountUpdateParamsSettingsCardIssuingTosAcceptance, + AccountUpdateParamsSettingsCardPayments as AccountUpdateParamsSettingsCardPayments, + AccountUpdateParamsSettingsCardPaymentsDeclineOn as AccountUpdateParamsSettingsCardPaymentsDeclineOn, + AccountUpdateParamsSettingsInvoices as AccountUpdateParamsSettingsInvoices, + AccountUpdateParamsSettingsPayments as AccountUpdateParamsSettingsPayments, + AccountUpdateParamsSettingsPayouts as AccountUpdateParamsSettingsPayouts, + AccountUpdateParamsSettingsPayoutsSchedule as AccountUpdateParamsSettingsPayoutsSchedule, + AccountUpdateParamsSettingsTreasury as AccountUpdateParamsSettingsTreasury, + AccountUpdateParamsSettingsTreasuryTosAcceptance as AccountUpdateParamsSettingsTreasuryTosAcceptance, + AccountUpdateParamsTosAcceptance as AccountUpdateParamsTosAcceptance, + ) + from stripe.params._apple_pay_domain_create_params import ( + ApplePayDomainCreateParams as ApplePayDomainCreateParams, + ) + from stripe.params._apple_pay_domain_delete_params import ( + ApplePayDomainDeleteParams as ApplePayDomainDeleteParams, + ) + from stripe.params._apple_pay_domain_list_params import ( + ApplePayDomainListParams as ApplePayDomainListParams, + ) + from stripe.params._apple_pay_domain_retrieve_params import ( + ApplePayDomainRetrieveParams as ApplePayDomainRetrieveParams, + ) + from stripe.params._application_fee_create_refund_params import ( + ApplicationFeeCreateRefundParams as ApplicationFeeCreateRefundParams, + ) + from stripe.params._application_fee_list_params import ( + ApplicationFeeListParams as ApplicationFeeListParams, + ApplicationFeeListParamsCreated as ApplicationFeeListParamsCreated, + ) + from stripe.params._application_fee_list_refunds_params import ( + ApplicationFeeListRefundsParams as ApplicationFeeListRefundsParams, + ) + from stripe.params._application_fee_modify_refund_params import ( + ApplicationFeeModifyRefundParams as ApplicationFeeModifyRefundParams, + ) + from stripe.params._application_fee_refund_create_params import ( + ApplicationFeeRefundCreateParams as ApplicationFeeRefundCreateParams, + ) + from stripe.params._application_fee_refund_list_params import ( + ApplicationFeeRefundListParams as ApplicationFeeRefundListParams, + ) + from stripe.params._application_fee_refund_params import ( + ApplicationFeeRefundParams as ApplicationFeeRefundParams, + ) + from stripe.params._application_fee_refund_retrieve_params import ( + ApplicationFeeRefundRetrieveParams as ApplicationFeeRefundRetrieveParams, + ) + from stripe.params._application_fee_refund_update_params import ( + ApplicationFeeRefundUpdateParams as ApplicationFeeRefundUpdateParams, + ) + from stripe.params._application_fee_retrieve_params import ( + ApplicationFeeRetrieveParams as ApplicationFeeRetrieveParams, + ) + from stripe.params._application_fee_retrieve_refund_params import ( + ApplicationFeeRetrieveRefundParams as ApplicationFeeRetrieveRefundParams, + ) + from stripe.params._balance_retrieve_params import ( + BalanceRetrieveParams as BalanceRetrieveParams, + ) + from stripe.params._balance_settings_modify_params import ( + BalanceSettingsModifyParams as BalanceSettingsModifyParams, + BalanceSettingsModifyParamsPayments as BalanceSettingsModifyParamsPayments, + BalanceSettingsModifyParamsPaymentsPayouts as BalanceSettingsModifyParamsPaymentsPayouts, + BalanceSettingsModifyParamsPaymentsPayoutsSchedule as BalanceSettingsModifyParamsPaymentsPayoutsSchedule, + BalanceSettingsModifyParamsPaymentsSettlementTiming as BalanceSettingsModifyParamsPaymentsSettlementTiming, + ) + from stripe.params._balance_settings_retrieve_params import ( + BalanceSettingsRetrieveParams as BalanceSettingsRetrieveParams, + ) + from stripe.params._balance_settings_update_params import ( + BalanceSettingsUpdateParams as BalanceSettingsUpdateParams, + BalanceSettingsUpdateParamsPayments as BalanceSettingsUpdateParamsPayments, + BalanceSettingsUpdateParamsPaymentsPayouts as BalanceSettingsUpdateParamsPaymentsPayouts, + BalanceSettingsUpdateParamsPaymentsPayoutsSchedule as BalanceSettingsUpdateParamsPaymentsPayoutsSchedule, + BalanceSettingsUpdateParamsPaymentsSettlementTiming as BalanceSettingsUpdateParamsPaymentsSettlementTiming, + ) + from stripe.params._balance_transaction_list_params import ( + BalanceTransactionListParams as BalanceTransactionListParams, + BalanceTransactionListParamsCreated as BalanceTransactionListParamsCreated, + ) + from stripe.params._balance_transaction_retrieve_params import ( + BalanceTransactionRetrieveParams as BalanceTransactionRetrieveParams, + ) + from stripe.params._bank_account_delete_params import ( + BankAccountDeleteParams as BankAccountDeleteParams, + ) + from stripe.params._card_delete_params import ( + CardDeleteParams as CardDeleteParams, + ) + from stripe.params._charge_capture_params import ( + ChargeCaptureParams as ChargeCaptureParams, + ChargeCaptureParamsTransferData as ChargeCaptureParamsTransferData, + ) + from stripe.params._charge_create_params import ( + ChargeCreateParams as ChargeCreateParams, + ChargeCreateParamsDestination as ChargeCreateParamsDestination, + ChargeCreateParamsRadarOptions as ChargeCreateParamsRadarOptions, + ChargeCreateParamsShipping as ChargeCreateParamsShipping, + ChargeCreateParamsShippingAddress as ChargeCreateParamsShippingAddress, + ChargeCreateParamsTransferData as ChargeCreateParamsTransferData, + ) + from stripe.params._charge_list_params import ( + ChargeListParams as ChargeListParams, + ChargeListParamsCreated as ChargeListParamsCreated, + ) + from stripe.params._charge_list_refunds_params import ( + ChargeListRefundsParams as ChargeListRefundsParams, + ) + from stripe.params._charge_modify_params import ( + ChargeModifyParams as ChargeModifyParams, + ChargeModifyParamsFraudDetails as ChargeModifyParamsFraudDetails, + ChargeModifyParamsShipping as ChargeModifyParamsShipping, + ChargeModifyParamsShippingAddress as ChargeModifyParamsShippingAddress, + ) + from stripe.params._charge_retrieve_params import ( + ChargeRetrieveParams as ChargeRetrieveParams, + ) + from stripe.params._charge_retrieve_refund_params import ( + ChargeRetrieveRefundParams as ChargeRetrieveRefundParams, + ) + from stripe.params._charge_search_params import ( + ChargeSearchParams as ChargeSearchParams, + ) + from stripe.params._charge_update_params import ( + ChargeUpdateParams as ChargeUpdateParams, + ChargeUpdateParamsFraudDetails as ChargeUpdateParamsFraudDetails, + ChargeUpdateParamsShipping as ChargeUpdateParamsShipping, + ChargeUpdateParamsShippingAddress as ChargeUpdateParamsShippingAddress, + ) + from stripe.params._confirmation_token_create_params import ( + ConfirmationTokenCreateParams as ConfirmationTokenCreateParams, + ConfirmationTokenCreateParamsPaymentMethodData as ConfirmationTokenCreateParamsPaymentMethodData, + ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit as ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit, + ConfirmationTokenCreateParamsPaymentMethodDataAffirm as ConfirmationTokenCreateParamsPaymentMethodDataAffirm, + ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay as ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay, + ConfirmationTokenCreateParamsPaymentMethodDataAlipay as ConfirmationTokenCreateParamsPaymentMethodDataAlipay, + ConfirmationTokenCreateParamsPaymentMethodDataAlma as ConfirmationTokenCreateParamsPaymentMethodDataAlma, + ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay as ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay, + ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit as ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit, + ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit as ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit, + ConfirmationTokenCreateParamsPaymentMethodDataBancontact as ConfirmationTokenCreateParamsPaymentMethodDataBancontact, + ConfirmationTokenCreateParamsPaymentMethodDataBillie as ConfirmationTokenCreateParamsPaymentMethodDataBillie, + ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails as ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails, + ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress as ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress, + ConfirmationTokenCreateParamsPaymentMethodDataBlik as ConfirmationTokenCreateParamsPaymentMethodDataBlik, + ConfirmationTokenCreateParamsPaymentMethodDataBoleto as ConfirmationTokenCreateParamsPaymentMethodDataBoleto, + ConfirmationTokenCreateParamsPaymentMethodDataCashapp as ConfirmationTokenCreateParamsPaymentMethodDataCashapp, + ConfirmationTokenCreateParamsPaymentMethodDataCrypto as ConfirmationTokenCreateParamsPaymentMethodDataCrypto, + ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance as ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance, + ConfirmationTokenCreateParamsPaymentMethodDataEps as ConfirmationTokenCreateParamsPaymentMethodDataEps, + ConfirmationTokenCreateParamsPaymentMethodDataFpx as ConfirmationTokenCreateParamsPaymentMethodDataFpx, + ConfirmationTokenCreateParamsPaymentMethodDataGiropay as ConfirmationTokenCreateParamsPaymentMethodDataGiropay, + ConfirmationTokenCreateParamsPaymentMethodDataGrabpay as ConfirmationTokenCreateParamsPaymentMethodDataGrabpay, + ConfirmationTokenCreateParamsPaymentMethodDataIdeal as ConfirmationTokenCreateParamsPaymentMethodDataIdeal, + ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent as ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent, + ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay as ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay, + ConfirmationTokenCreateParamsPaymentMethodDataKlarna as ConfirmationTokenCreateParamsPaymentMethodDataKlarna, + ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob as ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob, + ConfirmationTokenCreateParamsPaymentMethodDataKonbini as ConfirmationTokenCreateParamsPaymentMethodDataKonbini, + ConfirmationTokenCreateParamsPaymentMethodDataKrCard as ConfirmationTokenCreateParamsPaymentMethodDataKrCard, + ConfirmationTokenCreateParamsPaymentMethodDataLink as ConfirmationTokenCreateParamsPaymentMethodDataLink, + ConfirmationTokenCreateParamsPaymentMethodDataMbWay as ConfirmationTokenCreateParamsPaymentMethodDataMbWay, + ConfirmationTokenCreateParamsPaymentMethodDataMobilepay as ConfirmationTokenCreateParamsPaymentMethodDataMobilepay, + ConfirmationTokenCreateParamsPaymentMethodDataMultibanco as ConfirmationTokenCreateParamsPaymentMethodDataMultibanco, + ConfirmationTokenCreateParamsPaymentMethodDataNaverPay as ConfirmationTokenCreateParamsPaymentMethodDataNaverPay, + ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount as ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount, + ConfirmationTokenCreateParamsPaymentMethodDataOxxo as ConfirmationTokenCreateParamsPaymentMethodDataOxxo, + ConfirmationTokenCreateParamsPaymentMethodDataP24 as ConfirmationTokenCreateParamsPaymentMethodDataP24, + ConfirmationTokenCreateParamsPaymentMethodDataPayByBank as ConfirmationTokenCreateParamsPaymentMethodDataPayByBank, + ConfirmationTokenCreateParamsPaymentMethodDataPayco as ConfirmationTokenCreateParamsPaymentMethodDataPayco, + ConfirmationTokenCreateParamsPaymentMethodDataPaynow as ConfirmationTokenCreateParamsPaymentMethodDataPaynow, + ConfirmationTokenCreateParamsPaymentMethodDataPaypal as ConfirmationTokenCreateParamsPaymentMethodDataPaypal, + ConfirmationTokenCreateParamsPaymentMethodDataPix as ConfirmationTokenCreateParamsPaymentMethodDataPix, + ConfirmationTokenCreateParamsPaymentMethodDataPromptpay as ConfirmationTokenCreateParamsPaymentMethodDataPromptpay, + ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions as ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions, + ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay as ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay, + ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay as ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay, + ConfirmationTokenCreateParamsPaymentMethodDataSatispay as ConfirmationTokenCreateParamsPaymentMethodDataSatispay, + ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit as ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit, + ConfirmationTokenCreateParamsPaymentMethodDataSofort as ConfirmationTokenCreateParamsPaymentMethodDataSofort, + ConfirmationTokenCreateParamsPaymentMethodDataSwish as ConfirmationTokenCreateParamsPaymentMethodDataSwish, + ConfirmationTokenCreateParamsPaymentMethodDataTwint as ConfirmationTokenCreateParamsPaymentMethodDataTwint, + ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount as ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount, + ConfirmationTokenCreateParamsPaymentMethodDataWechatPay as ConfirmationTokenCreateParamsPaymentMethodDataWechatPay, + ConfirmationTokenCreateParamsPaymentMethodDataZip as ConfirmationTokenCreateParamsPaymentMethodDataZip, + ConfirmationTokenCreateParamsPaymentMethodOptions as ConfirmationTokenCreateParamsPaymentMethodOptions, + ConfirmationTokenCreateParamsPaymentMethodOptionsCard as ConfirmationTokenCreateParamsPaymentMethodOptionsCard, + ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments as ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments, + ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan as ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan, + ConfirmationTokenCreateParamsShipping as ConfirmationTokenCreateParamsShipping, + ConfirmationTokenCreateParamsShippingAddress as ConfirmationTokenCreateParamsShippingAddress, + ) + from stripe.params._confirmation_token_retrieve_params import ( + ConfirmationTokenRetrieveParams as ConfirmationTokenRetrieveParams, + ) + from stripe.params._country_spec_list_params import ( + CountrySpecListParams as CountrySpecListParams, + ) + from stripe.params._country_spec_retrieve_params import ( + CountrySpecRetrieveParams as CountrySpecRetrieveParams, + ) + from stripe.params._coupon_create_params import ( + CouponCreateParams as CouponCreateParams, + CouponCreateParamsAppliesTo as CouponCreateParamsAppliesTo, + CouponCreateParamsCurrencyOptions as CouponCreateParamsCurrencyOptions, + ) + from stripe.params._coupon_delete_params import ( + CouponDeleteParams as CouponDeleteParams, + ) + from stripe.params._coupon_list_params import ( + CouponListParams as CouponListParams, + CouponListParamsCreated as CouponListParamsCreated, + ) + from stripe.params._coupon_modify_params import ( + CouponModifyParams as CouponModifyParams, + CouponModifyParamsCurrencyOptions as CouponModifyParamsCurrencyOptions, + ) + from stripe.params._coupon_retrieve_params import ( + CouponRetrieveParams as CouponRetrieveParams, + ) + from stripe.params._coupon_update_params import ( + CouponUpdateParams as CouponUpdateParams, + CouponUpdateParamsCurrencyOptions as CouponUpdateParamsCurrencyOptions, + ) + from stripe.params._credit_note_create_params import ( + CreditNoteCreateParams as CreditNoteCreateParams, + CreditNoteCreateParamsLine as CreditNoteCreateParamsLine, + CreditNoteCreateParamsLineTaxAmount as CreditNoteCreateParamsLineTaxAmount, + CreditNoteCreateParamsRefund as CreditNoteCreateParamsRefund, + CreditNoteCreateParamsRefundPaymentRecordRefund as CreditNoteCreateParamsRefundPaymentRecordRefund, + CreditNoteCreateParamsShippingCost as CreditNoteCreateParamsShippingCost, + ) + from stripe.params._credit_note_line_item_list_params import ( + CreditNoteLineItemListParams as CreditNoteLineItemListParams, + ) + from stripe.params._credit_note_list_lines_params import ( + CreditNoteListLinesParams as CreditNoteListLinesParams, + ) + from stripe.params._credit_note_list_params import ( + CreditNoteListParams as CreditNoteListParams, + CreditNoteListParamsCreated as CreditNoteListParamsCreated, + ) + from stripe.params._credit_note_modify_params import ( + CreditNoteModifyParams as CreditNoteModifyParams, + ) + from stripe.params._credit_note_preview_lines_list_params import ( + CreditNotePreviewLinesListParams as CreditNotePreviewLinesListParams, + CreditNotePreviewLinesListParamsLine as CreditNotePreviewLinesListParamsLine, + CreditNotePreviewLinesListParamsLineTaxAmount as CreditNotePreviewLinesListParamsLineTaxAmount, + CreditNotePreviewLinesListParamsRefund as CreditNotePreviewLinesListParamsRefund, + CreditNotePreviewLinesListParamsRefundPaymentRecordRefund as CreditNotePreviewLinesListParamsRefundPaymentRecordRefund, + CreditNotePreviewLinesListParamsShippingCost as CreditNotePreviewLinesListParamsShippingCost, + ) + from stripe.params._credit_note_preview_lines_params import ( + CreditNotePreviewLinesParams as CreditNotePreviewLinesParams, + CreditNotePreviewLinesParamsLine as CreditNotePreviewLinesParamsLine, + CreditNotePreviewLinesParamsLineTaxAmount as CreditNotePreviewLinesParamsLineTaxAmount, + CreditNotePreviewLinesParamsRefund as CreditNotePreviewLinesParamsRefund, + CreditNotePreviewLinesParamsRefundPaymentRecordRefund as CreditNotePreviewLinesParamsRefundPaymentRecordRefund, + CreditNotePreviewLinesParamsShippingCost as CreditNotePreviewLinesParamsShippingCost, + ) + from stripe.params._credit_note_preview_params import ( + CreditNotePreviewParams as CreditNotePreviewParams, + CreditNotePreviewParamsLine as CreditNotePreviewParamsLine, + CreditNotePreviewParamsLineTaxAmount as CreditNotePreviewParamsLineTaxAmount, + CreditNotePreviewParamsRefund as CreditNotePreviewParamsRefund, + CreditNotePreviewParamsRefundPaymentRecordRefund as CreditNotePreviewParamsRefundPaymentRecordRefund, + CreditNotePreviewParamsShippingCost as CreditNotePreviewParamsShippingCost, + ) + from stripe.params._credit_note_retrieve_params import ( + CreditNoteRetrieveParams as CreditNoteRetrieveParams, + ) + from stripe.params._credit_note_update_params import ( + CreditNoteUpdateParams as CreditNoteUpdateParams, + ) + from stripe.params._credit_note_void_credit_note_params import ( + CreditNoteVoidCreditNoteParams as CreditNoteVoidCreditNoteParams, + ) + from stripe.params._customer_balance_transaction_create_params import ( + CustomerBalanceTransactionCreateParams as CustomerBalanceTransactionCreateParams, + ) + from stripe.params._customer_balance_transaction_list_params import ( + CustomerBalanceTransactionListParams as CustomerBalanceTransactionListParams, + ) + from stripe.params._customer_balance_transaction_retrieve_params import ( + CustomerBalanceTransactionRetrieveParams as CustomerBalanceTransactionRetrieveParams, + ) + from stripe.params._customer_balance_transaction_update_params import ( + CustomerBalanceTransactionUpdateParams as CustomerBalanceTransactionUpdateParams, + ) + from stripe.params._customer_cash_balance_retrieve_params import ( + CustomerCashBalanceRetrieveParams as CustomerCashBalanceRetrieveParams, + ) + from stripe.params._customer_cash_balance_transaction_list_params import ( + CustomerCashBalanceTransactionListParams as CustomerCashBalanceTransactionListParams, + ) + from stripe.params._customer_cash_balance_transaction_retrieve_params import ( + CustomerCashBalanceTransactionRetrieveParams as CustomerCashBalanceTransactionRetrieveParams, + ) + from stripe.params._customer_cash_balance_update_params import ( + CustomerCashBalanceUpdateParams as CustomerCashBalanceUpdateParams, + CustomerCashBalanceUpdateParamsSettings as CustomerCashBalanceUpdateParamsSettings, + ) + from stripe.params._customer_create_balance_transaction_params import ( + CustomerCreateBalanceTransactionParams as CustomerCreateBalanceTransactionParams, + ) + from stripe.params._customer_create_funding_instructions_params import ( + CustomerCreateFundingInstructionsParams as CustomerCreateFundingInstructionsParams, + CustomerCreateFundingInstructionsParamsBankTransfer as CustomerCreateFundingInstructionsParamsBankTransfer, + CustomerCreateFundingInstructionsParamsBankTransferEuBankTransfer as CustomerCreateFundingInstructionsParamsBankTransferEuBankTransfer, + ) + from stripe.params._customer_create_params import ( + CustomerCreateParams as CustomerCreateParams, + CustomerCreateParamsAddress as CustomerCreateParamsAddress, + CustomerCreateParamsCashBalance as CustomerCreateParamsCashBalance, + CustomerCreateParamsCashBalanceSettings as CustomerCreateParamsCashBalanceSettings, + CustomerCreateParamsInvoiceSettings as CustomerCreateParamsInvoiceSettings, + CustomerCreateParamsInvoiceSettingsCustomField as CustomerCreateParamsInvoiceSettingsCustomField, + CustomerCreateParamsInvoiceSettingsRenderingOptions as CustomerCreateParamsInvoiceSettingsRenderingOptions, + CustomerCreateParamsShipping as CustomerCreateParamsShipping, + CustomerCreateParamsShippingAddress as CustomerCreateParamsShippingAddress, + CustomerCreateParamsTax as CustomerCreateParamsTax, + CustomerCreateParamsTaxIdDatum as CustomerCreateParamsTaxIdDatum, + ) + from stripe.params._customer_create_source_params import ( + CustomerCreateSourceParams as CustomerCreateSourceParams, + ) + from stripe.params._customer_create_tax_id_params import ( + CustomerCreateTaxIdParams as CustomerCreateTaxIdParams, + ) + from stripe.params._customer_delete_discount_params import ( + CustomerDeleteDiscountParams as CustomerDeleteDiscountParams, + ) + from stripe.params._customer_delete_params import ( + CustomerDeleteParams as CustomerDeleteParams, + ) + from stripe.params._customer_delete_source_params import ( + CustomerDeleteSourceParams as CustomerDeleteSourceParams, + ) + from stripe.params._customer_delete_tax_id_params import ( + CustomerDeleteTaxIdParams as CustomerDeleteTaxIdParams, + ) + from stripe.params._customer_fund_cash_balance_params import ( + CustomerFundCashBalanceParams as CustomerFundCashBalanceParams, + ) + from stripe.params._customer_funding_instructions_create_params import ( + CustomerFundingInstructionsCreateParams as CustomerFundingInstructionsCreateParams, + CustomerFundingInstructionsCreateParamsBankTransfer as CustomerFundingInstructionsCreateParamsBankTransfer, + CustomerFundingInstructionsCreateParamsBankTransferEuBankTransfer as CustomerFundingInstructionsCreateParamsBankTransferEuBankTransfer, + ) + from stripe.params._customer_list_balance_transactions_params import ( + CustomerListBalanceTransactionsParams as CustomerListBalanceTransactionsParams, + ) + from stripe.params._customer_list_cash_balance_transactions_params import ( + CustomerListCashBalanceTransactionsParams as CustomerListCashBalanceTransactionsParams, + ) + from stripe.params._customer_list_params import ( + CustomerListParams as CustomerListParams, + CustomerListParamsCreated as CustomerListParamsCreated, + ) + from stripe.params._customer_list_payment_methods_params import ( + CustomerListPaymentMethodsParams as CustomerListPaymentMethodsParams, + ) + from stripe.params._customer_list_sources_params import ( + CustomerListSourcesParams as CustomerListSourcesParams, + ) + from stripe.params._customer_list_tax_ids_params import ( + CustomerListTaxIdsParams as CustomerListTaxIdsParams, + ) + from stripe.params._customer_modify_balance_transaction_params import ( + CustomerModifyBalanceTransactionParams as CustomerModifyBalanceTransactionParams, + ) + from stripe.params._customer_modify_cash_balance_params import ( + CustomerModifyCashBalanceParams as CustomerModifyCashBalanceParams, + CustomerModifyCashBalanceParamsSettings as CustomerModifyCashBalanceParamsSettings, + ) + from stripe.params._customer_modify_params import ( + CustomerModifyParams as CustomerModifyParams, + CustomerModifyParamsAddress as CustomerModifyParamsAddress, + CustomerModifyParamsCashBalance as CustomerModifyParamsCashBalance, + CustomerModifyParamsCashBalanceSettings as CustomerModifyParamsCashBalanceSettings, + CustomerModifyParamsInvoiceSettings as CustomerModifyParamsInvoiceSettings, + CustomerModifyParamsInvoiceSettingsCustomField as CustomerModifyParamsInvoiceSettingsCustomField, + CustomerModifyParamsInvoiceSettingsRenderingOptions as CustomerModifyParamsInvoiceSettingsRenderingOptions, + CustomerModifyParamsShipping as CustomerModifyParamsShipping, + CustomerModifyParamsShippingAddress as CustomerModifyParamsShippingAddress, + CustomerModifyParamsTax as CustomerModifyParamsTax, + ) + from stripe.params._customer_modify_source_params import ( + CustomerModifySourceParams as CustomerModifySourceParams, + CustomerModifySourceParamsOwner as CustomerModifySourceParamsOwner, + CustomerModifySourceParamsOwnerAddress as CustomerModifySourceParamsOwnerAddress, + ) + from stripe.params._customer_payment_method_list_params import ( + CustomerPaymentMethodListParams as CustomerPaymentMethodListParams, + ) + from stripe.params._customer_payment_method_retrieve_params import ( + CustomerPaymentMethodRetrieveParams as CustomerPaymentMethodRetrieveParams, + ) + from stripe.params._customer_payment_source_create_params import ( + CustomerPaymentSourceCreateParams as CustomerPaymentSourceCreateParams, + ) + from stripe.params._customer_payment_source_delete_params import ( + CustomerPaymentSourceDeleteParams as CustomerPaymentSourceDeleteParams, + ) + from stripe.params._customer_payment_source_list_params import ( + CustomerPaymentSourceListParams as CustomerPaymentSourceListParams, + ) + from stripe.params._customer_payment_source_retrieve_params import ( + CustomerPaymentSourceRetrieveParams as CustomerPaymentSourceRetrieveParams, + ) + from stripe.params._customer_payment_source_update_params import ( + CustomerPaymentSourceUpdateParams as CustomerPaymentSourceUpdateParams, + CustomerPaymentSourceUpdateParamsOwner as CustomerPaymentSourceUpdateParamsOwner, + CustomerPaymentSourceUpdateParamsOwnerAddress as CustomerPaymentSourceUpdateParamsOwnerAddress, + ) + from stripe.params._customer_payment_source_verify_params import ( + CustomerPaymentSourceVerifyParams as CustomerPaymentSourceVerifyParams, + ) + from stripe.params._customer_retrieve_balance_transaction_params import ( + CustomerRetrieveBalanceTransactionParams as CustomerRetrieveBalanceTransactionParams, + ) + from stripe.params._customer_retrieve_cash_balance_params import ( + CustomerRetrieveCashBalanceParams as CustomerRetrieveCashBalanceParams, + ) + from stripe.params._customer_retrieve_cash_balance_transaction_params import ( + CustomerRetrieveCashBalanceTransactionParams as CustomerRetrieveCashBalanceTransactionParams, + ) + from stripe.params._customer_retrieve_params import ( + CustomerRetrieveParams as CustomerRetrieveParams, + ) + from stripe.params._customer_retrieve_payment_method_params import ( + CustomerRetrievePaymentMethodParams as CustomerRetrievePaymentMethodParams, + ) + from stripe.params._customer_retrieve_source_params import ( + CustomerRetrieveSourceParams as CustomerRetrieveSourceParams, + ) + from stripe.params._customer_retrieve_tax_id_params import ( + CustomerRetrieveTaxIdParams as CustomerRetrieveTaxIdParams, + ) + from stripe.params._customer_search_params import ( + CustomerSearchParams as CustomerSearchParams, + ) + from stripe.params._customer_session_create_params import ( + CustomerSessionCreateParams as CustomerSessionCreateParams, + CustomerSessionCreateParamsComponents as CustomerSessionCreateParamsComponents, + CustomerSessionCreateParamsComponentsBuyButton as CustomerSessionCreateParamsComponentsBuyButton, + CustomerSessionCreateParamsComponentsCustomerSheet as CustomerSessionCreateParamsComponentsCustomerSheet, + CustomerSessionCreateParamsComponentsCustomerSheetFeatures as CustomerSessionCreateParamsComponentsCustomerSheetFeatures, + CustomerSessionCreateParamsComponentsMobilePaymentElement as CustomerSessionCreateParamsComponentsMobilePaymentElement, + CustomerSessionCreateParamsComponentsMobilePaymentElementFeatures as CustomerSessionCreateParamsComponentsMobilePaymentElementFeatures, + CustomerSessionCreateParamsComponentsPaymentElement as CustomerSessionCreateParamsComponentsPaymentElement, + CustomerSessionCreateParamsComponentsPaymentElementFeatures as CustomerSessionCreateParamsComponentsPaymentElementFeatures, + CustomerSessionCreateParamsComponentsPricingTable as CustomerSessionCreateParamsComponentsPricingTable, + ) + from stripe.params._customer_tax_id_create_params import ( + CustomerTaxIdCreateParams as CustomerTaxIdCreateParams, + ) + from stripe.params._customer_tax_id_delete_params import ( + CustomerTaxIdDeleteParams as CustomerTaxIdDeleteParams, + ) + from stripe.params._customer_tax_id_list_params import ( + CustomerTaxIdListParams as CustomerTaxIdListParams, + ) + from stripe.params._customer_tax_id_retrieve_params import ( + CustomerTaxIdRetrieveParams as CustomerTaxIdRetrieveParams, + ) + from stripe.params._customer_update_params import ( + CustomerUpdateParams as CustomerUpdateParams, + CustomerUpdateParamsAddress as CustomerUpdateParamsAddress, + CustomerUpdateParamsCashBalance as CustomerUpdateParamsCashBalance, + CustomerUpdateParamsCashBalanceSettings as CustomerUpdateParamsCashBalanceSettings, + CustomerUpdateParamsInvoiceSettings as CustomerUpdateParamsInvoiceSettings, + CustomerUpdateParamsInvoiceSettingsCustomField as CustomerUpdateParamsInvoiceSettingsCustomField, + CustomerUpdateParamsInvoiceSettingsRenderingOptions as CustomerUpdateParamsInvoiceSettingsRenderingOptions, + CustomerUpdateParamsShipping as CustomerUpdateParamsShipping, + CustomerUpdateParamsShippingAddress as CustomerUpdateParamsShippingAddress, + CustomerUpdateParamsTax as CustomerUpdateParamsTax, + ) + from stripe.params._dispute_close_params import ( + DisputeCloseParams as DisputeCloseParams, + ) + from stripe.params._dispute_list_params import ( + DisputeListParams as DisputeListParams, + DisputeListParamsCreated as DisputeListParamsCreated, + ) + from stripe.params._dispute_modify_params import ( + DisputeModifyParams as DisputeModifyParams, + DisputeModifyParamsEvidence as DisputeModifyParamsEvidence, + DisputeModifyParamsEvidenceEnhancedEvidence as DisputeModifyParamsEvidenceEnhancedEvidence, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3 as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress, + DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompliance as DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompliance, + ) + from stripe.params._dispute_retrieve_params import ( + DisputeRetrieveParams as DisputeRetrieveParams, + ) + from stripe.params._dispute_update_params import ( + DisputeUpdateParams as DisputeUpdateParams, + DisputeUpdateParamsEvidence as DisputeUpdateParamsEvidence, + DisputeUpdateParamsEvidenceEnhancedEvidence as DisputeUpdateParamsEvidenceEnhancedEvidence, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3 as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress, + DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompliance as DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompliance, + ) + from stripe.params._ephemeral_key_create_params import ( + EphemeralKeyCreateParams as EphemeralKeyCreateParams, + ) + from stripe.params._ephemeral_key_delete_params import ( + EphemeralKeyDeleteParams as EphemeralKeyDeleteParams, + ) + from stripe.params._event_list_params import ( + EventListParams as EventListParams, + EventListParamsCreated as EventListParamsCreated, + ) + from stripe.params._event_retrieve_params import ( + EventRetrieveParams as EventRetrieveParams, + ) + from stripe.params._exchange_rate_list_params import ( + ExchangeRateListParams as ExchangeRateListParams, + ) + from stripe.params._exchange_rate_retrieve_params import ( + ExchangeRateRetrieveParams as ExchangeRateRetrieveParams, + ) + from stripe.params._file_create_params import ( + FileCreateParams as FileCreateParams, + FileCreateParamsFileLinkData as FileCreateParamsFileLinkData, + ) + from stripe.params._file_link_create_params import ( + FileLinkCreateParams as FileLinkCreateParams, + ) + from stripe.params._file_link_list_params import ( + FileLinkListParams as FileLinkListParams, + FileLinkListParamsCreated as FileLinkListParamsCreated, + ) + from stripe.params._file_link_modify_params import ( + FileLinkModifyParams as FileLinkModifyParams, + ) + from stripe.params._file_link_retrieve_params import ( + FileLinkRetrieveParams as FileLinkRetrieveParams, + ) + from stripe.params._file_link_update_params import ( + FileLinkUpdateParams as FileLinkUpdateParams, + ) + from stripe.params._file_list_params import ( + FileListParams as FileListParams, + FileListParamsCreated as FileListParamsCreated, + ) + from stripe.params._file_retrieve_params import ( + FileRetrieveParams as FileRetrieveParams, + ) + from stripe.params._invoice_add_lines_params import ( + InvoiceAddLinesParams as InvoiceAddLinesParams, + InvoiceAddLinesParamsLine as InvoiceAddLinesParamsLine, + InvoiceAddLinesParamsLineDiscount as InvoiceAddLinesParamsLineDiscount, + InvoiceAddLinesParamsLinePeriod as InvoiceAddLinesParamsLinePeriod, + InvoiceAddLinesParamsLinePriceData as InvoiceAddLinesParamsLinePriceData, + InvoiceAddLinesParamsLinePriceDataProductData as InvoiceAddLinesParamsLinePriceDataProductData, + InvoiceAddLinesParamsLinePricing as InvoiceAddLinesParamsLinePricing, + InvoiceAddLinesParamsLineTaxAmount as InvoiceAddLinesParamsLineTaxAmount, + InvoiceAddLinesParamsLineTaxAmountTaxRateData as InvoiceAddLinesParamsLineTaxAmountTaxRateData, + ) + from stripe.params._invoice_attach_payment_params import ( + InvoiceAttachPaymentParams as InvoiceAttachPaymentParams, + ) + from stripe.params._invoice_create_params import ( + InvoiceCreateParams as InvoiceCreateParams, + InvoiceCreateParamsAutomaticTax as InvoiceCreateParamsAutomaticTax, + InvoiceCreateParamsAutomaticTaxLiability as InvoiceCreateParamsAutomaticTaxLiability, + InvoiceCreateParamsCustomField as InvoiceCreateParamsCustomField, + InvoiceCreateParamsDiscount as InvoiceCreateParamsDiscount, + InvoiceCreateParamsFromInvoice as InvoiceCreateParamsFromInvoice, + InvoiceCreateParamsIssuer as InvoiceCreateParamsIssuer, + InvoiceCreateParamsPaymentSettings as InvoiceCreateParamsPaymentSettings, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptions as InvoiceCreateParamsPaymentSettingsPaymentMethodOptions, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsBancontact as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsBancontact, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCard as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCard, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallments as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallments, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsKonbini as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsKonbini, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + InvoiceCreateParamsRendering as InvoiceCreateParamsRendering, + InvoiceCreateParamsRenderingPdf as InvoiceCreateParamsRenderingPdf, + InvoiceCreateParamsShippingCost as InvoiceCreateParamsShippingCost, + InvoiceCreateParamsShippingCostShippingRateData as InvoiceCreateParamsShippingCostShippingRateData, + InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimate as InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimate, + InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMaximum as InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMaximum, + InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMinimum as InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMinimum, + InvoiceCreateParamsShippingCostShippingRateDataFixedAmount as InvoiceCreateParamsShippingCostShippingRateDataFixedAmount, + InvoiceCreateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions as InvoiceCreateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions, + InvoiceCreateParamsShippingDetails as InvoiceCreateParamsShippingDetails, + InvoiceCreateParamsShippingDetailsAddress as InvoiceCreateParamsShippingDetailsAddress, + InvoiceCreateParamsTransferData as InvoiceCreateParamsTransferData, + ) + from stripe.params._invoice_create_preview_params import ( + InvoiceCreatePreviewParams as InvoiceCreatePreviewParams, + InvoiceCreatePreviewParamsAutomaticTax as InvoiceCreatePreviewParamsAutomaticTax, + InvoiceCreatePreviewParamsAutomaticTaxLiability as InvoiceCreatePreviewParamsAutomaticTaxLiability, + InvoiceCreatePreviewParamsCustomerDetails as InvoiceCreatePreviewParamsCustomerDetails, + InvoiceCreatePreviewParamsCustomerDetailsAddress as InvoiceCreatePreviewParamsCustomerDetailsAddress, + InvoiceCreatePreviewParamsCustomerDetailsShipping as InvoiceCreatePreviewParamsCustomerDetailsShipping, + InvoiceCreatePreviewParamsCustomerDetailsShippingAddress as InvoiceCreatePreviewParamsCustomerDetailsShippingAddress, + InvoiceCreatePreviewParamsCustomerDetailsTax as InvoiceCreatePreviewParamsCustomerDetailsTax, + InvoiceCreatePreviewParamsCustomerDetailsTaxId as InvoiceCreatePreviewParamsCustomerDetailsTaxId, + InvoiceCreatePreviewParamsDiscount as InvoiceCreatePreviewParamsDiscount, + InvoiceCreatePreviewParamsInvoiceItem as InvoiceCreatePreviewParamsInvoiceItem, + InvoiceCreatePreviewParamsInvoiceItemDiscount as InvoiceCreatePreviewParamsInvoiceItemDiscount, + InvoiceCreatePreviewParamsInvoiceItemPeriod as InvoiceCreatePreviewParamsInvoiceItemPeriod, + InvoiceCreatePreviewParamsInvoiceItemPriceData as InvoiceCreatePreviewParamsInvoiceItemPriceData, + InvoiceCreatePreviewParamsIssuer as InvoiceCreatePreviewParamsIssuer, + InvoiceCreatePreviewParamsScheduleDetails as InvoiceCreatePreviewParamsScheduleDetails, + InvoiceCreatePreviewParamsScheduleDetailsBillingMode as InvoiceCreatePreviewParamsScheduleDetailsBillingMode, + InvoiceCreatePreviewParamsScheduleDetailsBillingModeFlexible as InvoiceCreatePreviewParamsScheduleDetailsBillingModeFlexible, + InvoiceCreatePreviewParamsScheduleDetailsPhase as InvoiceCreatePreviewParamsScheduleDetailsPhase, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItem as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItem, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemDiscount as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemDiscount, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriod as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriod, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodEnd as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodEnd, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodStart as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodStart, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPriceData as InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPriceData, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTax as InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTax, + InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTaxLiability as InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTaxLiability, + InvoiceCreatePreviewParamsScheduleDetailsPhaseBillingThresholds as InvoiceCreatePreviewParamsScheduleDetailsPhaseBillingThresholds, + InvoiceCreatePreviewParamsScheduleDetailsPhaseDiscount as InvoiceCreatePreviewParamsScheduleDetailsPhaseDiscount, + InvoiceCreatePreviewParamsScheduleDetailsPhaseDuration as InvoiceCreatePreviewParamsScheduleDetailsPhaseDuration, + InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettings as InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettings, + InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettingsIssuer as InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettingsIssuer, + InvoiceCreatePreviewParamsScheduleDetailsPhaseItem as InvoiceCreatePreviewParamsScheduleDetailsPhaseItem, + InvoiceCreatePreviewParamsScheduleDetailsPhaseItemBillingThresholds as InvoiceCreatePreviewParamsScheduleDetailsPhaseItemBillingThresholds, + InvoiceCreatePreviewParamsScheduleDetailsPhaseItemDiscount as InvoiceCreatePreviewParamsScheduleDetailsPhaseItemDiscount, + InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceData as InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceData, + InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceDataRecurring as InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceDataRecurring, + InvoiceCreatePreviewParamsScheduleDetailsPhaseTransferData as InvoiceCreatePreviewParamsScheduleDetailsPhaseTransferData, + InvoiceCreatePreviewParamsSubscriptionDetails as InvoiceCreatePreviewParamsSubscriptionDetails, + InvoiceCreatePreviewParamsSubscriptionDetailsBillingMode as InvoiceCreatePreviewParamsSubscriptionDetailsBillingMode, + InvoiceCreatePreviewParamsSubscriptionDetailsBillingModeFlexible as InvoiceCreatePreviewParamsSubscriptionDetailsBillingModeFlexible, + InvoiceCreatePreviewParamsSubscriptionDetailsItem as InvoiceCreatePreviewParamsSubscriptionDetailsItem, + InvoiceCreatePreviewParamsSubscriptionDetailsItemBillingThresholds as InvoiceCreatePreviewParamsSubscriptionDetailsItemBillingThresholds, + InvoiceCreatePreviewParamsSubscriptionDetailsItemDiscount as InvoiceCreatePreviewParamsSubscriptionDetailsItemDiscount, + InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceData as InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceData, + InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceDataRecurring as InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceDataRecurring, + ) + from stripe.params._invoice_delete_params import ( + InvoiceDeleteParams as InvoiceDeleteParams, + ) + from stripe.params._invoice_finalize_invoice_params import ( + InvoiceFinalizeInvoiceParams as InvoiceFinalizeInvoiceParams, + ) + from stripe.params._invoice_item_create_params import ( + InvoiceItemCreateParams as InvoiceItemCreateParams, + InvoiceItemCreateParamsDiscount as InvoiceItemCreateParamsDiscount, + InvoiceItemCreateParamsPeriod as InvoiceItemCreateParamsPeriod, + InvoiceItemCreateParamsPriceData as InvoiceItemCreateParamsPriceData, + InvoiceItemCreateParamsPricing as InvoiceItemCreateParamsPricing, + ) + from stripe.params._invoice_item_delete_params import ( + InvoiceItemDeleteParams as InvoiceItemDeleteParams, + ) + from stripe.params._invoice_item_list_params import ( + InvoiceItemListParams as InvoiceItemListParams, + InvoiceItemListParamsCreated as InvoiceItemListParamsCreated, + ) + from stripe.params._invoice_item_modify_params import ( + InvoiceItemModifyParams as InvoiceItemModifyParams, + InvoiceItemModifyParamsDiscount as InvoiceItemModifyParamsDiscount, + InvoiceItemModifyParamsPeriod as InvoiceItemModifyParamsPeriod, + InvoiceItemModifyParamsPriceData as InvoiceItemModifyParamsPriceData, + InvoiceItemModifyParamsPricing as InvoiceItemModifyParamsPricing, + ) + from stripe.params._invoice_item_retrieve_params import ( + InvoiceItemRetrieveParams as InvoiceItemRetrieveParams, + ) + from stripe.params._invoice_item_update_params import ( + InvoiceItemUpdateParams as InvoiceItemUpdateParams, + InvoiceItemUpdateParamsDiscount as InvoiceItemUpdateParamsDiscount, + InvoiceItemUpdateParamsPeriod as InvoiceItemUpdateParamsPeriod, + InvoiceItemUpdateParamsPriceData as InvoiceItemUpdateParamsPriceData, + InvoiceItemUpdateParamsPricing as InvoiceItemUpdateParamsPricing, + ) + from stripe.params._invoice_line_item_list_params import ( + InvoiceLineItemListParams as InvoiceLineItemListParams, + ) + from stripe.params._invoice_line_item_update_params import ( + InvoiceLineItemUpdateParams as InvoiceLineItemUpdateParams, + InvoiceLineItemUpdateParamsDiscount as InvoiceLineItemUpdateParamsDiscount, + InvoiceLineItemUpdateParamsPeriod as InvoiceLineItemUpdateParamsPeriod, + InvoiceLineItemUpdateParamsPriceData as InvoiceLineItemUpdateParamsPriceData, + InvoiceLineItemUpdateParamsPriceDataProductData as InvoiceLineItemUpdateParamsPriceDataProductData, + InvoiceLineItemUpdateParamsPricing as InvoiceLineItemUpdateParamsPricing, + InvoiceLineItemUpdateParamsTaxAmount as InvoiceLineItemUpdateParamsTaxAmount, + InvoiceLineItemUpdateParamsTaxAmountTaxRateData as InvoiceLineItemUpdateParamsTaxAmountTaxRateData, + ) + from stripe.params._invoice_list_lines_params import ( + InvoiceListLinesParams as InvoiceListLinesParams, + ) + from stripe.params._invoice_list_params import ( + InvoiceListParams as InvoiceListParams, + InvoiceListParamsCreated as InvoiceListParamsCreated, + InvoiceListParamsDueDate as InvoiceListParamsDueDate, + ) + from stripe.params._invoice_mark_uncollectible_params import ( + InvoiceMarkUncollectibleParams as InvoiceMarkUncollectibleParams, + ) + from stripe.params._invoice_modify_params import ( + InvoiceModifyParams as InvoiceModifyParams, + InvoiceModifyParamsAutomaticTax as InvoiceModifyParamsAutomaticTax, + InvoiceModifyParamsAutomaticTaxLiability as InvoiceModifyParamsAutomaticTaxLiability, + InvoiceModifyParamsCustomField as InvoiceModifyParamsCustomField, + InvoiceModifyParamsDiscount as InvoiceModifyParamsDiscount, + InvoiceModifyParamsIssuer as InvoiceModifyParamsIssuer, + InvoiceModifyParamsPaymentSettings as InvoiceModifyParamsPaymentSettings, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptions as InvoiceModifyParamsPaymentSettingsPaymentMethodOptions, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsBancontact as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsBancontact, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCard as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCard, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallments as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallments, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsKonbini as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsKonbini, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + InvoiceModifyParamsRendering as InvoiceModifyParamsRendering, + InvoiceModifyParamsRenderingPdf as InvoiceModifyParamsRenderingPdf, + InvoiceModifyParamsShippingCost as InvoiceModifyParamsShippingCost, + InvoiceModifyParamsShippingCostShippingRateData as InvoiceModifyParamsShippingCostShippingRateData, + InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimate as InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimate, + InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMaximum as InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMaximum, + InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMinimum as InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMinimum, + InvoiceModifyParamsShippingCostShippingRateDataFixedAmount as InvoiceModifyParamsShippingCostShippingRateDataFixedAmount, + InvoiceModifyParamsShippingCostShippingRateDataFixedAmountCurrencyOptions as InvoiceModifyParamsShippingCostShippingRateDataFixedAmountCurrencyOptions, + InvoiceModifyParamsShippingDetails as InvoiceModifyParamsShippingDetails, + InvoiceModifyParamsShippingDetailsAddress as InvoiceModifyParamsShippingDetailsAddress, + InvoiceModifyParamsTransferData as InvoiceModifyParamsTransferData, + ) + from stripe.params._invoice_pay_params import ( + InvoicePayParams as InvoicePayParams, + ) + from stripe.params._invoice_payment_list_params import ( + InvoicePaymentListParams as InvoicePaymentListParams, + InvoicePaymentListParamsPayment as InvoicePaymentListParamsPayment, + ) + from stripe.params._invoice_payment_retrieve_params import ( + InvoicePaymentRetrieveParams as InvoicePaymentRetrieveParams, + ) + from stripe.params._invoice_remove_lines_params import ( + InvoiceRemoveLinesParams as InvoiceRemoveLinesParams, + InvoiceRemoveLinesParamsLine as InvoiceRemoveLinesParamsLine, + ) + from stripe.params._invoice_rendering_template_archive_params import ( + InvoiceRenderingTemplateArchiveParams as InvoiceRenderingTemplateArchiveParams, + ) + from stripe.params._invoice_rendering_template_list_params import ( + InvoiceRenderingTemplateListParams as InvoiceRenderingTemplateListParams, + ) + from stripe.params._invoice_rendering_template_retrieve_params import ( + InvoiceRenderingTemplateRetrieveParams as InvoiceRenderingTemplateRetrieveParams, + ) + from stripe.params._invoice_rendering_template_unarchive_params import ( + InvoiceRenderingTemplateUnarchiveParams as InvoiceRenderingTemplateUnarchiveParams, + ) + from stripe.params._invoice_retrieve_params import ( + InvoiceRetrieveParams as InvoiceRetrieveParams, + ) + from stripe.params._invoice_search_params import ( + InvoiceSearchParams as InvoiceSearchParams, + ) + from stripe.params._invoice_send_invoice_params import ( + InvoiceSendInvoiceParams as InvoiceSendInvoiceParams, + ) + from stripe.params._invoice_update_lines_params import ( + InvoiceUpdateLinesParams as InvoiceUpdateLinesParams, + InvoiceUpdateLinesParamsLine as InvoiceUpdateLinesParamsLine, + InvoiceUpdateLinesParamsLineDiscount as InvoiceUpdateLinesParamsLineDiscount, + InvoiceUpdateLinesParamsLinePeriod as InvoiceUpdateLinesParamsLinePeriod, + InvoiceUpdateLinesParamsLinePriceData as InvoiceUpdateLinesParamsLinePriceData, + InvoiceUpdateLinesParamsLinePriceDataProductData as InvoiceUpdateLinesParamsLinePriceDataProductData, + InvoiceUpdateLinesParamsLinePricing as InvoiceUpdateLinesParamsLinePricing, + InvoiceUpdateLinesParamsLineTaxAmount as InvoiceUpdateLinesParamsLineTaxAmount, + InvoiceUpdateLinesParamsLineTaxAmountTaxRateData as InvoiceUpdateLinesParamsLineTaxAmountTaxRateData, + ) + from stripe.params._invoice_update_params import ( + InvoiceUpdateParams as InvoiceUpdateParams, + InvoiceUpdateParamsAutomaticTax as InvoiceUpdateParamsAutomaticTax, + InvoiceUpdateParamsAutomaticTaxLiability as InvoiceUpdateParamsAutomaticTaxLiability, + InvoiceUpdateParamsCustomField as InvoiceUpdateParamsCustomField, + InvoiceUpdateParamsDiscount as InvoiceUpdateParamsDiscount, + InvoiceUpdateParamsIssuer as InvoiceUpdateParamsIssuer, + InvoiceUpdateParamsPaymentSettings as InvoiceUpdateParamsPaymentSettings, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptions as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptions, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCard as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCard, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallments as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallments, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + InvoiceUpdateParamsRendering as InvoiceUpdateParamsRendering, + InvoiceUpdateParamsRenderingPdf as InvoiceUpdateParamsRenderingPdf, + InvoiceUpdateParamsShippingCost as InvoiceUpdateParamsShippingCost, + InvoiceUpdateParamsShippingCostShippingRateData as InvoiceUpdateParamsShippingCostShippingRateData, + InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimate as InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimate, + InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMaximum as InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMaximum, + InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMinimum as InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMinimum, + InvoiceUpdateParamsShippingCostShippingRateDataFixedAmount as InvoiceUpdateParamsShippingCostShippingRateDataFixedAmount, + InvoiceUpdateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions as InvoiceUpdateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions, + InvoiceUpdateParamsShippingDetails as InvoiceUpdateParamsShippingDetails, + InvoiceUpdateParamsShippingDetailsAddress as InvoiceUpdateParamsShippingDetailsAddress, + InvoiceUpdateParamsTransferData as InvoiceUpdateParamsTransferData, + ) + from stripe.params._invoice_void_invoice_params import ( + InvoiceVoidInvoiceParams as InvoiceVoidInvoiceParams, + ) + from stripe.params._mandate_retrieve_params import ( + MandateRetrieveParams as MandateRetrieveParams, + ) + from stripe.params._payment_attempt_record_list_params import ( + PaymentAttemptRecordListParams as PaymentAttemptRecordListParams, + ) + from stripe.params._payment_attempt_record_retrieve_params import ( + PaymentAttemptRecordRetrieveParams as PaymentAttemptRecordRetrieveParams, + ) + from stripe.params._payment_intent_amount_details_line_item_list_params import ( + PaymentIntentAmountDetailsLineItemListParams as PaymentIntentAmountDetailsLineItemListParams, + ) + from stripe.params._payment_intent_apply_customer_balance_params import ( + PaymentIntentApplyCustomerBalanceParams as PaymentIntentApplyCustomerBalanceParams, + ) + from stripe.params._payment_intent_cancel_params import ( + PaymentIntentCancelParams as PaymentIntentCancelParams, + ) + from stripe.params._payment_intent_capture_params import ( + PaymentIntentCaptureParams as PaymentIntentCaptureParams, + PaymentIntentCaptureParamsAmountDetails as PaymentIntentCaptureParamsAmountDetails, + PaymentIntentCaptureParamsAmountDetailsLineItem as PaymentIntentCaptureParamsAmountDetailsLineItem, + PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentCaptureParamsAmountDetailsLineItemTax as PaymentIntentCaptureParamsAmountDetailsLineItemTax, + PaymentIntentCaptureParamsAmountDetailsShipping as PaymentIntentCaptureParamsAmountDetailsShipping, + PaymentIntentCaptureParamsAmountDetailsTax as PaymentIntentCaptureParamsAmountDetailsTax, + PaymentIntentCaptureParamsPaymentDetails as PaymentIntentCaptureParamsPaymentDetails, + PaymentIntentCaptureParamsTransferData as PaymentIntentCaptureParamsTransferData, + ) + from stripe.params._payment_intent_confirm_params import ( + PaymentIntentConfirmParams as PaymentIntentConfirmParams, + PaymentIntentConfirmParamsAmountDetails as PaymentIntentConfirmParamsAmountDetails, + PaymentIntentConfirmParamsAmountDetailsLineItem as PaymentIntentConfirmParamsAmountDetailsLineItem, + PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentConfirmParamsAmountDetailsLineItemTax as PaymentIntentConfirmParamsAmountDetailsLineItemTax, + PaymentIntentConfirmParamsAmountDetailsShipping as PaymentIntentConfirmParamsAmountDetailsShipping, + PaymentIntentConfirmParamsAmountDetailsTax as PaymentIntentConfirmParamsAmountDetailsTax, + PaymentIntentConfirmParamsMandateData as PaymentIntentConfirmParamsMandateData, + PaymentIntentConfirmParamsMandateDataCustomerAcceptance as PaymentIntentConfirmParamsMandateDataCustomerAcceptance, + PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOffline as PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOffline, + PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOnline as PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOnline, + PaymentIntentConfirmParamsPaymentDetails as PaymentIntentConfirmParamsPaymentDetails, + PaymentIntentConfirmParamsPaymentMethodData as PaymentIntentConfirmParamsPaymentMethodData, + PaymentIntentConfirmParamsPaymentMethodDataAcssDebit as PaymentIntentConfirmParamsPaymentMethodDataAcssDebit, + PaymentIntentConfirmParamsPaymentMethodDataAffirm as PaymentIntentConfirmParamsPaymentMethodDataAffirm, + PaymentIntentConfirmParamsPaymentMethodDataAfterpayClearpay as PaymentIntentConfirmParamsPaymentMethodDataAfterpayClearpay, + PaymentIntentConfirmParamsPaymentMethodDataAlipay as PaymentIntentConfirmParamsPaymentMethodDataAlipay, + PaymentIntentConfirmParamsPaymentMethodDataAlma as PaymentIntentConfirmParamsPaymentMethodDataAlma, + PaymentIntentConfirmParamsPaymentMethodDataAmazonPay as PaymentIntentConfirmParamsPaymentMethodDataAmazonPay, + PaymentIntentConfirmParamsPaymentMethodDataAuBecsDebit as PaymentIntentConfirmParamsPaymentMethodDataAuBecsDebit, + PaymentIntentConfirmParamsPaymentMethodDataBacsDebit as PaymentIntentConfirmParamsPaymentMethodDataBacsDebit, + PaymentIntentConfirmParamsPaymentMethodDataBancontact as PaymentIntentConfirmParamsPaymentMethodDataBancontact, + PaymentIntentConfirmParamsPaymentMethodDataBillie as PaymentIntentConfirmParamsPaymentMethodDataBillie, + PaymentIntentConfirmParamsPaymentMethodDataBillingDetails as PaymentIntentConfirmParamsPaymentMethodDataBillingDetails, + PaymentIntentConfirmParamsPaymentMethodDataBillingDetailsAddress as PaymentIntentConfirmParamsPaymentMethodDataBillingDetailsAddress, + PaymentIntentConfirmParamsPaymentMethodDataBlik as PaymentIntentConfirmParamsPaymentMethodDataBlik, + PaymentIntentConfirmParamsPaymentMethodDataBoleto as PaymentIntentConfirmParamsPaymentMethodDataBoleto, + PaymentIntentConfirmParamsPaymentMethodDataCashapp as PaymentIntentConfirmParamsPaymentMethodDataCashapp, + PaymentIntentConfirmParamsPaymentMethodDataCrypto as PaymentIntentConfirmParamsPaymentMethodDataCrypto, + PaymentIntentConfirmParamsPaymentMethodDataCustomerBalance as PaymentIntentConfirmParamsPaymentMethodDataCustomerBalance, + PaymentIntentConfirmParamsPaymentMethodDataEps as PaymentIntentConfirmParamsPaymentMethodDataEps, + PaymentIntentConfirmParamsPaymentMethodDataFpx as PaymentIntentConfirmParamsPaymentMethodDataFpx, + PaymentIntentConfirmParamsPaymentMethodDataGiropay as PaymentIntentConfirmParamsPaymentMethodDataGiropay, + PaymentIntentConfirmParamsPaymentMethodDataGrabpay as PaymentIntentConfirmParamsPaymentMethodDataGrabpay, + PaymentIntentConfirmParamsPaymentMethodDataIdeal as PaymentIntentConfirmParamsPaymentMethodDataIdeal, + PaymentIntentConfirmParamsPaymentMethodDataInteracPresent as PaymentIntentConfirmParamsPaymentMethodDataInteracPresent, + PaymentIntentConfirmParamsPaymentMethodDataKakaoPay as PaymentIntentConfirmParamsPaymentMethodDataKakaoPay, + PaymentIntentConfirmParamsPaymentMethodDataKlarna as PaymentIntentConfirmParamsPaymentMethodDataKlarna, + PaymentIntentConfirmParamsPaymentMethodDataKlarnaDob as PaymentIntentConfirmParamsPaymentMethodDataKlarnaDob, + PaymentIntentConfirmParamsPaymentMethodDataKonbini as PaymentIntentConfirmParamsPaymentMethodDataKonbini, + PaymentIntentConfirmParamsPaymentMethodDataKrCard as PaymentIntentConfirmParamsPaymentMethodDataKrCard, + PaymentIntentConfirmParamsPaymentMethodDataLink as PaymentIntentConfirmParamsPaymentMethodDataLink, + PaymentIntentConfirmParamsPaymentMethodDataMbWay as PaymentIntentConfirmParamsPaymentMethodDataMbWay, + PaymentIntentConfirmParamsPaymentMethodDataMobilepay as PaymentIntentConfirmParamsPaymentMethodDataMobilepay, + PaymentIntentConfirmParamsPaymentMethodDataMultibanco as PaymentIntentConfirmParamsPaymentMethodDataMultibanco, + PaymentIntentConfirmParamsPaymentMethodDataNaverPay as PaymentIntentConfirmParamsPaymentMethodDataNaverPay, + PaymentIntentConfirmParamsPaymentMethodDataNzBankAccount as PaymentIntentConfirmParamsPaymentMethodDataNzBankAccount, + PaymentIntentConfirmParamsPaymentMethodDataOxxo as PaymentIntentConfirmParamsPaymentMethodDataOxxo, + PaymentIntentConfirmParamsPaymentMethodDataP24 as PaymentIntentConfirmParamsPaymentMethodDataP24, + PaymentIntentConfirmParamsPaymentMethodDataPayByBank as PaymentIntentConfirmParamsPaymentMethodDataPayByBank, + PaymentIntentConfirmParamsPaymentMethodDataPayco as PaymentIntentConfirmParamsPaymentMethodDataPayco, + PaymentIntentConfirmParamsPaymentMethodDataPaynow as PaymentIntentConfirmParamsPaymentMethodDataPaynow, + PaymentIntentConfirmParamsPaymentMethodDataPaypal as PaymentIntentConfirmParamsPaymentMethodDataPaypal, + PaymentIntentConfirmParamsPaymentMethodDataPix as PaymentIntentConfirmParamsPaymentMethodDataPix, + PaymentIntentConfirmParamsPaymentMethodDataPromptpay as PaymentIntentConfirmParamsPaymentMethodDataPromptpay, + PaymentIntentConfirmParamsPaymentMethodDataRadarOptions as PaymentIntentConfirmParamsPaymentMethodDataRadarOptions, + PaymentIntentConfirmParamsPaymentMethodDataRevolutPay as PaymentIntentConfirmParamsPaymentMethodDataRevolutPay, + PaymentIntentConfirmParamsPaymentMethodDataSamsungPay as PaymentIntentConfirmParamsPaymentMethodDataSamsungPay, + PaymentIntentConfirmParamsPaymentMethodDataSatispay as PaymentIntentConfirmParamsPaymentMethodDataSatispay, + PaymentIntentConfirmParamsPaymentMethodDataSepaDebit as PaymentIntentConfirmParamsPaymentMethodDataSepaDebit, + PaymentIntentConfirmParamsPaymentMethodDataSofort as PaymentIntentConfirmParamsPaymentMethodDataSofort, + PaymentIntentConfirmParamsPaymentMethodDataSwish as PaymentIntentConfirmParamsPaymentMethodDataSwish, + PaymentIntentConfirmParamsPaymentMethodDataTwint as PaymentIntentConfirmParamsPaymentMethodDataTwint, + PaymentIntentConfirmParamsPaymentMethodDataUsBankAccount as PaymentIntentConfirmParamsPaymentMethodDataUsBankAccount, + PaymentIntentConfirmParamsPaymentMethodDataWechatPay as PaymentIntentConfirmParamsPaymentMethodDataWechatPay, + PaymentIntentConfirmParamsPaymentMethodDataZip as PaymentIntentConfirmParamsPaymentMethodDataZip, + PaymentIntentConfirmParamsPaymentMethodOptions as PaymentIntentConfirmParamsPaymentMethodOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebit as PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebit, + PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions as PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsAffirm as PaymentIntentConfirmParamsPaymentMethodOptionsAffirm, + PaymentIntentConfirmParamsPaymentMethodOptionsAfterpayClearpay as PaymentIntentConfirmParamsPaymentMethodOptionsAfterpayClearpay, + PaymentIntentConfirmParamsPaymentMethodOptionsAlipay as PaymentIntentConfirmParamsPaymentMethodOptionsAlipay, + PaymentIntentConfirmParamsPaymentMethodOptionsAlma as PaymentIntentConfirmParamsPaymentMethodOptionsAlma, + PaymentIntentConfirmParamsPaymentMethodOptionsAmazonPay as PaymentIntentConfirmParamsPaymentMethodOptionsAmazonPay, + PaymentIntentConfirmParamsPaymentMethodOptionsAuBecsDebit as PaymentIntentConfirmParamsPaymentMethodOptionsAuBecsDebit, + PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebit as PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebit, + PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions as PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsBancontact as PaymentIntentConfirmParamsPaymentMethodOptionsBancontact, + PaymentIntentConfirmParamsPaymentMethodOptionsBillie as PaymentIntentConfirmParamsPaymentMethodOptionsBillie, + PaymentIntentConfirmParamsPaymentMethodOptionsBlik as PaymentIntentConfirmParamsPaymentMethodOptionsBlik, + PaymentIntentConfirmParamsPaymentMethodOptionsBoleto as PaymentIntentConfirmParamsPaymentMethodOptionsBoleto, + PaymentIntentConfirmParamsPaymentMethodOptionsCard as PaymentIntentConfirmParamsPaymentMethodOptionsCard, + PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallments as PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallments, + PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallmentsPlan as PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallmentsPlan, + PaymentIntentConfirmParamsPaymentMethodOptionsCardMandateOptions as PaymentIntentConfirmParamsPaymentMethodOptionsCardMandateOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsCardPresent as PaymentIntentConfirmParamsPaymentMethodOptionsCardPresent, + PaymentIntentConfirmParamsPaymentMethodOptionsCardPresentRouting as PaymentIntentConfirmParamsPaymentMethodOptionsCardPresentRouting, + PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure as PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure, + PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + PaymentIntentConfirmParamsPaymentMethodOptionsCashapp as PaymentIntentConfirmParamsPaymentMethodOptionsCashapp, + PaymentIntentConfirmParamsPaymentMethodOptionsCrypto as PaymentIntentConfirmParamsPaymentMethodOptionsCrypto, + PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalance as PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalance, + PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransfer as PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransfer, + PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + PaymentIntentConfirmParamsPaymentMethodOptionsEps as PaymentIntentConfirmParamsPaymentMethodOptionsEps, + PaymentIntentConfirmParamsPaymentMethodOptionsFpx as PaymentIntentConfirmParamsPaymentMethodOptionsFpx, + PaymentIntentConfirmParamsPaymentMethodOptionsGiropay as PaymentIntentConfirmParamsPaymentMethodOptionsGiropay, + PaymentIntentConfirmParamsPaymentMethodOptionsGrabpay as PaymentIntentConfirmParamsPaymentMethodOptionsGrabpay, + PaymentIntentConfirmParamsPaymentMethodOptionsIdeal as PaymentIntentConfirmParamsPaymentMethodOptionsIdeal, + PaymentIntentConfirmParamsPaymentMethodOptionsInteracPresent as PaymentIntentConfirmParamsPaymentMethodOptionsInteracPresent, + PaymentIntentConfirmParamsPaymentMethodOptionsKakaoPay as PaymentIntentConfirmParamsPaymentMethodOptionsKakaoPay, + PaymentIntentConfirmParamsPaymentMethodOptionsKlarna as PaymentIntentConfirmParamsPaymentMethodOptionsKlarna, + PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand as PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand, + PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription as PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription, + PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + PaymentIntentConfirmParamsPaymentMethodOptionsKonbini as PaymentIntentConfirmParamsPaymentMethodOptionsKonbini, + PaymentIntentConfirmParamsPaymentMethodOptionsKrCard as PaymentIntentConfirmParamsPaymentMethodOptionsKrCard, + PaymentIntentConfirmParamsPaymentMethodOptionsLink as PaymentIntentConfirmParamsPaymentMethodOptionsLink, + PaymentIntentConfirmParamsPaymentMethodOptionsMbWay as PaymentIntentConfirmParamsPaymentMethodOptionsMbWay, + PaymentIntentConfirmParamsPaymentMethodOptionsMobilepay as PaymentIntentConfirmParamsPaymentMethodOptionsMobilepay, + PaymentIntentConfirmParamsPaymentMethodOptionsMultibanco as PaymentIntentConfirmParamsPaymentMethodOptionsMultibanco, + PaymentIntentConfirmParamsPaymentMethodOptionsNaverPay as PaymentIntentConfirmParamsPaymentMethodOptionsNaverPay, + PaymentIntentConfirmParamsPaymentMethodOptionsNzBankAccount as PaymentIntentConfirmParamsPaymentMethodOptionsNzBankAccount, + PaymentIntentConfirmParamsPaymentMethodOptionsOxxo as PaymentIntentConfirmParamsPaymentMethodOptionsOxxo, + PaymentIntentConfirmParamsPaymentMethodOptionsP24 as PaymentIntentConfirmParamsPaymentMethodOptionsP24, + PaymentIntentConfirmParamsPaymentMethodOptionsPayByBank as PaymentIntentConfirmParamsPaymentMethodOptionsPayByBank, + PaymentIntentConfirmParamsPaymentMethodOptionsPayco as PaymentIntentConfirmParamsPaymentMethodOptionsPayco, + PaymentIntentConfirmParamsPaymentMethodOptionsPaynow as PaymentIntentConfirmParamsPaymentMethodOptionsPaynow, + PaymentIntentConfirmParamsPaymentMethodOptionsPaypal as PaymentIntentConfirmParamsPaymentMethodOptionsPaypal, + PaymentIntentConfirmParamsPaymentMethodOptionsPix as PaymentIntentConfirmParamsPaymentMethodOptionsPix, + PaymentIntentConfirmParamsPaymentMethodOptionsPromptpay as PaymentIntentConfirmParamsPaymentMethodOptionsPromptpay, + PaymentIntentConfirmParamsPaymentMethodOptionsRevolutPay as PaymentIntentConfirmParamsPaymentMethodOptionsRevolutPay, + PaymentIntentConfirmParamsPaymentMethodOptionsSamsungPay as PaymentIntentConfirmParamsPaymentMethodOptionsSamsungPay, + PaymentIntentConfirmParamsPaymentMethodOptionsSatispay as PaymentIntentConfirmParamsPaymentMethodOptionsSatispay, + PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebit as PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebit, + PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions as PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsSofort as PaymentIntentConfirmParamsPaymentMethodOptionsSofort, + PaymentIntentConfirmParamsPaymentMethodOptionsSwish as PaymentIntentConfirmParamsPaymentMethodOptionsSwish, + PaymentIntentConfirmParamsPaymentMethodOptionsTwint as PaymentIntentConfirmParamsPaymentMethodOptionsTwint, + PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccount as PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccount, + PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections as PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions as PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions, + PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks as PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks, + PaymentIntentConfirmParamsPaymentMethodOptionsWechatPay as PaymentIntentConfirmParamsPaymentMethodOptionsWechatPay, + PaymentIntentConfirmParamsPaymentMethodOptionsZip as PaymentIntentConfirmParamsPaymentMethodOptionsZip, + PaymentIntentConfirmParamsRadarOptions as PaymentIntentConfirmParamsRadarOptions, + PaymentIntentConfirmParamsShipping as PaymentIntentConfirmParamsShipping, + PaymentIntentConfirmParamsShippingAddress as PaymentIntentConfirmParamsShippingAddress, + ) + from stripe.params._payment_intent_create_params import ( + PaymentIntentCreateParams as PaymentIntentCreateParams, + PaymentIntentCreateParamsAmountDetails as PaymentIntentCreateParamsAmountDetails, + PaymentIntentCreateParamsAmountDetailsLineItem as PaymentIntentCreateParamsAmountDetailsLineItem, + PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentCreateParamsAmountDetailsLineItemTax as PaymentIntentCreateParamsAmountDetailsLineItemTax, + PaymentIntentCreateParamsAmountDetailsShipping as PaymentIntentCreateParamsAmountDetailsShipping, + PaymentIntentCreateParamsAmountDetailsTax as PaymentIntentCreateParamsAmountDetailsTax, + PaymentIntentCreateParamsAutomaticPaymentMethods as PaymentIntentCreateParamsAutomaticPaymentMethods, + PaymentIntentCreateParamsMandateData as PaymentIntentCreateParamsMandateData, + PaymentIntentCreateParamsMandateDataCustomerAcceptance as PaymentIntentCreateParamsMandateDataCustomerAcceptance, + PaymentIntentCreateParamsMandateDataCustomerAcceptanceOffline as PaymentIntentCreateParamsMandateDataCustomerAcceptanceOffline, + PaymentIntentCreateParamsMandateDataCustomerAcceptanceOnline as PaymentIntentCreateParamsMandateDataCustomerAcceptanceOnline, + PaymentIntentCreateParamsPaymentDetails as PaymentIntentCreateParamsPaymentDetails, + PaymentIntentCreateParamsPaymentMethodData as PaymentIntentCreateParamsPaymentMethodData, + PaymentIntentCreateParamsPaymentMethodDataAcssDebit as PaymentIntentCreateParamsPaymentMethodDataAcssDebit, + PaymentIntentCreateParamsPaymentMethodDataAffirm as PaymentIntentCreateParamsPaymentMethodDataAffirm, + PaymentIntentCreateParamsPaymentMethodDataAfterpayClearpay as PaymentIntentCreateParamsPaymentMethodDataAfterpayClearpay, + PaymentIntentCreateParamsPaymentMethodDataAlipay as PaymentIntentCreateParamsPaymentMethodDataAlipay, + PaymentIntentCreateParamsPaymentMethodDataAlma as PaymentIntentCreateParamsPaymentMethodDataAlma, + PaymentIntentCreateParamsPaymentMethodDataAmazonPay as PaymentIntentCreateParamsPaymentMethodDataAmazonPay, + PaymentIntentCreateParamsPaymentMethodDataAuBecsDebit as PaymentIntentCreateParamsPaymentMethodDataAuBecsDebit, + PaymentIntentCreateParamsPaymentMethodDataBacsDebit as PaymentIntentCreateParamsPaymentMethodDataBacsDebit, + PaymentIntentCreateParamsPaymentMethodDataBancontact as PaymentIntentCreateParamsPaymentMethodDataBancontact, + PaymentIntentCreateParamsPaymentMethodDataBillie as PaymentIntentCreateParamsPaymentMethodDataBillie, + PaymentIntentCreateParamsPaymentMethodDataBillingDetails as PaymentIntentCreateParamsPaymentMethodDataBillingDetails, + PaymentIntentCreateParamsPaymentMethodDataBillingDetailsAddress as PaymentIntentCreateParamsPaymentMethodDataBillingDetailsAddress, + PaymentIntentCreateParamsPaymentMethodDataBlik as PaymentIntentCreateParamsPaymentMethodDataBlik, + PaymentIntentCreateParamsPaymentMethodDataBoleto as PaymentIntentCreateParamsPaymentMethodDataBoleto, + PaymentIntentCreateParamsPaymentMethodDataCashapp as PaymentIntentCreateParamsPaymentMethodDataCashapp, + PaymentIntentCreateParamsPaymentMethodDataCrypto as PaymentIntentCreateParamsPaymentMethodDataCrypto, + PaymentIntentCreateParamsPaymentMethodDataCustomerBalance as PaymentIntentCreateParamsPaymentMethodDataCustomerBalance, + PaymentIntentCreateParamsPaymentMethodDataEps as PaymentIntentCreateParamsPaymentMethodDataEps, + PaymentIntentCreateParamsPaymentMethodDataFpx as PaymentIntentCreateParamsPaymentMethodDataFpx, + PaymentIntentCreateParamsPaymentMethodDataGiropay as PaymentIntentCreateParamsPaymentMethodDataGiropay, + PaymentIntentCreateParamsPaymentMethodDataGrabpay as PaymentIntentCreateParamsPaymentMethodDataGrabpay, + PaymentIntentCreateParamsPaymentMethodDataIdeal as PaymentIntentCreateParamsPaymentMethodDataIdeal, + PaymentIntentCreateParamsPaymentMethodDataInteracPresent as PaymentIntentCreateParamsPaymentMethodDataInteracPresent, + PaymentIntentCreateParamsPaymentMethodDataKakaoPay as PaymentIntentCreateParamsPaymentMethodDataKakaoPay, + PaymentIntentCreateParamsPaymentMethodDataKlarna as PaymentIntentCreateParamsPaymentMethodDataKlarna, + PaymentIntentCreateParamsPaymentMethodDataKlarnaDob as PaymentIntentCreateParamsPaymentMethodDataKlarnaDob, + PaymentIntentCreateParamsPaymentMethodDataKonbini as PaymentIntentCreateParamsPaymentMethodDataKonbini, + PaymentIntentCreateParamsPaymentMethodDataKrCard as PaymentIntentCreateParamsPaymentMethodDataKrCard, + PaymentIntentCreateParamsPaymentMethodDataLink as PaymentIntentCreateParamsPaymentMethodDataLink, + PaymentIntentCreateParamsPaymentMethodDataMbWay as PaymentIntentCreateParamsPaymentMethodDataMbWay, + PaymentIntentCreateParamsPaymentMethodDataMobilepay as PaymentIntentCreateParamsPaymentMethodDataMobilepay, + PaymentIntentCreateParamsPaymentMethodDataMultibanco as PaymentIntentCreateParamsPaymentMethodDataMultibanco, + PaymentIntentCreateParamsPaymentMethodDataNaverPay as PaymentIntentCreateParamsPaymentMethodDataNaverPay, + PaymentIntentCreateParamsPaymentMethodDataNzBankAccount as PaymentIntentCreateParamsPaymentMethodDataNzBankAccount, + PaymentIntentCreateParamsPaymentMethodDataOxxo as PaymentIntentCreateParamsPaymentMethodDataOxxo, + PaymentIntentCreateParamsPaymentMethodDataP24 as PaymentIntentCreateParamsPaymentMethodDataP24, + PaymentIntentCreateParamsPaymentMethodDataPayByBank as PaymentIntentCreateParamsPaymentMethodDataPayByBank, + PaymentIntentCreateParamsPaymentMethodDataPayco as PaymentIntentCreateParamsPaymentMethodDataPayco, + PaymentIntentCreateParamsPaymentMethodDataPaynow as PaymentIntentCreateParamsPaymentMethodDataPaynow, + PaymentIntentCreateParamsPaymentMethodDataPaypal as PaymentIntentCreateParamsPaymentMethodDataPaypal, + PaymentIntentCreateParamsPaymentMethodDataPix as PaymentIntentCreateParamsPaymentMethodDataPix, + PaymentIntentCreateParamsPaymentMethodDataPromptpay as PaymentIntentCreateParamsPaymentMethodDataPromptpay, + PaymentIntentCreateParamsPaymentMethodDataRadarOptions as PaymentIntentCreateParamsPaymentMethodDataRadarOptions, + PaymentIntentCreateParamsPaymentMethodDataRevolutPay as PaymentIntentCreateParamsPaymentMethodDataRevolutPay, + PaymentIntentCreateParamsPaymentMethodDataSamsungPay as PaymentIntentCreateParamsPaymentMethodDataSamsungPay, + PaymentIntentCreateParamsPaymentMethodDataSatispay as PaymentIntentCreateParamsPaymentMethodDataSatispay, + PaymentIntentCreateParamsPaymentMethodDataSepaDebit as PaymentIntentCreateParamsPaymentMethodDataSepaDebit, + PaymentIntentCreateParamsPaymentMethodDataSofort as PaymentIntentCreateParamsPaymentMethodDataSofort, + PaymentIntentCreateParamsPaymentMethodDataSwish as PaymentIntentCreateParamsPaymentMethodDataSwish, + PaymentIntentCreateParamsPaymentMethodDataTwint as PaymentIntentCreateParamsPaymentMethodDataTwint, + PaymentIntentCreateParamsPaymentMethodDataUsBankAccount as PaymentIntentCreateParamsPaymentMethodDataUsBankAccount, + PaymentIntentCreateParamsPaymentMethodDataWechatPay as PaymentIntentCreateParamsPaymentMethodDataWechatPay, + PaymentIntentCreateParamsPaymentMethodDataZip as PaymentIntentCreateParamsPaymentMethodDataZip, + PaymentIntentCreateParamsPaymentMethodOptions as PaymentIntentCreateParamsPaymentMethodOptions, + PaymentIntentCreateParamsPaymentMethodOptionsAcssDebit as PaymentIntentCreateParamsPaymentMethodOptionsAcssDebit, + PaymentIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions as PaymentIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions, + PaymentIntentCreateParamsPaymentMethodOptionsAffirm as PaymentIntentCreateParamsPaymentMethodOptionsAffirm, + PaymentIntentCreateParamsPaymentMethodOptionsAfterpayClearpay as PaymentIntentCreateParamsPaymentMethodOptionsAfterpayClearpay, + PaymentIntentCreateParamsPaymentMethodOptionsAlipay as PaymentIntentCreateParamsPaymentMethodOptionsAlipay, + PaymentIntentCreateParamsPaymentMethodOptionsAlma as PaymentIntentCreateParamsPaymentMethodOptionsAlma, + PaymentIntentCreateParamsPaymentMethodOptionsAmazonPay as PaymentIntentCreateParamsPaymentMethodOptionsAmazonPay, + PaymentIntentCreateParamsPaymentMethodOptionsAuBecsDebit as PaymentIntentCreateParamsPaymentMethodOptionsAuBecsDebit, + PaymentIntentCreateParamsPaymentMethodOptionsBacsDebit as PaymentIntentCreateParamsPaymentMethodOptionsBacsDebit, + PaymentIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions as PaymentIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions, + PaymentIntentCreateParamsPaymentMethodOptionsBancontact as PaymentIntentCreateParamsPaymentMethodOptionsBancontact, + PaymentIntentCreateParamsPaymentMethodOptionsBillie as PaymentIntentCreateParamsPaymentMethodOptionsBillie, + PaymentIntentCreateParamsPaymentMethodOptionsBlik as PaymentIntentCreateParamsPaymentMethodOptionsBlik, + PaymentIntentCreateParamsPaymentMethodOptionsBoleto as PaymentIntentCreateParamsPaymentMethodOptionsBoleto, + PaymentIntentCreateParamsPaymentMethodOptionsCard as PaymentIntentCreateParamsPaymentMethodOptionsCard, + PaymentIntentCreateParamsPaymentMethodOptionsCardInstallments as PaymentIntentCreateParamsPaymentMethodOptionsCardInstallments, + PaymentIntentCreateParamsPaymentMethodOptionsCardInstallmentsPlan as PaymentIntentCreateParamsPaymentMethodOptionsCardInstallmentsPlan, + PaymentIntentCreateParamsPaymentMethodOptionsCardMandateOptions as PaymentIntentCreateParamsPaymentMethodOptionsCardMandateOptions, + PaymentIntentCreateParamsPaymentMethodOptionsCardPresent as PaymentIntentCreateParamsPaymentMethodOptionsCardPresent, + PaymentIntentCreateParamsPaymentMethodOptionsCardPresentRouting as PaymentIntentCreateParamsPaymentMethodOptionsCardPresentRouting, + PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecure as PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecure, + PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + PaymentIntentCreateParamsPaymentMethodOptionsCashapp as PaymentIntentCreateParamsPaymentMethodOptionsCashapp, + PaymentIntentCreateParamsPaymentMethodOptionsCrypto as PaymentIntentCreateParamsPaymentMethodOptionsCrypto, + PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalance as PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalance, + PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer as PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer, + PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + PaymentIntentCreateParamsPaymentMethodOptionsEps as PaymentIntentCreateParamsPaymentMethodOptionsEps, + PaymentIntentCreateParamsPaymentMethodOptionsFpx as PaymentIntentCreateParamsPaymentMethodOptionsFpx, + PaymentIntentCreateParamsPaymentMethodOptionsGiropay as PaymentIntentCreateParamsPaymentMethodOptionsGiropay, + PaymentIntentCreateParamsPaymentMethodOptionsGrabpay as PaymentIntentCreateParamsPaymentMethodOptionsGrabpay, + PaymentIntentCreateParamsPaymentMethodOptionsIdeal as PaymentIntentCreateParamsPaymentMethodOptionsIdeal, + PaymentIntentCreateParamsPaymentMethodOptionsInteracPresent as PaymentIntentCreateParamsPaymentMethodOptionsInteracPresent, + PaymentIntentCreateParamsPaymentMethodOptionsKakaoPay as PaymentIntentCreateParamsPaymentMethodOptionsKakaoPay, + PaymentIntentCreateParamsPaymentMethodOptionsKlarna as PaymentIntentCreateParamsPaymentMethodOptionsKlarna, + PaymentIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand as PaymentIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand, + PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscription as PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscription, + PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + PaymentIntentCreateParamsPaymentMethodOptionsKonbini as PaymentIntentCreateParamsPaymentMethodOptionsKonbini, + PaymentIntentCreateParamsPaymentMethodOptionsKrCard as PaymentIntentCreateParamsPaymentMethodOptionsKrCard, + PaymentIntentCreateParamsPaymentMethodOptionsLink as PaymentIntentCreateParamsPaymentMethodOptionsLink, + PaymentIntentCreateParamsPaymentMethodOptionsMbWay as PaymentIntentCreateParamsPaymentMethodOptionsMbWay, + PaymentIntentCreateParamsPaymentMethodOptionsMobilepay as PaymentIntentCreateParamsPaymentMethodOptionsMobilepay, + PaymentIntentCreateParamsPaymentMethodOptionsMultibanco as PaymentIntentCreateParamsPaymentMethodOptionsMultibanco, + PaymentIntentCreateParamsPaymentMethodOptionsNaverPay as PaymentIntentCreateParamsPaymentMethodOptionsNaverPay, + PaymentIntentCreateParamsPaymentMethodOptionsNzBankAccount as PaymentIntentCreateParamsPaymentMethodOptionsNzBankAccount, + PaymentIntentCreateParamsPaymentMethodOptionsOxxo as PaymentIntentCreateParamsPaymentMethodOptionsOxxo, + PaymentIntentCreateParamsPaymentMethodOptionsP24 as PaymentIntentCreateParamsPaymentMethodOptionsP24, + PaymentIntentCreateParamsPaymentMethodOptionsPayByBank as PaymentIntentCreateParamsPaymentMethodOptionsPayByBank, + PaymentIntentCreateParamsPaymentMethodOptionsPayco as PaymentIntentCreateParamsPaymentMethodOptionsPayco, + PaymentIntentCreateParamsPaymentMethodOptionsPaynow as PaymentIntentCreateParamsPaymentMethodOptionsPaynow, + PaymentIntentCreateParamsPaymentMethodOptionsPaypal as PaymentIntentCreateParamsPaymentMethodOptionsPaypal, + PaymentIntentCreateParamsPaymentMethodOptionsPix as PaymentIntentCreateParamsPaymentMethodOptionsPix, + PaymentIntentCreateParamsPaymentMethodOptionsPromptpay as PaymentIntentCreateParamsPaymentMethodOptionsPromptpay, + PaymentIntentCreateParamsPaymentMethodOptionsRevolutPay as PaymentIntentCreateParamsPaymentMethodOptionsRevolutPay, + PaymentIntentCreateParamsPaymentMethodOptionsSamsungPay as PaymentIntentCreateParamsPaymentMethodOptionsSamsungPay, + PaymentIntentCreateParamsPaymentMethodOptionsSatispay as PaymentIntentCreateParamsPaymentMethodOptionsSatispay, + PaymentIntentCreateParamsPaymentMethodOptionsSepaDebit as PaymentIntentCreateParamsPaymentMethodOptionsSepaDebit, + PaymentIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions as PaymentIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions, + PaymentIntentCreateParamsPaymentMethodOptionsSofort as PaymentIntentCreateParamsPaymentMethodOptionsSofort, + PaymentIntentCreateParamsPaymentMethodOptionsSwish as PaymentIntentCreateParamsPaymentMethodOptionsSwish, + PaymentIntentCreateParamsPaymentMethodOptionsTwint as PaymentIntentCreateParamsPaymentMethodOptionsTwint, + PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccount as PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccount, + PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections as PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions as PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions, + PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks as PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks, + PaymentIntentCreateParamsPaymentMethodOptionsWechatPay as PaymentIntentCreateParamsPaymentMethodOptionsWechatPay, + PaymentIntentCreateParamsPaymentMethodOptionsZip as PaymentIntentCreateParamsPaymentMethodOptionsZip, + PaymentIntentCreateParamsRadarOptions as PaymentIntentCreateParamsRadarOptions, + PaymentIntentCreateParamsShipping as PaymentIntentCreateParamsShipping, + PaymentIntentCreateParamsShippingAddress as PaymentIntentCreateParamsShippingAddress, + PaymentIntentCreateParamsTransferData as PaymentIntentCreateParamsTransferData, + ) + from stripe.params._payment_intent_increment_authorization_params import ( + PaymentIntentIncrementAuthorizationParams as PaymentIntentIncrementAuthorizationParams, + PaymentIntentIncrementAuthorizationParamsAmountDetails as PaymentIntentIncrementAuthorizationParamsAmountDetails, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItem as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItem, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemTax as PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemTax, + PaymentIntentIncrementAuthorizationParamsAmountDetailsShipping as PaymentIntentIncrementAuthorizationParamsAmountDetailsShipping, + PaymentIntentIncrementAuthorizationParamsAmountDetailsTax as PaymentIntentIncrementAuthorizationParamsAmountDetailsTax, + PaymentIntentIncrementAuthorizationParamsPaymentDetails as PaymentIntentIncrementAuthorizationParamsPaymentDetails, + PaymentIntentIncrementAuthorizationParamsTransferData as PaymentIntentIncrementAuthorizationParamsTransferData, + ) + from stripe.params._payment_intent_list_amount_details_line_items_params import ( + PaymentIntentListAmountDetailsLineItemsParams as PaymentIntentListAmountDetailsLineItemsParams, + ) + from stripe.params._payment_intent_list_params import ( + PaymentIntentListParams as PaymentIntentListParams, + PaymentIntentListParamsCreated as PaymentIntentListParamsCreated, + ) + from stripe.params._payment_intent_modify_params import ( + PaymentIntentModifyParams as PaymentIntentModifyParams, + PaymentIntentModifyParamsAmountDetails as PaymentIntentModifyParamsAmountDetails, + PaymentIntentModifyParamsAmountDetailsLineItem as PaymentIntentModifyParamsAmountDetailsLineItem, + PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentModifyParamsAmountDetailsLineItemTax as PaymentIntentModifyParamsAmountDetailsLineItemTax, + PaymentIntentModifyParamsAmountDetailsShipping as PaymentIntentModifyParamsAmountDetailsShipping, + PaymentIntentModifyParamsAmountDetailsTax as PaymentIntentModifyParamsAmountDetailsTax, + PaymentIntentModifyParamsPaymentDetails as PaymentIntentModifyParamsPaymentDetails, + PaymentIntentModifyParamsPaymentMethodData as PaymentIntentModifyParamsPaymentMethodData, + PaymentIntentModifyParamsPaymentMethodDataAcssDebit as PaymentIntentModifyParamsPaymentMethodDataAcssDebit, + PaymentIntentModifyParamsPaymentMethodDataAffirm as PaymentIntentModifyParamsPaymentMethodDataAffirm, + PaymentIntentModifyParamsPaymentMethodDataAfterpayClearpay as PaymentIntentModifyParamsPaymentMethodDataAfterpayClearpay, + PaymentIntentModifyParamsPaymentMethodDataAlipay as PaymentIntentModifyParamsPaymentMethodDataAlipay, + PaymentIntentModifyParamsPaymentMethodDataAlma as PaymentIntentModifyParamsPaymentMethodDataAlma, + PaymentIntentModifyParamsPaymentMethodDataAmazonPay as PaymentIntentModifyParamsPaymentMethodDataAmazonPay, + PaymentIntentModifyParamsPaymentMethodDataAuBecsDebit as PaymentIntentModifyParamsPaymentMethodDataAuBecsDebit, + PaymentIntentModifyParamsPaymentMethodDataBacsDebit as PaymentIntentModifyParamsPaymentMethodDataBacsDebit, + PaymentIntentModifyParamsPaymentMethodDataBancontact as PaymentIntentModifyParamsPaymentMethodDataBancontact, + PaymentIntentModifyParamsPaymentMethodDataBillie as PaymentIntentModifyParamsPaymentMethodDataBillie, + PaymentIntentModifyParamsPaymentMethodDataBillingDetails as PaymentIntentModifyParamsPaymentMethodDataBillingDetails, + PaymentIntentModifyParamsPaymentMethodDataBillingDetailsAddress as PaymentIntentModifyParamsPaymentMethodDataBillingDetailsAddress, + PaymentIntentModifyParamsPaymentMethodDataBlik as PaymentIntentModifyParamsPaymentMethodDataBlik, + PaymentIntentModifyParamsPaymentMethodDataBoleto as PaymentIntentModifyParamsPaymentMethodDataBoleto, + PaymentIntentModifyParamsPaymentMethodDataCashapp as PaymentIntentModifyParamsPaymentMethodDataCashapp, + PaymentIntentModifyParamsPaymentMethodDataCrypto as PaymentIntentModifyParamsPaymentMethodDataCrypto, + PaymentIntentModifyParamsPaymentMethodDataCustomerBalance as PaymentIntentModifyParamsPaymentMethodDataCustomerBalance, + PaymentIntentModifyParamsPaymentMethodDataEps as PaymentIntentModifyParamsPaymentMethodDataEps, + PaymentIntentModifyParamsPaymentMethodDataFpx as PaymentIntentModifyParamsPaymentMethodDataFpx, + PaymentIntentModifyParamsPaymentMethodDataGiropay as PaymentIntentModifyParamsPaymentMethodDataGiropay, + PaymentIntentModifyParamsPaymentMethodDataGrabpay as PaymentIntentModifyParamsPaymentMethodDataGrabpay, + PaymentIntentModifyParamsPaymentMethodDataIdeal as PaymentIntentModifyParamsPaymentMethodDataIdeal, + PaymentIntentModifyParamsPaymentMethodDataInteracPresent as PaymentIntentModifyParamsPaymentMethodDataInteracPresent, + PaymentIntentModifyParamsPaymentMethodDataKakaoPay as PaymentIntentModifyParamsPaymentMethodDataKakaoPay, + PaymentIntentModifyParamsPaymentMethodDataKlarna as PaymentIntentModifyParamsPaymentMethodDataKlarna, + PaymentIntentModifyParamsPaymentMethodDataKlarnaDob as PaymentIntentModifyParamsPaymentMethodDataKlarnaDob, + PaymentIntentModifyParamsPaymentMethodDataKonbini as PaymentIntentModifyParamsPaymentMethodDataKonbini, + PaymentIntentModifyParamsPaymentMethodDataKrCard as PaymentIntentModifyParamsPaymentMethodDataKrCard, + PaymentIntentModifyParamsPaymentMethodDataLink as PaymentIntentModifyParamsPaymentMethodDataLink, + PaymentIntentModifyParamsPaymentMethodDataMbWay as PaymentIntentModifyParamsPaymentMethodDataMbWay, + PaymentIntentModifyParamsPaymentMethodDataMobilepay as PaymentIntentModifyParamsPaymentMethodDataMobilepay, + PaymentIntentModifyParamsPaymentMethodDataMultibanco as PaymentIntentModifyParamsPaymentMethodDataMultibanco, + PaymentIntentModifyParamsPaymentMethodDataNaverPay as PaymentIntentModifyParamsPaymentMethodDataNaverPay, + PaymentIntentModifyParamsPaymentMethodDataNzBankAccount as PaymentIntentModifyParamsPaymentMethodDataNzBankAccount, + PaymentIntentModifyParamsPaymentMethodDataOxxo as PaymentIntentModifyParamsPaymentMethodDataOxxo, + PaymentIntentModifyParamsPaymentMethodDataP24 as PaymentIntentModifyParamsPaymentMethodDataP24, + PaymentIntentModifyParamsPaymentMethodDataPayByBank as PaymentIntentModifyParamsPaymentMethodDataPayByBank, + PaymentIntentModifyParamsPaymentMethodDataPayco as PaymentIntentModifyParamsPaymentMethodDataPayco, + PaymentIntentModifyParamsPaymentMethodDataPaynow as PaymentIntentModifyParamsPaymentMethodDataPaynow, + PaymentIntentModifyParamsPaymentMethodDataPaypal as PaymentIntentModifyParamsPaymentMethodDataPaypal, + PaymentIntentModifyParamsPaymentMethodDataPix as PaymentIntentModifyParamsPaymentMethodDataPix, + PaymentIntentModifyParamsPaymentMethodDataPromptpay as PaymentIntentModifyParamsPaymentMethodDataPromptpay, + PaymentIntentModifyParamsPaymentMethodDataRadarOptions as PaymentIntentModifyParamsPaymentMethodDataRadarOptions, + PaymentIntentModifyParamsPaymentMethodDataRevolutPay as PaymentIntentModifyParamsPaymentMethodDataRevolutPay, + PaymentIntentModifyParamsPaymentMethodDataSamsungPay as PaymentIntentModifyParamsPaymentMethodDataSamsungPay, + PaymentIntentModifyParamsPaymentMethodDataSatispay as PaymentIntentModifyParamsPaymentMethodDataSatispay, + PaymentIntentModifyParamsPaymentMethodDataSepaDebit as PaymentIntentModifyParamsPaymentMethodDataSepaDebit, + PaymentIntentModifyParamsPaymentMethodDataSofort as PaymentIntentModifyParamsPaymentMethodDataSofort, + PaymentIntentModifyParamsPaymentMethodDataSwish as PaymentIntentModifyParamsPaymentMethodDataSwish, + PaymentIntentModifyParamsPaymentMethodDataTwint as PaymentIntentModifyParamsPaymentMethodDataTwint, + PaymentIntentModifyParamsPaymentMethodDataUsBankAccount as PaymentIntentModifyParamsPaymentMethodDataUsBankAccount, + PaymentIntentModifyParamsPaymentMethodDataWechatPay as PaymentIntentModifyParamsPaymentMethodDataWechatPay, + PaymentIntentModifyParamsPaymentMethodDataZip as PaymentIntentModifyParamsPaymentMethodDataZip, + PaymentIntentModifyParamsPaymentMethodOptions as PaymentIntentModifyParamsPaymentMethodOptions, + PaymentIntentModifyParamsPaymentMethodOptionsAcssDebit as PaymentIntentModifyParamsPaymentMethodOptionsAcssDebit, + PaymentIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions as PaymentIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions, + PaymentIntentModifyParamsPaymentMethodOptionsAffirm as PaymentIntentModifyParamsPaymentMethodOptionsAffirm, + PaymentIntentModifyParamsPaymentMethodOptionsAfterpayClearpay as PaymentIntentModifyParamsPaymentMethodOptionsAfterpayClearpay, + PaymentIntentModifyParamsPaymentMethodOptionsAlipay as PaymentIntentModifyParamsPaymentMethodOptionsAlipay, + PaymentIntentModifyParamsPaymentMethodOptionsAlma as PaymentIntentModifyParamsPaymentMethodOptionsAlma, + PaymentIntentModifyParamsPaymentMethodOptionsAmazonPay as PaymentIntentModifyParamsPaymentMethodOptionsAmazonPay, + PaymentIntentModifyParamsPaymentMethodOptionsAuBecsDebit as PaymentIntentModifyParamsPaymentMethodOptionsAuBecsDebit, + PaymentIntentModifyParamsPaymentMethodOptionsBacsDebit as PaymentIntentModifyParamsPaymentMethodOptionsBacsDebit, + PaymentIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions as PaymentIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions, + PaymentIntentModifyParamsPaymentMethodOptionsBancontact as PaymentIntentModifyParamsPaymentMethodOptionsBancontact, + PaymentIntentModifyParamsPaymentMethodOptionsBillie as PaymentIntentModifyParamsPaymentMethodOptionsBillie, + PaymentIntentModifyParamsPaymentMethodOptionsBlik as PaymentIntentModifyParamsPaymentMethodOptionsBlik, + PaymentIntentModifyParamsPaymentMethodOptionsBoleto as PaymentIntentModifyParamsPaymentMethodOptionsBoleto, + PaymentIntentModifyParamsPaymentMethodOptionsCard as PaymentIntentModifyParamsPaymentMethodOptionsCard, + PaymentIntentModifyParamsPaymentMethodOptionsCardInstallments as PaymentIntentModifyParamsPaymentMethodOptionsCardInstallments, + PaymentIntentModifyParamsPaymentMethodOptionsCardInstallmentsPlan as PaymentIntentModifyParamsPaymentMethodOptionsCardInstallmentsPlan, + PaymentIntentModifyParamsPaymentMethodOptionsCardMandateOptions as PaymentIntentModifyParamsPaymentMethodOptionsCardMandateOptions, + PaymentIntentModifyParamsPaymentMethodOptionsCardPresent as PaymentIntentModifyParamsPaymentMethodOptionsCardPresent, + PaymentIntentModifyParamsPaymentMethodOptionsCardPresentRouting as PaymentIntentModifyParamsPaymentMethodOptionsCardPresentRouting, + PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecure as PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecure, + PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + PaymentIntentModifyParamsPaymentMethodOptionsCashapp as PaymentIntentModifyParamsPaymentMethodOptionsCashapp, + PaymentIntentModifyParamsPaymentMethodOptionsCrypto as PaymentIntentModifyParamsPaymentMethodOptionsCrypto, + PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalance as PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalance, + PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransfer as PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransfer, + PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + PaymentIntentModifyParamsPaymentMethodOptionsEps as PaymentIntentModifyParamsPaymentMethodOptionsEps, + PaymentIntentModifyParamsPaymentMethodOptionsFpx as PaymentIntentModifyParamsPaymentMethodOptionsFpx, + PaymentIntentModifyParamsPaymentMethodOptionsGiropay as PaymentIntentModifyParamsPaymentMethodOptionsGiropay, + PaymentIntentModifyParamsPaymentMethodOptionsGrabpay as PaymentIntentModifyParamsPaymentMethodOptionsGrabpay, + PaymentIntentModifyParamsPaymentMethodOptionsIdeal as PaymentIntentModifyParamsPaymentMethodOptionsIdeal, + PaymentIntentModifyParamsPaymentMethodOptionsInteracPresent as PaymentIntentModifyParamsPaymentMethodOptionsInteracPresent, + PaymentIntentModifyParamsPaymentMethodOptionsKakaoPay as PaymentIntentModifyParamsPaymentMethodOptionsKakaoPay, + PaymentIntentModifyParamsPaymentMethodOptionsKlarna as PaymentIntentModifyParamsPaymentMethodOptionsKlarna, + PaymentIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand as PaymentIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand, + PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscription as PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscription, + PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + PaymentIntentModifyParamsPaymentMethodOptionsKonbini as PaymentIntentModifyParamsPaymentMethodOptionsKonbini, + PaymentIntentModifyParamsPaymentMethodOptionsKrCard as PaymentIntentModifyParamsPaymentMethodOptionsKrCard, + PaymentIntentModifyParamsPaymentMethodOptionsLink as PaymentIntentModifyParamsPaymentMethodOptionsLink, + PaymentIntentModifyParamsPaymentMethodOptionsMbWay as PaymentIntentModifyParamsPaymentMethodOptionsMbWay, + PaymentIntentModifyParamsPaymentMethodOptionsMobilepay as PaymentIntentModifyParamsPaymentMethodOptionsMobilepay, + PaymentIntentModifyParamsPaymentMethodOptionsMultibanco as PaymentIntentModifyParamsPaymentMethodOptionsMultibanco, + PaymentIntentModifyParamsPaymentMethodOptionsNaverPay as PaymentIntentModifyParamsPaymentMethodOptionsNaverPay, + PaymentIntentModifyParamsPaymentMethodOptionsNzBankAccount as PaymentIntentModifyParamsPaymentMethodOptionsNzBankAccount, + PaymentIntentModifyParamsPaymentMethodOptionsOxxo as PaymentIntentModifyParamsPaymentMethodOptionsOxxo, + PaymentIntentModifyParamsPaymentMethodOptionsP24 as PaymentIntentModifyParamsPaymentMethodOptionsP24, + PaymentIntentModifyParamsPaymentMethodOptionsPayByBank as PaymentIntentModifyParamsPaymentMethodOptionsPayByBank, + PaymentIntentModifyParamsPaymentMethodOptionsPayco as PaymentIntentModifyParamsPaymentMethodOptionsPayco, + PaymentIntentModifyParamsPaymentMethodOptionsPaynow as PaymentIntentModifyParamsPaymentMethodOptionsPaynow, + PaymentIntentModifyParamsPaymentMethodOptionsPaypal as PaymentIntentModifyParamsPaymentMethodOptionsPaypal, + PaymentIntentModifyParamsPaymentMethodOptionsPix as PaymentIntentModifyParamsPaymentMethodOptionsPix, + PaymentIntentModifyParamsPaymentMethodOptionsPromptpay as PaymentIntentModifyParamsPaymentMethodOptionsPromptpay, + PaymentIntentModifyParamsPaymentMethodOptionsRevolutPay as PaymentIntentModifyParamsPaymentMethodOptionsRevolutPay, + PaymentIntentModifyParamsPaymentMethodOptionsSamsungPay as PaymentIntentModifyParamsPaymentMethodOptionsSamsungPay, + PaymentIntentModifyParamsPaymentMethodOptionsSatispay as PaymentIntentModifyParamsPaymentMethodOptionsSatispay, + PaymentIntentModifyParamsPaymentMethodOptionsSepaDebit as PaymentIntentModifyParamsPaymentMethodOptionsSepaDebit, + PaymentIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions as PaymentIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions, + PaymentIntentModifyParamsPaymentMethodOptionsSofort as PaymentIntentModifyParamsPaymentMethodOptionsSofort, + PaymentIntentModifyParamsPaymentMethodOptionsSwish as PaymentIntentModifyParamsPaymentMethodOptionsSwish, + PaymentIntentModifyParamsPaymentMethodOptionsTwint as PaymentIntentModifyParamsPaymentMethodOptionsTwint, + PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccount as PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccount, + PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections as PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions as PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions, + PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks as PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks, + PaymentIntentModifyParamsPaymentMethodOptionsWechatPay as PaymentIntentModifyParamsPaymentMethodOptionsWechatPay, + PaymentIntentModifyParamsPaymentMethodOptionsZip as PaymentIntentModifyParamsPaymentMethodOptionsZip, + PaymentIntentModifyParamsShipping as PaymentIntentModifyParamsShipping, + PaymentIntentModifyParamsShippingAddress as PaymentIntentModifyParamsShippingAddress, + PaymentIntentModifyParamsTransferData as PaymentIntentModifyParamsTransferData, + ) + from stripe.params._payment_intent_retrieve_params import ( + PaymentIntentRetrieveParams as PaymentIntentRetrieveParams, + ) + from stripe.params._payment_intent_search_params import ( + PaymentIntentSearchParams as PaymentIntentSearchParams, + ) + from stripe.params._payment_intent_update_params import ( + PaymentIntentUpdateParams as PaymentIntentUpdateParams, + PaymentIntentUpdateParamsAmountDetails as PaymentIntentUpdateParamsAmountDetails, + PaymentIntentUpdateParamsAmountDetailsLineItem as PaymentIntentUpdateParamsAmountDetailsLineItem, + PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptions as PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptions, + PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCard as PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCard, + PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent as PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent, + PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna as PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna, + PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal as PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal, + PaymentIntentUpdateParamsAmountDetailsLineItemTax as PaymentIntentUpdateParamsAmountDetailsLineItemTax, + PaymentIntentUpdateParamsAmountDetailsShipping as PaymentIntentUpdateParamsAmountDetailsShipping, + PaymentIntentUpdateParamsAmountDetailsTax as PaymentIntentUpdateParamsAmountDetailsTax, + PaymentIntentUpdateParamsPaymentDetails as PaymentIntentUpdateParamsPaymentDetails, + PaymentIntentUpdateParamsPaymentMethodData as PaymentIntentUpdateParamsPaymentMethodData, + PaymentIntentUpdateParamsPaymentMethodDataAcssDebit as PaymentIntentUpdateParamsPaymentMethodDataAcssDebit, + PaymentIntentUpdateParamsPaymentMethodDataAffirm as PaymentIntentUpdateParamsPaymentMethodDataAffirm, + PaymentIntentUpdateParamsPaymentMethodDataAfterpayClearpay as PaymentIntentUpdateParamsPaymentMethodDataAfterpayClearpay, + PaymentIntentUpdateParamsPaymentMethodDataAlipay as PaymentIntentUpdateParamsPaymentMethodDataAlipay, + PaymentIntentUpdateParamsPaymentMethodDataAlma as PaymentIntentUpdateParamsPaymentMethodDataAlma, + PaymentIntentUpdateParamsPaymentMethodDataAmazonPay as PaymentIntentUpdateParamsPaymentMethodDataAmazonPay, + PaymentIntentUpdateParamsPaymentMethodDataAuBecsDebit as PaymentIntentUpdateParamsPaymentMethodDataAuBecsDebit, + PaymentIntentUpdateParamsPaymentMethodDataBacsDebit as PaymentIntentUpdateParamsPaymentMethodDataBacsDebit, + PaymentIntentUpdateParamsPaymentMethodDataBancontact as PaymentIntentUpdateParamsPaymentMethodDataBancontact, + PaymentIntentUpdateParamsPaymentMethodDataBillie as PaymentIntentUpdateParamsPaymentMethodDataBillie, + PaymentIntentUpdateParamsPaymentMethodDataBillingDetails as PaymentIntentUpdateParamsPaymentMethodDataBillingDetails, + PaymentIntentUpdateParamsPaymentMethodDataBillingDetailsAddress as PaymentIntentUpdateParamsPaymentMethodDataBillingDetailsAddress, + PaymentIntentUpdateParamsPaymentMethodDataBlik as PaymentIntentUpdateParamsPaymentMethodDataBlik, + PaymentIntentUpdateParamsPaymentMethodDataBoleto as PaymentIntentUpdateParamsPaymentMethodDataBoleto, + PaymentIntentUpdateParamsPaymentMethodDataCashapp as PaymentIntentUpdateParamsPaymentMethodDataCashapp, + PaymentIntentUpdateParamsPaymentMethodDataCrypto as PaymentIntentUpdateParamsPaymentMethodDataCrypto, + PaymentIntentUpdateParamsPaymentMethodDataCustomerBalance as PaymentIntentUpdateParamsPaymentMethodDataCustomerBalance, + PaymentIntentUpdateParamsPaymentMethodDataEps as PaymentIntentUpdateParamsPaymentMethodDataEps, + PaymentIntentUpdateParamsPaymentMethodDataFpx as PaymentIntentUpdateParamsPaymentMethodDataFpx, + PaymentIntentUpdateParamsPaymentMethodDataGiropay as PaymentIntentUpdateParamsPaymentMethodDataGiropay, + PaymentIntentUpdateParamsPaymentMethodDataGrabpay as PaymentIntentUpdateParamsPaymentMethodDataGrabpay, + PaymentIntentUpdateParamsPaymentMethodDataIdeal as PaymentIntentUpdateParamsPaymentMethodDataIdeal, + PaymentIntentUpdateParamsPaymentMethodDataInteracPresent as PaymentIntentUpdateParamsPaymentMethodDataInteracPresent, + PaymentIntentUpdateParamsPaymentMethodDataKakaoPay as PaymentIntentUpdateParamsPaymentMethodDataKakaoPay, + PaymentIntentUpdateParamsPaymentMethodDataKlarna as PaymentIntentUpdateParamsPaymentMethodDataKlarna, + PaymentIntentUpdateParamsPaymentMethodDataKlarnaDob as PaymentIntentUpdateParamsPaymentMethodDataKlarnaDob, + PaymentIntentUpdateParamsPaymentMethodDataKonbini as PaymentIntentUpdateParamsPaymentMethodDataKonbini, + PaymentIntentUpdateParamsPaymentMethodDataKrCard as PaymentIntentUpdateParamsPaymentMethodDataKrCard, + PaymentIntentUpdateParamsPaymentMethodDataLink as PaymentIntentUpdateParamsPaymentMethodDataLink, + PaymentIntentUpdateParamsPaymentMethodDataMbWay as PaymentIntentUpdateParamsPaymentMethodDataMbWay, + PaymentIntentUpdateParamsPaymentMethodDataMobilepay as PaymentIntentUpdateParamsPaymentMethodDataMobilepay, + PaymentIntentUpdateParamsPaymentMethodDataMultibanco as PaymentIntentUpdateParamsPaymentMethodDataMultibanco, + PaymentIntentUpdateParamsPaymentMethodDataNaverPay as PaymentIntentUpdateParamsPaymentMethodDataNaverPay, + PaymentIntentUpdateParamsPaymentMethodDataNzBankAccount as PaymentIntentUpdateParamsPaymentMethodDataNzBankAccount, + PaymentIntentUpdateParamsPaymentMethodDataOxxo as PaymentIntentUpdateParamsPaymentMethodDataOxxo, + PaymentIntentUpdateParamsPaymentMethodDataP24 as PaymentIntentUpdateParamsPaymentMethodDataP24, + PaymentIntentUpdateParamsPaymentMethodDataPayByBank as PaymentIntentUpdateParamsPaymentMethodDataPayByBank, + PaymentIntentUpdateParamsPaymentMethodDataPayco as PaymentIntentUpdateParamsPaymentMethodDataPayco, + PaymentIntentUpdateParamsPaymentMethodDataPaynow as PaymentIntentUpdateParamsPaymentMethodDataPaynow, + PaymentIntentUpdateParamsPaymentMethodDataPaypal as PaymentIntentUpdateParamsPaymentMethodDataPaypal, + PaymentIntentUpdateParamsPaymentMethodDataPix as PaymentIntentUpdateParamsPaymentMethodDataPix, + PaymentIntentUpdateParamsPaymentMethodDataPromptpay as PaymentIntentUpdateParamsPaymentMethodDataPromptpay, + PaymentIntentUpdateParamsPaymentMethodDataRadarOptions as PaymentIntentUpdateParamsPaymentMethodDataRadarOptions, + PaymentIntentUpdateParamsPaymentMethodDataRevolutPay as PaymentIntentUpdateParamsPaymentMethodDataRevolutPay, + PaymentIntentUpdateParamsPaymentMethodDataSamsungPay as PaymentIntentUpdateParamsPaymentMethodDataSamsungPay, + PaymentIntentUpdateParamsPaymentMethodDataSatispay as PaymentIntentUpdateParamsPaymentMethodDataSatispay, + PaymentIntentUpdateParamsPaymentMethodDataSepaDebit as PaymentIntentUpdateParamsPaymentMethodDataSepaDebit, + PaymentIntentUpdateParamsPaymentMethodDataSofort as PaymentIntentUpdateParamsPaymentMethodDataSofort, + PaymentIntentUpdateParamsPaymentMethodDataSwish as PaymentIntentUpdateParamsPaymentMethodDataSwish, + PaymentIntentUpdateParamsPaymentMethodDataTwint as PaymentIntentUpdateParamsPaymentMethodDataTwint, + PaymentIntentUpdateParamsPaymentMethodDataUsBankAccount as PaymentIntentUpdateParamsPaymentMethodDataUsBankAccount, + PaymentIntentUpdateParamsPaymentMethodDataWechatPay as PaymentIntentUpdateParamsPaymentMethodDataWechatPay, + PaymentIntentUpdateParamsPaymentMethodDataZip as PaymentIntentUpdateParamsPaymentMethodDataZip, + PaymentIntentUpdateParamsPaymentMethodOptions as PaymentIntentUpdateParamsPaymentMethodOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebit as PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebit, + PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions as PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsAffirm as PaymentIntentUpdateParamsPaymentMethodOptionsAffirm, + PaymentIntentUpdateParamsPaymentMethodOptionsAfterpayClearpay as PaymentIntentUpdateParamsPaymentMethodOptionsAfterpayClearpay, + PaymentIntentUpdateParamsPaymentMethodOptionsAlipay as PaymentIntentUpdateParamsPaymentMethodOptionsAlipay, + PaymentIntentUpdateParamsPaymentMethodOptionsAlma as PaymentIntentUpdateParamsPaymentMethodOptionsAlma, + PaymentIntentUpdateParamsPaymentMethodOptionsAmazonPay as PaymentIntentUpdateParamsPaymentMethodOptionsAmazonPay, + PaymentIntentUpdateParamsPaymentMethodOptionsAuBecsDebit as PaymentIntentUpdateParamsPaymentMethodOptionsAuBecsDebit, + PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebit as PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebit, + PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions as PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsBancontact as PaymentIntentUpdateParamsPaymentMethodOptionsBancontact, + PaymentIntentUpdateParamsPaymentMethodOptionsBillie as PaymentIntentUpdateParamsPaymentMethodOptionsBillie, + PaymentIntentUpdateParamsPaymentMethodOptionsBlik as PaymentIntentUpdateParamsPaymentMethodOptionsBlik, + PaymentIntentUpdateParamsPaymentMethodOptionsBoleto as PaymentIntentUpdateParamsPaymentMethodOptionsBoleto, + PaymentIntentUpdateParamsPaymentMethodOptionsCard as PaymentIntentUpdateParamsPaymentMethodOptionsCard, + PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallments as PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallments, + PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallmentsPlan as PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallmentsPlan, + PaymentIntentUpdateParamsPaymentMethodOptionsCardMandateOptions as PaymentIntentUpdateParamsPaymentMethodOptionsCardMandateOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsCardPresent as PaymentIntentUpdateParamsPaymentMethodOptionsCardPresent, + PaymentIntentUpdateParamsPaymentMethodOptionsCardPresentRouting as PaymentIntentUpdateParamsPaymentMethodOptionsCardPresentRouting, + PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure as PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure, + PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + PaymentIntentUpdateParamsPaymentMethodOptionsCashapp as PaymentIntentUpdateParamsPaymentMethodOptionsCashapp, + PaymentIntentUpdateParamsPaymentMethodOptionsCrypto as PaymentIntentUpdateParamsPaymentMethodOptionsCrypto, + PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalance as PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalance, + PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransfer as PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransfer, + PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + PaymentIntentUpdateParamsPaymentMethodOptionsEps as PaymentIntentUpdateParamsPaymentMethodOptionsEps, + PaymentIntentUpdateParamsPaymentMethodOptionsFpx as PaymentIntentUpdateParamsPaymentMethodOptionsFpx, + PaymentIntentUpdateParamsPaymentMethodOptionsGiropay as PaymentIntentUpdateParamsPaymentMethodOptionsGiropay, + PaymentIntentUpdateParamsPaymentMethodOptionsGrabpay as PaymentIntentUpdateParamsPaymentMethodOptionsGrabpay, + PaymentIntentUpdateParamsPaymentMethodOptionsIdeal as PaymentIntentUpdateParamsPaymentMethodOptionsIdeal, + PaymentIntentUpdateParamsPaymentMethodOptionsInteracPresent as PaymentIntentUpdateParamsPaymentMethodOptionsInteracPresent, + PaymentIntentUpdateParamsPaymentMethodOptionsKakaoPay as PaymentIntentUpdateParamsPaymentMethodOptionsKakaoPay, + PaymentIntentUpdateParamsPaymentMethodOptionsKlarna as PaymentIntentUpdateParamsPaymentMethodOptionsKlarna, + PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand as PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand, + PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription as PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription, + PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + PaymentIntentUpdateParamsPaymentMethodOptionsKonbini as PaymentIntentUpdateParamsPaymentMethodOptionsKonbini, + PaymentIntentUpdateParamsPaymentMethodOptionsKrCard as PaymentIntentUpdateParamsPaymentMethodOptionsKrCard, + PaymentIntentUpdateParamsPaymentMethodOptionsLink as PaymentIntentUpdateParamsPaymentMethodOptionsLink, + PaymentIntentUpdateParamsPaymentMethodOptionsMbWay as PaymentIntentUpdateParamsPaymentMethodOptionsMbWay, + PaymentIntentUpdateParamsPaymentMethodOptionsMobilepay as PaymentIntentUpdateParamsPaymentMethodOptionsMobilepay, + PaymentIntentUpdateParamsPaymentMethodOptionsMultibanco as PaymentIntentUpdateParamsPaymentMethodOptionsMultibanco, + PaymentIntentUpdateParamsPaymentMethodOptionsNaverPay as PaymentIntentUpdateParamsPaymentMethodOptionsNaverPay, + PaymentIntentUpdateParamsPaymentMethodOptionsNzBankAccount as PaymentIntentUpdateParamsPaymentMethodOptionsNzBankAccount, + PaymentIntentUpdateParamsPaymentMethodOptionsOxxo as PaymentIntentUpdateParamsPaymentMethodOptionsOxxo, + PaymentIntentUpdateParamsPaymentMethodOptionsP24 as PaymentIntentUpdateParamsPaymentMethodOptionsP24, + PaymentIntentUpdateParamsPaymentMethodOptionsPayByBank as PaymentIntentUpdateParamsPaymentMethodOptionsPayByBank, + PaymentIntentUpdateParamsPaymentMethodOptionsPayco as PaymentIntentUpdateParamsPaymentMethodOptionsPayco, + PaymentIntentUpdateParamsPaymentMethodOptionsPaynow as PaymentIntentUpdateParamsPaymentMethodOptionsPaynow, + PaymentIntentUpdateParamsPaymentMethodOptionsPaypal as PaymentIntentUpdateParamsPaymentMethodOptionsPaypal, + PaymentIntentUpdateParamsPaymentMethodOptionsPix as PaymentIntentUpdateParamsPaymentMethodOptionsPix, + PaymentIntentUpdateParamsPaymentMethodOptionsPromptpay as PaymentIntentUpdateParamsPaymentMethodOptionsPromptpay, + PaymentIntentUpdateParamsPaymentMethodOptionsRevolutPay as PaymentIntentUpdateParamsPaymentMethodOptionsRevolutPay, + PaymentIntentUpdateParamsPaymentMethodOptionsSamsungPay as PaymentIntentUpdateParamsPaymentMethodOptionsSamsungPay, + PaymentIntentUpdateParamsPaymentMethodOptionsSatispay as PaymentIntentUpdateParamsPaymentMethodOptionsSatispay, + PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebit as PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebit, + PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions as PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsSofort as PaymentIntentUpdateParamsPaymentMethodOptionsSofort, + PaymentIntentUpdateParamsPaymentMethodOptionsSwish as PaymentIntentUpdateParamsPaymentMethodOptionsSwish, + PaymentIntentUpdateParamsPaymentMethodOptionsTwint as PaymentIntentUpdateParamsPaymentMethodOptionsTwint, + PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccount as PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccount, + PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections as PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions as PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions, + PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks as PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks, + PaymentIntentUpdateParamsPaymentMethodOptionsWechatPay as PaymentIntentUpdateParamsPaymentMethodOptionsWechatPay, + PaymentIntentUpdateParamsPaymentMethodOptionsZip as PaymentIntentUpdateParamsPaymentMethodOptionsZip, + PaymentIntentUpdateParamsShipping as PaymentIntentUpdateParamsShipping, + PaymentIntentUpdateParamsShippingAddress as PaymentIntentUpdateParamsShippingAddress, + PaymentIntentUpdateParamsTransferData as PaymentIntentUpdateParamsTransferData, + ) + from stripe.params._payment_intent_verify_microdeposits_params import ( + PaymentIntentVerifyMicrodepositsParams as PaymentIntentVerifyMicrodepositsParams, + ) + from stripe.params._payment_link_create_params import ( + PaymentLinkCreateParams as PaymentLinkCreateParams, + PaymentLinkCreateParamsAfterCompletion as PaymentLinkCreateParamsAfterCompletion, + PaymentLinkCreateParamsAfterCompletionHostedConfirmation as PaymentLinkCreateParamsAfterCompletionHostedConfirmation, + PaymentLinkCreateParamsAfterCompletionRedirect as PaymentLinkCreateParamsAfterCompletionRedirect, + PaymentLinkCreateParamsAutomaticTax as PaymentLinkCreateParamsAutomaticTax, + PaymentLinkCreateParamsAutomaticTaxLiability as PaymentLinkCreateParamsAutomaticTaxLiability, + PaymentLinkCreateParamsConsentCollection as PaymentLinkCreateParamsConsentCollection, + PaymentLinkCreateParamsConsentCollectionPaymentMethodReuseAgreement as PaymentLinkCreateParamsConsentCollectionPaymentMethodReuseAgreement, + PaymentLinkCreateParamsCustomField as PaymentLinkCreateParamsCustomField, + PaymentLinkCreateParamsCustomFieldDropdown as PaymentLinkCreateParamsCustomFieldDropdown, + PaymentLinkCreateParamsCustomFieldDropdownOption as PaymentLinkCreateParamsCustomFieldDropdownOption, + PaymentLinkCreateParamsCustomFieldLabel as PaymentLinkCreateParamsCustomFieldLabel, + PaymentLinkCreateParamsCustomFieldNumeric as PaymentLinkCreateParamsCustomFieldNumeric, + PaymentLinkCreateParamsCustomFieldText as PaymentLinkCreateParamsCustomFieldText, + PaymentLinkCreateParamsCustomText as PaymentLinkCreateParamsCustomText, + PaymentLinkCreateParamsCustomTextAfterSubmit as PaymentLinkCreateParamsCustomTextAfterSubmit, + PaymentLinkCreateParamsCustomTextShippingAddress as PaymentLinkCreateParamsCustomTextShippingAddress, + PaymentLinkCreateParamsCustomTextSubmit as PaymentLinkCreateParamsCustomTextSubmit, + PaymentLinkCreateParamsCustomTextTermsOfServiceAcceptance as PaymentLinkCreateParamsCustomTextTermsOfServiceAcceptance, + PaymentLinkCreateParamsInvoiceCreation as PaymentLinkCreateParamsInvoiceCreation, + PaymentLinkCreateParamsInvoiceCreationInvoiceData as PaymentLinkCreateParamsInvoiceCreationInvoiceData, + PaymentLinkCreateParamsInvoiceCreationInvoiceDataCustomField as PaymentLinkCreateParamsInvoiceCreationInvoiceDataCustomField, + PaymentLinkCreateParamsInvoiceCreationInvoiceDataIssuer as PaymentLinkCreateParamsInvoiceCreationInvoiceDataIssuer, + PaymentLinkCreateParamsInvoiceCreationInvoiceDataRenderingOptions as PaymentLinkCreateParamsInvoiceCreationInvoiceDataRenderingOptions, + PaymentLinkCreateParamsLineItem as PaymentLinkCreateParamsLineItem, + PaymentLinkCreateParamsLineItemAdjustableQuantity as PaymentLinkCreateParamsLineItemAdjustableQuantity, + PaymentLinkCreateParamsLineItemPriceData as PaymentLinkCreateParamsLineItemPriceData, + PaymentLinkCreateParamsLineItemPriceDataProductData as PaymentLinkCreateParamsLineItemPriceDataProductData, + PaymentLinkCreateParamsLineItemPriceDataRecurring as PaymentLinkCreateParamsLineItemPriceDataRecurring, + PaymentLinkCreateParamsNameCollection as PaymentLinkCreateParamsNameCollection, + PaymentLinkCreateParamsNameCollectionBusiness as PaymentLinkCreateParamsNameCollectionBusiness, + PaymentLinkCreateParamsNameCollectionIndividual as PaymentLinkCreateParamsNameCollectionIndividual, + PaymentLinkCreateParamsOptionalItem as PaymentLinkCreateParamsOptionalItem, + PaymentLinkCreateParamsOptionalItemAdjustableQuantity as PaymentLinkCreateParamsOptionalItemAdjustableQuantity, + PaymentLinkCreateParamsPaymentIntentData as PaymentLinkCreateParamsPaymentIntentData, + PaymentLinkCreateParamsPhoneNumberCollection as PaymentLinkCreateParamsPhoneNumberCollection, + PaymentLinkCreateParamsRestrictions as PaymentLinkCreateParamsRestrictions, + PaymentLinkCreateParamsRestrictionsCompletedSessions as PaymentLinkCreateParamsRestrictionsCompletedSessions, + PaymentLinkCreateParamsShippingAddressCollection as PaymentLinkCreateParamsShippingAddressCollection, + PaymentLinkCreateParamsShippingOption as PaymentLinkCreateParamsShippingOption, + PaymentLinkCreateParamsSubscriptionData as PaymentLinkCreateParamsSubscriptionData, + PaymentLinkCreateParamsSubscriptionDataInvoiceSettings as PaymentLinkCreateParamsSubscriptionDataInvoiceSettings, + PaymentLinkCreateParamsSubscriptionDataInvoiceSettingsIssuer as PaymentLinkCreateParamsSubscriptionDataInvoiceSettingsIssuer, + PaymentLinkCreateParamsSubscriptionDataTrialSettings as PaymentLinkCreateParamsSubscriptionDataTrialSettings, + PaymentLinkCreateParamsSubscriptionDataTrialSettingsEndBehavior as PaymentLinkCreateParamsSubscriptionDataTrialSettingsEndBehavior, + PaymentLinkCreateParamsTaxIdCollection as PaymentLinkCreateParamsTaxIdCollection, + PaymentLinkCreateParamsTransferData as PaymentLinkCreateParamsTransferData, + ) + from stripe.params._payment_link_line_item_list_params import ( + PaymentLinkLineItemListParams as PaymentLinkLineItemListParams, + ) + from stripe.params._payment_link_list_line_items_params import ( + PaymentLinkListLineItemsParams as PaymentLinkListLineItemsParams, + ) + from stripe.params._payment_link_list_params import ( + PaymentLinkListParams as PaymentLinkListParams, + ) + from stripe.params._payment_link_modify_params import ( + PaymentLinkModifyParams as PaymentLinkModifyParams, + PaymentLinkModifyParamsAfterCompletion as PaymentLinkModifyParamsAfterCompletion, + PaymentLinkModifyParamsAfterCompletionHostedConfirmation as PaymentLinkModifyParamsAfterCompletionHostedConfirmation, + PaymentLinkModifyParamsAfterCompletionRedirect as PaymentLinkModifyParamsAfterCompletionRedirect, + PaymentLinkModifyParamsAutomaticTax as PaymentLinkModifyParamsAutomaticTax, + PaymentLinkModifyParamsAutomaticTaxLiability as PaymentLinkModifyParamsAutomaticTaxLiability, + PaymentLinkModifyParamsCustomField as PaymentLinkModifyParamsCustomField, + PaymentLinkModifyParamsCustomFieldDropdown as PaymentLinkModifyParamsCustomFieldDropdown, + PaymentLinkModifyParamsCustomFieldDropdownOption as PaymentLinkModifyParamsCustomFieldDropdownOption, + PaymentLinkModifyParamsCustomFieldLabel as PaymentLinkModifyParamsCustomFieldLabel, + PaymentLinkModifyParamsCustomFieldNumeric as PaymentLinkModifyParamsCustomFieldNumeric, + PaymentLinkModifyParamsCustomFieldText as PaymentLinkModifyParamsCustomFieldText, + PaymentLinkModifyParamsCustomText as PaymentLinkModifyParamsCustomText, + PaymentLinkModifyParamsCustomTextAfterSubmit as PaymentLinkModifyParamsCustomTextAfterSubmit, + PaymentLinkModifyParamsCustomTextShippingAddress as PaymentLinkModifyParamsCustomTextShippingAddress, + PaymentLinkModifyParamsCustomTextSubmit as PaymentLinkModifyParamsCustomTextSubmit, + PaymentLinkModifyParamsCustomTextTermsOfServiceAcceptance as PaymentLinkModifyParamsCustomTextTermsOfServiceAcceptance, + PaymentLinkModifyParamsInvoiceCreation as PaymentLinkModifyParamsInvoiceCreation, + PaymentLinkModifyParamsInvoiceCreationInvoiceData as PaymentLinkModifyParamsInvoiceCreationInvoiceData, + PaymentLinkModifyParamsInvoiceCreationInvoiceDataCustomField as PaymentLinkModifyParamsInvoiceCreationInvoiceDataCustomField, + PaymentLinkModifyParamsInvoiceCreationInvoiceDataIssuer as PaymentLinkModifyParamsInvoiceCreationInvoiceDataIssuer, + PaymentLinkModifyParamsInvoiceCreationInvoiceDataRenderingOptions as PaymentLinkModifyParamsInvoiceCreationInvoiceDataRenderingOptions, + PaymentLinkModifyParamsLineItem as PaymentLinkModifyParamsLineItem, + PaymentLinkModifyParamsLineItemAdjustableQuantity as PaymentLinkModifyParamsLineItemAdjustableQuantity, + PaymentLinkModifyParamsNameCollection as PaymentLinkModifyParamsNameCollection, + PaymentLinkModifyParamsNameCollectionBusiness as PaymentLinkModifyParamsNameCollectionBusiness, + PaymentLinkModifyParamsNameCollectionIndividual as PaymentLinkModifyParamsNameCollectionIndividual, + PaymentLinkModifyParamsPaymentIntentData as PaymentLinkModifyParamsPaymentIntentData, + PaymentLinkModifyParamsPhoneNumberCollection as PaymentLinkModifyParamsPhoneNumberCollection, + PaymentLinkModifyParamsRestrictions as PaymentLinkModifyParamsRestrictions, + PaymentLinkModifyParamsRestrictionsCompletedSessions as PaymentLinkModifyParamsRestrictionsCompletedSessions, + PaymentLinkModifyParamsShippingAddressCollection as PaymentLinkModifyParamsShippingAddressCollection, + PaymentLinkModifyParamsSubscriptionData as PaymentLinkModifyParamsSubscriptionData, + PaymentLinkModifyParamsSubscriptionDataInvoiceSettings as PaymentLinkModifyParamsSubscriptionDataInvoiceSettings, + PaymentLinkModifyParamsSubscriptionDataInvoiceSettingsIssuer as PaymentLinkModifyParamsSubscriptionDataInvoiceSettingsIssuer, + PaymentLinkModifyParamsSubscriptionDataTrialSettings as PaymentLinkModifyParamsSubscriptionDataTrialSettings, + PaymentLinkModifyParamsSubscriptionDataTrialSettingsEndBehavior as PaymentLinkModifyParamsSubscriptionDataTrialSettingsEndBehavior, + PaymentLinkModifyParamsTaxIdCollection as PaymentLinkModifyParamsTaxIdCollection, + ) + from stripe.params._payment_link_retrieve_params import ( + PaymentLinkRetrieveParams as PaymentLinkRetrieveParams, + ) + from stripe.params._payment_link_update_params import ( + PaymentLinkUpdateParams as PaymentLinkUpdateParams, + PaymentLinkUpdateParamsAfterCompletion as PaymentLinkUpdateParamsAfterCompletion, + PaymentLinkUpdateParamsAfterCompletionHostedConfirmation as PaymentLinkUpdateParamsAfterCompletionHostedConfirmation, + PaymentLinkUpdateParamsAfterCompletionRedirect as PaymentLinkUpdateParamsAfterCompletionRedirect, + PaymentLinkUpdateParamsAutomaticTax as PaymentLinkUpdateParamsAutomaticTax, + PaymentLinkUpdateParamsAutomaticTaxLiability as PaymentLinkUpdateParamsAutomaticTaxLiability, + PaymentLinkUpdateParamsCustomField as PaymentLinkUpdateParamsCustomField, + PaymentLinkUpdateParamsCustomFieldDropdown as PaymentLinkUpdateParamsCustomFieldDropdown, + PaymentLinkUpdateParamsCustomFieldDropdownOption as PaymentLinkUpdateParamsCustomFieldDropdownOption, + PaymentLinkUpdateParamsCustomFieldLabel as PaymentLinkUpdateParamsCustomFieldLabel, + PaymentLinkUpdateParamsCustomFieldNumeric as PaymentLinkUpdateParamsCustomFieldNumeric, + PaymentLinkUpdateParamsCustomFieldText as PaymentLinkUpdateParamsCustomFieldText, + PaymentLinkUpdateParamsCustomText as PaymentLinkUpdateParamsCustomText, + PaymentLinkUpdateParamsCustomTextAfterSubmit as PaymentLinkUpdateParamsCustomTextAfterSubmit, + PaymentLinkUpdateParamsCustomTextShippingAddress as PaymentLinkUpdateParamsCustomTextShippingAddress, + PaymentLinkUpdateParamsCustomTextSubmit as PaymentLinkUpdateParamsCustomTextSubmit, + PaymentLinkUpdateParamsCustomTextTermsOfServiceAcceptance as PaymentLinkUpdateParamsCustomTextTermsOfServiceAcceptance, + PaymentLinkUpdateParamsInvoiceCreation as PaymentLinkUpdateParamsInvoiceCreation, + PaymentLinkUpdateParamsInvoiceCreationInvoiceData as PaymentLinkUpdateParamsInvoiceCreationInvoiceData, + PaymentLinkUpdateParamsInvoiceCreationInvoiceDataCustomField as PaymentLinkUpdateParamsInvoiceCreationInvoiceDataCustomField, + PaymentLinkUpdateParamsInvoiceCreationInvoiceDataIssuer as PaymentLinkUpdateParamsInvoiceCreationInvoiceDataIssuer, + PaymentLinkUpdateParamsInvoiceCreationInvoiceDataRenderingOptions as PaymentLinkUpdateParamsInvoiceCreationInvoiceDataRenderingOptions, + PaymentLinkUpdateParamsLineItem as PaymentLinkUpdateParamsLineItem, + PaymentLinkUpdateParamsLineItemAdjustableQuantity as PaymentLinkUpdateParamsLineItemAdjustableQuantity, + PaymentLinkUpdateParamsNameCollection as PaymentLinkUpdateParamsNameCollection, + PaymentLinkUpdateParamsNameCollectionBusiness as PaymentLinkUpdateParamsNameCollectionBusiness, + PaymentLinkUpdateParamsNameCollectionIndividual as PaymentLinkUpdateParamsNameCollectionIndividual, + PaymentLinkUpdateParamsPaymentIntentData as PaymentLinkUpdateParamsPaymentIntentData, + PaymentLinkUpdateParamsPhoneNumberCollection as PaymentLinkUpdateParamsPhoneNumberCollection, + PaymentLinkUpdateParamsRestrictions as PaymentLinkUpdateParamsRestrictions, + PaymentLinkUpdateParamsRestrictionsCompletedSessions as PaymentLinkUpdateParamsRestrictionsCompletedSessions, + PaymentLinkUpdateParamsShippingAddressCollection as PaymentLinkUpdateParamsShippingAddressCollection, + PaymentLinkUpdateParamsSubscriptionData as PaymentLinkUpdateParamsSubscriptionData, + PaymentLinkUpdateParamsSubscriptionDataInvoiceSettings as PaymentLinkUpdateParamsSubscriptionDataInvoiceSettings, + PaymentLinkUpdateParamsSubscriptionDataInvoiceSettingsIssuer as PaymentLinkUpdateParamsSubscriptionDataInvoiceSettingsIssuer, + PaymentLinkUpdateParamsSubscriptionDataTrialSettings as PaymentLinkUpdateParamsSubscriptionDataTrialSettings, + PaymentLinkUpdateParamsSubscriptionDataTrialSettingsEndBehavior as PaymentLinkUpdateParamsSubscriptionDataTrialSettingsEndBehavior, + PaymentLinkUpdateParamsTaxIdCollection as PaymentLinkUpdateParamsTaxIdCollection, + ) + from stripe.params._payment_method_attach_params import ( + PaymentMethodAttachParams as PaymentMethodAttachParams, + ) + from stripe.params._payment_method_configuration_create_params import ( + PaymentMethodConfigurationCreateParams as PaymentMethodConfigurationCreateParams, + PaymentMethodConfigurationCreateParamsAcssDebit as PaymentMethodConfigurationCreateParamsAcssDebit, + PaymentMethodConfigurationCreateParamsAcssDebitDisplayPreference as PaymentMethodConfigurationCreateParamsAcssDebitDisplayPreference, + PaymentMethodConfigurationCreateParamsAffirm as PaymentMethodConfigurationCreateParamsAffirm, + PaymentMethodConfigurationCreateParamsAffirmDisplayPreference as PaymentMethodConfigurationCreateParamsAffirmDisplayPreference, + PaymentMethodConfigurationCreateParamsAfterpayClearpay as PaymentMethodConfigurationCreateParamsAfterpayClearpay, + PaymentMethodConfigurationCreateParamsAfterpayClearpayDisplayPreference as PaymentMethodConfigurationCreateParamsAfterpayClearpayDisplayPreference, + PaymentMethodConfigurationCreateParamsAlipay as PaymentMethodConfigurationCreateParamsAlipay, + PaymentMethodConfigurationCreateParamsAlipayDisplayPreference as PaymentMethodConfigurationCreateParamsAlipayDisplayPreference, + PaymentMethodConfigurationCreateParamsAlma as PaymentMethodConfigurationCreateParamsAlma, + PaymentMethodConfigurationCreateParamsAlmaDisplayPreference as PaymentMethodConfigurationCreateParamsAlmaDisplayPreference, + PaymentMethodConfigurationCreateParamsAmazonPay as PaymentMethodConfigurationCreateParamsAmazonPay, + PaymentMethodConfigurationCreateParamsAmazonPayDisplayPreference as PaymentMethodConfigurationCreateParamsAmazonPayDisplayPreference, + PaymentMethodConfigurationCreateParamsApplePay as PaymentMethodConfigurationCreateParamsApplePay, + PaymentMethodConfigurationCreateParamsApplePayDisplayPreference as PaymentMethodConfigurationCreateParamsApplePayDisplayPreference, + PaymentMethodConfigurationCreateParamsApplePayLater as PaymentMethodConfigurationCreateParamsApplePayLater, + PaymentMethodConfigurationCreateParamsApplePayLaterDisplayPreference as PaymentMethodConfigurationCreateParamsApplePayLaterDisplayPreference, + PaymentMethodConfigurationCreateParamsAuBecsDebit as PaymentMethodConfigurationCreateParamsAuBecsDebit, + PaymentMethodConfigurationCreateParamsAuBecsDebitDisplayPreference as PaymentMethodConfigurationCreateParamsAuBecsDebitDisplayPreference, + PaymentMethodConfigurationCreateParamsBacsDebit as PaymentMethodConfigurationCreateParamsBacsDebit, + PaymentMethodConfigurationCreateParamsBacsDebitDisplayPreference as PaymentMethodConfigurationCreateParamsBacsDebitDisplayPreference, + PaymentMethodConfigurationCreateParamsBancontact as PaymentMethodConfigurationCreateParamsBancontact, + PaymentMethodConfigurationCreateParamsBancontactDisplayPreference as PaymentMethodConfigurationCreateParamsBancontactDisplayPreference, + PaymentMethodConfigurationCreateParamsBillie as PaymentMethodConfigurationCreateParamsBillie, + PaymentMethodConfigurationCreateParamsBillieDisplayPreference as PaymentMethodConfigurationCreateParamsBillieDisplayPreference, + PaymentMethodConfigurationCreateParamsBlik as PaymentMethodConfigurationCreateParamsBlik, + PaymentMethodConfigurationCreateParamsBlikDisplayPreference as PaymentMethodConfigurationCreateParamsBlikDisplayPreference, + PaymentMethodConfigurationCreateParamsBoleto as PaymentMethodConfigurationCreateParamsBoleto, + PaymentMethodConfigurationCreateParamsBoletoDisplayPreference as PaymentMethodConfigurationCreateParamsBoletoDisplayPreference, + PaymentMethodConfigurationCreateParamsCard as PaymentMethodConfigurationCreateParamsCard, + PaymentMethodConfigurationCreateParamsCardDisplayPreference as PaymentMethodConfigurationCreateParamsCardDisplayPreference, + PaymentMethodConfigurationCreateParamsCartesBancaires as PaymentMethodConfigurationCreateParamsCartesBancaires, + PaymentMethodConfigurationCreateParamsCartesBancairesDisplayPreference as PaymentMethodConfigurationCreateParamsCartesBancairesDisplayPreference, + PaymentMethodConfigurationCreateParamsCashapp as PaymentMethodConfigurationCreateParamsCashapp, + PaymentMethodConfigurationCreateParamsCashappDisplayPreference as PaymentMethodConfigurationCreateParamsCashappDisplayPreference, + PaymentMethodConfigurationCreateParamsCrypto as PaymentMethodConfigurationCreateParamsCrypto, + PaymentMethodConfigurationCreateParamsCryptoDisplayPreference as PaymentMethodConfigurationCreateParamsCryptoDisplayPreference, + PaymentMethodConfigurationCreateParamsCustomerBalance as PaymentMethodConfigurationCreateParamsCustomerBalance, + PaymentMethodConfigurationCreateParamsCustomerBalanceDisplayPreference as PaymentMethodConfigurationCreateParamsCustomerBalanceDisplayPreference, + PaymentMethodConfigurationCreateParamsEps as PaymentMethodConfigurationCreateParamsEps, + PaymentMethodConfigurationCreateParamsEpsDisplayPreference as PaymentMethodConfigurationCreateParamsEpsDisplayPreference, + PaymentMethodConfigurationCreateParamsFpx as PaymentMethodConfigurationCreateParamsFpx, + PaymentMethodConfigurationCreateParamsFpxDisplayPreference as PaymentMethodConfigurationCreateParamsFpxDisplayPreference, + PaymentMethodConfigurationCreateParamsFrMealVoucherConecs as PaymentMethodConfigurationCreateParamsFrMealVoucherConecs, + PaymentMethodConfigurationCreateParamsFrMealVoucherConecsDisplayPreference as PaymentMethodConfigurationCreateParamsFrMealVoucherConecsDisplayPreference, + PaymentMethodConfigurationCreateParamsGiropay as PaymentMethodConfigurationCreateParamsGiropay, + PaymentMethodConfigurationCreateParamsGiropayDisplayPreference as PaymentMethodConfigurationCreateParamsGiropayDisplayPreference, + PaymentMethodConfigurationCreateParamsGooglePay as PaymentMethodConfigurationCreateParamsGooglePay, + PaymentMethodConfigurationCreateParamsGooglePayDisplayPreference as PaymentMethodConfigurationCreateParamsGooglePayDisplayPreference, + PaymentMethodConfigurationCreateParamsGrabpay as PaymentMethodConfigurationCreateParamsGrabpay, + PaymentMethodConfigurationCreateParamsGrabpayDisplayPreference as PaymentMethodConfigurationCreateParamsGrabpayDisplayPreference, + PaymentMethodConfigurationCreateParamsIdeal as PaymentMethodConfigurationCreateParamsIdeal, + PaymentMethodConfigurationCreateParamsIdealDisplayPreference as PaymentMethodConfigurationCreateParamsIdealDisplayPreference, + PaymentMethodConfigurationCreateParamsJcb as PaymentMethodConfigurationCreateParamsJcb, + PaymentMethodConfigurationCreateParamsJcbDisplayPreference as PaymentMethodConfigurationCreateParamsJcbDisplayPreference, + PaymentMethodConfigurationCreateParamsKakaoPay as PaymentMethodConfigurationCreateParamsKakaoPay, + PaymentMethodConfigurationCreateParamsKakaoPayDisplayPreference as PaymentMethodConfigurationCreateParamsKakaoPayDisplayPreference, + PaymentMethodConfigurationCreateParamsKlarna as PaymentMethodConfigurationCreateParamsKlarna, + PaymentMethodConfigurationCreateParamsKlarnaDisplayPreference as PaymentMethodConfigurationCreateParamsKlarnaDisplayPreference, + PaymentMethodConfigurationCreateParamsKonbini as PaymentMethodConfigurationCreateParamsKonbini, + PaymentMethodConfigurationCreateParamsKonbiniDisplayPreference as PaymentMethodConfigurationCreateParamsKonbiniDisplayPreference, + PaymentMethodConfigurationCreateParamsKrCard as PaymentMethodConfigurationCreateParamsKrCard, + PaymentMethodConfigurationCreateParamsKrCardDisplayPreference as PaymentMethodConfigurationCreateParamsKrCardDisplayPreference, + PaymentMethodConfigurationCreateParamsLink as PaymentMethodConfigurationCreateParamsLink, + PaymentMethodConfigurationCreateParamsLinkDisplayPreference as PaymentMethodConfigurationCreateParamsLinkDisplayPreference, + PaymentMethodConfigurationCreateParamsMbWay as PaymentMethodConfigurationCreateParamsMbWay, + PaymentMethodConfigurationCreateParamsMbWayDisplayPreference as PaymentMethodConfigurationCreateParamsMbWayDisplayPreference, + PaymentMethodConfigurationCreateParamsMobilepay as PaymentMethodConfigurationCreateParamsMobilepay, + PaymentMethodConfigurationCreateParamsMobilepayDisplayPreference as PaymentMethodConfigurationCreateParamsMobilepayDisplayPreference, + PaymentMethodConfigurationCreateParamsMultibanco as PaymentMethodConfigurationCreateParamsMultibanco, + PaymentMethodConfigurationCreateParamsMultibancoDisplayPreference as PaymentMethodConfigurationCreateParamsMultibancoDisplayPreference, + PaymentMethodConfigurationCreateParamsNaverPay as PaymentMethodConfigurationCreateParamsNaverPay, + PaymentMethodConfigurationCreateParamsNaverPayDisplayPreference as PaymentMethodConfigurationCreateParamsNaverPayDisplayPreference, + PaymentMethodConfigurationCreateParamsNzBankAccount as PaymentMethodConfigurationCreateParamsNzBankAccount, + PaymentMethodConfigurationCreateParamsNzBankAccountDisplayPreference as PaymentMethodConfigurationCreateParamsNzBankAccountDisplayPreference, + PaymentMethodConfigurationCreateParamsOxxo as PaymentMethodConfigurationCreateParamsOxxo, + PaymentMethodConfigurationCreateParamsOxxoDisplayPreference as PaymentMethodConfigurationCreateParamsOxxoDisplayPreference, + PaymentMethodConfigurationCreateParamsP24 as PaymentMethodConfigurationCreateParamsP24, + PaymentMethodConfigurationCreateParamsP24DisplayPreference as PaymentMethodConfigurationCreateParamsP24DisplayPreference, + PaymentMethodConfigurationCreateParamsPayByBank as PaymentMethodConfigurationCreateParamsPayByBank, + PaymentMethodConfigurationCreateParamsPayByBankDisplayPreference as PaymentMethodConfigurationCreateParamsPayByBankDisplayPreference, + PaymentMethodConfigurationCreateParamsPayco as PaymentMethodConfigurationCreateParamsPayco, + PaymentMethodConfigurationCreateParamsPaycoDisplayPreference as PaymentMethodConfigurationCreateParamsPaycoDisplayPreference, + PaymentMethodConfigurationCreateParamsPaynow as PaymentMethodConfigurationCreateParamsPaynow, + PaymentMethodConfigurationCreateParamsPaynowDisplayPreference as PaymentMethodConfigurationCreateParamsPaynowDisplayPreference, + PaymentMethodConfigurationCreateParamsPaypal as PaymentMethodConfigurationCreateParamsPaypal, + PaymentMethodConfigurationCreateParamsPaypalDisplayPreference as PaymentMethodConfigurationCreateParamsPaypalDisplayPreference, + PaymentMethodConfigurationCreateParamsPix as PaymentMethodConfigurationCreateParamsPix, + PaymentMethodConfigurationCreateParamsPixDisplayPreference as PaymentMethodConfigurationCreateParamsPixDisplayPreference, + PaymentMethodConfigurationCreateParamsPromptpay as PaymentMethodConfigurationCreateParamsPromptpay, + PaymentMethodConfigurationCreateParamsPromptpayDisplayPreference as PaymentMethodConfigurationCreateParamsPromptpayDisplayPreference, + PaymentMethodConfigurationCreateParamsRevolutPay as PaymentMethodConfigurationCreateParamsRevolutPay, + PaymentMethodConfigurationCreateParamsRevolutPayDisplayPreference as PaymentMethodConfigurationCreateParamsRevolutPayDisplayPreference, + PaymentMethodConfigurationCreateParamsSamsungPay as PaymentMethodConfigurationCreateParamsSamsungPay, + PaymentMethodConfigurationCreateParamsSamsungPayDisplayPreference as PaymentMethodConfigurationCreateParamsSamsungPayDisplayPreference, + PaymentMethodConfigurationCreateParamsSatispay as PaymentMethodConfigurationCreateParamsSatispay, + PaymentMethodConfigurationCreateParamsSatispayDisplayPreference as PaymentMethodConfigurationCreateParamsSatispayDisplayPreference, + PaymentMethodConfigurationCreateParamsSepaDebit as PaymentMethodConfigurationCreateParamsSepaDebit, + PaymentMethodConfigurationCreateParamsSepaDebitDisplayPreference as PaymentMethodConfigurationCreateParamsSepaDebitDisplayPreference, + PaymentMethodConfigurationCreateParamsSofort as PaymentMethodConfigurationCreateParamsSofort, + PaymentMethodConfigurationCreateParamsSofortDisplayPreference as PaymentMethodConfigurationCreateParamsSofortDisplayPreference, + PaymentMethodConfigurationCreateParamsSwish as PaymentMethodConfigurationCreateParamsSwish, + PaymentMethodConfigurationCreateParamsSwishDisplayPreference as PaymentMethodConfigurationCreateParamsSwishDisplayPreference, + PaymentMethodConfigurationCreateParamsTwint as PaymentMethodConfigurationCreateParamsTwint, + PaymentMethodConfigurationCreateParamsTwintDisplayPreference as PaymentMethodConfigurationCreateParamsTwintDisplayPreference, + PaymentMethodConfigurationCreateParamsUsBankAccount as PaymentMethodConfigurationCreateParamsUsBankAccount, + PaymentMethodConfigurationCreateParamsUsBankAccountDisplayPreference as PaymentMethodConfigurationCreateParamsUsBankAccountDisplayPreference, + PaymentMethodConfigurationCreateParamsWechatPay as PaymentMethodConfigurationCreateParamsWechatPay, + PaymentMethodConfigurationCreateParamsWechatPayDisplayPreference as PaymentMethodConfigurationCreateParamsWechatPayDisplayPreference, + PaymentMethodConfigurationCreateParamsZip as PaymentMethodConfigurationCreateParamsZip, + PaymentMethodConfigurationCreateParamsZipDisplayPreference as PaymentMethodConfigurationCreateParamsZipDisplayPreference, + ) + from stripe.params._payment_method_configuration_list_params import ( + PaymentMethodConfigurationListParams as PaymentMethodConfigurationListParams, + ) + from stripe.params._payment_method_configuration_modify_params import ( + PaymentMethodConfigurationModifyParams as PaymentMethodConfigurationModifyParams, + PaymentMethodConfigurationModifyParamsAcssDebit as PaymentMethodConfigurationModifyParamsAcssDebit, + PaymentMethodConfigurationModifyParamsAcssDebitDisplayPreference as PaymentMethodConfigurationModifyParamsAcssDebitDisplayPreference, + PaymentMethodConfigurationModifyParamsAffirm as PaymentMethodConfigurationModifyParamsAffirm, + PaymentMethodConfigurationModifyParamsAffirmDisplayPreference as PaymentMethodConfigurationModifyParamsAffirmDisplayPreference, + PaymentMethodConfigurationModifyParamsAfterpayClearpay as PaymentMethodConfigurationModifyParamsAfterpayClearpay, + PaymentMethodConfigurationModifyParamsAfterpayClearpayDisplayPreference as PaymentMethodConfigurationModifyParamsAfterpayClearpayDisplayPreference, + PaymentMethodConfigurationModifyParamsAlipay as PaymentMethodConfigurationModifyParamsAlipay, + PaymentMethodConfigurationModifyParamsAlipayDisplayPreference as PaymentMethodConfigurationModifyParamsAlipayDisplayPreference, + PaymentMethodConfigurationModifyParamsAlma as PaymentMethodConfigurationModifyParamsAlma, + PaymentMethodConfigurationModifyParamsAlmaDisplayPreference as PaymentMethodConfigurationModifyParamsAlmaDisplayPreference, + PaymentMethodConfigurationModifyParamsAmazonPay as PaymentMethodConfigurationModifyParamsAmazonPay, + PaymentMethodConfigurationModifyParamsAmazonPayDisplayPreference as PaymentMethodConfigurationModifyParamsAmazonPayDisplayPreference, + PaymentMethodConfigurationModifyParamsApplePay as PaymentMethodConfigurationModifyParamsApplePay, + PaymentMethodConfigurationModifyParamsApplePayDisplayPreference as PaymentMethodConfigurationModifyParamsApplePayDisplayPreference, + PaymentMethodConfigurationModifyParamsApplePayLater as PaymentMethodConfigurationModifyParamsApplePayLater, + PaymentMethodConfigurationModifyParamsApplePayLaterDisplayPreference as PaymentMethodConfigurationModifyParamsApplePayLaterDisplayPreference, + PaymentMethodConfigurationModifyParamsAuBecsDebit as PaymentMethodConfigurationModifyParamsAuBecsDebit, + PaymentMethodConfigurationModifyParamsAuBecsDebitDisplayPreference as PaymentMethodConfigurationModifyParamsAuBecsDebitDisplayPreference, + PaymentMethodConfigurationModifyParamsBacsDebit as PaymentMethodConfigurationModifyParamsBacsDebit, + PaymentMethodConfigurationModifyParamsBacsDebitDisplayPreference as PaymentMethodConfigurationModifyParamsBacsDebitDisplayPreference, + PaymentMethodConfigurationModifyParamsBancontact as PaymentMethodConfigurationModifyParamsBancontact, + PaymentMethodConfigurationModifyParamsBancontactDisplayPreference as PaymentMethodConfigurationModifyParamsBancontactDisplayPreference, + PaymentMethodConfigurationModifyParamsBillie as PaymentMethodConfigurationModifyParamsBillie, + PaymentMethodConfigurationModifyParamsBillieDisplayPreference as PaymentMethodConfigurationModifyParamsBillieDisplayPreference, + PaymentMethodConfigurationModifyParamsBlik as PaymentMethodConfigurationModifyParamsBlik, + PaymentMethodConfigurationModifyParamsBlikDisplayPreference as PaymentMethodConfigurationModifyParamsBlikDisplayPreference, + PaymentMethodConfigurationModifyParamsBoleto as PaymentMethodConfigurationModifyParamsBoleto, + PaymentMethodConfigurationModifyParamsBoletoDisplayPreference as PaymentMethodConfigurationModifyParamsBoletoDisplayPreference, + PaymentMethodConfigurationModifyParamsCard as PaymentMethodConfigurationModifyParamsCard, + PaymentMethodConfigurationModifyParamsCardDisplayPreference as PaymentMethodConfigurationModifyParamsCardDisplayPreference, + PaymentMethodConfigurationModifyParamsCartesBancaires as PaymentMethodConfigurationModifyParamsCartesBancaires, + PaymentMethodConfigurationModifyParamsCartesBancairesDisplayPreference as PaymentMethodConfigurationModifyParamsCartesBancairesDisplayPreference, + PaymentMethodConfigurationModifyParamsCashapp as PaymentMethodConfigurationModifyParamsCashapp, + PaymentMethodConfigurationModifyParamsCashappDisplayPreference as PaymentMethodConfigurationModifyParamsCashappDisplayPreference, + PaymentMethodConfigurationModifyParamsCrypto as PaymentMethodConfigurationModifyParamsCrypto, + PaymentMethodConfigurationModifyParamsCryptoDisplayPreference as PaymentMethodConfigurationModifyParamsCryptoDisplayPreference, + PaymentMethodConfigurationModifyParamsCustomerBalance as PaymentMethodConfigurationModifyParamsCustomerBalance, + PaymentMethodConfigurationModifyParamsCustomerBalanceDisplayPreference as PaymentMethodConfigurationModifyParamsCustomerBalanceDisplayPreference, + PaymentMethodConfigurationModifyParamsEps as PaymentMethodConfigurationModifyParamsEps, + PaymentMethodConfigurationModifyParamsEpsDisplayPreference as PaymentMethodConfigurationModifyParamsEpsDisplayPreference, + PaymentMethodConfigurationModifyParamsFpx as PaymentMethodConfigurationModifyParamsFpx, + PaymentMethodConfigurationModifyParamsFpxDisplayPreference as PaymentMethodConfigurationModifyParamsFpxDisplayPreference, + PaymentMethodConfigurationModifyParamsFrMealVoucherConecs as PaymentMethodConfigurationModifyParamsFrMealVoucherConecs, + PaymentMethodConfigurationModifyParamsFrMealVoucherConecsDisplayPreference as PaymentMethodConfigurationModifyParamsFrMealVoucherConecsDisplayPreference, + PaymentMethodConfigurationModifyParamsGiropay as PaymentMethodConfigurationModifyParamsGiropay, + PaymentMethodConfigurationModifyParamsGiropayDisplayPreference as PaymentMethodConfigurationModifyParamsGiropayDisplayPreference, + PaymentMethodConfigurationModifyParamsGooglePay as PaymentMethodConfigurationModifyParamsGooglePay, + PaymentMethodConfigurationModifyParamsGooglePayDisplayPreference as PaymentMethodConfigurationModifyParamsGooglePayDisplayPreference, + PaymentMethodConfigurationModifyParamsGrabpay as PaymentMethodConfigurationModifyParamsGrabpay, + PaymentMethodConfigurationModifyParamsGrabpayDisplayPreference as PaymentMethodConfigurationModifyParamsGrabpayDisplayPreference, + PaymentMethodConfigurationModifyParamsIdeal as PaymentMethodConfigurationModifyParamsIdeal, + PaymentMethodConfigurationModifyParamsIdealDisplayPreference as PaymentMethodConfigurationModifyParamsIdealDisplayPreference, + PaymentMethodConfigurationModifyParamsJcb as PaymentMethodConfigurationModifyParamsJcb, + PaymentMethodConfigurationModifyParamsJcbDisplayPreference as PaymentMethodConfigurationModifyParamsJcbDisplayPreference, + PaymentMethodConfigurationModifyParamsKakaoPay as PaymentMethodConfigurationModifyParamsKakaoPay, + PaymentMethodConfigurationModifyParamsKakaoPayDisplayPreference as PaymentMethodConfigurationModifyParamsKakaoPayDisplayPreference, + PaymentMethodConfigurationModifyParamsKlarna as PaymentMethodConfigurationModifyParamsKlarna, + PaymentMethodConfigurationModifyParamsKlarnaDisplayPreference as PaymentMethodConfigurationModifyParamsKlarnaDisplayPreference, + PaymentMethodConfigurationModifyParamsKonbini as PaymentMethodConfigurationModifyParamsKonbini, + PaymentMethodConfigurationModifyParamsKonbiniDisplayPreference as PaymentMethodConfigurationModifyParamsKonbiniDisplayPreference, + PaymentMethodConfigurationModifyParamsKrCard as PaymentMethodConfigurationModifyParamsKrCard, + PaymentMethodConfigurationModifyParamsKrCardDisplayPreference as PaymentMethodConfigurationModifyParamsKrCardDisplayPreference, + PaymentMethodConfigurationModifyParamsLink as PaymentMethodConfigurationModifyParamsLink, + PaymentMethodConfigurationModifyParamsLinkDisplayPreference as PaymentMethodConfigurationModifyParamsLinkDisplayPreference, + PaymentMethodConfigurationModifyParamsMbWay as PaymentMethodConfigurationModifyParamsMbWay, + PaymentMethodConfigurationModifyParamsMbWayDisplayPreference as PaymentMethodConfigurationModifyParamsMbWayDisplayPreference, + PaymentMethodConfigurationModifyParamsMobilepay as PaymentMethodConfigurationModifyParamsMobilepay, + PaymentMethodConfigurationModifyParamsMobilepayDisplayPreference as PaymentMethodConfigurationModifyParamsMobilepayDisplayPreference, + PaymentMethodConfigurationModifyParamsMultibanco as PaymentMethodConfigurationModifyParamsMultibanco, + PaymentMethodConfigurationModifyParamsMultibancoDisplayPreference as PaymentMethodConfigurationModifyParamsMultibancoDisplayPreference, + PaymentMethodConfigurationModifyParamsNaverPay as PaymentMethodConfigurationModifyParamsNaverPay, + PaymentMethodConfigurationModifyParamsNaverPayDisplayPreference as PaymentMethodConfigurationModifyParamsNaverPayDisplayPreference, + PaymentMethodConfigurationModifyParamsNzBankAccount as PaymentMethodConfigurationModifyParamsNzBankAccount, + PaymentMethodConfigurationModifyParamsNzBankAccountDisplayPreference as PaymentMethodConfigurationModifyParamsNzBankAccountDisplayPreference, + PaymentMethodConfigurationModifyParamsOxxo as PaymentMethodConfigurationModifyParamsOxxo, + PaymentMethodConfigurationModifyParamsOxxoDisplayPreference as PaymentMethodConfigurationModifyParamsOxxoDisplayPreference, + PaymentMethodConfigurationModifyParamsP24 as PaymentMethodConfigurationModifyParamsP24, + PaymentMethodConfigurationModifyParamsP24DisplayPreference as PaymentMethodConfigurationModifyParamsP24DisplayPreference, + PaymentMethodConfigurationModifyParamsPayByBank as PaymentMethodConfigurationModifyParamsPayByBank, + PaymentMethodConfigurationModifyParamsPayByBankDisplayPreference as PaymentMethodConfigurationModifyParamsPayByBankDisplayPreference, + PaymentMethodConfigurationModifyParamsPayco as PaymentMethodConfigurationModifyParamsPayco, + PaymentMethodConfigurationModifyParamsPaycoDisplayPreference as PaymentMethodConfigurationModifyParamsPaycoDisplayPreference, + PaymentMethodConfigurationModifyParamsPaynow as PaymentMethodConfigurationModifyParamsPaynow, + PaymentMethodConfigurationModifyParamsPaynowDisplayPreference as PaymentMethodConfigurationModifyParamsPaynowDisplayPreference, + PaymentMethodConfigurationModifyParamsPaypal as PaymentMethodConfigurationModifyParamsPaypal, + PaymentMethodConfigurationModifyParamsPaypalDisplayPreference as PaymentMethodConfigurationModifyParamsPaypalDisplayPreference, + PaymentMethodConfigurationModifyParamsPix as PaymentMethodConfigurationModifyParamsPix, + PaymentMethodConfigurationModifyParamsPixDisplayPreference as PaymentMethodConfigurationModifyParamsPixDisplayPreference, + PaymentMethodConfigurationModifyParamsPromptpay as PaymentMethodConfigurationModifyParamsPromptpay, + PaymentMethodConfigurationModifyParamsPromptpayDisplayPreference as PaymentMethodConfigurationModifyParamsPromptpayDisplayPreference, + PaymentMethodConfigurationModifyParamsRevolutPay as PaymentMethodConfigurationModifyParamsRevolutPay, + PaymentMethodConfigurationModifyParamsRevolutPayDisplayPreference as PaymentMethodConfigurationModifyParamsRevolutPayDisplayPreference, + PaymentMethodConfigurationModifyParamsSamsungPay as PaymentMethodConfigurationModifyParamsSamsungPay, + PaymentMethodConfigurationModifyParamsSamsungPayDisplayPreference as PaymentMethodConfigurationModifyParamsSamsungPayDisplayPreference, + PaymentMethodConfigurationModifyParamsSatispay as PaymentMethodConfigurationModifyParamsSatispay, + PaymentMethodConfigurationModifyParamsSatispayDisplayPreference as PaymentMethodConfigurationModifyParamsSatispayDisplayPreference, + PaymentMethodConfigurationModifyParamsSepaDebit as PaymentMethodConfigurationModifyParamsSepaDebit, + PaymentMethodConfigurationModifyParamsSepaDebitDisplayPreference as PaymentMethodConfigurationModifyParamsSepaDebitDisplayPreference, + PaymentMethodConfigurationModifyParamsSofort as PaymentMethodConfigurationModifyParamsSofort, + PaymentMethodConfigurationModifyParamsSofortDisplayPreference as PaymentMethodConfigurationModifyParamsSofortDisplayPreference, + PaymentMethodConfigurationModifyParamsSwish as PaymentMethodConfigurationModifyParamsSwish, + PaymentMethodConfigurationModifyParamsSwishDisplayPreference as PaymentMethodConfigurationModifyParamsSwishDisplayPreference, + PaymentMethodConfigurationModifyParamsTwint as PaymentMethodConfigurationModifyParamsTwint, + PaymentMethodConfigurationModifyParamsTwintDisplayPreference as PaymentMethodConfigurationModifyParamsTwintDisplayPreference, + PaymentMethodConfigurationModifyParamsUsBankAccount as PaymentMethodConfigurationModifyParamsUsBankAccount, + PaymentMethodConfigurationModifyParamsUsBankAccountDisplayPreference as PaymentMethodConfigurationModifyParamsUsBankAccountDisplayPreference, + PaymentMethodConfigurationModifyParamsWechatPay as PaymentMethodConfigurationModifyParamsWechatPay, + PaymentMethodConfigurationModifyParamsWechatPayDisplayPreference as PaymentMethodConfigurationModifyParamsWechatPayDisplayPreference, + PaymentMethodConfigurationModifyParamsZip as PaymentMethodConfigurationModifyParamsZip, + PaymentMethodConfigurationModifyParamsZipDisplayPreference as PaymentMethodConfigurationModifyParamsZipDisplayPreference, + ) + from stripe.params._payment_method_configuration_retrieve_params import ( + PaymentMethodConfigurationRetrieveParams as PaymentMethodConfigurationRetrieveParams, + ) + from stripe.params._payment_method_configuration_update_params import ( + PaymentMethodConfigurationUpdateParams as PaymentMethodConfigurationUpdateParams, + PaymentMethodConfigurationUpdateParamsAcssDebit as PaymentMethodConfigurationUpdateParamsAcssDebit, + PaymentMethodConfigurationUpdateParamsAcssDebitDisplayPreference as PaymentMethodConfigurationUpdateParamsAcssDebitDisplayPreference, + PaymentMethodConfigurationUpdateParamsAffirm as PaymentMethodConfigurationUpdateParamsAffirm, + PaymentMethodConfigurationUpdateParamsAffirmDisplayPreference as PaymentMethodConfigurationUpdateParamsAffirmDisplayPreference, + PaymentMethodConfigurationUpdateParamsAfterpayClearpay as PaymentMethodConfigurationUpdateParamsAfterpayClearpay, + PaymentMethodConfigurationUpdateParamsAfterpayClearpayDisplayPreference as PaymentMethodConfigurationUpdateParamsAfterpayClearpayDisplayPreference, + PaymentMethodConfigurationUpdateParamsAlipay as PaymentMethodConfigurationUpdateParamsAlipay, + PaymentMethodConfigurationUpdateParamsAlipayDisplayPreference as PaymentMethodConfigurationUpdateParamsAlipayDisplayPreference, + PaymentMethodConfigurationUpdateParamsAlma as PaymentMethodConfigurationUpdateParamsAlma, + PaymentMethodConfigurationUpdateParamsAlmaDisplayPreference as PaymentMethodConfigurationUpdateParamsAlmaDisplayPreference, + PaymentMethodConfigurationUpdateParamsAmazonPay as PaymentMethodConfigurationUpdateParamsAmazonPay, + PaymentMethodConfigurationUpdateParamsAmazonPayDisplayPreference as PaymentMethodConfigurationUpdateParamsAmazonPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsApplePay as PaymentMethodConfigurationUpdateParamsApplePay, + PaymentMethodConfigurationUpdateParamsApplePayDisplayPreference as PaymentMethodConfigurationUpdateParamsApplePayDisplayPreference, + PaymentMethodConfigurationUpdateParamsApplePayLater as PaymentMethodConfigurationUpdateParamsApplePayLater, + PaymentMethodConfigurationUpdateParamsApplePayLaterDisplayPreference as PaymentMethodConfigurationUpdateParamsApplePayLaterDisplayPreference, + PaymentMethodConfigurationUpdateParamsAuBecsDebit as PaymentMethodConfigurationUpdateParamsAuBecsDebit, + PaymentMethodConfigurationUpdateParamsAuBecsDebitDisplayPreference as PaymentMethodConfigurationUpdateParamsAuBecsDebitDisplayPreference, + PaymentMethodConfigurationUpdateParamsBacsDebit as PaymentMethodConfigurationUpdateParamsBacsDebit, + PaymentMethodConfigurationUpdateParamsBacsDebitDisplayPreference as PaymentMethodConfigurationUpdateParamsBacsDebitDisplayPreference, + PaymentMethodConfigurationUpdateParamsBancontact as PaymentMethodConfigurationUpdateParamsBancontact, + PaymentMethodConfigurationUpdateParamsBancontactDisplayPreference as PaymentMethodConfigurationUpdateParamsBancontactDisplayPreference, + PaymentMethodConfigurationUpdateParamsBillie as PaymentMethodConfigurationUpdateParamsBillie, + PaymentMethodConfigurationUpdateParamsBillieDisplayPreference as PaymentMethodConfigurationUpdateParamsBillieDisplayPreference, + PaymentMethodConfigurationUpdateParamsBlik as PaymentMethodConfigurationUpdateParamsBlik, + PaymentMethodConfigurationUpdateParamsBlikDisplayPreference as PaymentMethodConfigurationUpdateParamsBlikDisplayPreference, + PaymentMethodConfigurationUpdateParamsBoleto as PaymentMethodConfigurationUpdateParamsBoleto, + PaymentMethodConfigurationUpdateParamsBoletoDisplayPreference as PaymentMethodConfigurationUpdateParamsBoletoDisplayPreference, + PaymentMethodConfigurationUpdateParamsCard as PaymentMethodConfigurationUpdateParamsCard, + PaymentMethodConfigurationUpdateParamsCardDisplayPreference as PaymentMethodConfigurationUpdateParamsCardDisplayPreference, + PaymentMethodConfigurationUpdateParamsCartesBancaires as PaymentMethodConfigurationUpdateParamsCartesBancaires, + PaymentMethodConfigurationUpdateParamsCartesBancairesDisplayPreference as PaymentMethodConfigurationUpdateParamsCartesBancairesDisplayPreference, + PaymentMethodConfigurationUpdateParamsCashapp as PaymentMethodConfigurationUpdateParamsCashapp, + PaymentMethodConfigurationUpdateParamsCashappDisplayPreference as PaymentMethodConfigurationUpdateParamsCashappDisplayPreference, + PaymentMethodConfigurationUpdateParamsCrypto as PaymentMethodConfigurationUpdateParamsCrypto, + PaymentMethodConfigurationUpdateParamsCryptoDisplayPreference as PaymentMethodConfigurationUpdateParamsCryptoDisplayPreference, + PaymentMethodConfigurationUpdateParamsCustomerBalance as PaymentMethodConfigurationUpdateParamsCustomerBalance, + PaymentMethodConfigurationUpdateParamsCustomerBalanceDisplayPreference as PaymentMethodConfigurationUpdateParamsCustomerBalanceDisplayPreference, + PaymentMethodConfigurationUpdateParamsEps as PaymentMethodConfigurationUpdateParamsEps, + PaymentMethodConfigurationUpdateParamsEpsDisplayPreference as PaymentMethodConfigurationUpdateParamsEpsDisplayPreference, + PaymentMethodConfigurationUpdateParamsFpx as PaymentMethodConfigurationUpdateParamsFpx, + PaymentMethodConfigurationUpdateParamsFpxDisplayPreference as PaymentMethodConfigurationUpdateParamsFpxDisplayPreference, + PaymentMethodConfigurationUpdateParamsFrMealVoucherConecs as PaymentMethodConfigurationUpdateParamsFrMealVoucherConecs, + PaymentMethodConfigurationUpdateParamsFrMealVoucherConecsDisplayPreference as PaymentMethodConfigurationUpdateParamsFrMealVoucherConecsDisplayPreference, + PaymentMethodConfigurationUpdateParamsGiropay as PaymentMethodConfigurationUpdateParamsGiropay, + PaymentMethodConfigurationUpdateParamsGiropayDisplayPreference as PaymentMethodConfigurationUpdateParamsGiropayDisplayPreference, + PaymentMethodConfigurationUpdateParamsGooglePay as PaymentMethodConfigurationUpdateParamsGooglePay, + PaymentMethodConfigurationUpdateParamsGooglePayDisplayPreference as PaymentMethodConfigurationUpdateParamsGooglePayDisplayPreference, + PaymentMethodConfigurationUpdateParamsGrabpay as PaymentMethodConfigurationUpdateParamsGrabpay, + PaymentMethodConfigurationUpdateParamsGrabpayDisplayPreference as PaymentMethodConfigurationUpdateParamsGrabpayDisplayPreference, + PaymentMethodConfigurationUpdateParamsIdeal as PaymentMethodConfigurationUpdateParamsIdeal, + PaymentMethodConfigurationUpdateParamsIdealDisplayPreference as PaymentMethodConfigurationUpdateParamsIdealDisplayPreference, + PaymentMethodConfigurationUpdateParamsJcb as PaymentMethodConfigurationUpdateParamsJcb, + PaymentMethodConfigurationUpdateParamsJcbDisplayPreference as PaymentMethodConfigurationUpdateParamsJcbDisplayPreference, + PaymentMethodConfigurationUpdateParamsKakaoPay as PaymentMethodConfigurationUpdateParamsKakaoPay, + PaymentMethodConfigurationUpdateParamsKakaoPayDisplayPreference as PaymentMethodConfigurationUpdateParamsKakaoPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsKlarna as PaymentMethodConfigurationUpdateParamsKlarna, + PaymentMethodConfigurationUpdateParamsKlarnaDisplayPreference as PaymentMethodConfigurationUpdateParamsKlarnaDisplayPreference, + PaymentMethodConfigurationUpdateParamsKonbini as PaymentMethodConfigurationUpdateParamsKonbini, + PaymentMethodConfigurationUpdateParamsKonbiniDisplayPreference as PaymentMethodConfigurationUpdateParamsKonbiniDisplayPreference, + PaymentMethodConfigurationUpdateParamsKrCard as PaymentMethodConfigurationUpdateParamsKrCard, + PaymentMethodConfigurationUpdateParamsKrCardDisplayPreference as PaymentMethodConfigurationUpdateParamsKrCardDisplayPreference, + PaymentMethodConfigurationUpdateParamsLink as PaymentMethodConfigurationUpdateParamsLink, + PaymentMethodConfigurationUpdateParamsLinkDisplayPreference as PaymentMethodConfigurationUpdateParamsLinkDisplayPreference, + PaymentMethodConfigurationUpdateParamsMbWay as PaymentMethodConfigurationUpdateParamsMbWay, + PaymentMethodConfigurationUpdateParamsMbWayDisplayPreference as PaymentMethodConfigurationUpdateParamsMbWayDisplayPreference, + PaymentMethodConfigurationUpdateParamsMobilepay as PaymentMethodConfigurationUpdateParamsMobilepay, + PaymentMethodConfigurationUpdateParamsMobilepayDisplayPreference as PaymentMethodConfigurationUpdateParamsMobilepayDisplayPreference, + PaymentMethodConfigurationUpdateParamsMultibanco as PaymentMethodConfigurationUpdateParamsMultibanco, + PaymentMethodConfigurationUpdateParamsMultibancoDisplayPreference as PaymentMethodConfigurationUpdateParamsMultibancoDisplayPreference, + PaymentMethodConfigurationUpdateParamsNaverPay as PaymentMethodConfigurationUpdateParamsNaverPay, + PaymentMethodConfigurationUpdateParamsNaverPayDisplayPreference as PaymentMethodConfigurationUpdateParamsNaverPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsNzBankAccount as PaymentMethodConfigurationUpdateParamsNzBankAccount, + PaymentMethodConfigurationUpdateParamsNzBankAccountDisplayPreference as PaymentMethodConfigurationUpdateParamsNzBankAccountDisplayPreference, + PaymentMethodConfigurationUpdateParamsOxxo as PaymentMethodConfigurationUpdateParamsOxxo, + PaymentMethodConfigurationUpdateParamsOxxoDisplayPreference as PaymentMethodConfigurationUpdateParamsOxxoDisplayPreference, + PaymentMethodConfigurationUpdateParamsP24 as PaymentMethodConfigurationUpdateParamsP24, + PaymentMethodConfigurationUpdateParamsP24DisplayPreference as PaymentMethodConfigurationUpdateParamsP24DisplayPreference, + PaymentMethodConfigurationUpdateParamsPayByBank as PaymentMethodConfigurationUpdateParamsPayByBank, + PaymentMethodConfigurationUpdateParamsPayByBankDisplayPreference as PaymentMethodConfigurationUpdateParamsPayByBankDisplayPreference, + PaymentMethodConfigurationUpdateParamsPayco as PaymentMethodConfigurationUpdateParamsPayco, + PaymentMethodConfigurationUpdateParamsPaycoDisplayPreference as PaymentMethodConfigurationUpdateParamsPaycoDisplayPreference, + PaymentMethodConfigurationUpdateParamsPaynow as PaymentMethodConfigurationUpdateParamsPaynow, + PaymentMethodConfigurationUpdateParamsPaynowDisplayPreference as PaymentMethodConfigurationUpdateParamsPaynowDisplayPreference, + PaymentMethodConfigurationUpdateParamsPaypal as PaymentMethodConfigurationUpdateParamsPaypal, + PaymentMethodConfigurationUpdateParamsPaypalDisplayPreference as PaymentMethodConfigurationUpdateParamsPaypalDisplayPreference, + PaymentMethodConfigurationUpdateParamsPix as PaymentMethodConfigurationUpdateParamsPix, + PaymentMethodConfigurationUpdateParamsPixDisplayPreference as PaymentMethodConfigurationUpdateParamsPixDisplayPreference, + PaymentMethodConfigurationUpdateParamsPromptpay as PaymentMethodConfigurationUpdateParamsPromptpay, + PaymentMethodConfigurationUpdateParamsPromptpayDisplayPreference as PaymentMethodConfigurationUpdateParamsPromptpayDisplayPreference, + PaymentMethodConfigurationUpdateParamsRevolutPay as PaymentMethodConfigurationUpdateParamsRevolutPay, + PaymentMethodConfigurationUpdateParamsRevolutPayDisplayPreference as PaymentMethodConfigurationUpdateParamsRevolutPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsSamsungPay as PaymentMethodConfigurationUpdateParamsSamsungPay, + PaymentMethodConfigurationUpdateParamsSamsungPayDisplayPreference as PaymentMethodConfigurationUpdateParamsSamsungPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsSatispay as PaymentMethodConfigurationUpdateParamsSatispay, + PaymentMethodConfigurationUpdateParamsSatispayDisplayPreference as PaymentMethodConfigurationUpdateParamsSatispayDisplayPreference, + PaymentMethodConfigurationUpdateParamsSepaDebit as PaymentMethodConfigurationUpdateParamsSepaDebit, + PaymentMethodConfigurationUpdateParamsSepaDebitDisplayPreference as PaymentMethodConfigurationUpdateParamsSepaDebitDisplayPreference, + PaymentMethodConfigurationUpdateParamsSofort as PaymentMethodConfigurationUpdateParamsSofort, + PaymentMethodConfigurationUpdateParamsSofortDisplayPreference as PaymentMethodConfigurationUpdateParamsSofortDisplayPreference, + PaymentMethodConfigurationUpdateParamsSwish as PaymentMethodConfigurationUpdateParamsSwish, + PaymentMethodConfigurationUpdateParamsSwishDisplayPreference as PaymentMethodConfigurationUpdateParamsSwishDisplayPreference, + PaymentMethodConfigurationUpdateParamsTwint as PaymentMethodConfigurationUpdateParamsTwint, + PaymentMethodConfigurationUpdateParamsTwintDisplayPreference as PaymentMethodConfigurationUpdateParamsTwintDisplayPreference, + PaymentMethodConfigurationUpdateParamsUsBankAccount as PaymentMethodConfigurationUpdateParamsUsBankAccount, + PaymentMethodConfigurationUpdateParamsUsBankAccountDisplayPreference as PaymentMethodConfigurationUpdateParamsUsBankAccountDisplayPreference, + PaymentMethodConfigurationUpdateParamsWechatPay as PaymentMethodConfigurationUpdateParamsWechatPay, + PaymentMethodConfigurationUpdateParamsWechatPayDisplayPreference as PaymentMethodConfigurationUpdateParamsWechatPayDisplayPreference, + PaymentMethodConfigurationUpdateParamsZip as PaymentMethodConfigurationUpdateParamsZip, + PaymentMethodConfigurationUpdateParamsZipDisplayPreference as PaymentMethodConfigurationUpdateParamsZipDisplayPreference, + ) + from stripe.params._payment_method_create_params import ( + PaymentMethodCreateParams as PaymentMethodCreateParams, + PaymentMethodCreateParamsAcssDebit as PaymentMethodCreateParamsAcssDebit, + PaymentMethodCreateParamsAffirm as PaymentMethodCreateParamsAffirm, + PaymentMethodCreateParamsAfterpayClearpay as PaymentMethodCreateParamsAfterpayClearpay, + PaymentMethodCreateParamsAlipay as PaymentMethodCreateParamsAlipay, + PaymentMethodCreateParamsAlma as PaymentMethodCreateParamsAlma, + PaymentMethodCreateParamsAmazonPay as PaymentMethodCreateParamsAmazonPay, + PaymentMethodCreateParamsAuBecsDebit as PaymentMethodCreateParamsAuBecsDebit, + PaymentMethodCreateParamsBacsDebit as PaymentMethodCreateParamsBacsDebit, + PaymentMethodCreateParamsBancontact as PaymentMethodCreateParamsBancontact, + PaymentMethodCreateParamsBillie as PaymentMethodCreateParamsBillie, + PaymentMethodCreateParamsBillingDetails as PaymentMethodCreateParamsBillingDetails, + PaymentMethodCreateParamsBillingDetailsAddress as PaymentMethodCreateParamsBillingDetailsAddress, + PaymentMethodCreateParamsBlik as PaymentMethodCreateParamsBlik, + PaymentMethodCreateParamsBoleto as PaymentMethodCreateParamsBoleto, + PaymentMethodCreateParamsCard as PaymentMethodCreateParamsCard, + PaymentMethodCreateParamsCardNetworks as PaymentMethodCreateParamsCardNetworks, + PaymentMethodCreateParamsCashapp as PaymentMethodCreateParamsCashapp, + PaymentMethodCreateParamsCrypto as PaymentMethodCreateParamsCrypto, + PaymentMethodCreateParamsCustom as PaymentMethodCreateParamsCustom, + PaymentMethodCreateParamsCustomerBalance as PaymentMethodCreateParamsCustomerBalance, + PaymentMethodCreateParamsEps as PaymentMethodCreateParamsEps, + PaymentMethodCreateParamsFpx as PaymentMethodCreateParamsFpx, + PaymentMethodCreateParamsGiropay as PaymentMethodCreateParamsGiropay, + PaymentMethodCreateParamsGrabpay as PaymentMethodCreateParamsGrabpay, + PaymentMethodCreateParamsIdeal as PaymentMethodCreateParamsIdeal, + PaymentMethodCreateParamsInteracPresent as PaymentMethodCreateParamsInteracPresent, + PaymentMethodCreateParamsKakaoPay as PaymentMethodCreateParamsKakaoPay, + PaymentMethodCreateParamsKlarna as PaymentMethodCreateParamsKlarna, + PaymentMethodCreateParamsKlarnaDob as PaymentMethodCreateParamsKlarnaDob, + PaymentMethodCreateParamsKonbini as PaymentMethodCreateParamsKonbini, + PaymentMethodCreateParamsKrCard as PaymentMethodCreateParamsKrCard, + PaymentMethodCreateParamsLink as PaymentMethodCreateParamsLink, + PaymentMethodCreateParamsMbWay as PaymentMethodCreateParamsMbWay, + PaymentMethodCreateParamsMobilepay as PaymentMethodCreateParamsMobilepay, + PaymentMethodCreateParamsMultibanco as PaymentMethodCreateParamsMultibanco, + PaymentMethodCreateParamsNaverPay as PaymentMethodCreateParamsNaverPay, + PaymentMethodCreateParamsNzBankAccount as PaymentMethodCreateParamsNzBankAccount, + PaymentMethodCreateParamsOxxo as PaymentMethodCreateParamsOxxo, + PaymentMethodCreateParamsP24 as PaymentMethodCreateParamsP24, + PaymentMethodCreateParamsPayByBank as PaymentMethodCreateParamsPayByBank, + PaymentMethodCreateParamsPayco as PaymentMethodCreateParamsPayco, + PaymentMethodCreateParamsPaynow as PaymentMethodCreateParamsPaynow, + PaymentMethodCreateParamsPaypal as PaymentMethodCreateParamsPaypal, + PaymentMethodCreateParamsPix as PaymentMethodCreateParamsPix, + PaymentMethodCreateParamsPromptpay as PaymentMethodCreateParamsPromptpay, + PaymentMethodCreateParamsRadarOptions as PaymentMethodCreateParamsRadarOptions, + PaymentMethodCreateParamsRevolutPay as PaymentMethodCreateParamsRevolutPay, + PaymentMethodCreateParamsSamsungPay as PaymentMethodCreateParamsSamsungPay, + PaymentMethodCreateParamsSatispay as PaymentMethodCreateParamsSatispay, + PaymentMethodCreateParamsSepaDebit as PaymentMethodCreateParamsSepaDebit, + PaymentMethodCreateParamsSofort as PaymentMethodCreateParamsSofort, + PaymentMethodCreateParamsSwish as PaymentMethodCreateParamsSwish, + PaymentMethodCreateParamsTwint as PaymentMethodCreateParamsTwint, + PaymentMethodCreateParamsUsBankAccount as PaymentMethodCreateParamsUsBankAccount, + PaymentMethodCreateParamsWechatPay as PaymentMethodCreateParamsWechatPay, + PaymentMethodCreateParamsZip as PaymentMethodCreateParamsZip, + ) + from stripe.params._payment_method_detach_params import ( + PaymentMethodDetachParams as PaymentMethodDetachParams, + ) + from stripe.params._payment_method_domain_create_params import ( + PaymentMethodDomainCreateParams as PaymentMethodDomainCreateParams, + ) + from stripe.params._payment_method_domain_list_params import ( + PaymentMethodDomainListParams as PaymentMethodDomainListParams, + ) + from stripe.params._payment_method_domain_modify_params import ( + PaymentMethodDomainModifyParams as PaymentMethodDomainModifyParams, + ) + from stripe.params._payment_method_domain_retrieve_params import ( + PaymentMethodDomainRetrieveParams as PaymentMethodDomainRetrieveParams, + ) + from stripe.params._payment_method_domain_update_params import ( + PaymentMethodDomainUpdateParams as PaymentMethodDomainUpdateParams, + ) + from stripe.params._payment_method_domain_validate_params import ( + PaymentMethodDomainValidateParams as PaymentMethodDomainValidateParams, + ) + from stripe.params._payment_method_list_params import ( + PaymentMethodListParams as PaymentMethodListParams, + ) + from stripe.params._payment_method_modify_params import ( + PaymentMethodModifyParams as PaymentMethodModifyParams, + PaymentMethodModifyParamsBillingDetails as PaymentMethodModifyParamsBillingDetails, + PaymentMethodModifyParamsBillingDetailsAddress as PaymentMethodModifyParamsBillingDetailsAddress, + PaymentMethodModifyParamsCard as PaymentMethodModifyParamsCard, + PaymentMethodModifyParamsCardNetworks as PaymentMethodModifyParamsCardNetworks, + PaymentMethodModifyParamsUsBankAccount as PaymentMethodModifyParamsUsBankAccount, + ) + from stripe.params._payment_method_retrieve_params import ( + PaymentMethodRetrieveParams as PaymentMethodRetrieveParams, + ) + from stripe.params._payment_method_update_params import ( + PaymentMethodUpdateParams as PaymentMethodUpdateParams, + PaymentMethodUpdateParamsBillingDetails as PaymentMethodUpdateParamsBillingDetails, + PaymentMethodUpdateParamsBillingDetailsAddress as PaymentMethodUpdateParamsBillingDetailsAddress, + PaymentMethodUpdateParamsCard as PaymentMethodUpdateParamsCard, + PaymentMethodUpdateParamsCardNetworks as PaymentMethodUpdateParamsCardNetworks, + PaymentMethodUpdateParamsUsBankAccount as PaymentMethodUpdateParamsUsBankAccount, + ) + from stripe.params._payment_record_report_payment_attempt_canceled_params import ( + PaymentRecordReportPaymentAttemptCanceledParams as PaymentRecordReportPaymentAttemptCanceledParams, + ) + from stripe.params._payment_record_report_payment_attempt_failed_params import ( + PaymentRecordReportPaymentAttemptFailedParams as PaymentRecordReportPaymentAttemptFailedParams, + ) + from stripe.params._payment_record_report_payment_attempt_guaranteed_params import ( + PaymentRecordReportPaymentAttemptGuaranteedParams as PaymentRecordReportPaymentAttemptGuaranteedParams, + ) + from stripe.params._payment_record_report_payment_attempt_informational_params import ( + PaymentRecordReportPaymentAttemptInformationalParams as PaymentRecordReportPaymentAttemptInformationalParams, + PaymentRecordReportPaymentAttemptInformationalParamsCustomerDetails as PaymentRecordReportPaymentAttemptInformationalParamsCustomerDetails, + PaymentRecordReportPaymentAttemptInformationalParamsShippingDetails as PaymentRecordReportPaymentAttemptInformationalParamsShippingDetails, + PaymentRecordReportPaymentAttemptInformationalParamsShippingDetailsAddress as PaymentRecordReportPaymentAttemptInformationalParamsShippingDetailsAddress, + ) + from stripe.params._payment_record_report_payment_attempt_params import ( + PaymentRecordReportPaymentAttemptParams as PaymentRecordReportPaymentAttemptParams, + PaymentRecordReportPaymentAttemptParamsFailed as PaymentRecordReportPaymentAttemptParamsFailed, + PaymentRecordReportPaymentAttemptParamsGuaranteed as PaymentRecordReportPaymentAttemptParamsGuaranteed, + PaymentRecordReportPaymentAttemptParamsPaymentMethodDetails as PaymentRecordReportPaymentAttemptParamsPaymentMethodDetails, + PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetails as PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetails, + PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetailsAddress as PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetailsAddress, + PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsCustom as PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsCustom, + PaymentRecordReportPaymentAttemptParamsShippingDetails as PaymentRecordReportPaymentAttemptParamsShippingDetails, + PaymentRecordReportPaymentAttemptParamsShippingDetailsAddress as PaymentRecordReportPaymentAttemptParamsShippingDetailsAddress, + ) + from stripe.params._payment_record_report_payment_params import ( + PaymentRecordReportPaymentParams as PaymentRecordReportPaymentParams, + PaymentRecordReportPaymentParamsAmountRequested as PaymentRecordReportPaymentParamsAmountRequested, + PaymentRecordReportPaymentParamsCustomerDetails as PaymentRecordReportPaymentParamsCustomerDetails, + PaymentRecordReportPaymentParamsFailed as PaymentRecordReportPaymentParamsFailed, + PaymentRecordReportPaymentParamsGuaranteed as PaymentRecordReportPaymentParamsGuaranteed, + PaymentRecordReportPaymentParamsPaymentMethodDetails as PaymentRecordReportPaymentParamsPaymentMethodDetails, + PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetails as PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetails, + PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetailsAddress as PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetailsAddress, + PaymentRecordReportPaymentParamsPaymentMethodDetailsCustom as PaymentRecordReportPaymentParamsPaymentMethodDetailsCustom, + PaymentRecordReportPaymentParamsProcessorDetails as PaymentRecordReportPaymentParamsProcessorDetails, + PaymentRecordReportPaymentParamsProcessorDetailsCustom as PaymentRecordReportPaymentParamsProcessorDetailsCustom, + PaymentRecordReportPaymentParamsShippingDetails as PaymentRecordReportPaymentParamsShippingDetails, + PaymentRecordReportPaymentParamsShippingDetailsAddress as PaymentRecordReportPaymentParamsShippingDetailsAddress, + ) + from stripe.params._payment_record_report_refund_params import ( + PaymentRecordReportRefundParams as PaymentRecordReportRefundParams, + PaymentRecordReportRefundParamsAmount as PaymentRecordReportRefundParamsAmount, + PaymentRecordReportRefundParamsProcessorDetails as PaymentRecordReportRefundParamsProcessorDetails, + PaymentRecordReportRefundParamsProcessorDetailsCustom as PaymentRecordReportRefundParamsProcessorDetailsCustom, + PaymentRecordReportRefundParamsRefunded as PaymentRecordReportRefundParamsRefunded, + ) + from stripe.params._payment_record_retrieve_params import ( + PaymentRecordRetrieveParams as PaymentRecordRetrieveParams, + ) + from stripe.params._payout_cancel_params import ( + PayoutCancelParams as PayoutCancelParams, + ) + from stripe.params._payout_create_params import ( + PayoutCreateParams as PayoutCreateParams, + ) + from stripe.params._payout_list_params import ( + PayoutListParams as PayoutListParams, + PayoutListParamsArrivalDate as PayoutListParamsArrivalDate, + PayoutListParamsCreated as PayoutListParamsCreated, + ) + from stripe.params._payout_modify_params import ( + PayoutModifyParams as PayoutModifyParams, + ) + from stripe.params._payout_retrieve_params import ( + PayoutRetrieveParams as PayoutRetrieveParams, + ) + from stripe.params._payout_reverse_params import ( + PayoutReverseParams as PayoutReverseParams, + ) + from stripe.params._payout_update_params import ( + PayoutUpdateParams as PayoutUpdateParams, + ) + from stripe.params._plan_create_params import ( + PlanCreateParams as PlanCreateParams, + PlanCreateParamsProduct as PlanCreateParamsProduct, + PlanCreateParamsTier as PlanCreateParamsTier, + PlanCreateParamsTransformUsage as PlanCreateParamsTransformUsage, + ) + from stripe.params._plan_delete_params import ( + PlanDeleteParams as PlanDeleteParams, + ) + from stripe.params._plan_list_params import ( + PlanListParams as PlanListParams, + PlanListParamsCreated as PlanListParamsCreated, + ) + from stripe.params._plan_modify_params import ( + PlanModifyParams as PlanModifyParams, + ) + from stripe.params._plan_retrieve_params import ( + PlanRetrieveParams as PlanRetrieveParams, + ) + from stripe.params._plan_update_params import ( + PlanUpdateParams as PlanUpdateParams, + ) + from stripe.params._price_create_params import ( + PriceCreateParams as PriceCreateParams, + PriceCreateParamsCurrencyOptions as PriceCreateParamsCurrencyOptions, + PriceCreateParamsCurrencyOptionsCustomUnitAmount as PriceCreateParamsCurrencyOptionsCustomUnitAmount, + PriceCreateParamsCurrencyOptionsTier as PriceCreateParamsCurrencyOptionsTier, + PriceCreateParamsCustomUnitAmount as PriceCreateParamsCustomUnitAmount, + PriceCreateParamsProductData as PriceCreateParamsProductData, + PriceCreateParamsRecurring as PriceCreateParamsRecurring, + PriceCreateParamsTier as PriceCreateParamsTier, + PriceCreateParamsTransformQuantity as PriceCreateParamsTransformQuantity, + ) + from stripe.params._price_list_params import ( + PriceListParams as PriceListParams, + PriceListParamsCreated as PriceListParamsCreated, + PriceListParamsRecurring as PriceListParamsRecurring, + ) + from stripe.params._price_modify_params import ( + PriceModifyParams as PriceModifyParams, + PriceModifyParamsCurrencyOptions as PriceModifyParamsCurrencyOptions, + PriceModifyParamsCurrencyOptionsCustomUnitAmount as PriceModifyParamsCurrencyOptionsCustomUnitAmount, + PriceModifyParamsCurrencyOptionsTier as PriceModifyParamsCurrencyOptionsTier, + ) + from stripe.params._price_retrieve_params import ( + PriceRetrieveParams as PriceRetrieveParams, + ) + from stripe.params._price_search_params import ( + PriceSearchParams as PriceSearchParams, + ) + from stripe.params._price_update_params import ( + PriceUpdateParams as PriceUpdateParams, + PriceUpdateParamsCurrencyOptions as PriceUpdateParamsCurrencyOptions, + PriceUpdateParamsCurrencyOptionsCustomUnitAmount as PriceUpdateParamsCurrencyOptionsCustomUnitAmount, + PriceUpdateParamsCurrencyOptionsTier as PriceUpdateParamsCurrencyOptionsTier, + ) + from stripe.params._product_create_feature_params import ( + ProductCreateFeatureParams as ProductCreateFeatureParams, + ) + from stripe.params._product_create_params import ( + ProductCreateParams as ProductCreateParams, + ProductCreateParamsDefaultPriceData as ProductCreateParamsDefaultPriceData, + ProductCreateParamsDefaultPriceDataCurrencyOptions as ProductCreateParamsDefaultPriceDataCurrencyOptions, + ProductCreateParamsDefaultPriceDataCurrencyOptionsCustomUnitAmount as ProductCreateParamsDefaultPriceDataCurrencyOptionsCustomUnitAmount, + ProductCreateParamsDefaultPriceDataCurrencyOptionsTier as ProductCreateParamsDefaultPriceDataCurrencyOptionsTier, + ProductCreateParamsDefaultPriceDataCustomUnitAmount as ProductCreateParamsDefaultPriceDataCustomUnitAmount, + ProductCreateParamsDefaultPriceDataRecurring as ProductCreateParamsDefaultPriceDataRecurring, + ProductCreateParamsMarketingFeature as ProductCreateParamsMarketingFeature, + ProductCreateParamsPackageDimensions as ProductCreateParamsPackageDimensions, + ) + from stripe.params._product_delete_feature_params import ( + ProductDeleteFeatureParams as ProductDeleteFeatureParams, + ) + from stripe.params._product_delete_params import ( + ProductDeleteParams as ProductDeleteParams, + ) + from stripe.params._product_feature_create_params import ( + ProductFeatureCreateParams as ProductFeatureCreateParams, + ) + from stripe.params._product_feature_delete_params import ( + ProductFeatureDeleteParams as ProductFeatureDeleteParams, + ) + from stripe.params._product_feature_list_params import ( + ProductFeatureListParams as ProductFeatureListParams, + ) + from stripe.params._product_feature_retrieve_params import ( + ProductFeatureRetrieveParams as ProductFeatureRetrieveParams, + ) + from stripe.params._product_list_features_params import ( + ProductListFeaturesParams as ProductListFeaturesParams, + ) + from stripe.params._product_list_params import ( + ProductListParams as ProductListParams, + ProductListParamsCreated as ProductListParamsCreated, + ) + from stripe.params._product_modify_params import ( + ProductModifyParams as ProductModifyParams, + ProductModifyParamsMarketingFeature as ProductModifyParamsMarketingFeature, + ProductModifyParamsPackageDimensions as ProductModifyParamsPackageDimensions, + ) + from stripe.params._product_retrieve_feature_params import ( + ProductRetrieveFeatureParams as ProductRetrieveFeatureParams, + ) + from stripe.params._product_retrieve_params import ( + ProductRetrieveParams as ProductRetrieveParams, + ) + from stripe.params._product_search_params import ( + ProductSearchParams as ProductSearchParams, + ) + from stripe.params._product_update_params import ( + ProductUpdateParams as ProductUpdateParams, + ProductUpdateParamsMarketingFeature as ProductUpdateParamsMarketingFeature, + ProductUpdateParamsPackageDimensions as ProductUpdateParamsPackageDimensions, + ) + from stripe.params._promotion_code_create_params import ( + PromotionCodeCreateParams as PromotionCodeCreateParams, + PromotionCodeCreateParamsPromotion as PromotionCodeCreateParamsPromotion, + PromotionCodeCreateParamsRestrictions as PromotionCodeCreateParamsRestrictions, + PromotionCodeCreateParamsRestrictionsCurrencyOptions as PromotionCodeCreateParamsRestrictionsCurrencyOptions, + ) + from stripe.params._promotion_code_list_params import ( + PromotionCodeListParams as PromotionCodeListParams, + PromotionCodeListParamsCreated as PromotionCodeListParamsCreated, + ) + from stripe.params._promotion_code_modify_params import ( + PromotionCodeModifyParams as PromotionCodeModifyParams, + PromotionCodeModifyParamsRestrictions as PromotionCodeModifyParamsRestrictions, + PromotionCodeModifyParamsRestrictionsCurrencyOptions as PromotionCodeModifyParamsRestrictionsCurrencyOptions, + ) + from stripe.params._promotion_code_retrieve_params import ( + PromotionCodeRetrieveParams as PromotionCodeRetrieveParams, + ) + from stripe.params._promotion_code_update_params import ( + PromotionCodeUpdateParams as PromotionCodeUpdateParams, + PromotionCodeUpdateParamsRestrictions as PromotionCodeUpdateParamsRestrictions, + PromotionCodeUpdateParamsRestrictionsCurrencyOptions as PromotionCodeUpdateParamsRestrictionsCurrencyOptions, + ) + from stripe.params._quote_accept_params import ( + QuoteAcceptParams as QuoteAcceptParams, + ) + from stripe.params._quote_cancel_params import ( + QuoteCancelParams as QuoteCancelParams, + ) + from stripe.params._quote_computed_upfront_line_items_list_params import ( + QuoteComputedUpfrontLineItemsListParams as QuoteComputedUpfrontLineItemsListParams, + ) + from stripe.params._quote_create_params import ( + QuoteCreateParams as QuoteCreateParams, + QuoteCreateParamsAutomaticTax as QuoteCreateParamsAutomaticTax, + QuoteCreateParamsAutomaticTaxLiability as QuoteCreateParamsAutomaticTaxLiability, + QuoteCreateParamsDiscount as QuoteCreateParamsDiscount, + QuoteCreateParamsFromQuote as QuoteCreateParamsFromQuote, + QuoteCreateParamsInvoiceSettings as QuoteCreateParamsInvoiceSettings, + QuoteCreateParamsInvoiceSettingsIssuer as QuoteCreateParamsInvoiceSettingsIssuer, + QuoteCreateParamsLineItem as QuoteCreateParamsLineItem, + QuoteCreateParamsLineItemDiscount as QuoteCreateParamsLineItemDiscount, + QuoteCreateParamsLineItemPriceData as QuoteCreateParamsLineItemPriceData, + QuoteCreateParamsLineItemPriceDataRecurring as QuoteCreateParamsLineItemPriceDataRecurring, + QuoteCreateParamsSubscriptionData as QuoteCreateParamsSubscriptionData, + QuoteCreateParamsSubscriptionDataBillingMode as QuoteCreateParamsSubscriptionDataBillingMode, + QuoteCreateParamsSubscriptionDataBillingModeFlexible as QuoteCreateParamsSubscriptionDataBillingModeFlexible, + QuoteCreateParamsTransferData as QuoteCreateParamsTransferData, + ) + from stripe.params._quote_finalize_quote_params import ( + QuoteFinalizeQuoteParams as QuoteFinalizeQuoteParams, + ) + from stripe.params._quote_line_item_list_params import ( + QuoteLineItemListParams as QuoteLineItemListParams, + ) + from stripe.params._quote_list_computed_upfront_line_items_params import ( + QuoteListComputedUpfrontLineItemsParams as QuoteListComputedUpfrontLineItemsParams, + ) + from stripe.params._quote_list_line_items_params import ( + QuoteListLineItemsParams as QuoteListLineItemsParams, + ) + from stripe.params._quote_list_params import ( + QuoteListParams as QuoteListParams, + ) + from stripe.params._quote_modify_params import ( + QuoteModifyParams as QuoteModifyParams, + QuoteModifyParamsAutomaticTax as QuoteModifyParamsAutomaticTax, + QuoteModifyParamsAutomaticTaxLiability as QuoteModifyParamsAutomaticTaxLiability, + QuoteModifyParamsDiscount as QuoteModifyParamsDiscount, + QuoteModifyParamsInvoiceSettings as QuoteModifyParamsInvoiceSettings, + QuoteModifyParamsInvoiceSettingsIssuer as QuoteModifyParamsInvoiceSettingsIssuer, + QuoteModifyParamsLineItem as QuoteModifyParamsLineItem, + QuoteModifyParamsLineItemDiscount as QuoteModifyParamsLineItemDiscount, + QuoteModifyParamsLineItemPriceData as QuoteModifyParamsLineItemPriceData, + QuoteModifyParamsLineItemPriceDataRecurring as QuoteModifyParamsLineItemPriceDataRecurring, + QuoteModifyParamsSubscriptionData as QuoteModifyParamsSubscriptionData, + QuoteModifyParamsTransferData as QuoteModifyParamsTransferData, + ) + from stripe.params._quote_pdf_params import ( + QuotePdfParams as QuotePdfParams, + ) + from stripe.params._quote_retrieve_params import ( + QuoteRetrieveParams as QuoteRetrieveParams, + ) + from stripe.params._quote_update_params import ( + QuoteUpdateParams as QuoteUpdateParams, + QuoteUpdateParamsAutomaticTax as QuoteUpdateParamsAutomaticTax, + QuoteUpdateParamsAutomaticTaxLiability as QuoteUpdateParamsAutomaticTaxLiability, + QuoteUpdateParamsDiscount as QuoteUpdateParamsDiscount, + QuoteUpdateParamsInvoiceSettings as QuoteUpdateParamsInvoiceSettings, + QuoteUpdateParamsInvoiceSettingsIssuer as QuoteUpdateParamsInvoiceSettingsIssuer, + QuoteUpdateParamsLineItem as QuoteUpdateParamsLineItem, + QuoteUpdateParamsLineItemDiscount as QuoteUpdateParamsLineItemDiscount, + QuoteUpdateParamsLineItemPriceData as QuoteUpdateParamsLineItemPriceData, + QuoteUpdateParamsLineItemPriceDataRecurring as QuoteUpdateParamsLineItemPriceDataRecurring, + QuoteUpdateParamsSubscriptionData as QuoteUpdateParamsSubscriptionData, + QuoteUpdateParamsTransferData as QuoteUpdateParamsTransferData, + ) + from stripe.params._refund_cancel_params import ( + RefundCancelParams as RefundCancelParams, + ) + from stripe.params._refund_create_params import ( + RefundCreateParams as RefundCreateParams, + ) + from stripe.params._refund_expire_params import ( + RefundExpireParams as RefundExpireParams, + ) + from stripe.params._refund_list_params import ( + RefundListParams as RefundListParams, + RefundListParamsCreated as RefundListParamsCreated, + ) + from stripe.params._refund_modify_params import ( + RefundModifyParams as RefundModifyParams, + ) + from stripe.params._refund_retrieve_params import ( + RefundRetrieveParams as RefundRetrieveParams, + ) + from stripe.params._refund_update_params import ( + RefundUpdateParams as RefundUpdateParams, + ) + from stripe.params._review_approve_params import ( + ReviewApproveParams as ReviewApproveParams, + ) + from stripe.params._review_list_params import ( + ReviewListParams as ReviewListParams, + ReviewListParamsCreated as ReviewListParamsCreated, + ) + from stripe.params._review_retrieve_params import ( + ReviewRetrieveParams as ReviewRetrieveParams, + ) + from stripe.params._setup_attempt_list_params import ( + SetupAttemptListParams as SetupAttemptListParams, + SetupAttemptListParamsCreated as SetupAttemptListParamsCreated, + ) + from stripe.params._setup_intent_cancel_params import ( + SetupIntentCancelParams as SetupIntentCancelParams, + ) + from stripe.params._setup_intent_confirm_params import ( + SetupIntentConfirmParams as SetupIntentConfirmParams, + SetupIntentConfirmParamsMandateData as SetupIntentConfirmParamsMandateData, + SetupIntentConfirmParamsMandateDataCustomerAcceptance as SetupIntentConfirmParamsMandateDataCustomerAcceptance, + SetupIntentConfirmParamsMandateDataCustomerAcceptanceOffline as SetupIntentConfirmParamsMandateDataCustomerAcceptanceOffline, + SetupIntentConfirmParamsMandateDataCustomerAcceptanceOnline as SetupIntentConfirmParamsMandateDataCustomerAcceptanceOnline, + SetupIntentConfirmParamsPaymentMethodData as SetupIntentConfirmParamsPaymentMethodData, + SetupIntentConfirmParamsPaymentMethodDataAcssDebit as SetupIntentConfirmParamsPaymentMethodDataAcssDebit, + SetupIntentConfirmParamsPaymentMethodDataAffirm as SetupIntentConfirmParamsPaymentMethodDataAffirm, + SetupIntentConfirmParamsPaymentMethodDataAfterpayClearpay as SetupIntentConfirmParamsPaymentMethodDataAfterpayClearpay, + SetupIntentConfirmParamsPaymentMethodDataAlipay as SetupIntentConfirmParamsPaymentMethodDataAlipay, + SetupIntentConfirmParamsPaymentMethodDataAlma as SetupIntentConfirmParamsPaymentMethodDataAlma, + SetupIntentConfirmParamsPaymentMethodDataAmazonPay as SetupIntentConfirmParamsPaymentMethodDataAmazonPay, + SetupIntentConfirmParamsPaymentMethodDataAuBecsDebit as SetupIntentConfirmParamsPaymentMethodDataAuBecsDebit, + SetupIntentConfirmParamsPaymentMethodDataBacsDebit as SetupIntentConfirmParamsPaymentMethodDataBacsDebit, + SetupIntentConfirmParamsPaymentMethodDataBancontact as SetupIntentConfirmParamsPaymentMethodDataBancontact, + SetupIntentConfirmParamsPaymentMethodDataBillie as SetupIntentConfirmParamsPaymentMethodDataBillie, + SetupIntentConfirmParamsPaymentMethodDataBillingDetails as SetupIntentConfirmParamsPaymentMethodDataBillingDetails, + SetupIntentConfirmParamsPaymentMethodDataBillingDetailsAddress as SetupIntentConfirmParamsPaymentMethodDataBillingDetailsAddress, + SetupIntentConfirmParamsPaymentMethodDataBlik as SetupIntentConfirmParamsPaymentMethodDataBlik, + SetupIntentConfirmParamsPaymentMethodDataBoleto as SetupIntentConfirmParamsPaymentMethodDataBoleto, + SetupIntentConfirmParamsPaymentMethodDataCashapp as SetupIntentConfirmParamsPaymentMethodDataCashapp, + SetupIntentConfirmParamsPaymentMethodDataCrypto as SetupIntentConfirmParamsPaymentMethodDataCrypto, + SetupIntentConfirmParamsPaymentMethodDataCustomerBalance as SetupIntentConfirmParamsPaymentMethodDataCustomerBalance, + SetupIntentConfirmParamsPaymentMethodDataEps as SetupIntentConfirmParamsPaymentMethodDataEps, + SetupIntentConfirmParamsPaymentMethodDataFpx as SetupIntentConfirmParamsPaymentMethodDataFpx, + SetupIntentConfirmParamsPaymentMethodDataGiropay as SetupIntentConfirmParamsPaymentMethodDataGiropay, + SetupIntentConfirmParamsPaymentMethodDataGrabpay as SetupIntentConfirmParamsPaymentMethodDataGrabpay, + SetupIntentConfirmParamsPaymentMethodDataIdeal as SetupIntentConfirmParamsPaymentMethodDataIdeal, + SetupIntentConfirmParamsPaymentMethodDataInteracPresent as SetupIntentConfirmParamsPaymentMethodDataInteracPresent, + SetupIntentConfirmParamsPaymentMethodDataKakaoPay as SetupIntentConfirmParamsPaymentMethodDataKakaoPay, + SetupIntentConfirmParamsPaymentMethodDataKlarna as SetupIntentConfirmParamsPaymentMethodDataKlarna, + SetupIntentConfirmParamsPaymentMethodDataKlarnaDob as SetupIntentConfirmParamsPaymentMethodDataKlarnaDob, + SetupIntentConfirmParamsPaymentMethodDataKonbini as SetupIntentConfirmParamsPaymentMethodDataKonbini, + SetupIntentConfirmParamsPaymentMethodDataKrCard as SetupIntentConfirmParamsPaymentMethodDataKrCard, + SetupIntentConfirmParamsPaymentMethodDataLink as SetupIntentConfirmParamsPaymentMethodDataLink, + SetupIntentConfirmParamsPaymentMethodDataMbWay as SetupIntentConfirmParamsPaymentMethodDataMbWay, + SetupIntentConfirmParamsPaymentMethodDataMobilepay as SetupIntentConfirmParamsPaymentMethodDataMobilepay, + SetupIntentConfirmParamsPaymentMethodDataMultibanco as SetupIntentConfirmParamsPaymentMethodDataMultibanco, + SetupIntentConfirmParamsPaymentMethodDataNaverPay as SetupIntentConfirmParamsPaymentMethodDataNaverPay, + SetupIntentConfirmParamsPaymentMethodDataNzBankAccount as SetupIntentConfirmParamsPaymentMethodDataNzBankAccount, + SetupIntentConfirmParamsPaymentMethodDataOxxo as SetupIntentConfirmParamsPaymentMethodDataOxxo, + SetupIntentConfirmParamsPaymentMethodDataP24 as SetupIntentConfirmParamsPaymentMethodDataP24, + SetupIntentConfirmParamsPaymentMethodDataPayByBank as SetupIntentConfirmParamsPaymentMethodDataPayByBank, + SetupIntentConfirmParamsPaymentMethodDataPayco as SetupIntentConfirmParamsPaymentMethodDataPayco, + SetupIntentConfirmParamsPaymentMethodDataPaynow as SetupIntentConfirmParamsPaymentMethodDataPaynow, + SetupIntentConfirmParamsPaymentMethodDataPaypal as SetupIntentConfirmParamsPaymentMethodDataPaypal, + SetupIntentConfirmParamsPaymentMethodDataPix as SetupIntentConfirmParamsPaymentMethodDataPix, + SetupIntentConfirmParamsPaymentMethodDataPromptpay as SetupIntentConfirmParamsPaymentMethodDataPromptpay, + SetupIntentConfirmParamsPaymentMethodDataRadarOptions as SetupIntentConfirmParamsPaymentMethodDataRadarOptions, + SetupIntentConfirmParamsPaymentMethodDataRevolutPay as SetupIntentConfirmParamsPaymentMethodDataRevolutPay, + SetupIntentConfirmParamsPaymentMethodDataSamsungPay as SetupIntentConfirmParamsPaymentMethodDataSamsungPay, + SetupIntentConfirmParamsPaymentMethodDataSatispay as SetupIntentConfirmParamsPaymentMethodDataSatispay, + SetupIntentConfirmParamsPaymentMethodDataSepaDebit as SetupIntentConfirmParamsPaymentMethodDataSepaDebit, + SetupIntentConfirmParamsPaymentMethodDataSofort as SetupIntentConfirmParamsPaymentMethodDataSofort, + SetupIntentConfirmParamsPaymentMethodDataSwish as SetupIntentConfirmParamsPaymentMethodDataSwish, + SetupIntentConfirmParamsPaymentMethodDataTwint as SetupIntentConfirmParamsPaymentMethodDataTwint, + SetupIntentConfirmParamsPaymentMethodDataUsBankAccount as SetupIntentConfirmParamsPaymentMethodDataUsBankAccount, + SetupIntentConfirmParamsPaymentMethodDataWechatPay as SetupIntentConfirmParamsPaymentMethodDataWechatPay, + SetupIntentConfirmParamsPaymentMethodDataZip as SetupIntentConfirmParamsPaymentMethodDataZip, + SetupIntentConfirmParamsPaymentMethodOptions as SetupIntentConfirmParamsPaymentMethodOptions, + SetupIntentConfirmParamsPaymentMethodOptionsAcssDebit as SetupIntentConfirmParamsPaymentMethodOptionsAcssDebit, + SetupIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions as SetupIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions, + SetupIntentConfirmParamsPaymentMethodOptionsAmazonPay as SetupIntentConfirmParamsPaymentMethodOptionsAmazonPay, + SetupIntentConfirmParamsPaymentMethodOptionsBacsDebit as SetupIntentConfirmParamsPaymentMethodOptionsBacsDebit, + SetupIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions as SetupIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions, + SetupIntentConfirmParamsPaymentMethodOptionsCard as SetupIntentConfirmParamsPaymentMethodOptionsCard, + SetupIntentConfirmParamsPaymentMethodOptionsCardMandateOptions as SetupIntentConfirmParamsPaymentMethodOptionsCardMandateOptions, + SetupIntentConfirmParamsPaymentMethodOptionsCardPresent as SetupIntentConfirmParamsPaymentMethodOptionsCardPresent, + SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure as SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure, + SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + SetupIntentConfirmParamsPaymentMethodOptionsKlarna as SetupIntentConfirmParamsPaymentMethodOptionsKlarna, + SetupIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand as SetupIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand, + SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription as SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription, + SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + SetupIntentConfirmParamsPaymentMethodOptionsLink as SetupIntentConfirmParamsPaymentMethodOptionsLink, + SetupIntentConfirmParamsPaymentMethodOptionsPaypal as SetupIntentConfirmParamsPaymentMethodOptionsPaypal, + SetupIntentConfirmParamsPaymentMethodOptionsSepaDebit as SetupIntentConfirmParamsPaymentMethodOptionsSepaDebit, + SetupIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions as SetupIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions, + SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccount as SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccount, + SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections as SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions as SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions, + SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks as SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks, + ) + from stripe.params._setup_intent_create_params import ( + SetupIntentCreateParams as SetupIntentCreateParams, + SetupIntentCreateParamsAutomaticPaymentMethods as SetupIntentCreateParamsAutomaticPaymentMethods, + SetupIntentCreateParamsMandateData as SetupIntentCreateParamsMandateData, + SetupIntentCreateParamsMandateDataCustomerAcceptance as SetupIntentCreateParamsMandateDataCustomerAcceptance, + SetupIntentCreateParamsMandateDataCustomerAcceptanceOffline as SetupIntentCreateParamsMandateDataCustomerAcceptanceOffline, + SetupIntentCreateParamsMandateDataCustomerAcceptanceOnline as SetupIntentCreateParamsMandateDataCustomerAcceptanceOnline, + SetupIntentCreateParamsPaymentMethodData as SetupIntentCreateParamsPaymentMethodData, + SetupIntentCreateParamsPaymentMethodDataAcssDebit as SetupIntentCreateParamsPaymentMethodDataAcssDebit, + SetupIntentCreateParamsPaymentMethodDataAffirm as SetupIntentCreateParamsPaymentMethodDataAffirm, + SetupIntentCreateParamsPaymentMethodDataAfterpayClearpay as SetupIntentCreateParamsPaymentMethodDataAfterpayClearpay, + SetupIntentCreateParamsPaymentMethodDataAlipay as SetupIntentCreateParamsPaymentMethodDataAlipay, + SetupIntentCreateParamsPaymentMethodDataAlma as SetupIntentCreateParamsPaymentMethodDataAlma, + SetupIntentCreateParamsPaymentMethodDataAmazonPay as SetupIntentCreateParamsPaymentMethodDataAmazonPay, + SetupIntentCreateParamsPaymentMethodDataAuBecsDebit as SetupIntentCreateParamsPaymentMethodDataAuBecsDebit, + SetupIntentCreateParamsPaymentMethodDataBacsDebit as SetupIntentCreateParamsPaymentMethodDataBacsDebit, + SetupIntentCreateParamsPaymentMethodDataBancontact as SetupIntentCreateParamsPaymentMethodDataBancontact, + SetupIntentCreateParamsPaymentMethodDataBillie as SetupIntentCreateParamsPaymentMethodDataBillie, + SetupIntentCreateParamsPaymentMethodDataBillingDetails as SetupIntentCreateParamsPaymentMethodDataBillingDetails, + SetupIntentCreateParamsPaymentMethodDataBillingDetailsAddress as SetupIntentCreateParamsPaymentMethodDataBillingDetailsAddress, + SetupIntentCreateParamsPaymentMethodDataBlik as SetupIntentCreateParamsPaymentMethodDataBlik, + SetupIntentCreateParamsPaymentMethodDataBoleto as SetupIntentCreateParamsPaymentMethodDataBoleto, + SetupIntentCreateParamsPaymentMethodDataCashapp as SetupIntentCreateParamsPaymentMethodDataCashapp, + SetupIntentCreateParamsPaymentMethodDataCrypto as SetupIntentCreateParamsPaymentMethodDataCrypto, + SetupIntentCreateParamsPaymentMethodDataCustomerBalance as SetupIntentCreateParamsPaymentMethodDataCustomerBalance, + SetupIntentCreateParamsPaymentMethodDataEps as SetupIntentCreateParamsPaymentMethodDataEps, + SetupIntentCreateParamsPaymentMethodDataFpx as SetupIntentCreateParamsPaymentMethodDataFpx, + SetupIntentCreateParamsPaymentMethodDataGiropay as SetupIntentCreateParamsPaymentMethodDataGiropay, + SetupIntentCreateParamsPaymentMethodDataGrabpay as SetupIntentCreateParamsPaymentMethodDataGrabpay, + SetupIntentCreateParamsPaymentMethodDataIdeal as SetupIntentCreateParamsPaymentMethodDataIdeal, + SetupIntentCreateParamsPaymentMethodDataInteracPresent as SetupIntentCreateParamsPaymentMethodDataInteracPresent, + SetupIntentCreateParamsPaymentMethodDataKakaoPay as SetupIntentCreateParamsPaymentMethodDataKakaoPay, + SetupIntentCreateParamsPaymentMethodDataKlarna as SetupIntentCreateParamsPaymentMethodDataKlarna, + SetupIntentCreateParamsPaymentMethodDataKlarnaDob as SetupIntentCreateParamsPaymentMethodDataKlarnaDob, + SetupIntentCreateParamsPaymentMethodDataKonbini as SetupIntentCreateParamsPaymentMethodDataKonbini, + SetupIntentCreateParamsPaymentMethodDataKrCard as SetupIntentCreateParamsPaymentMethodDataKrCard, + SetupIntentCreateParamsPaymentMethodDataLink as SetupIntentCreateParamsPaymentMethodDataLink, + SetupIntentCreateParamsPaymentMethodDataMbWay as SetupIntentCreateParamsPaymentMethodDataMbWay, + SetupIntentCreateParamsPaymentMethodDataMobilepay as SetupIntentCreateParamsPaymentMethodDataMobilepay, + SetupIntentCreateParamsPaymentMethodDataMultibanco as SetupIntentCreateParamsPaymentMethodDataMultibanco, + SetupIntentCreateParamsPaymentMethodDataNaverPay as SetupIntentCreateParamsPaymentMethodDataNaverPay, + SetupIntentCreateParamsPaymentMethodDataNzBankAccount as SetupIntentCreateParamsPaymentMethodDataNzBankAccount, + SetupIntentCreateParamsPaymentMethodDataOxxo as SetupIntentCreateParamsPaymentMethodDataOxxo, + SetupIntentCreateParamsPaymentMethodDataP24 as SetupIntentCreateParamsPaymentMethodDataP24, + SetupIntentCreateParamsPaymentMethodDataPayByBank as SetupIntentCreateParamsPaymentMethodDataPayByBank, + SetupIntentCreateParamsPaymentMethodDataPayco as SetupIntentCreateParamsPaymentMethodDataPayco, + SetupIntentCreateParamsPaymentMethodDataPaynow as SetupIntentCreateParamsPaymentMethodDataPaynow, + SetupIntentCreateParamsPaymentMethodDataPaypal as SetupIntentCreateParamsPaymentMethodDataPaypal, + SetupIntentCreateParamsPaymentMethodDataPix as SetupIntentCreateParamsPaymentMethodDataPix, + SetupIntentCreateParamsPaymentMethodDataPromptpay as SetupIntentCreateParamsPaymentMethodDataPromptpay, + SetupIntentCreateParamsPaymentMethodDataRadarOptions as SetupIntentCreateParamsPaymentMethodDataRadarOptions, + SetupIntentCreateParamsPaymentMethodDataRevolutPay as SetupIntentCreateParamsPaymentMethodDataRevolutPay, + SetupIntentCreateParamsPaymentMethodDataSamsungPay as SetupIntentCreateParamsPaymentMethodDataSamsungPay, + SetupIntentCreateParamsPaymentMethodDataSatispay as SetupIntentCreateParamsPaymentMethodDataSatispay, + SetupIntentCreateParamsPaymentMethodDataSepaDebit as SetupIntentCreateParamsPaymentMethodDataSepaDebit, + SetupIntentCreateParamsPaymentMethodDataSofort as SetupIntentCreateParamsPaymentMethodDataSofort, + SetupIntentCreateParamsPaymentMethodDataSwish as SetupIntentCreateParamsPaymentMethodDataSwish, + SetupIntentCreateParamsPaymentMethodDataTwint as SetupIntentCreateParamsPaymentMethodDataTwint, + SetupIntentCreateParamsPaymentMethodDataUsBankAccount as SetupIntentCreateParamsPaymentMethodDataUsBankAccount, + SetupIntentCreateParamsPaymentMethodDataWechatPay as SetupIntentCreateParamsPaymentMethodDataWechatPay, + SetupIntentCreateParamsPaymentMethodDataZip as SetupIntentCreateParamsPaymentMethodDataZip, + SetupIntentCreateParamsPaymentMethodOptions as SetupIntentCreateParamsPaymentMethodOptions, + SetupIntentCreateParamsPaymentMethodOptionsAcssDebit as SetupIntentCreateParamsPaymentMethodOptionsAcssDebit, + SetupIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions as SetupIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions, + SetupIntentCreateParamsPaymentMethodOptionsAmazonPay as SetupIntentCreateParamsPaymentMethodOptionsAmazonPay, + SetupIntentCreateParamsPaymentMethodOptionsBacsDebit as SetupIntentCreateParamsPaymentMethodOptionsBacsDebit, + SetupIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions as SetupIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions, + SetupIntentCreateParamsPaymentMethodOptionsCard as SetupIntentCreateParamsPaymentMethodOptionsCard, + SetupIntentCreateParamsPaymentMethodOptionsCardMandateOptions as SetupIntentCreateParamsPaymentMethodOptionsCardMandateOptions, + SetupIntentCreateParamsPaymentMethodOptionsCardPresent as SetupIntentCreateParamsPaymentMethodOptionsCardPresent, + SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecure as SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecure, + SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + SetupIntentCreateParamsPaymentMethodOptionsKlarna as SetupIntentCreateParamsPaymentMethodOptionsKlarna, + SetupIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand as SetupIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand, + SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscription as SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscription, + SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + SetupIntentCreateParamsPaymentMethodOptionsLink as SetupIntentCreateParamsPaymentMethodOptionsLink, + SetupIntentCreateParamsPaymentMethodOptionsPaypal as SetupIntentCreateParamsPaymentMethodOptionsPaypal, + SetupIntentCreateParamsPaymentMethodOptionsSepaDebit as SetupIntentCreateParamsPaymentMethodOptionsSepaDebit, + SetupIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions as SetupIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions, + SetupIntentCreateParamsPaymentMethodOptionsUsBankAccount as SetupIntentCreateParamsPaymentMethodOptionsUsBankAccount, + SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections as SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions as SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions, + SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks as SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks, + SetupIntentCreateParamsSingleUse as SetupIntentCreateParamsSingleUse, + ) + from stripe.params._setup_intent_list_params import ( + SetupIntentListParams as SetupIntentListParams, + SetupIntentListParamsCreated as SetupIntentListParamsCreated, + ) + from stripe.params._setup_intent_modify_params import ( + SetupIntentModifyParams as SetupIntentModifyParams, + SetupIntentModifyParamsPaymentMethodData as SetupIntentModifyParamsPaymentMethodData, + SetupIntentModifyParamsPaymentMethodDataAcssDebit as SetupIntentModifyParamsPaymentMethodDataAcssDebit, + SetupIntentModifyParamsPaymentMethodDataAffirm as SetupIntentModifyParamsPaymentMethodDataAffirm, + SetupIntentModifyParamsPaymentMethodDataAfterpayClearpay as SetupIntentModifyParamsPaymentMethodDataAfterpayClearpay, + SetupIntentModifyParamsPaymentMethodDataAlipay as SetupIntentModifyParamsPaymentMethodDataAlipay, + SetupIntentModifyParamsPaymentMethodDataAlma as SetupIntentModifyParamsPaymentMethodDataAlma, + SetupIntentModifyParamsPaymentMethodDataAmazonPay as SetupIntentModifyParamsPaymentMethodDataAmazonPay, + SetupIntentModifyParamsPaymentMethodDataAuBecsDebit as SetupIntentModifyParamsPaymentMethodDataAuBecsDebit, + SetupIntentModifyParamsPaymentMethodDataBacsDebit as SetupIntentModifyParamsPaymentMethodDataBacsDebit, + SetupIntentModifyParamsPaymentMethodDataBancontact as SetupIntentModifyParamsPaymentMethodDataBancontact, + SetupIntentModifyParamsPaymentMethodDataBillie as SetupIntentModifyParamsPaymentMethodDataBillie, + SetupIntentModifyParamsPaymentMethodDataBillingDetails as SetupIntentModifyParamsPaymentMethodDataBillingDetails, + SetupIntentModifyParamsPaymentMethodDataBillingDetailsAddress as SetupIntentModifyParamsPaymentMethodDataBillingDetailsAddress, + SetupIntentModifyParamsPaymentMethodDataBlik as SetupIntentModifyParamsPaymentMethodDataBlik, + SetupIntentModifyParamsPaymentMethodDataBoleto as SetupIntentModifyParamsPaymentMethodDataBoleto, + SetupIntentModifyParamsPaymentMethodDataCashapp as SetupIntentModifyParamsPaymentMethodDataCashapp, + SetupIntentModifyParamsPaymentMethodDataCrypto as SetupIntentModifyParamsPaymentMethodDataCrypto, + SetupIntentModifyParamsPaymentMethodDataCustomerBalance as SetupIntentModifyParamsPaymentMethodDataCustomerBalance, + SetupIntentModifyParamsPaymentMethodDataEps as SetupIntentModifyParamsPaymentMethodDataEps, + SetupIntentModifyParamsPaymentMethodDataFpx as SetupIntentModifyParamsPaymentMethodDataFpx, + SetupIntentModifyParamsPaymentMethodDataGiropay as SetupIntentModifyParamsPaymentMethodDataGiropay, + SetupIntentModifyParamsPaymentMethodDataGrabpay as SetupIntentModifyParamsPaymentMethodDataGrabpay, + SetupIntentModifyParamsPaymentMethodDataIdeal as SetupIntentModifyParamsPaymentMethodDataIdeal, + SetupIntentModifyParamsPaymentMethodDataInteracPresent as SetupIntentModifyParamsPaymentMethodDataInteracPresent, + SetupIntentModifyParamsPaymentMethodDataKakaoPay as SetupIntentModifyParamsPaymentMethodDataKakaoPay, + SetupIntentModifyParamsPaymentMethodDataKlarna as SetupIntentModifyParamsPaymentMethodDataKlarna, + SetupIntentModifyParamsPaymentMethodDataKlarnaDob as SetupIntentModifyParamsPaymentMethodDataKlarnaDob, + SetupIntentModifyParamsPaymentMethodDataKonbini as SetupIntentModifyParamsPaymentMethodDataKonbini, + SetupIntentModifyParamsPaymentMethodDataKrCard as SetupIntentModifyParamsPaymentMethodDataKrCard, + SetupIntentModifyParamsPaymentMethodDataLink as SetupIntentModifyParamsPaymentMethodDataLink, + SetupIntentModifyParamsPaymentMethodDataMbWay as SetupIntentModifyParamsPaymentMethodDataMbWay, + SetupIntentModifyParamsPaymentMethodDataMobilepay as SetupIntentModifyParamsPaymentMethodDataMobilepay, + SetupIntentModifyParamsPaymentMethodDataMultibanco as SetupIntentModifyParamsPaymentMethodDataMultibanco, + SetupIntentModifyParamsPaymentMethodDataNaverPay as SetupIntentModifyParamsPaymentMethodDataNaverPay, + SetupIntentModifyParamsPaymentMethodDataNzBankAccount as SetupIntentModifyParamsPaymentMethodDataNzBankAccount, + SetupIntentModifyParamsPaymentMethodDataOxxo as SetupIntentModifyParamsPaymentMethodDataOxxo, + SetupIntentModifyParamsPaymentMethodDataP24 as SetupIntentModifyParamsPaymentMethodDataP24, + SetupIntentModifyParamsPaymentMethodDataPayByBank as SetupIntentModifyParamsPaymentMethodDataPayByBank, + SetupIntentModifyParamsPaymentMethodDataPayco as SetupIntentModifyParamsPaymentMethodDataPayco, + SetupIntentModifyParamsPaymentMethodDataPaynow as SetupIntentModifyParamsPaymentMethodDataPaynow, + SetupIntentModifyParamsPaymentMethodDataPaypal as SetupIntentModifyParamsPaymentMethodDataPaypal, + SetupIntentModifyParamsPaymentMethodDataPix as SetupIntentModifyParamsPaymentMethodDataPix, + SetupIntentModifyParamsPaymentMethodDataPromptpay as SetupIntentModifyParamsPaymentMethodDataPromptpay, + SetupIntentModifyParamsPaymentMethodDataRadarOptions as SetupIntentModifyParamsPaymentMethodDataRadarOptions, + SetupIntentModifyParamsPaymentMethodDataRevolutPay as SetupIntentModifyParamsPaymentMethodDataRevolutPay, + SetupIntentModifyParamsPaymentMethodDataSamsungPay as SetupIntentModifyParamsPaymentMethodDataSamsungPay, + SetupIntentModifyParamsPaymentMethodDataSatispay as SetupIntentModifyParamsPaymentMethodDataSatispay, + SetupIntentModifyParamsPaymentMethodDataSepaDebit as SetupIntentModifyParamsPaymentMethodDataSepaDebit, + SetupIntentModifyParamsPaymentMethodDataSofort as SetupIntentModifyParamsPaymentMethodDataSofort, + SetupIntentModifyParamsPaymentMethodDataSwish as SetupIntentModifyParamsPaymentMethodDataSwish, + SetupIntentModifyParamsPaymentMethodDataTwint as SetupIntentModifyParamsPaymentMethodDataTwint, + SetupIntentModifyParamsPaymentMethodDataUsBankAccount as SetupIntentModifyParamsPaymentMethodDataUsBankAccount, + SetupIntentModifyParamsPaymentMethodDataWechatPay as SetupIntentModifyParamsPaymentMethodDataWechatPay, + SetupIntentModifyParamsPaymentMethodDataZip as SetupIntentModifyParamsPaymentMethodDataZip, + SetupIntentModifyParamsPaymentMethodOptions as SetupIntentModifyParamsPaymentMethodOptions, + SetupIntentModifyParamsPaymentMethodOptionsAcssDebit as SetupIntentModifyParamsPaymentMethodOptionsAcssDebit, + SetupIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions as SetupIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions, + SetupIntentModifyParamsPaymentMethodOptionsAmazonPay as SetupIntentModifyParamsPaymentMethodOptionsAmazonPay, + SetupIntentModifyParamsPaymentMethodOptionsBacsDebit as SetupIntentModifyParamsPaymentMethodOptionsBacsDebit, + SetupIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions as SetupIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions, + SetupIntentModifyParamsPaymentMethodOptionsCard as SetupIntentModifyParamsPaymentMethodOptionsCard, + SetupIntentModifyParamsPaymentMethodOptionsCardMandateOptions as SetupIntentModifyParamsPaymentMethodOptionsCardMandateOptions, + SetupIntentModifyParamsPaymentMethodOptionsCardPresent as SetupIntentModifyParamsPaymentMethodOptionsCardPresent, + SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecure as SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecure, + SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + SetupIntentModifyParamsPaymentMethodOptionsKlarna as SetupIntentModifyParamsPaymentMethodOptionsKlarna, + SetupIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand as SetupIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand, + SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscription as SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscription, + SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + SetupIntentModifyParamsPaymentMethodOptionsLink as SetupIntentModifyParamsPaymentMethodOptionsLink, + SetupIntentModifyParamsPaymentMethodOptionsPaypal as SetupIntentModifyParamsPaymentMethodOptionsPaypal, + SetupIntentModifyParamsPaymentMethodOptionsSepaDebit as SetupIntentModifyParamsPaymentMethodOptionsSepaDebit, + SetupIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions as SetupIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions, + SetupIntentModifyParamsPaymentMethodOptionsUsBankAccount as SetupIntentModifyParamsPaymentMethodOptionsUsBankAccount, + SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections as SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions as SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions, + SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks as SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks, + ) + from stripe.params._setup_intent_retrieve_params import ( + SetupIntentRetrieveParams as SetupIntentRetrieveParams, + ) + from stripe.params._setup_intent_update_params import ( + SetupIntentUpdateParams as SetupIntentUpdateParams, + SetupIntentUpdateParamsPaymentMethodData as SetupIntentUpdateParamsPaymentMethodData, + SetupIntentUpdateParamsPaymentMethodDataAcssDebit as SetupIntentUpdateParamsPaymentMethodDataAcssDebit, + SetupIntentUpdateParamsPaymentMethodDataAffirm as SetupIntentUpdateParamsPaymentMethodDataAffirm, + SetupIntentUpdateParamsPaymentMethodDataAfterpayClearpay as SetupIntentUpdateParamsPaymentMethodDataAfterpayClearpay, + SetupIntentUpdateParamsPaymentMethodDataAlipay as SetupIntentUpdateParamsPaymentMethodDataAlipay, + SetupIntentUpdateParamsPaymentMethodDataAlma as SetupIntentUpdateParamsPaymentMethodDataAlma, + SetupIntentUpdateParamsPaymentMethodDataAmazonPay as SetupIntentUpdateParamsPaymentMethodDataAmazonPay, + SetupIntentUpdateParamsPaymentMethodDataAuBecsDebit as SetupIntentUpdateParamsPaymentMethodDataAuBecsDebit, + SetupIntentUpdateParamsPaymentMethodDataBacsDebit as SetupIntentUpdateParamsPaymentMethodDataBacsDebit, + SetupIntentUpdateParamsPaymentMethodDataBancontact as SetupIntentUpdateParamsPaymentMethodDataBancontact, + SetupIntentUpdateParamsPaymentMethodDataBillie as SetupIntentUpdateParamsPaymentMethodDataBillie, + SetupIntentUpdateParamsPaymentMethodDataBillingDetails as SetupIntentUpdateParamsPaymentMethodDataBillingDetails, + SetupIntentUpdateParamsPaymentMethodDataBillingDetailsAddress as SetupIntentUpdateParamsPaymentMethodDataBillingDetailsAddress, + SetupIntentUpdateParamsPaymentMethodDataBlik as SetupIntentUpdateParamsPaymentMethodDataBlik, + SetupIntentUpdateParamsPaymentMethodDataBoleto as SetupIntentUpdateParamsPaymentMethodDataBoleto, + SetupIntentUpdateParamsPaymentMethodDataCashapp as SetupIntentUpdateParamsPaymentMethodDataCashapp, + SetupIntentUpdateParamsPaymentMethodDataCrypto as SetupIntentUpdateParamsPaymentMethodDataCrypto, + SetupIntentUpdateParamsPaymentMethodDataCustomerBalance as SetupIntentUpdateParamsPaymentMethodDataCustomerBalance, + SetupIntentUpdateParamsPaymentMethodDataEps as SetupIntentUpdateParamsPaymentMethodDataEps, + SetupIntentUpdateParamsPaymentMethodDataFpx as SetupIntentUpdateParamsPaymentMethodDataFpx, + SetupIntentUpdateParamsPaymentMethodDataGiropay as SetupIntentUpdateParamsPaymentMethodDataGiropay, + SetupIntentUpdateParamsPaymentMethodDataGrabpay as SetupIntentUpdateParamsPaymentMethodDataGrabpay, + SetupIntentUpdateParamsPaymentMethodDataIdeal as SetupIntentUpdateParamsPaymentMethodDataIdeal, + SetupIntentUpdateParamsPaymentMethodDataInteracPresent as SetupIntentUpdateParamsPaymentMethodDataInteracPresent, + SetupIntentUpdateParamsPaymentMethodDataKakaoPay as SetupIntentUpdateParamsPaymentMethodDataKakaoPay, + SetupIntentUpdateParamsPaymentMethodDataKlarna as SetupIntentUpdateParamsPaymentMethodDataKlarna, + SetupIntentUpdateParamsPaymentMethodDataKlarnaDob as SetupIntentUpdateParamsPaymentMethodDataKlarnaDob, + SetupIntentUpdateParamsPaymentMethodDataKonbini as SetupIntentUpdateParamsPaymentMethodDataKonbini, + SetupIntentUpdateParamsPaymentMethodDataKrCard as SetupIntentUpdateParamsPaymentMethodDataKrCard, + SetupIntentUpdateParamsPaymentMethodDataLink as SetupIntentUpdateParamsPaymentMethodDataLink, + SetupIntentUpdateParamsPaymentMethodDataMbWay as SetupIntentUpdateParamsPaymentMethodDataMbWay, + SetupIntentUpdateParamsPaymentMethodDataMobilepay as SetupIntentUpdateParamsPaymentMethodDataMobilepay, + SetupIntentUpdateParamsPaymentMethodDataMultibanco as SetupIntentUpdateParamsPaymentMethodDataMultibanco, + SetupIntentUpdateParamsPaymentMethodDataNaverPay as SetupIntentUpdateParamsPaymentMethodDataNaverPay, + SetupIntentUpdateParamsPaymentMethodDataNzBankAccount as SetupIntentUpdateParamsPaymentMethodDataNzBankAccount, + SetupIntentUpdateParamsPaymentMethodDataOxxo as SetupIntentUpdateParamsPaymentMethodDataOxxo, + SetupIntentUpdateParamsPaymentMethodDataP24 as SetupIntentUpdateParamsPaymentMethodDataP24, + SetupIntentUpdateParamsPaymentMethodDataPayByBank as SetupIntentUpdateParamsPaymentMethodDataPayByBank, + SetupIntentUpdateParamsPaymentMethodDataPayco as SetupIntentUpdateParamsPaymentMethodDataPayco, + SetupIntentUpdateParamsPaymentMethodDataPaynow as SetupIntentUpdateParamsPaymentMethodDataPaynow, + SetupIntentUpdateParamsPaymentMethodDataPaypal as SetupIntentUpdateParamsPaymentMethodDataPaypal, + SetupIntentUpdateParamsPaymentMethodDataPix as SetupIntentUpdateParamsPaymentMethodDataPix, + SetupIntentUpdateParamsPaymentMethodDataPromptpay as SetupIntentUpdateParamsPaymentMethodDataPromptpay, + SetupIntentUpdateParamsPaymentMethodDataRadarOptions as SetupIntentUpdateParamsPaymentMethodDataRadarOptions, + SetupIntentUpdateParamsPaymentMethodDataRevolutPay as SetupIntentUpdateParamsPaymentMethodDataRevolutPay, + SetupIntentUpdateParamsPaymentMethodDataSamsungPay as SetupIntentUpdateParamsPaymentMethodDataSamsungPay, + SetupIntentUpdateParamsPaymentMethodDataSatispay as SetupIntentUpdateParamsPaymentMethodDataSatispay, + SetupIntentUpdateParamsPaymentMethodDataSepaDebit as SetupIntentUpdateParamsPaymentMethodDataSepaDebit, + SetupIntentUpdateParamsPaymentMethodDataSofort as SetupIntentUpdateParamsPaymentMethodDataSofort, + SetupIntentUpdateParamsPaymentMethodDataSwish as SetupIntentUpdateParamsPaymentMethodDataSwish, + SetupIntentUpdateParamsPaymentMethodDataTwint as SetupIntentUpdateParamsPaymentMethodDataTwint, + SetupIntentUpdateParamsPaymentMethodDataUsBankAccount as SetupIntentUpdateParamsPaymentMethodDataUsBankAccount, + SetupIntentUpdateParamsPaymentMethodDataWechatPay as SetupIntentUpdateParamsPaymentMethodDataWechatPay, + SetupIntentUpdateParamsPaymentMethodDataZip as SetupIntentUpdateParamsPaymentMethodDataZip, + SetupIntentUpdateParamsPaymentMethodOptions as SetupIntentUpdateParamsPaymentMethodOptions, + SetupIntentUpdateParamsPaymentMethodOptionsAcssDebit as SetupIntentUpdateParamsPaymentMethodOptionsAcssDebit, + SetupIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions as SetupIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions, + SetupIntentUpdateParamsPaymentMethodOptionsAmazonPay as SetupIntentUpdateParamsPaymentMethodOptionsAmazonPay, + SetupIntentUpdateParamsPaymentMethodOptionsBacsDebit as SetupIntentUpdateParamsPaymentMethodOptionsBacsDebit, + SetupIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions as SetupIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions, + SetupIntentUpdateParamsPaymentMethodOptionsCard as SetupIntentUpdateParamsPaymentMethodOptionsCard, + SetupIntentUpdateParamsPaymentMethodOptionsCardMandateOptions as SetupIntentUpdateParamsPaymentMethodOptionsCardMandateOptions, + SetupIntentUpdateParamsPaymentMethodOptionsCardPresent as SetupIntentUpdateParamsPaymentMethodOptionsCardPresent, + SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure as SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure, + SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions as SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions, + SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires as SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires, + SetupIntentUpdateParamsPaymentMethodOptionsKlarna as SetupIntentUpdateParamsPaymentMethodOptionsKlarna, + SetupIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand as SetupIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand, + SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription as SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription, + SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling as SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling, + SetupIntentUpdateParamsPaymentMethodOptionsLink as SetupIntentUpdateParamsPaymentMethodOptionsLink, + SetupIntentUpdateParamsPaymentMethodOptionsPaypal as SetupIntentUpdateParamsPaymentMethodOptionsPaypal, + SetupIntentUpdateParamsPaymentMethodOptionsSepaDebit as SetupIntentUpdateParamsPaymentMethodOptionsSepaDebit, + SetupIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions as SetupIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions, + SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccount as SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccount, + SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections as SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections, + SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions as SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions, + SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks as SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks, + ) + from stripe.params._setup_intent_verify_microdeposits_params import ( + SetupIntentVerifyMicrodepositsParams as SetupIntentVerifyMicrodepositsParams, + ) + from stripe.params._shipping_rate_create_params import ( + ShippingRateCreateParams as ShippingRateCreateParams, + ShippingRateCreateParamsDeliveryEstimate as ShippingRateCreateParamsDeliveryEstimate, + ShippingRateCreateParamsDeliveryEstimateMaximum as ShippingRateCreateParamsDeliveryEstimateMaximum, + ShippingRateCreateParamsDeliveryEstimateMinimum as ShippingRateCreateParamsDeliveryEstimateMinimum, + ShippingRateCreateParamsFixedAmount as ShippingRateCreateParamsFixedAmount, + ShippingRateCreateParamsFixedAmountCurrencyOptions as ShippingRateCreateParamsFixedAmountCurrencyOptions, + ) + from stripe.params._shipping_rate_list_params import ( + ShippingRateListParams as ShippingRateListParams, + ShippingRateListParamsCreated as ShippingRateListParamsCreated, + ) + from stripe.params._shipping_rate_modify_params import ( + ShippingRateModifyParams as ShippingRateModifyParams, + ShippingRateModifyParamsFixedAmount as ShippingRateModifyParamsFixedAmount, + ShippingRateModifyParamsFixedAmountCurrencyOptions as ShippingRateModifyParamsFixedAmountCurrencyOptions, + ) + from stripe.params._shipping_rate_retrieve_params import ( + ShippingRateRetrieveParams as ShippingRateRetrieveParams, + ) + from stripe.params._shipping_rate_update_params import ( + ShippingRateUpdateParams as ShippingRateUpdateParams, + ShippingRateUpdateParamsFixedAmount as ShippingRateUpdateParamsFixedAmount, + ShippingRateUpdateParamsFixedAmountCurrencyOptions as ShippingRateUpdateParamsFixedAmountCurrencyOptions, + ) + from stripe.params._source_create_params import ( + SourceCreateParams as SourceCreateParams, + SourceCreateParamsMandate as SourceCreateParamsMandate, + SourceCreateParamsMandateAcceptance as SourceCreateParamsMandateAcceptance, + SourceCreateParamsMandateAcceptanceOffline as SourceCreateParamsMandateAcceptanceOffline, + SourceCreateParamsMandateAcceptanceOnline as SourceCreateParamsMandateAcceptanceOnline, + SourceCreateParamsOwner as SourceCreateParamsOwner, + SourceCreateParamsOwnerAddress as SourceCreateParamsOwnerAddress, + SourceCreateParamsReceiver as SourceCreateParamsReceiver, + SourceCreateParamsRedirect as SourceCreateParamsRedirect, + SourceCreateParamsSourceOrder as SourceCreateParamsSourceOrder, + SourceCreateParamsSourceOrderItem as SourceCreateParamsSourceOrderItem, + SourceCreateParamsSourceOrderShipping as SourceCreateParamsSourceOrderShipping, + SourceCreateParamsSourceOrderShippingAddress as SourceCreateParamsSourceOrderShippingAddress, + ) + from stripe.params._source_detach_params import ( + SourceDetachParams as SourceDetachParams, + ) + from stripe.params._source_list_source_transactions_params import ( + SourceListSourceTransactionsParams as SourceListSourceTransactionsParams, + ) + from stripe.params._source_modify_params import ( + SourceModifyParams as SourceModifyParams, + SourceModifyParamsMandate as SourceModifyParamsMandate, + SourceModifyParamsMandateAcceptance as SourceModifyParamsMandateAcceptance, + SourceModifyParamsMandateAcceptanceOffline as SourceModifyParamsMandateAcceptanceOffline, + SourceModifyParamsMandateAcceptanceOnline as SourceModifyParamsMandateAcceptanceOnline, + SourceModifyParamsOwner as SourceModifyParamsOwner, + SourceModifyParamsOwnerAddress as SourceModifyParamsOwnerAddress, + SourceModifyParamsSourceOrder as SourceModifyParamsSourceOrder, + SourceModifyParamsSourceOrderItem as SourceModifyParamsSourceOrderItem, + SourceModifyParamsSourceOrderShipping as SourceModifyParamsSourceOrderShipping, + SourceModifyParamsSourceOrderShippingAddress as SourceModifyParamsSourceOrderShippingAddress, + ) + from stripe.params._source_retrieve_params import ( + SourceRetrieveParams as SourceRetrieveParams, + ) + from stripe.params._source_transaction_list_params import ( + SourceTransactionListParams as SourceTransactionListParams, + ) + from stripe.params._source_update_params import ( + SourceUpdateParams as SourceUpdateParams, + SourceUpdateParamsMandate as SourceUpdateParamsMandate, + SourceUpdateParamsMandateAcceptance as SourceUpdateParamsMandateAcceptance, + SourceUpdateParamsMandateAcceptanceOffline as SourceUpdateParamsMandateAcceptanceOffline, + SourceUpdateParamsMandateAcceptanceOnline as SourceUpdateParamsMandateAcceptanceOnline, + SourceUpdateParamsOwner as SourceUpdateParamsOwner, + SourceUpdateParamsOwnerAddress as SourceUpdateParamsOwnerAddress, + SourceUpdateParamsSourceOrder as SourceUpdateParamsSourceOrder, + SourceUpdateParamsSourceOrderItem as SourceUpdateParamsSourceOrderItem, + SourceUpdateParamsSourceOrderShipping as SourceUpdateParamsSourceOrderShipping, + SourceUpdateParamsSourceOrderShippingAddress as SourceUpdateParamsSourceOrderShippingAddress, + ) + from stripe.params._source_verify_params import ( + SourceVerifyParams as SourceVerifyParams, + ) + from stripe.params._subscription_cancel_params import ( + SubscriptionCancelParams as SubscriptionCancelParams, + SubscriptionCancelParamsCancellationDetails as SubscriptionCancelParamsCancellationDetails, + ) + from stripe.params._subscription_create_params import ( + SubscriptionCreateParams as SubscriptionCreateParams, + SubscriptionCreateParamsAddInvoiceItem as SubscriptionCreateParamsAddInvoiceItem, + SubscriptionCreateParamsAddInvoiceItemDiscount as SubscriptionCreateParamsAddInvoiceItemDiscount, + SubscriptionCreateParamsAddInvoiceItemPeriod as SubscriptionCreateParamsAddInvoiceItemPeriod, + SubscriptionCreateParamsAddInvoiceItemPeriodEnd as SubscriptionCreateParamsAddInvoiceItemPeriodEnd, + SubscriptionCreateParamsAddInvoiceItemPeriodStart as SubscriptionCreateParamsAddInvoiceItemPeriodStart, + SubscriptionCreateParamsAddInvoiceItemPriceData as SubscriptionCreateParamsAddInvoiceItemPriceData, + SubscriptionCreateParamsAutomaticTax as SubscriptionCreateParamsAutomaticTax, + SubscriptionCreateParamsAutomaticTaxLiability as SubscriptionCreateParamsAutomaticTaxLiability, + SubscriptionCreateParamsBillingCycleAnchorConfig as SubscriptionCreateParamsBillingCycleAnchorConfig, + SubscriptionCreateParamsBillingMode as SubscriptionCreateParamsBillingMode, + SubscriptionCreateParamsBillingModeFlexible as SubscriptionCreateParamsBillingModeFlexible, + SubscriptionCreateParamsBillingThresholds as SubscriptionCreateParamsBillingThresholds, + SubscriptionCreateParamsDiscount as SubscriptionCreateParamsDiscount, + SubscriptionCreateParamsInvoiceSettings as SubscriptionCreateParamsInvoiceSettings, + SubscriptionCreateParamsInvoiceSettingsIssuer as SubscriptionCreateParamsInvoiceSettingsIssuer, + SubscriptionCreateParamsItem as SubscriptionCreateParamsItem, + SubscriptionCreateParamsItemBillingThresholds as SubscriptionCreateParamsItemBillingThresholds, + SubscriptionCreateParamsItemDiscount as SubscriptionCreateParamsItemDiscount, + SubscriptionCreateParamsItemPriceData as SubscriptionCreateParamsItemPriceData, + SubscriptionCreateParamsItemPriceDataRecurring as SubscriptionCreateParamsItemPriceDataRecurring, + SubscriptionCreateParamsPaymentSettings as SubscriptionCreateParamsPaymentSettings, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptions as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptions, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsBancontact as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsBancontact, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCard as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCard, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsKonbini as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsKonbini, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SubscriptionCreateParamsPendingInvoiceItemInterval as SubscriptionCreateParamsPendingInvoiceItemInterval, + SubscriptionCreateParamsTransferData as SubscriptionCreateParamsTransferData, + SubscriptionCreateParamsTrialSettings as SubscriptionCreateParamsTrialSettings, + SubscriptionCreateParamsTrialSettingsEndBehavior as SubscriptionCreateParamsTrialSettingsEndBehavior, + ) + from stripe.params._subscription_delete_discount_params import ( + SubscriptionDeleteDiscountParams as SubscriptionDeleteDiscountParams, + ) + from stripe.params._subscription_item_create_params import ( + SubscriptionItemCreateParams as SubscriptionItemCreateParams, + SubscriptionItemCreateParamsBillingThresholds as SubscriptionItemCreateParamsBillingThresholds, + SubscriptionItemCreateParamsDiscount as SubscriptionItemCreateParamsDiscount, + SubscriptionItemCreateParamsPriceData as SubscriptionItemCreateParamsPriceData, + SubscriptionItemCreateParamsPriceDataRecurring as SubscriptionItemCreateParamsPriceDataRecurring, + ) + from stripe.params._subscription_item_delete_params import ( + SubscriptionItemDeleteParams as SubscriptionItemDeleteParams, + ) + from stripe.params._subscription_item_list_params import ( + SubscriptionItemListParams as SubscriptionItemListParams, + ) + from stripe.params._subscription_item_modify_params import ( + SubscriptionItemModifyParams as SubscriptionItemModifyParams, + SubscriptionItemModifyParamsBillingThresholds as SubscriptionItemModifyParamsBillingThresholds, + SubscriptionItemModifyParamsDiscount as SubscriptionItemModifyParamsDiscount, + SubscriptionItemModifyParamsPriceData as SubscriptionItemModifyParamsPriceData, + SubscriptionItemModifyParamsPriceDataRecurring as SubscriptionItemModifyParamsPriceDataRecurring, + ) + from stripe.params._subscription_item_retrieve_params import ( + SubscriptionItemRetrieveParams as SubscriptionItemRetrieveParams, + ) + from stripe.params._subscription_item_update_params import ( + SubscriptionItemUpdateParams as SubscriptionItemUpdateParams, + SubscriptionItemUpdateParamsBillingThresholds as SubscriptionItemUpdateParamsBillingThresholds, + SubscriptionItemUpdateParamsDiscount as SubscriptionItemUpdateParamsDiscount, + SubscriptionItemUpdateParamsPriceData as SubscriptionItemUpdateParamsPriceData, + SubscriptionItemUpdateParamsPriceDataRecurring as SubscriptionItemUpdateParamsPriceDataRecurring, + ) + from stripe.params._subscription_list_params import ( + SubscriptionListParams as SubscriptionListParams, + SubscriptionListParamsAutomaticTax as SubscriptionListParamsAutomaticTax, + SubscriptionListParamsCreated as SubscriptionListParamsCreated, + SubscriptionListParamsCurrentPeriodEnd as SubscriptionListParamsCurrentPeriodEnd, + SubscriptionListParamsCurrentPeriodStart as SubscriptionListParamsCurrentPeriodStart, + ) + from stripe.params._subscription_migrate_params import ( + SubscriptionMigrateParams as SubscriptionMigrateParams, + SubscriptionMigrateParamsBillingMode as SubscriptionMigrateParamsBillingMode, + SubscriptionMigrateParamsBillingModeFlexible as SubscriptionMigrateParamsBillingModeFlexible, + ) + from stripe.params._subscription_modify_params import ( + SubscriptionModifyParams as SubscriptionModifyParams, + SubscriptionModifyParamsAddInvoiceItem as SubscriptionModifyParamsAddInvoiceItem, + SubscriptionModifyParamsAddInvoiceItemDiscount as SubscriptionModifyParamsAddInvoiceItemDiscount, + SubscriptionModifyParamsAddInvoiceItemPeriod as SubscriptionModifyParamsAddInvoiceItemPeriod, + SubscriptionModifyParamsAddInvoiceItemPeriodEnd as SubscriptionModifyParamsAddInvoiceItemPeriodEnd, + SubscriptionModifyParamsAddInvoiceItemPeriodStart as SubscriptionModifyParamsAddInvoiceItemPeriodStart, + SubscriptionModifyParamsAddInvoiceItemPriceData as SubscriptionModifyParamsAddInvoiceItemPriceData, + SubscriptionModifyParamsAutomaticTax as SubscriptionModifyParamsAutomaticTax, + SubscriptionModifyParamsAutomaticTaxLiability as SubscriptionModifyParamsAutomaticTaxLiability, + SubscriptionModifyParamsBillingThresholds as SubscriptionModifyParamsBillingThresholds, + SubscriptionModifyParamsCancellationDetails as SubscriptionModifyParamsCancellationDetails, + SubscriptionModifyParamsDiscount as SubscriptionModifyParamsDiscount, + SubscriptionModifyParamsInvoiceSettings as SubscriptionModifyParamsInvoiceSettings, + SubscriptionModifyParamsInvoiceSettingsIssuer as SubscriptionModifyParamsInvoiceSettingsIssuer, + SubscriptionModifyParamsItem as SubscriptionModifyParamsItem, + SubscriptionModifyParamsItemBillingThresholds as SubscriptionModifyParamsItemBillingThresholds, + SubscriptionModifyParamsItemDiscount as SubscriptionModifyParamsItemDiscount, + SubscriptionModifyParamsItemPriceData as SubscriptionModifyParamsItemPriceData, + SubscriptionModifyParamsItemPriceDataRecurring as SubscriptionModifyParamsItemPriceDataRecurring, + SubscriptionModifyParamsPauseCollection as SubscriptionModifyParamsPauseCollection, + SubscriptionModifyParamsPaymentSettings as SubscriptionModifyParamsPaymentSettings, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptions as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptions, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsBancontact as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsBancontact, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCard as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCard, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsKonbini as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsKonbini, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SubscriptionModifyParamsPendingInvoiceItemInterval as SubscriptionModifyParamsPendingInvoiceItemInterval, + SubscriptionModifyParamsTransferData as SubscriptionModifyParamsTransferData, + SubscriptionModifyParamsTrialSettings as SubscriptionModifyParamsTrialSettings, + SubscriptionModifyParamsTrialSettingsEndBehavior as SubscriptionModifyParamsTrialSettingsEndBehavior, + ) + from stripe.params._subscription_resume_params import ( + SubscriptionResumeParams as SubscriptionResumeParams, + ) + from stripe.params._subscription_retrieve_params import ( + SubscriptionRetrieveParams as SubscriptionRetrieveParams, + ) + from stripe.params._subscription_schedule_cancel_params import ( + SubscriptionScheduleCancelParams as SubscriptionScheduleCancelParams, + ) + from stripe.params._subscription_schedule_create_params import ( + SubscriptionScheduleCreateParams as SubscriptionScheduleCreateParams, + SubscriptionScheduleCreateParamsBillingMode as SubscriptionScheduleCreateParamsBillingMode, + SubscriptionScheduleCreateParamsBillingModeFlexible as SubscriptionScheduleCreateParamsBillingModeFlexible, + SubscriptionScheduleCreateParamsDefaultSettings as SubscriptionScheduleCreateParamsDefaultSettings, + SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTax as SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTax, + SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTaxLiability as SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTaxLiability, + SubscriptionScheduleCreateParamsDefaultSettingsBillingThresholds as SubscriptionScheduleCreateParamsDefaultSettingsBillingThresholds, + SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettings as SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettings, + SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettingsIssuer as SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettingsIssuer, + SubscriptionScheduleCreateParamsDefaultSettingsTransferData as SubscriptionScheduleCreateParamsDefaultSettingsTransferData, + SubscriptionScheduleCreateParamsPhase as SubscriptionScheduleCreateParamsPhase, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItem as SubscriptionScheduleCreateParamsPhaseAddInvoiceItem, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItemDiscount as SubscriptionScheduleCreateParamsPhaseAddInvoiceItemDiscount, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriod as SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriod, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodEnd as SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodEnd, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodStart as SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodStart, + SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPriceData as SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPriceData, + SubscriptionScheduleCreateParamsPhaseAutomaticTax as SubscriptionScheduleCreateParamsPhaseAutomaticTax, + SubscriptionScheduleCreateParamsPhaseAutomaticTaxLiability as SubscriptionScheduleCreateParamsPhaseAutomaticTaxLiability, + SubscriptionScheduleCreateParamsPhaseBillingThresholds as SubscriptionScheduleCreateParamsPhaseBillingThresholds, + SubscriptionScheduleCreateParamsPhaseDiscount as SubscriptionScheduleCreateParamsPhaseDiscount, + SubscriptionScheduleCreateParamsPhaseDuration as SubscriptionScheduleCreateParamsPhaseDuration, + SubscriptionScheduleCreateParamsPhaseInvoiceSettings as SubscriptionScheduleCreateParamsPhaseInvoiceSettings, + SubscriptionScheduleCreateParamsPhaseInvoiceSettingsIssuer as SubscriptionScheduleCreateParamsPhaseInvoiceSettingsIssuer, + SubscriptionScheduleCreateParamsPhaseItem as SubscriptionScheduleCreateParamsPhaseItem, + SubscriptionScheduleCreateParamsPhaseItemBillingThresholds as SubscriptionScheduleCreateParamsPhaseItemBillingThresholds, + SubscriptionScheduleCreateParamsPhaseItemDiscount as SubscriptionScheduleCreateParamsPhaseItemDiscount, + SubscriptionScheduleCreateParamsPhaseItemPriceData as SubscriptionScheduleCreateParamsPhaseItemPriceData, + SubscriptionScheduleCreateParamsPhaseItemPriceDataRecurring as SubscriptionScheduleCreateParamsPhaseItemPriceDataRecurring, + SubscriptionScheduleCreateParamsPhaseTransferData as SubscriptionScheduleCreateParamsPhaseTransferData, + ) + from stripe.params._subscription_schedule_list_params import ( + SubscriptionScheduleListParams as SubscriptionScheduleListParams, + SubscriptionScheduleListParamsCanceledAt as SubscriptionScheduleListParamsCanceledAt, + SubscriptionScheduleListParamsCompletedAt as SubscriptionScheduleListParamsCompletedAt, + SubscriptionScheduleListParamsCreated as SubscriptionScheduleListParamsCreated, + SubscriptionScheduleListParamsReleasedAt as SubscriptionScheduleListParamsReleasedAt, + ) + from stripe.params._subscription_schedule_modify_params import ( + SubscriptionScheduleModifyParams as SubscriptionScheduleModifyParams, + SubscriptionScheduleModifyParamsDefaultSettings as SubscriptionScheduleModifyParamsDefaultSettings, + SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTax as SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTax, + SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTaxLiability as SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTaxLiability, + SubscriptionScheduleModifyParamsDefaultSettingsBillingThresholds as SubscriptionScheduleModifyParamsDefaultSettingsBillingThresholds, + SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettings as SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettings, + SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettingsIssuer as SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettingsIssuer, + SubscriptionScheduleModifyParamsDefaultSettingsTransferData as SubscriptionScheduleModifyParamsDefaultSettingsTransferData, + SubscriptionScheduleModifyParamsPhase as SubscriptionScheduleModifyParamsPhase, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItem as SubscriptionScheduleModifyParamsPhaseAddInvoiceItem, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItemDiscount as SubscriptionScheduleModifyParamsPhaseAddInvoiceItemDiscount, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriod as SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriod, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodEnd as SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodEnd, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodStart as SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodStart, + SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPriceData as SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPriceData, + SubscriptionScheduleModifyParamsPhaseAutomaticTax as SubscriptionScheduleModifyParamsPhaseAutomaticTax, + SubscriptionScheduleModifyParamsPhaseAutomaticTaxLiability as SubscriptionScheduleModifyParamsPhaseAutomaticTaxLiability, + SubscriptionScheduleModifyParamsPhaseBillingThresholds as SubscriptionScheduleModifyParamsPhaseBillingThresholds, + SubscriptionScheduleModifyParamsPhaseDiscount as SubscriptionScheduleModifyParamsPhaseDiscount, + SubscriptionScheduleModifyParamsPhaseDuration as SubscriptionScheduleModifyParamsPhaseDuration, + SubscriptionScheduleModifyParamsPhaseInvoiceSettings as SubscriptionScheduleModifyParamsPhaseInvoiceSettings, + SubscriptionScheduleModifyParamsPhaseInvoiceSettingsIssuer as SubscriptionScheduleModifyParamsPhaseInvoiceSettingsIssuer, + SubscriptionScheduleModifyParamsPhaseItem as SubscriptionScheduleModifyParamsPhaseItem, + SubscriptionScheduleModifyParamsPhaseItemBillingThresholds as SubscriptionScheduleModifyParamsPhaseItemBillingThresholds, + SubscriptionScheduleModifyParamsPhaseItemDiscount as SubscriptionScheduleModifyParamsPhaseItemDiscount, + SubscriptionScheduleModifyParamsPhaseItemPriceData as SubscriptionScheduleModifyParamsPhaseItemPriceData, + SubscriptionScheduleModifyParamsPhaseItemPriceDataRecurring as SubscriptionScheduleModifyParamsPhaseItemPriceDataRecurring, + SubscriptionScheduleModifyParamsPhaseTransferData as SubscriptionScheduleModifyParamsPhaseTransferData, + ) + from stripe.params._subscription_schedule_release_params import ( + SubscriptionScheduleReleaseParams as SubscriptionScheduleReleaseParams, + ) + from stripe.params._subscription_schedule_retrieve_params import ( + SubscriptionScheduleRetrieveParams as SubscriptionScheduleRetrieveParams, + ) + from stripe.params._subscription_schedule_update_params import ( + SubscriptionScheduleUpdateParams as SubscriptionScheduleUpdateParams, + SubscriptionScheduleUpdateParamsDefaultSettings as SubscriptionScheduleUpdateParamsDefaultSettings, + SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTax as SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTax, + SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTaxLiability as SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTaxLiability, + SubscriptionScheduleUpdateParamsDefaultSettingsBillingThresholds as SubscriptionScheduleUpdateParamsDefaultSettingsBillingThresholds, + SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettings as SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettings, + SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettingsIssuer as SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettingsIssuer, + SubscriptionScheduleUpdateParamsDefaultSettingsTransferData as SubscriptionScheduleUpdateParamsDefaultSettingsTransferData, + SubscriptionScheduleUpdateParamsPhase as SubscriptionScheduleUpdateParamsPhase, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItem as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItem, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemDiscount as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemDiscount, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriod as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriod, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodEnd as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodEnd, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodStart as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodStart, + SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPriceData as SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPriceData, + SubscriptionScheduleUpdateParamsPhaseAutomaticTax as SubscriptionScheduleUpdateParamsPhaseAutomaticTax, + SubscriptionScheduleUpdateParamsPhaseAutomaticTaxLiability as SubscriptionScheduleUpdateParamsPhaseAutomaticTaxLiability, + SubscriptionScheduleUpdateParamsPhaseBillingThresholds as SubscriptionScheduleUpdateParamsPhaseBillingThresholds, + SubscriptionScheduleUpdateParamsPhaseDiscount as SubscriptionScheduleUpdateParamsPhaseDiscount, + SubscriptionScheduleUpdateParamsPhaseDuration as SubscriptionScheduleUpdateParamsPhaseDuration, + SubscriptionScheduleUpdateParamsPhaseInvoiceSettings as SubscriptionScheduleUpdateParamsPhaseInvoiceSettings, + SubscriptionScheduleUpdateParamsPhaseInvoiceSettingsIssuer as SubscriptionScheduleUpdateParamsPhaseInvoiceSettingsIssuer, + SubscriptionScheduleUpdateParamsPhaseItem as SubscriptionScheduleUpdateParamsPhaseItem, + SubscriptionScheduleUpdateParamsPhaseItemBillingThresholds as SubscriptionScheduleUpdateParamsPhaseItemBillingThresholds, + SubscriptionScheduleUpdateParamsPhaseItemDiscount as SubscriptionScheduleUpdateParamsPhaseItemDiscount, + SubscriptionScheduleUpdateParamsPhaseItemPriceData as SubscriptionScheduleUpdateParamsPhaseItemPriceData, + SubscriptionScheduleUpdateParamsPhaseItemPriceDataRecurring as SubscriptionScheduleUpdateParamsPhaseItemPriceDataRecurring, + SubscriptionScheduleUpdateParamsPhaseTransferData as SubscriptionScheduleUpdateParamsPhaseTransferData, + ) + from stripe.params._subscription_search_params import ( + SubscriptionSearchParams as SubscriptionSearchParams, + ) + from stripe.params._subscription_update_params import ( + SubscriptionUpdateParams as SubscriptionUpdateParams, + SubscriptionUpdateParamsAddInvoiceItem as SubscriptionUpdateParamsAddInvoiceItem, + SubscriptionUpdateParamsAddInvoiceItemDiscount as SubscriptionUpdateParamsAddInvoiceItemDiscount, + SubscriptionUpdateParamsAddInvoiceItemPeriod as SubscriptionUpdateParamsAddInvoiceItemPeriod, + SubscriptionUpdateParamsAddInvoiceItemPeriodEnd as SubscriptionUpdateParamsAddInvoiceItemPeriodEnd, + SubscriptionUpdateParamsAddInvoiceItemPeriodStart as SubscriptionUpdateParamsAddInvoiceItemPeriodStart, + SubscriptionUpdateParamsAddInvoiceItemPriceData as SubscriptionUpdateParamsAddInvoiceItemPriceData, + SubscriptionUpdateParamsAutomaticTax as SubscriptionUpdateParamsAutomaticTax, + SubscriptionUpdateParamsAutomaticTaxLiability as SubscriptionUpdateParamsAutomaticTaxLiability, + SubscriptionUpdateParamsBillingThresholds as SubscriptionUpdateParamsBillingThresholds, + SubscriptionUpdateParamsCancellationDetails as SubscriptionUpdateParamsCancellationDetails, + SubscriptionUpdateParamsDiscount as SubscriptionUpdateParamsDiscount, + SubscriptionUpdateParamsInvoiceSettings as SubscriptionUpdateParamsInvoiceSettings, + SubscriptionUpdateParamsInvoiceSettingsIssuer as SubscriptionUpdateParamsInvoiceSettingsIssuer, + SubscriptionUpdateParamsItem as SubscriptionUpdateParamsItem, + SubscriptionUpdateParamsItemBillingThresholds as SubscriptionUpdateParamsItemBillingThresholds, + SubscriptionUpdateParamsItemDiscount as SubscriptionUpdateParamsItemDiscount, + SubscriptionUpdateParamsItemPriceData as SubscriptionUpdateParamsItemPriceData, + SubscriptionUpdateParamsItemPriceDataRecurring as SubscriptionUpdateParamsItemPriceDataRecurring, + SubscriptionUpdateParamsPauseCollection as SubscriptionUpdateParamsPauseCollection, + SubscriptionUpdateParamsPaymentSettings as SubscriptionUpdateParamsPaymentSettings, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptions as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptions, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCard as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCard, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections, + SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters as SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters, + SubscriptionUpdateParamsPendingInvoiceItemInterval as SubscriptionUpdateParamsPendingInvoiceItemInterval, + SubscriptionUpdateParamsTransferData as SubscriptionUpdateParamsTransferData, + SubscriptionUpdateParamsTrialSettings as SubscriptionUpdateParamsTrialSettings, + SubscriptionUpdateParamsTrialSettingsEndBehavior as SubscriptionUpdateParamsTrialSettingsEndBehavior, + ) + from stripe.params._tax_code_list_params import ( + TaxCodeListParams as TaxCodeListParams, + ) + from stripe.params._tax_code_retrieve_params import ( + TaxCodeRetrieveParams as TaxCodeRetrieveParams, + ) + from stripe.params._tax_id_create_params import ( + TaxIdCreateParams as TaxIdCreateParams, + TaxIdCreateParamsOwner as TaxIdCreateParamsOwner, + ) + from stripe.params._tax_id_delete_params import ( + TaxIdDeleteParams as TaxIdDeleteParams, + ) + from stripe.params._tax_id_list_params import ( + TaxIdListParams as TaxIdListParams, + TaxIdListParamsOwner as TaxIdListParamsOwner, + ) + from stripe.params._tax_id_retrieve_params import ( + TaxIdRetrieveParams as TaxIdRetrieveParams, + ) + from stripe.params._tax_rate_create_params import ( + TaxRateCreateParams as TaxRateCreateParams, + ) + from stripe.params._tax_rate_list_params import ( + TaxRateListParams as TaxRateListParams, + TaxRateListParamsCreated as TaxRateListParamsCreated, + ) + from stripe.params._tax_rate_modify_params import ( + TaxRateModifyParams as TaxRateModifyParams, + ) + from stripe.params._tax_rate_retrieve_params import ( + TaxRateRetrieveParams as TaxRateRetrieveParams, + ) + from stripe.params._tax_rate_update_params import ( + TaxRateUpdateParams as TaxRateUpdateParams, + ) + from stripe.params._token_create_params import ( + TokenCreateParams as TokenCreateParams, + TokenCreateParamsAccount as TokenCreateParamsAccount, + TokenCreateParamsAccountCompany as TokenCreateParamsAccountCompany, + TokenCreateParamsAccountCompanyAddress as TokenCreateParamsAccountCompanyAddress, + TokenCreateParamsAccountCompanyAddressKana as TokenCreateParamsAccountCompanyAddressKana, + TokenCreateParamsAccountCompanyAddressKanji as TokenCreateParamsAccountCompanyAddressKanji, + TokenCreateParamsAccountCompanyDirectorshipDeclaration as TokenCreateParamsAccountCompanyDirectorshipDeclaration, + TokenCreateParamsAccountCompanyOwnershipDeclaration as TokenCreateParamsAccountCompanyOwnershipDeclaration, + TokenCreateParamsAccountCompanyRegistrationDate as TokenCreateParamsAccountCompanyRegistrationDate, + TokenCreateParamsAccountCompanyRepresentativeDeclaration as TokenCreateParamsAccountCompanyRepresentativeDeclaration, + TokenCreateParamsAccountCompanyVerification as TokenCreateParamsAccountCompanyVerification, + TokenCreateParamsAccountCompanyVerificationDocument as TokenCreateParamsAccountCompanyVerificationDocument, + TokenCreateParamsAccountIndividual as TokenCreateParamsAccountIndividual, + TokenCreateParamsAccountIndividualAddress as TokenCreateParamsAccountIndividualAddress, + TokenCreateParamsAccountIndividualAddressKana as TokenCreateParamsAccountIndividualAddressKana, + TokenCreateParamsAccountIndividualAddressKanji as TokenCreateParamsAccountIndividualAddressKanji, + TokenCreateParamsAccountIndividualDob as TokenCreateParamsAccountIndividualDob, + TokenCreateParamsAccountIndividualRegisteredAddress as TokenCreateParamsAccountIndividualRegisteredAddress, + TokenCreateParamsAccountIndividualRelationship as TokenCreateParamsAccountIndividualRelationship, + TokenCreateParamsAccountIndividualVerification as TokenCreateParamsAccountIndividualVerification, + TokenCreateParamsAccountIndividualVerificationAdditionalDocument as TokenCreateParamsAccountIndividualVerificationAdditionalDocument, + TokenCreateParamsAccountIndividualVerificationDocument as TokenCreateParamsAccountIndividualVerificationDocument, + TokenCreateParamsBankAccount as TokenCreateParamsBankAccount, + TokenCreateParamsCard as TokenCreateParamsCard, + TokenCreateParamsCardNetworks as TokenCreateParamsCardNetworks, + TokenCreateParamsCvcUpdate as TokenCreateParamsCvcUpdate, + TokenCreateParamsPerson as TokenCreateParamsPerson, + TokenCreateParamsPersonAdditionalTosAcceptances as TokenCreateParamsPersonAdditionalTosAcceptances, + TokenCreateParamsPersonAdditionalTosAcceptancesAccount as TokenCreateParamsPersonAdditionalTosAcceptancesAccount, + TokenCreateParamsPersonAddress as TokenCreateParamsPersonAddress, + TokenCreateParamsPersonAddressKana as TokenCreateParamsPersonAddressKana, + TokenCreateParamsPersonAddressKanji as TokenCreateParamsPersonAddressKanji, + TokenCreateParamsPersonDob as TokenCreateParamsPersonDob, + TokenCreateParamsPersonDocuments as TokenCreateParamsPersonDocuments, + TokenCreateParamsPersonDocumentsCompanyAuthorization as TokenCreateParamsPersonDocumentsCompanyAuthorization, + TokenCreateParamsPersonDocumentsPassport as TokenCreateParamsPersonDocumentsPassport, + TokenCreateParamsPersonDocumentsVisa as TokenCreateParamsPersonDocumentsVisa, + TokenCreateParamsPersonRegisteredAddress as TokenCreateParamsPersonRegisteredAddress, + TokenCreateParamsPersonRelationship as TokenCreateParamsPersonRelationship, + TokenCreateParamsPersonUsCfpbData as TokenCreateParamsPersonUsCfpbData, + TokenCreateParamsPersonUsCfpbDataEthnicityDetails as TokenCreateParamsPersonUsCfpbDataEthnicityDetails, + TokenCreateParamsPersonUsCfpbDataRaceDetails as TokenCreateParamsPersonUsCfpbDataRaceDetails, + TokenCreateParamsPersonVerification as TokenCreateParamsPersonVerification, + TokenCreateParamsPersonVerificationAdditionalDocument as TokenCreateParamsPersonVerificationAdditionalDocument, + TokenCreateParamsPersonVerificationDocument as TokenCreateParamsPersonVerificationDocument, + TokenCreateParamsPii as TokenCreateParamsPii, + ) + from stripe.params._token_retrieve_params import ( + TokenRetrieveParams as TokenRetrieveParams, + ) + from stripe.params._topup_cancel_params import ( + TopupCancelParams as TopupCancelParams, + ) + from stripe.params._topup_create_params import ( + TopupCreateParams as TopupCreateParams, + ) + from stripe.params._topup_list_params import ( + TopupListParams as TopupListParams, + TopupListParamsAmount as TopupListParamsAmount, + TopupListParamsCreated as TopupListParamsCreated, + ) + from stripe.params._topup_modify_params import ( + TopupModifyParams as TopupModifyParams, + ) + from stripe.params._topup_retrieve_params import ( + TopupRetrieveParams as TopupRetrieveParams, + ) + from stripe.params._topup_update_params import ( + TopupUpdateParams as TopupUpdateParams, + ) + from stripe.params._transfer_create_params import ( + TransferCreateParams as TransferCreateParams, + ) + from stripe.params._transfer_create_reversal_params import ( + TransferCreateReversalParams as TransferCreateReversalParams, + ) + from stripe.params._transfer_list_params import ( + TransferListParams as TransferListParams, + TransferListParamsCreated as TransferListParamsCreated, + ) + from stripe.params._transfer_list_reversals_params import ( + TransferListReversalsParams as TransferListReversalsParams, + ) + from stripe.params._transfer_modify_params import ( + TransferModifyParams as TransferModifyParams, + ) + from stripe.params._transfer_modify_reversal_params import ( + TransferModifyReversalParams as TransferModifyReversalParams, + ) + from stripe.params._transfer_retrieve_params import ( + TransferRetrieveParams as TransferRetrieveParams, + ) + from stripe.params._transfer_retrieve_reversal_params import ( + TransferRetrieveReversalParams as TransferRetrieveReversalParams, + ) + from stripe.params._transfer_reversal_create_params import ( + TransferReversalCreateParams as TransferReversalCreateParams, + ) + from stripe.params._transfer_reversal_list_params import ( + TransferReversalListParams as TransferReversalListParams, + ) + from stripe.params._transfer_reversal_retrieve_params import ( + TransferReversalRetrieveParams as TransferReversalRetrieveParams, + ) + from stripe.params._transfer_reversal_update_params import ( + TransferReversalUpdateParams as TransferReversalUpdateParams, + ) + from stripe.params._transfer_update_params import ( + TransferUpdateParams as TransferUpdateParams, + ) + from stripe.params._webhook_endpoint_create_params import ( + WebhookEndpointCreateParams as WebhookEndpointCreateParams, + ) + from stripe.params._webhook_endpoint_delete_params import ( + WebhookEndpointDeleteParams as WebhookEndpointDeleteParams, + ) + from stripe.params._webhook_endpoint_list_params import ( + WebhookEndpointListParams as WebhookEndpointListParams, + ) + from stripe.params._webhook_endpoint_modify_params import ( + WebhookEndpointModifyParams as WebhookEndpointModifyParams, + ) + from stripe.params._webhook_endpoint_retrieve_params import ( + WebhookEndpointRetrieveParams as WebhookEndpointRetrieveParams, + ) + from stripe.params._webhook_endpoint_update_params import ( + WebhookEndpointUpdateParams as WebhookEndpointUpdateParams, + ) + +# name -> (import_target, is_submodule) +_import_map = { + "apps": ("stripe.params.apps", True), + "billing": ("stripe.params.billing", True), + "billing_portal": ("stripe.params.billing_portal", True), + "checkout": ("stripe.params.checkout", True), + "climate": ("stripe.params.climate", True), + "entitlements": ("stripe.params.entitlements", True), + "financial_connections": ("stripe.params.financial_connections", True), + "forwarding": ("stripe.params.forwarding", True), + "identity": ("stripe.params.identity", True), + "issuing": ("stripe.params.issuing", True), + "radar": ("stripe.params.radar", True), + "reporting": ("stripe.params.reporting", True), + "sigma": ("stripe.params.sigma", True), + "tax": ("stripe.params.tax", True), + "terminal": ("stripe.params.terminal", True), + "test_helpers": ("stripe.params.test_helpers", True), + "treasury": ("stripe.params.treasury", True), + "AccountCapabilityListParams": ( + "stripe.params._account_capability_list_params", + False, + ), + "AccountCapabilityRetrieveParams": ( + "stripe.params._account_capability_retrieve_params", + False, + ), + "AccountCapabilityUpdateParams": ( + "stripe.params._account_capability_update_params", + False, + ), + "AccountCreateExternalAccountParams": ( + "stripe.params._account_create_external_account_params", + False, + ), + "AccountCreateExternalAccountParamsBankAccount": ( + "stripe.params._account_create_external_account_params", + False, + ), + "AccountCreateExternalAccountParamsCard": ( + "stripe.params._account_create_external_account_params", + False, + ), + "AccountCreateExternalAccountParamsCardToken": ( + "stripe.params._account_create_external_account_params", + False, + ), + "AccountCreateLoginLinkParams": ( + "stripe.params._account_create_login_link_params", + False, + ), + "AccountCreateParams": ("stripe.params._account_create_params", False), + "AccountCreateParamsBankAccount": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsBusinessProfile": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsBusinessProfileAnnualRevenue": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsBusinessProfileMonthlyEstimatedRevenue": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsBusinessProfileSupportAddress": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilities": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAcssDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAffirmPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAfterpayClearpayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAlmaPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAmazonPayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesAuBecsDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBacsDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBancontactPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBilliePayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBlikPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesBoletoPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesCardIssuing": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesCardPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesCartesBancairesPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesCashappPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesCryptoPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesEpsPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesFpxPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesGbBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesGiropayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesGrabpayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesIdealPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesIndiaInternationalPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesJcbPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesJpBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesKakaoPayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesKlarnaPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesKonbiniPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesKrCardPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesLegacyPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesLinkPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesMbWayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesMobilepayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesMultibancoPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesMxBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesNaverPayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesNzBankAccountBecsDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesOxxoPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesP24Payments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesPayByBankPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesPaycoPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesPaynowPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesPixPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesPromptpayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesRevolutPayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSamsungPayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSatispayPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSepaBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSepaDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSofortPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesSwishPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesTaxReportingUs1099K": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesTaxReportingUs1099Misc": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesTransfers": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesTreasury": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesTwintPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesUsBankAccountAchPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesUsBankTransferPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCapabilitiesZipPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCard": ("stripe.params._account_create_params", False), + "AccountCreateParamsCardToken": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompany": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyAddress": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyAddressKana": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyAddressKanji": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyDirectorshipDeclaration": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyOwnershipDeclaration": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyRegistrationDate": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyRepresentativeDeclaration": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyVerification": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsCompanyVerificationDocument": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsController": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsControllerFees": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsControllerLosses": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsControllerStripeDashboard": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocuments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsBankAccountOwnershipVerification": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsCompanyLicense": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsCompanyMemorandumOfAssociation": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsCompanyMinisterialDecree": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsCompanyRegistrationVerification": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsCompanyTaxIdVerification": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsProofOfAddress": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsProofOfRegistration": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsDocumentsProofOfUltimateBeneficialOwnership": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsGroups": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividual": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualAddress": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualAddressKana": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualAddressKanji": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualDob": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualRegisteredAddress": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualRelationship": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualVerification": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualVerificationAdditionalDocument": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsIndividualVerificationDocument": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettings": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsBacsDebitPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsBranding": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsCardIssuing": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsCardIssuingTosAcceptance": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsCardPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsCardPaymentsDeclineOn": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsInvoices": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsPayments": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsPayouts": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsPayoutsSchedule": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsTreasury": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsSettingsTreasuryTosAcceptance": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreateParamsTosAcceptance": ( + "stripe.params._account_create_params", + False, + ), + "AccountCreatePersonParams": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsAdditionalTosAcceptances": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsAdditionalTosAcceptancesAccount": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsAddress": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsAddressKana": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsAddressKanji": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsDob": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsDocuments": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsDocumentsCompanyAuthorization": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsDocumentsPassport": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsDocumentsVisa": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsRegisteredAddress": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsRelationship": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsUsCfpbData": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsUsCfpbDataEthnicityDetails": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsUsCfpbDataRaceDetails": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsVerification": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsVerificationAdditionalDocument": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountCreatePersonParamsVerificationDocument": ( + "stripe.params._account_create_person_params", + False, + ), + "AccountDeleteExternalAccountParams": ( + "stripe.params._account_delete_external_account_params", + False, + ), + "AccountDeleteParams": ("stripe.params._account_delete_params", False), + "AccountDeletePersonParams": ( + "stripe.params._account_delete_person_params", + False, + ), + "AccountExternalAccountCreateParams": ( + "stripe.params._account_external_account_create_params", + False, + ), + "AccountExternalAccountCreateParamsBankAccount": ( + "stripe.params._account_external_account_create_params", + False, + ), + "AccountExternalAccountCreateParamsCard": ( + "stripe.params._account_external_account_create_params", + False, + ), + "AccountExternalAccountCreateParamsCardToken": ( + "stripe.params._account_external_account_create_params", + False, + ), + "AccountExternalAccountDeleteParams": ( + "stripe.params._account_external_account_delete_params", + False, + ), + "AccountExternalAccountListParams": ( + "stripe.params._account_external_account_list_params", + False, + ), + "AccountExternalAccountRetrieveParams": ( + "stripe.params._account_external_account_retrieve_params", + False, + ), + "AccountExternalAccountUpdateParams": ( + "stripe.params._account_external_account_update_params", + False, + ), + "AccountExternalAccountUpdateParamsDocuments": ( + "stripe.params._account_external_account_update_params", + False, + ), + "AccountExternalAccountUpdateParamsDocumentsBankAccountOwnershipVerification": ( + "stripe.params._account_external_account_update_params", + False, + ), + "AccountLinkCreateParams": ( + "stripe.params._account_link_create_params", + False, + ), + "AccountLinkCreateParamsCollectionOptions": ( + "stripe.params._account_link_create_params", + False, + ), + "AccountListCapabilitiesParams": ( + "stripe.params._account_list_capabilities_params", + False, + ), + "AccountListExternalAccountsParams": ( + "stripe.params._account_list_external_accounts_params", + False, + ), + "AccountListParams": ("stripe.params._account_list_params", False), + "AccountListParamsCreated": ("stripe.params._account_list_params", False), + "AccountListPersonsParams": ( + "stripe.params._account_list_persons_params", + False, + ), + "AccountListPersonsParamsRelationship": ( + "stripe.params._account_list_persons_params", + False, + ), + "AccountLoginLinkCreateParams": ( + "stripe.params._account_login_link_create_params", + False, + ), + "AccountModifyCapabilityParams": ( + "stripe.params._account_modify_capability_params", + False, + ), + "AccountModifyExternalAccountParams": ( + "stripe.params._account_modify_external_account_params", + False, + ), + "AccountModifyExternalAccountParamsDocuments": ( + "stripe.params._account_modify_external_account_params", + False, + ), + "AccountModifyExternalAccountParamsDocumentsBankAccountOwnershipVerification": ( + "stripe.params._account_modify_external_account_params", + False, + ), + "AccountModifyPersonParams": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsAdditionalTosAcceptances": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsAdditionalTosAcceptancesAccount": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsAddress": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsAddressKana": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsAddressKanji": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsDob": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsDocuments": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsDocumentsCompanyAuthorization": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsDocumentsPassport": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsDocumentsVisa": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsRegisteredAddress": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsRelationship": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsUsCfpbData": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsUsCfpbDataEthnicityDetails": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsUsCfpbDataRaceDetails": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsVerification": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsVerificationAdditionalDocument": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountModifyPersonParamsVerificationDocument": ( + "stripe.params._account_modify_person_params", + False, + ), + "AccountPersonCreateParams": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsAdditionalTosAcceptances": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsAdditionalTosAcceptancesAccount": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsAddress": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsAddressKana": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsAddressKanji": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsDob": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsDocuments": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsDocumentsCompanyAuthorization": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsDocumentsPassport": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsDocumentsVisa": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsRegisteredAddress": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsRelationship": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsUsCfpbData": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsUsCfpbDataEthnicityDetails": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsUsCfpbDataRaceDetails": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsVerification": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsVerificationAdditionalDocument": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonCreateParamsVerificationDocument": ( + "stripe.params._account_person_create_params", + False, + ), + "AccountPersonDeleteParams": ( + "stripe.params._account_person_delete_params", + False, + ), + "AccountPersonListParams": ( + "stripe.params._account_person_list_params", + False, + ), + "AccountPersonListParamsRelationship": ( + "stripe.params._account_person_list_params", + False, + ), + "AccountPersonRetrieveParams": ( + "stripe.params._account_person_retrieve_params", + False, + ), + "AccountPersonUpdateParams": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsAdditionalTosAcceptances": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsAdditionalTosAcceptancesAccount": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsAddress": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsAddressKana": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsAddressKanji": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsDob": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsDocuments": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsDocumentsCompanyAuthorization": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsDocumentsPassport": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsDocumentsVisa": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsRegisteredAddress": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsRelationship": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsUsCfpbData": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsUsCfpbDataEthnicityDetails": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsUsCfpbDataRaceDetails": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsVerification": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsVerificationAdditionalDocument": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonUpdateParamsVerificationDocument": ( + "stripe.params._account_person_update_params", + False, + ), + "AccountPersonsParams": ("stripe.params._account_persons_params", False), + "AccountPersonsParamsRelationship": ( + "stripe.params._account_persons_params", + False, + ), + "AccountRejectParams": ("stripe.params._account_reject_params", False), + "AccountRetrieveCapabilityParams": ( + "stripe.params._account_retrieve_capability_params", + False, + ), + "AccountRetrieveCurrentParams": ( + "stripe.params._account_retrieve_current_params", + False, + ), + "AccountRetrieveExternalAccountParams": ( + "stripe.params._account_retrieve_external_account_params", + False, + ), + "AccountRetrieveParams": ("stripe.params._account_retrieve_params", False), + "AccountRetrievePersonParams": ( + "stripe.params._account_retrieve_person_params", + False, + ), + "AccountSessionCreateParams": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponents": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsAccountManagement": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsAccountManagementFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsAccountOnboarding": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsAccountOnboardingFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsBalances": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsBalancesFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsDisputesList": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsDisputesListFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsDocuments": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsDocumentsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsFinancialAccount": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsFinancialAccountFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsFinancialAccountTransactions": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsFinancialAccountTransactionsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsInstantPayoutsPromotion": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsInstantPayoutsPromotionFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsIssuingCard": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsIssuingCardFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsIssuingCardsList": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsIssuingCardsListFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsNotificationBanner": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsNotificationBannerFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPaymentDetails": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPaymentDetailsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPaymentDisputes": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPaymentDisputesFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayments": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPaymentsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayoutDetails": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayoutDetailsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayouts": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayoutsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayoutsList": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsPayoutsListFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsTaxRegistrations": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsTaxRegistrationsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsTaxSettings": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountSessionCreateParamsComponentsTaxSettingsFeatures": ( + "stripe.params._account_session_create_params", + False, + ), + "AccountUpdateParams": ("stripe.params._account_update_params", False), + "AccountUpdateParamsBankAccount": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsBusinessProfile": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsBusinessProfileAnnualRevenue": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsBusinessProfileMonthlyEstimatedRevenue": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsBusinessProfileSupportAddress": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilities": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAcssDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAffirmPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAfterpayClearpayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAlmaPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAmazonPayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesAuBecsDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBacsDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBancontactPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBilliePayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBlikPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesBoletoPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesCardIssuing": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesCardPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesCartesBancairesPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesCashappPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesCryptoPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesEpsPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesFpxPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesGbBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesGiropayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesGrabpayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesIdealPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesIndiaInternationalPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesJcbPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesJpBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesKakaoPayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesKlarnaPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesKonbiniPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesKrCardPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesLegacyPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesLinkPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesMbWayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesMobilepayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesMultibancoPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesMxBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesNaverPayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesNzBankAccountBecsDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesOxxoPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesP24Payments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesPayByBankPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesPaycoPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesPaynowPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesPixPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesPromptpayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesRevolutPayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSamsungPayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSatispayPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSepaBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSepaDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSofortPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesSwishPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesTaxReportingUs1099K": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesTaxReportingUs1099Misc": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesTransfers": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesTreasury": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesTwintPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesUsBankAccountAchPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesUsBankTransferPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCapabilitiesZipPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCard": ("stripe.params._account_update_params", False), + "AccountUpdateParamsCardToken": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompany": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyAddress": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyAddressKana": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyAddressKanji": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyDirectorshipDeclaration": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyOwnershipDeclaration": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyRegistrationDate": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyRepresentativeDeclaration": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyVerification": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsCompanyVerificationDocument": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocuments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsBankAccountOwnershipVerification": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsCompanyLicense": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsCompanyMemorandumOfAssociation": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsCompanyMinisterialDecree": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsCompanyRegistrationVerification": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsCompanyTaxIdVerification": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsProofOfAddress": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsProofOfRegistration": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsDocumentsProofOfUltimateBeneficialOwnership": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsGroups": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividual": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualAddress": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualAddressKana": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualAddressKanji": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualDob": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualRegisteredAddress": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualRelationship": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualVerification": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualVerificationAdditionalDocument": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsIndividualVerificationDocument": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettings": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsBacsDebitPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsBranding": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsCardIssuing": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsCardIssuingTosAcceptance": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsCardPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsCardPaymentsDeclineOn": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsInvoices": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsPayments": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsPayouts": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsPayoutsSchedule": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsTreasury": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsSettingsTreasuryTosAcceptance": ( + "stripe.params._account_update_params", + False, + ), + "AccountUpdateParamsTosAcceptance": ( + "stripe.params._account_update_params", + False, + ), + "ApplePayDomainCreateParams": ( + "stripe.params._apple_pay_domain_create_params", + False, + ), + "ApplePayDomainDeleteParams": ( + "stripe.params._apple_pay_domain_delete_params", + False, + ), + "ApplePayDomainListParams": ( + "stripe.params._apple_pay_domain_list_params", + False, + ), + "ApplePayDomainRetrieveParams": ( + "stripe.params._apple_pay_domain_retrieve_params", + False, + ), + "ApplicationFeeCreateRefundParams": ( + "stripe.params._application_fee_create_refund_params", + False, + ), + "ApplicationFeeListParams": ( + "stripe.params._application_fee_list_params", + False, + ), + "ApplicationFeeListParamsCreated": ( + "stripe.params._application_fee_list_params", + False, + ), + "ApplicationFeeListRefundsParams": ( + "stripe.params._application_fee_list_refunds_params", + False, + ), + "ApplicationFeeModifyRefundParams": ( + "stripe.params._application_fee_modify_refund_params", + False, + ), + "ApplicationFeeRefundCreateParams": ( + "stripe.params._application_fee_refund_create_params", + False, + ), + "ApplicationFeeRefundListParams": ( + "stripe.params._application_fee_refund_list_params", + False, + ), + "ApplicationFeeRefundParams": ( + "stripe.params._application_fee_refund_params", + False, + ), + "ApplicationFeeRefundRetrieveParams": ( + "stripe.params._application_fee_refund_retrieve_params", + False, + ), + "ApplicationFeeRefundUpdateParams": ( + "stripe.params._application_fee_refund_update_params", + False, + ), + "ApplicationFeeRetrieveParams": ( + "stripe.params._application_fee_retrieve_params", + False, + ), + "ApplicationFeeRetrieveRefundParams": ( + "stripe.params._application_fee_retrieve_refund_params", + False, + ), + "BalanceRetrieveParams": ("stripe.params._balance_retrieve_params", False), + "BalanceSettingsModifyParams": ( + "stripe.params._balance_settings_modify_params", + False, + ), + "BalanceSettingsModifyParamsPayments": ( + "stripe.params._balance_settings_modify_params", + False, + ), + "BalanceSettingsModifyParamsPaymentsPayouts": ( + "stripe.params._balance_settings_modify_params", + False, + ), + "BalanceSettingsModifyParamsPaymentsPayoutsSchedule": ( + "stripe.params._balance_settings_modify_params", + False, + ), + "BalanceSettingsModifyParamsPaymentsSettlementTiming": ( + "stripe.params._balance_settings_modify_params", + False, + ), + "BalanceSettingsRetrieveParams": ( + "stripe.params._balance_settings_retrieve_params", + False, + ), + "BalanceSettingsUpdateParams": ( + "stripe.params._balance_settings_update_params", + False, + ), + "BalanceSettingsUpdateParamsPayments": ( + "stripe.params._balance_settings_update_params", + False, + ), + "BalanceSettingsUpdateParamsPaymentsPayouts": ( + "stripe.params._balance_settings_update_params", + False, + ), + "BalanceSettingsUpdateParamsPaymentsPayoutsSchedule": ( + "stripe.params._balance_settings_update_params", + False, + ), + "BalanceSettingsUpdateParamsPaymentsSettlementTiming": ( + "stripe.params._balance_settings_update_params", + False, + ), + "BalanceTransactionListParams": ( + "stripe.params._balance_transaction_list_params", + False, + ), + "BalanceTransactionListParamsCreated": ( + "stripe.params._balance_transaction_list_params", + False, + ), + "BalanceTransactionRetrieveParams": ( + "stripe.params._balance_transaction_retrieve_params", + False, + ), + "BankAccountDeleteParams": ( + "stripe.params._bank_account_delete_params", + False, + ), + "CardDeleteParams": ("stripe.params._card_delete_params", False), + "ChargeCaptureParams": ("stripe.params._charge_capture_params", False), + "ChargeCaptureParamsTransferData": ( + "stripe.params._charge_capture_params", + False, + ), + "ChargeCreateParams": ("stripe.params._charge_create_params", False), + "ChargeCreateParamsDestination": ( + "stripe.params._charge_create_params", + False, + ), + "ChargeCreateParamsRadarOptions": ( + "stripe.params._charge_create_params", + False, + ), + "ChargeCreateParamsShipping": ( + "stripe.params._charge_create_params", + False, + ), + "ChargeCreateParamsShippingAddress": ( + "stripe.params._charge_create_params", + False, + ), + "ChargeCreateParamsTransferData": ( + "stripe.params._charge_create_params", + False, + ), + "ChargeListParams": ("stripe.params._charge_list_params", False), + "ChargeListParamsCreated": ("stripe.params._charge_list_params", False), + "ChargeListRefundsParams": ( + "stripe.params._charge_list_refunds_params", + False, + ), + "ChargeModifyParams": ("stripe.params._charge_modify_params", False), + "ChargeModifyParamsFraudDetails": ( + "stripe.params._charge_modify_params", + False, + ), + "ChargeModifyParamsShipping": ( + "stripe.params._charge_modify_params", + False, + ), + "ChargeModifyParamsShippingAddress": ( + "stripe.params._charge_modify_params", + False, + ), + "ChargeRetrieveParams": ("stripe.params._charge_retrieve_params", False), + "ChargeRetrieveRefundParams": ( + "stripe.params._charge_retrieve_refund_params", + False, + ), + "ChargeSearchParams": ("stripe.params._charge_search_params", False), + "ChargeUpdateParams": ("stripe.params._charge_update_params", False), + "ChargeUpdateParamsFraudDetails": ( + "stripe.params._charge_update_params", + False, + ), + "ChargeUpdateParamsShipping": ( + "stripe.params._charge_update_params", + False, + ), + "ChargeUpdateParamsShippingAddress": ( + "stripe.params._charge_update_params", + False, + ), + "ConfirmationTokenCreateParams": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodData": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAcssDebit": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAffirm": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAlipay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAlma": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAmazonPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBacsDebit": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBancontact": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillie": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillingDetails": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBlik": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataBoleto": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCashapp": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCrypto": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataEps": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataFpx": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataGiropay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataGrabpay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataIdeal": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataInteracPresent": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKakaoPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKlarna": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKonbini": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataKrCard": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataLink": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMbWay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMobilepay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataMultibanco": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataNaverPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataOxxo": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataP24": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPayByBank": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPayco": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPaynow": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPaypal": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPix": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataPromptpay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataRadarOptions": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataRevolutPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSamsungPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSatispay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSepaDebit": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSofort": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataSwish": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataTwint": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataWechatPay": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodDataZip": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptions": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCard": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsShipping": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenCreateParamsShippingAddress": ( + "stripe.params._confirmation_token_create_params", + False, + ), + "ConfirmationTokenRetrieveParams": ( + "stripe.params._confirmation_token_retrieve_params", + False, + ), + "CountrySpecListParams": ( + "stripe.params._country_spec_list_params", + False, + ), + "CountrySpecRetrieveParams": ( + "stripe.params._country_spec_retrieve_params", + False, + ), + "CouponCreateParams": ("stripe.params._coupon_create_params", False), + "CouponCreateParamsAppliesTo": ( + "stripe.params._coupon_create_params", + False, + ), + "CouponCreateParamsCurrencyOptions": ( + "stripe.params._coupon_create_params", + False, + ), + "CouponDeleteParams": ("stripe.params._coupon_delete_params", False), + "CouponListParams": ("stripe.params._coupon_list_params", False), + "CouponListParamsCreated": ("stripe.params._coupon_list_params", False), + "CouponModifyParams": ("stripe.params._coupon_modify_params", False), + "CouponModifyParamsCurrencyOptions": ( + "stripe.params._coupon_modify_params", + False, + ), + "CouponRetrieveParams": ("stripe.params._coupon_retrieve_params", False), + "CouponUpdateParams": ("stripe.params._coupon_update_params", False), + "CouponUpdateParamsCurrencyOptions": ( + "stripe.params._coupon_update_params", + False, + ), + "CreditNoteCreateParams": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteCreateParamsLine": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteCreateParamsLineTaxAmount": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteCreateParamsRefund": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteCreateParamsRefundPaymentRecordRefund": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteCreateParamsShippingCost": ( + "stripe.params._credit_note_create_params", + False, + ), + "CreditNoteLineItemListParams": ( + "stripe.params._credit_note_line_item_list_params", + False, + ), + "CreditNoteListLinesParams": ( + "stripe.params._credit_note_list_lines_params", + False, + ), + "CreditNoteListParams": ("stripe.params._credit_note_list_params", False), + "CreditNoteListParamsCreated": ( + "stripe.params._credit_note_list_params", + False, + ), + "CreditNoteModifyParams": ( + "stripe.params._credit_note_modify_params", + False, + ), + "CreditNotePreviewLinesListParams": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesListParamsLine": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesListParamsLineTaxAmount": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesListParamsRefund": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesListParamsRefundPaymentRecordRefund": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesListParamsShippingCost": ( + "stripe.params._credit_note_preview_lines_list_params", + False, + ), + "CreditNotePreviewLinesParams": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewLinesParamsLine": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewLinesParamsLineTaxAmount": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewLinesParamsRefund": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewLinesParamsRefundPaymentRecordRefund": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewLinesParamsShippingCost": ( + "stripe.params._credit_note_preview_lines_params", + False, + ), + "CreditNotePreviewParams": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNotePreviewParamsLine": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNotePreviewParamsLineTaxAmount": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNotePreviewParamsRefund": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNotePreviewParamsRefundPaymentRecordRefund": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNotePreviewParamsShippingCost": ( + "stripe.params._credit_note_preview_params", + False, + ), + "CreditNoteRetrieveParams": ( + "stripe.params._credit_note_retrieve_params", + False, + ), + "CreditNoteUpdateParams": ( + "stripe.params._credit_note_update_params", + False, + ), + "CreditNoteVoidCreditNoteParams": ( + "stripe.params._credit_note_void_credit_note_params", + False, + ), + "CustomerBalanceTransactionCreateParams": ( + "stripe.params._customer_balance_transaction_create_params", + False, + ), + "CustomerBalanceTransactionListParams": ( + "stripe.params._customer_balance_transaction_list_params", + False, + ), + "CustomerBalanceTransactionRetrieveParams": ( + "stripe.params._customer_balance_transaction_retrieve_params", + False, + ), + "CustomerBalanceTransactionUpdateParams": ( + "stripe.params._customer_balance_transaction_update_params", + False, + ), + "CustomerCashBalanceRetrieveParams": ( + "stripe.params._customer_cash_balance_retrieve_params", + False, + ), + "CustomerCashBalanceTransactionListParams": ( + "stripe.params._customer_cash_balance_transaction_list_params", + False, + ), + "CustomerCashBalanceTransactionRetrieveParams": ( + "stripe.params._customer_cash_balance_transaction_retrieve_params", + False, + ), + "CustomerCashBalanceUpdateParams": ( + "stripe.params._customer_cash_balance_update_params", + False, + ), + "CustomerCashBalanceUpdateParamsSettings": ( + "stripe.params._customer_cash_balance_update_params", + False, + ), + "CustomerCreateBalanceTransactionParams": ( + "stripe.params._customer_create_balance_transaction_params", + False, + ), + "CustomerCreateFundingInstructionsParams": ( + "stripe.params._customer_create_funding_instructions_params", + False, + ), + "CustomerCreateFundingInstructionsParamsBankTransfer": ( + "stripe.params._customer_create_funding_instructions_params", + False, + ), + "CustomerCreateFundingInstructionsParamsBankTransferEuBankTransfer": ( + "stripe.params._customer_create_funding_instructions_params", + False, + ), + "CustomerCreateParams": ("stripe.params._customer_create_params", False), + "CustomerCreateParamsAddress": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsCashBalance": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsCashBalanceSettings": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsInvoiceSettings": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsInvoiceSettingsCustomField": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsInvoiceSettingsRenderingOptions": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsShipping": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsShippingAddress": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsTax": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateParamsTaxIdDatum": ( + "stripe.params._customer_create_params", + False, + ), + "CustomerCreateSourceParams": ( + "stripe.params._customer_create_source_params", + False, + ), + "CustomerCreateTaxIdParams": ( + "stripe.params._customer_create_tax_id_params", + False, + ), + "CustomerDeleteDiscountParams": ( + "stripe.params._customer_delete_discount_params", + False, + ), + "CustomerDeleteParams": ("stripe.params._customer_delete_params", False), + "CustomerDeleteSourceParams": ( + "stripe.params._customer_delete_source_params", + False, + ), + "CustomerDeleteTaxIdParams": ( + "stripe.params._customer_delete_tax_id_params", + False, + ), + "CustomerFundCashBalanceParams": ( + "stripe.params._customer_fund_cash_balance_params", + False, + ), + "CustomerFundingInstructionsCreateParams": ( + "stripe.params._customer_funding_instructions_create_params", + False, + ), + "CustomerFundingInstructionsCreateParamsBankTransfer": ( + "stripe.params._customer_funding_instructions_create_params", + False, + ), + "CustomerFundingInstructionsCreateParamsBankTransferEuBankTransfer": ( + "stripe.params._customer_funding_instructions_create_params", + False, + ), + "CustomerListBalanceTransactionsParams": ( + "stripe.params._customer_list_balance_transactions_params", + False, + ), + "CustomerListCashBalanceTransactionsParams": ( + "stripe.params._customer_list_cash_balance_transactions_params", + False, + ), + "CustomerListParams": ("stripe.params._customer_list_params", False), + "CustomerListParamsCreated": ( + "stripe.params._customer_list_params", + False, + ), + "CustomerListPaymentMethodsParams": ( + "stripe.params._customer_list_payment_methods_params", + False, + ), + "CustomerListSourcesParams": ( + "stripe.params._customer_list_sources_params", + False, + ), + "CustomerListTaxIdsParams": ( + "stripe.params._customer_list_tax_ids_params", + False, + ), + "CustomerModifyBalanceTransactionParams": ( + "stripe.params._customer_modify_balance_transaction_params", + False, + ), + "CustomerModifyCashBalanceParams": ( + "stripe.params._customer_modify_cash_balance_params", + False, + ), + "CustomerModifyCashBalanceParamsSettings": ( + "stripe.params._customer_modify_cash_balance_params", + False, + ), + "CustomerModifyParams": ("stripe.params._customer_modify_params", False), + "CustomerModifyParamsAddress": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsCashBalance": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsCashBalanceSettings": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsInvoiceSettings": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsInvoiceSettingsCustomField": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsInvoiceSettingsRenderingOptions": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsShipping": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsShippingAddress": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifyParamsTax": ( + "stripe.params._customer_modify_params", + False, + ), + "CustomerModifySourceParams": ( + "stripe.params._customer_modify_source_params", + False, + ), + "CustomerModifySourceParamsOwner": ( + "stripe.params._customer_modify_source_params", + False, + ), + "CustomerModifySourceParamsOwnerAddress": ( + "stripe.params._customer_modify_source_params", + False, + ), + "CustomerPaymentMethodListParams": ( + "stripe.params._customer_payment_method_list_params", + False, + ), + "CustomerPaymentMethodRetrieveParams": ( + "stripe.params._customer_payment_method_retrieve_params", + False, + ), + "CustomerPaymentSourceCreateParams": ( + "stripe.params._customer_payment_source_create_params", + False, + ), + "CustomerPaymentSourceDeleteParams": ( + "stripe.params._customer_payment_source_delete_params", + False, + ), + "CustomerPaymentSourceListParams": ( + "stripe.params._customer_payment_source_list_params", + False, + ), + "CustomerPaymentSourceRetrieveParams": ( + "stripe.params._customer_payment_source_retrieve_params", + False, + ), + "CustomerPaymentSourceUpdateParams": ( + "stripe.params._customer_payment_source_update_params", + False, + ), + "CustomerPaymentSourceUpdateParamsOwner": ( + "stripe.params._customer_payment_source_update_params", + False, + ), + "CustomerPaymentSourceUpdateParamsOwnerAddress": ( + "stripe.params._customer_payment_source_update_params", + False, + ), + "CustomerPaymentSourceVerifyParams": ( + "stripe.params._customer_payment_source_verify_params", + False, + ), + "CustomerRetrieveBalanceTransactionParams": ( + "stripe.params._customer_retrieve_balance_transaction_params", + False, + ), + "CustomerRetrieveCashBalanceParams": ( + "stripe.params._customer_retrieve_cash_balance_params", + False, + ), + "CustomerRetrieveCashBalanceTransactionParams": ( + "stripe.params._customer_retrieve_cash_balance_transaction_params", + False, + ), + "CustomerRetrieveParams": ( + "stripe.params._customer_retrieve_params", + False, + ), + "CustomerRetrievePaymentMethodParams": ( + "stripe.params._customer_retrieve_payment_method_params", + False, + ), + "CustomerRetrieveSourceParams": ( + "stripe.params._customer_retrieve_source_params", + False, + ), + "CustomerRetrieveTaxIdParams": ( + "stripe.params._customer_retrieve_tax_id_params", + False, + ), + "CustomerSearchParams": ("stripe.params._customer_search_params", False), + "CustomerSessionCreateParams": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponents": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsBuyButton": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsCustomerSheet": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsCustomerSheetFeatures": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsMobilePaymentElement": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsMobilePaymentElementFeatures": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsPaymentElement": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsPaymentElementFeatures": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerSessionCreateParamsComponentsPricingTable": ( + "stripe.params._customer_session_create_params", + False, + ), + "CustomerTaxIdCreateParams": ( + "stripe.params._customer_tax_id_create_params", + False, + ), + "CustomerTaxIdDeleteParams": ( + "stripe.params._customer_tax_id_delete_params", + False, + ), + "CustomerTaxIdListParams": ( + "stripe.params._customer_tax_id_list_params", + False, + ), + "CustomerTaxIdRetrieveParams": ( + "stripe.params._customer_tax_id_retrieve_params", + False, + ), + "CustomerUpdateParams": ("stripe.params._customer_update_params", False), + "CustomerUpdateParamsAddress": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsCashBalance": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsCashBalanceSettings": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsInvoiceSettings": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsInvoiceSettingsCustomField": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsInvoiceSettingsRenderingOptions": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsShipping": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsShippingAddress": ( + "stripe.params._customer_update_params", + False, + ), + "CustomerUpdateParamsTax": ( + "stripe.params._customer_update_params", + False, + ), + "DisputeCloseParams": ("stripe.params._dispute_close_params", False), + "DisputeListParams": ("stripe.params._dispute_list_params", False), + "DisputeListParamsCreated": ("stripe.params._dispute_list_params", False), + "DisputeModifyParams": ("stripe.params._dispute_modify_params", False), + "DisputeModifyParamsEvidence": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidence": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeModifyParamsEvidenceEnhancedEvidenceVisaCompliance": ( + "stripe.params._dispute_modify_params", + False, + ), + "DisputeRetrieveParams": ("stripe.params._dispute_retrieve_params", False), + "DisputeUpdateParams": ("stripe.params._dispute_update_params", False), + "DisputeUpdateParamsEvidence": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidence": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionShippingAddress": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransaction": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactionShippingAddress": ( + "stripe.params._dispute_update_params", + False, + ), + "DisputeUpdateParamsEvidenceEnhancedEvidenceVisaCompliance": ( + "stripe.params._dispute_update_params", + False, + ), + "EphemeralKeyCreateParams": ( + "stripe.params._ephemeral_key_create_params", + False, + ), + "EphemeralKeyDeleteParams": ( + "stripe.params._ephemeral_key_delete_params", + False, + ), + "EventListParams": ("stripe.params._event_list_params", False), + "EventListParamsCreated": ("stripe.params._event_list_params", False), + "EventRetrieveParams": ("stripe.params._event_retrieve_params", False), + "ExchangeRateListParams": ( + "stripe.params._exchange_rate_list_params", + False, + ), + "ExchangeRateRetrieveParams": ( + "stripe.params._exchange_rate_retrieve_params", + False, + ), + "FileCreateParams": ("stripe.params._file_create_params", False), + "FileCreateParamsFileLinkData": ( + "stripe.params._file_create_params", + False, + ), + "FileLinkCreateParams": ("stripe.params._file_link_create_params", False), + "FileLinkListParams": ("stripe.params._file_link_list_params", False), + "FileLinkListParamsCreated": ( + "stripe.params._file_link_list_params", + False, + ), + "FileLinkModifyParams": ("stripe.params._file_link_modify_params", False), + "FileLinkRetrieveParams": ( + "stripe.params._file_link_retrieve_params", + False, + ), + "FileLinkUpdateParams": ("stripe.params._file_link_update_params", False), + "FileListParams": ("stripe.params._file_list_params", False), + "FileListParamsCreated": ("stripe.params._file_list_params", False), + "FileRetrieveParams": ("stripe.params._file_retrieve_params", False), + "InvoiceAddLinesParams": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLine": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLineDiscount": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLinePeriod": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLinePriceData": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLinePriceDataProductData": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLinePricing": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLineTaxAmount": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAddLinesParamsLineTaxAmountTaxRateData": ( + "stripe.params._invoice_add_lines_params", + False, + ), + "InvoiceAttachPaymentParams": ( + "stripe.params._invoice_attach_payment_params", + False, + ), + "InvoiceCreateParams": ("stripe.params._invoice_create_params", False), + "InvoiceCreateParamsAutomaticTax": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsAutomaticTaxLiability": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsCustomField": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsDiscount": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsFromInvoice": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsIssuer": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettings": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallments": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsRendering": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsRenderingPdf": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCost": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateData": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimate": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateDataFixedAmount": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingDetails": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsShippingDetailsAddress": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreateParamsTransferData": ( + "stripe.params._invoice_create_params", + False, + ), + "InvoiceCreatePreviewParams": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsAutomaticTax": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsAutomaticTaxLiability": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetails": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetailsAddress": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetailsShipping": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetailsShippingAddress": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetailsTax": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsCustomerDetailsTaxId": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsInvoiceItem": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsInvoiceItemDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsInvoiceItemPeriod": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsInvoiceItemPriceData": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsIssuer": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetails": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsBillingMode": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsBillingModeFlexible": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhase": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItem": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriod": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodEnd": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPeriodStart": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAddInvoiceItemPriceData": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTax": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseAutomaticTaxLiability": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseBillingThresholds": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseDuration": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettings": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseInvoiceSettingsIssuer": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseItem": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseItemBillingThresholds": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseItemDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceData": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseItemPriceDataRecurring": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsScheduleDetailsPhaseTransferData": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetails": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsBillingMode": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsBillingModeFlexible": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsItem": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsItemBillingThresholds": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsItemDiscount": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceData": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceCreatePreviewParamsSubscriptionDetailsItemPriceDataRecurring": ( + "stripe.params._invoice_create_preview_params", + False, + ), + "InvoiceDeleteParams": ("stripe.params._invoice_delete_params", False), + "InvoiceFinalizeInvoiceParams": ( + "stripe.params._invoice_finalize_invoice_params", + False, + ), + "InvoiceItemCreateParams": ( + "stripe.params._invoice_item_create_params", + False, + ), + "InvoiceItemCreateParamsDiscount": ( + "stripe.params._invoice_item_create_params", + False, + ), + "InvoiceItemCreateParamsPeriod": ( + "stripe.params._invoice_item_create_params", + False, + ), + "InvoiceItemCreateParamsPriceData": ( + "stripe.params._invoice_item_create_params", + False, + ), + "InvoiceItemCreateParamsPricing": ( + "stripe.params._invoice_item_create_params", + False, + ), + "InvoiceItemDeleteParams": ( + "stripe.params._invoice_item_delete_params", + False, + ), + "InvoiceItemListParams": ( + "stripe.params._invoice_item_list_params", + False, + ), + "InvoiceItemListParamsCreated": ( + "stripe.params._invoice_item_list_params", + False, + ), + "InvoiceItemModifyParams": ( + "stripe.params._invoice_item_modify_params", + False, + ), + "InvoiceItemModifyParamsDiscount": ( + "stripe.params._invoice_item_modify_params", + False, + ), + "InvoiceItemModifyParamsPeriod": ( + "stripe.params._invoice_item_modify_params", + False, + ), + "InvoiceItemModifyParamsPriceData": ( + "stripe.params._invoice_item_modify_params", + False, + ), + "InvoiceItemModifyParamsPricing": ( + "stripe.params._invoice_item_modify_params", + False, + ), + "InvoiceItemRetrieveParams": ( + "stripe.params._invoice_item_retrieve_params", + False, + ), + "InvoiceItemUpdateParams": ( + "stripe.params._invoice_item_update_params", + False, + ), + "InvoiceItemUpdateParamsDiscount": ( + "stripe.params._invoice_item_update_params", + False, + ), + "InvoiceItemUpdateParamsPeriod": ( + "stripe.params._invoice_item_update_params", + False, + ), + "InvoiceItemUpdateParamsPriceData": ( + "stripe.params._invoice_item_update_params", + False, + ), + "InvoiceItemUpdateParamsPricing": ( + "stripe.params._invoice_item_update_params", + False, + ), + "InvoiceLineItemListParams": ( + "stripe.params._invoice_line_item_list_params", + False, + ), + "InvoiceLineItemUpdateParams": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsDiscount": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsPeriod": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsPriceData": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsPriceDataProductData": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsPricing": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsTaxAmount": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceLineItemUpdateParamsTaxAmountTaxRateData": ( + "stripe.params._invoice_line_item_update_params", + False, + ), + "InvoiceListLinesParams": ( + "stripe.params._invoice_list_lines_params", + False, + ), + "InvoiceListParams": ("stripe.params._invoice_list_params", False), + "InvoiceListParamsCreated": ("stripe.params._invoice_list_params", False), + "InvoiceListParamsDueDate": ("stripe.params._invoice_list_params", False), + "InvoiceMarkUncollectibleParams": ( + "stripe.params._invoice_mark_uncollectible_params", + False, + ), + "InvoiceModifyParams": ("stripe.params._invoice_modify_params", False), + "InvoiceModifyParamsAutomaticTax": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsAutomaticTaxLiability": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsCustomField": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsDiscount": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsIssuer": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettings": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallments": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsRendering": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsRenderingPdf": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCost": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateData": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimate": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateDataFixedAmount": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingCostShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingDetails": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsShippingDetailsAddress": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoiceModifyParamsTransferData": ( + "stripe.params._invoice_modify_params", + False, + ), + "InvoicePayParams": ("stripe.params._invoice_pay_params", False), + "InvoicePaymentListParams": ( + "stripe.params._invoice_payment_list_params", + False, + ), + "InvoicePaymentListParamsPayment": ( + "stripe.params._invoice_payment_list_params", + False, + ), + "InvoicePaymentRetrieveParams": ( + "stripe.params._invoice_payment_retrieve_params", + False, + ), + "InvoiceRemoveLinesParams": ( + "stripe.params._invoice_remove_lines_params", + False, + ), + "InvoiceRemoveLinesParamsLine": ( + "stripe.params._invoice_remove_lines_params", + False, + ), + "InvoiceRenderingTemplateArchiveParams": ( + "stripe.params._invoice_rendering_template_archive_params", + False, + ), + "InvoiceRenderingTemplateListParams": ( + "stripe.params._invoice_rendering_template_list_params", + False, + ), + "InvoiceRenderingTemplateRetrieveParams": ( + "stripe.params._invoice_rendering_template_retrieve_params", + False, + ), + "InvoiceRenderingTemplateUnarchiveParams": ( + "stripe.params._invoice_rendering_template_unarchive_params", + False, + ), + "InvoiceRetrieveParams": ("stripe.params._invoice_retrieve_params", False), + "InvoiceSearchParams": ("stripe.params._invoice_search_params", False), + "InvoiceSendInvoiceParams": ( + "stripe.params._invoice_send_invoice_params", + False, + ), + "InvoiceUpdateLinesParams": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLine": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLineDiscount": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLinePeriod": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLinePriceData": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLinePriceDataProductData": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLinePricing": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLineTaxAmount": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateLinesParamsLineTaxAmountTaxRateData": ( + "stripe.params._invoice_update_lines_params", + False, + ), + "InvoiceUpdateParams": ("stripe.params._invoice_update_params", False), + "InvoiceUpdateParamsAutomaticTax": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsAutomaticTaxLiability": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsCustomField": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsDiscount": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsIssuer": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettings": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallments": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsRendering": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsRenderingPdf": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCost": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateData": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimate": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMaximum": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateDataDeliveryEstimateMinimum": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateDataFixedAmount": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingCostShippingRateDataFixedAmountCurrencyOptions": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingDetails": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsShippingDetailsAddress": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceUpdateParamsTransferData": ( + "stripe.params._invoice_update_params", + False, + ), + "InvoiceVoidInvoiceParams": ( + "stripe.params._invoice_void_invoice_params", + False, + ), + "MandateRetrieveParams": ("stripe.params._mandate_retrieve_params", False), + "PaymentAttemptRecordListParams": ( + "stripe.params._payment_attempt_record_list_params", + False, + ), + "PaymentAttemptRecordRetrieveParams": ( + "stripe.params._payment_attempt_record_retrieve_params", + False, + ), + "PaymentIntentAmountDetailsLineItemListParams": ( + "stripe.params._payment_intent_amount_details_line_item_list_params", + False, + ), + "PaymentIntentApplyCustomerBalanceParams": ( + "stripe.params._payment_intent_apply_customer_balance_params", + False, + ), + "PaymentIntentCancelParams": ( + "stripe.params._payment_intent_cancel_params", + False, + ), + "PaymentIntentCaptureParams": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetails": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsAmountDetailsTax": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsPaymentDetails": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentCaptureParamsTransferData": ( + "stripe.params._payment_intent_capture_params", + False, + ), + "PaymentIntentConfirmParams": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetails": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsAmountDetailsTax": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsMandateData": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsMandateDataCustomerAcceptance": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOffline": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsMandateDataCustomerAcceptanceOnline": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentDetails": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodData": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAcssDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAffirm": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAlipay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAlma": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAmazonPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBacsDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBancontact": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBillie": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBillingDetails": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBlik": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataBoleto": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataCashapp": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataCrypto": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataEps": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataFpx": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataGiropay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataGrabpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataIdeal": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataInteracPresent": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataKakaoPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataKlarna": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataKonbini": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataKrCard": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataLink": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataMbWay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataMobilepay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataMultibanco": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataNaverPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataOxxo": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataP24": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPayByBank": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPayco": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPaynow": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPaypal": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPix": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataPromptpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataRadarOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataRevolutPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataSamsungPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataSatispay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataSepaDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataSofort": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataSwish": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataTwint": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataWechatPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodDataZip": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAffirm": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAfterpayClearpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAlipay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAlma": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsAuBecsDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBancontact": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBillie": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBlik": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsBoleto": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardPresentRouting": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCashapp": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCrypto": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsEps": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsFpx": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsGiropay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsGrabpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsIdeal": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsInteracPresent": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKakaoPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKonbini": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsKrCard": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsLink": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsMbWay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsMobilepay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsMultibanco": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsNaverPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsNzBankAccount": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsOxxo": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsP24": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPayByBank": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPayco": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPaynow": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPix": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsPromptpay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsRevolutPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSamsungPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSatispay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSofort": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsSwish": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsTwint": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsWechatPay": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsPaymentMethodOptionsZip": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsRadarOptions": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsShipping": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentConfirmParamsShippingAddress": ( + "stripe.params._payment_intent_confirm_params", + False, + ), + "PaymentIntentCreateParams": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetails": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAmountDetailsTax": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsAutomaticPaymentMethods": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsMandateData": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsMandateDataCustomerAcceptance": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsMandateDataCustomerAcceptanceOffline": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsMandateDataCustomerAcceptanceOnline": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentDetails": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodData": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAcssDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAffirm": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAlipay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAlma": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAmazonPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBacsDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBancontact": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBillie": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBillingDetails": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBlik": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataBoleto": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataCashapp": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataCrypto": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataEps": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataFpx": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataGiropay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataGrabpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataIdeal": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataInteracPresent": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataKakaoPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataKlarna": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataKonbini": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataKrCard": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataLink": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataMbWay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataMobilepay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataMultibanco": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataNaverPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataOxxo": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataP24": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPayByBank": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPayco": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPaynow": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPaypal": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPix": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataPromptpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataRadarOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataRevolutPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataSamsungPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataSatispay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataSepaDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataSofort": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataSwish": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataTwint": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataWechatPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodDataZip": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAffirm": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAfterpayClearpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAlipay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAlma": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsAuBecsDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBancontact": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBillie": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBlik": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsBoleto": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardPresentRouting": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCashapp": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCrypto": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsEps": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsFpx": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsGiropay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsGrabpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsIdeal": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsInteracPresent": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKakaoPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKonbini": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsKrCard": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsLink": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsMbWay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsMobilepay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsMultibanco": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsNaverPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsNzBankAccount": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsOxxo": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsP24": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPayByBank": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPayco": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPaynow": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPix": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsPromptpay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsRevolutPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSamsungPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSatispay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSofort": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsSwish": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsTwint": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsWechatPay": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsPaymentMethodOptionsZip": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsRadarOptions": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsShipping": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsShippingAddress": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentCreateParamsTransferData": ( + "stripe.params._payment_intent_create_params", + False, + ), + "PaymentIntentIncrementAuthorizationParams": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetails": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsAmountDetailsTax": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsPaymentDetails": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentIncrementAuthorizationParamsTransferData": ( + "stripe.params._payment_intent_increment_authorization_params", + False, + ), + "PaymentIntentListAmountDetailsLineItemsParams": ( + "stripe.params._payment_intent_list_amount_details_line_items_params", + False, + ), + "PaymentIntentListParams": ( + "stripe.params._payment_intent_list_params", + False, + ), + "PaymentIntentListParamsCreated": ( + "stripe.params._payment_intent_list_params", + False, + ), + "PaymentIntentModifyParams": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetails": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsAmountDetailsTax": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentDetails": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodData": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAcssDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAffirm": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAlipay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAlma": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAmazonPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBacsDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBancontact": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBillie": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBillingDetails": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBlik": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataBoleto": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataCashapp": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataCrypto": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataEps": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataFpx": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataGiropay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataGrabpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataIdeal": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataInteracPresent": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataKakaoPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataKlarna": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataKonbini": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataKrCard": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataLink": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataMbWay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataMobilepay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataMultibanco": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataNaverPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataOxxo": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataP24": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPayByBank": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPayco": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPaynow": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPaypal": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPix": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataPromptpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataRadarOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataRevolutPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataSamsungPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataSatispay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataSepaDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataSofort": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataSwish": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataTwint": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataWechatPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodDataZip": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAffirm": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAfterpayClearpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAlipay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAlma": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsAuBecsDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBancontact": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBillie": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBlik": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsBoleto": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardPresentRouting": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCashapp": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCrypto": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsEps": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsFpx": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsGiropay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsGrabpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsIdeal": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsInteracPresent": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKakaoPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKonbini": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsKrCard": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsLink": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsMbWay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsMobilepay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsMultibanco": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsNaverPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsNzBankAccount": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsOxxo": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsP24": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPayByBank": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPayco": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPaynow": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPix": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsPromptpay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsRevolutPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSamsungPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSatispay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSofort": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsSwish": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsTwint": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsWechatPay": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsPaymentMethodOptionsZip": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsShipping": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsShippingAddress": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentModifyParamsTransferData": ( + "stripe.params._payment_intent_modify_params", + False, + ), + "PaymentIntentRetrieveParams": ( + "stripe.params._payment_intent_retrieve_params", + False, + ), + "PaymentIntentSearchParams": ( + "stripe.params._payment_intent_search_params", + False, + ), + "PaymentIntentUpdateParams": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetails": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItem": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsLineItemTax": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsShipping": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsAmountDetailsTax": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentDetails": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodData": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAcssDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAffirm": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAlipay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAlma": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAmazonPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBacsDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBancontact": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBillie": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBillingDetails": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBlik": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataBoleto": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataCashapp": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataCrypto": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataEps": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataFpx": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataGiropay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataGrabpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataIdeal": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataInteracPresent": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataKakaoPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataKlarna": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataKonbini": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataKrCard": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataLink": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataMbWay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataMobilepay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataMultibanco": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataNaverPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataOxxo": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataP24": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPayByBank": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPayco": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPaynow": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPaypal": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPix": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataPromptpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataRadarOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataRevolutPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataSamsungPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataSatispay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataSepaDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataSofort": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataSwish": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataTwint": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataWechatPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodDataZip": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAffirm": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAfterpayClearpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAlipay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAlma": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsAuBecsDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBancontact": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBillie": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBlik": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsBoleto": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCard": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallments": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardInstallmentsPlan": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardPresentRouting": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCashapp": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCrypto": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsEps": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsFpx": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsGiropay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsGrabpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsIdeal": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsInteracPresent": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKakaoPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKlarna": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKonbini": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsKrCard": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsLink": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsMbWay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsMobilepay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsMultibanco": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsNaverPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsNzBankAccount": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsOxxo": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsP24": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPayByBank": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPayco": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPaynow": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPaypal": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPix": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsPromptpay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsRevolutPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSamsungPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSatispay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSofort": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsSwish": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsTwint": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsWechatPay": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsPaymentMethodOptionsZip": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsShipping": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsShippingAddress": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentUpdateParamsTransferData": ( + "stripe.params._payment_intent_update_params", + False, + ), + "PaymentIntentVerifyMicrodepositsParams": ( + "stripe.params._payment_intent_verify_microdeposits_params", + False, + ), + "PaymentLinkCreateParams": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsAfterCompletion": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsAfterCompletionHostedConfirmation": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsAfterCompletionRedirect": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsAutomaticTax": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsAutomaticTaxLiability": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsConsentCollection": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsConsentCollectionPaymentMethodReuseAgreement": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomField": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomFieldDropdown": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomFieldDropdownOption": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomFieldLabel": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomFieldNumeric": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomFieldText": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomText": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomTextAfterSubmit": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomTextShippingAddress": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomTextSubmit": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsCustomTextTermsOfServiceAcceptance": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsInvoiceCreation": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsInvoiceCreationInvoiceData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsInvoiceCreationInvoiceDataCustomField": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsInvoiceCreationInvoiceDataIssuer": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsInvoiceCreationInvoiceDataRenderingOptions": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsLineItem": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsLineItemAdjustableQuantity": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsLineItemPriceData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsLineItemPriceDataProductData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsLineItemPriceDataRecurring": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsNameCollection": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsNameCollectionBusiness": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsNameCollectionIndividual": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsOptionalItem": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsOptionalItemAdjustableQuantity": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsPaymentIntentData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsPhoneNumberCollection": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsRestrictions": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsRestrictionsCompletedSessions": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsShippingAddressCollection": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsShippingOption": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsSubscriptionData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsSubscriptionDataInvoiceSettings": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsSubscriptionDataInvoiceSettingsIssuer": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsSubscriptionDataTrialSettings": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsSubscriptionDataTrialSettingsEndBehavior": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsTaxIdCollection": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkCreateParamsTransferData": ( + "stripe.params._payment_link_create_params", + False, + ), + "PaymentLinkLineItemListParams": ( + "stripe.params._payment_link_line_item_list_params", + False, + ), + "PaymentLinkListLineItemsParams": ( + "stripe.params._payment_link_list_line_items_params", + False, + ), + "PaymentLinkListParams": ( + "stripe.params._payment_link_list_params", + False, + ), + "PaymentLinkModifyParams": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsAfterCompletion": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsAfterCompletionHostedConfirmation": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsAfterCompletionRedirect": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsAutomaticTax": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsAutomaticTaxLiability": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomField": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomFieldDropdown": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomFieldDropdownOption": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomFieldLabel": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomFieldNumeric": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomFieldText": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomText": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomTextAfterSubmit": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomTextShippingAddress": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomTextSubmit": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsCustomTextTermsOfServiceAcceptance": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsInvoiceCreation": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsInvoiceCreationInvoiceData": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsInvoiceCreationInvoiceDataCustomField": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsInvoiceCreationInvoiceDataIssuer": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsInvoiceCreationInvoiceDataRenderingOptions": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsLineItem": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsLineItemAdjustableQuantity": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsNameCollection": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsNameCollectionBusiness": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsNameCollectionIndividual": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsPaymentIntentData": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsPhoneNumberCollection": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsRestrictions": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsRestrictionsCompletedSessions": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsShippingAddressCollection": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsSubscriptionData": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsSubscriptionDataInvoiceSettings": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsSubscriptionDataInvoiceSettingsIssuer": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsSubscriptionDataTrialSettings": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsSubscriptionDataTrialSettingsEndBehavior": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkModifyParamsTaxIdCollection": ( + "stripe.params._payment_link_modify_params", + False, + ), + "PaymentLinkRetrieveParams": ( + "stripe.params._payment_link_retrieve_params", + False, + ), + "PaymentLinkUpdateParams": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsAfterCompletion": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsAfterCompletionHostedConfirmation": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsAfterCompletionRedirect": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsAutomaticTax": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsAutomaticTaxLiability": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomField": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomFieldDropdown": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomFieldDropdownOption": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomFieldLabel": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomFieldNumeric": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomFieldText": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomText": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomTextAfterSubmit": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomTextShippingAddress": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomTextSubmit": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsCustomTextTermsOfServiceAcceptance": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsInvoiceCreation": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsInvoiceCreationInvoiceData": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsInvoiceCreationInvoiceDataCustomField": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsInvoiceCreationInvoiceDataIssuer": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsInvoiceCreationInvoiceDataRenderingOptions": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsLineItem": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsLineItemAdjustableQuantity": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsNameCollection": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsNameCollectionBusiness": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsNameCollectionIndividual": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsPaymentIntentData": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsPhoneNumberCollection": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsRestrictions": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsRestrictionsCompletedSessions": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsShippingAddressCollection": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsSubscriptionData": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsSubscriptionDataInvoiceSettings": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsSubscriptionDataInvoiceSettingsIssuer": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsSubscriptionDataTrialSettings": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsSubscriptionDataTrialSettingsEndBehavior": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentLinkUpdateParamsTaxIdCollection": ( + "stripe.params._payment_link_update_params", + False, + ), + "PaymentMethodAttachParams": ( + "stripe.params._payment_method_attach_params", + False, + ), + "PaymentMethodConfigurationCreateParams": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAcssDebit": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAcssDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAffirm": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAffirmDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAfterpayClearpay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAfterpayClearpayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAlipay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAlipayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAlma": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAlmaDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAmazonPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAmazonPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsApplePay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsApplePayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsApplePayLater": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsApplePayLaterDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAuBecsDebit": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsAuBecsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBacsDebit": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBacsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBancontact": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBancontactDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBillie": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBillieDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBlik": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBlikDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBoleto": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsBoletoDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCard": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCardDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCartesBancaires": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCartesBancairesDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCashapp": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCashappDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCrypto": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCryptoDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCustomerBalance": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsCustomerBalanceDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsEps": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsEpsDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsFpx": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsFpxDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsFrMealVoucherConecs": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsFrMealVoucherConecsDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGiropay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGiropayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGooglePay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGooglePayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGrabpay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsGrabpayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsIdeal": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsIdealDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsJcb": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsJcbDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKakaoPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKakaoPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKlarna": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKlarnaDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKonbini": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKonbiniDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKrCard": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsKrCardDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsLink": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsLinkDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMbWay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMbWayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMobilepay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMobilepayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMultibanco": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsMultibancoDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsNaverPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsNaverPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsNzBankAccount": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsNzBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsOxxo": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsOxxoDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsP24": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsP24DisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPayByBank": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPayByBankDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPayco": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPaycoDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPaynow": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPaynowDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPaypal": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPaypalDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPix": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPixDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPromptpay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsPromptpayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsRevolutPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsRevolutPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSamsungPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSamsungPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSatispay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSatispayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSepaDebit": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSepaDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSofort": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSofortDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSwish": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsSwishDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsTwint": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsTwintDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsUsBankAccount": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsUsBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsWechatPay": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsWechatPayDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsZip": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationCreateParamsZipDisplayPreference": ( + "stripe.params._payment_method_configuration_create_params", + False, + ), + "PaymentMethodConfigurationListParams": ( + "stripe.params._payment_method_configuration_list_params", + False, + ), + "PaymentMethodConfigurationModifyParams": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAcssDebit": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAcssDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAffirm": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAffirmDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAfterpayClearpay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAfterpayClearpayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAlipay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAlipayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAlma": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAlmaDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAmazonPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAmazonPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsApplePay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsApplePayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsApplePayLater": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsApplePayLaterDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAuBecsDebit": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsAuBecsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBacsDebit": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBacsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBancontact": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBancontactDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBillie": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBillieDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBlik": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBlikDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBoleto": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsBoletoDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCard": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCardDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCartesBancaires": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCartesBancairesDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCashapp": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCashappDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCrypto": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCryptoDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCustomerBalance": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsCustomerBalanceDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsEps": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsEpsDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsFpx": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsFpxDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsFrMealVoucherConecs": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsFrMealVoucherConecsDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGiropay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGiropayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGooglePay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGooglePayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGrabpay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsGrabpayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsIdeal": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsIdealDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsJcb": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsJcbDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKakaoPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKakaoPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKlarna": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKlarnaDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKonbini": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKonbiniDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKrCard": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsKrCardDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsLink": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsLinkDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMbWay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMbWayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMobilepay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMobilepayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMultibanco": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsMultibancoDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsNaverPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsNaverPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsNzBankAccount": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsNzBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsOxxo": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsOxxoDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsP24": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsP24DisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPayByBank": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPayByBankDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPayco": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPaycoDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPaynow": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPaynowDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPaypal": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPaypalDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPix": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPixDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPromptpay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsPromptpayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsRevolutPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsRevolutPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSamsungPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSamsungPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSatispay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSatispayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSepaDebit": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSepaDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSofort": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSofortDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSwish": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsSwishDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsTwint": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsTwintDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsUsBankAccount": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsUsBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsWechatPay": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsWechatPayDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsZip": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationModifyParamsZipDisplayPreference": ( + "stripe.params._payment_method_configuration_modify_params", + False, + ), + "PaymentMethodConfigurationRetrieveParams": ( + "stripe.params._payment_method_configuration_retrieve_params", + False, + ), + "PaymentMethodConfigurationUpdateParams": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAcssDebit": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAcssDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAffirm": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAffirmDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAfterpayClearpay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAfterpayClearpayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAlipay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAlipayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAlma": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAlmaDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAmazonPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAmazonPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsApplePay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsApplePayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsApplePayLater": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsApplePayLaterDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAuBecsDebit": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsAuBecsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBacsDebit": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBacsDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBancontact": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBancontactDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBillie": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBillieDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBlik": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBlikDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBoleto": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsBoletoDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCard": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCardDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCartesBancaires": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCartesBancairesDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCashapp": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCashappDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCrypto": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCryptoDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCustomerBalance": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsCustomerBalanceDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsEps": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsEpsDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsFpx": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsFpxDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsFrMealVoucherConecs": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsFrMealVoucherConecsDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGiropay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGiropayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGooglePay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGooglePayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGrabpay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsGrabpayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsIdeal": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsIdealDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsJcb": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsJcbDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKakaoPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKakaoPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKlarna": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKlarnaDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKonbini": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKonbiniDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKrCard": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsKrCardDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsLink": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsLinkDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMbWay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMbWayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMobilepay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMobilepayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMultibanco": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsMultibancoDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsNaverPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsNaverPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsNzBankAccount": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsNzBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsOxxo": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsOxxoDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsP24": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsP24DisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPayByBank": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPayByBankDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPayco": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPaycoDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPaynow": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPaynowDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPaypal": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPaypalDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPix": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPixDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPromptpay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsPromptpayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsRevolutPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsRevolutPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSamsungPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSamsungPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSatispay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSatispayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSepaDebit": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSepaDebitDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSofort": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSofortDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSwish": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsSwishDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsTwint": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsTwintDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsUsBankAccount": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsUsBankAccountDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsWechatPay": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsWechatPayDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsZip": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodConfigurationUpdateParamsZipDisplayPreference": ( + "stripe.params._payment_method_configuration_update_params", + False, + ), + "PaymentMethodCreateParams": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAcssDebit": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAffirm": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAfterpayClearpay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAlipay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAlma": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAmazonPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsAuBecsDebit": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBacsDebit": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBancontact": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBillie": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBillingDetails": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBillingDetailsAddress": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBlik": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsBoleto": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCard": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCardNetworks": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCashapp": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCrypto": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCustom": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsCustomerBalance": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsEps": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsFpx": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsGiropay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsGrabpay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsIdeal": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsInteracPresent": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsKakaoPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsKlarna": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsKlarnaDob": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsKonbini": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsKrCard": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsLink": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsMbWay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsMobilepay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsMultibanco": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsNaverPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsNzBankAccount": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsOxxo": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsP24": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPayByBank": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPayco": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPaynow": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPaypal": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPix": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsPromptpay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsRadarOptions": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsRevolutPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsSamsungPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsSatispay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsSepaDebit": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsSofort": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsSwish": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsTwint": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsUsBankAccount": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsWechatPay": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodCreateParamsZip": ( + "stripe.params._payment_method_create_params", + False, + ), + "PaymentMethodDetachParams": ( + "stripe.params._payment_method_detach_params", + False, + ), + "PaymentMethodDomainCreateParams": ( + "stripe.params._payment_method_domain_create_params", + False, + ), + "PaymentMethodDomainListParams": ( + "stripe.params._payment_method_domain_list_params", + False, + ), + "PaymentMethodDomainModifyParams": ( + "stripe.params._payment_method_domain_modify_params", + False, + ), + "PaymentMethodDomainRetrieveParams": ( + "stripe.params._payment_method_domain_retrieve_params", + False, + ), + "PaymentMethodDomainUpdateParams": ( + "stripe.params._payment_method_domain_update_params", + False, + ), + "PaymentMethodDomainValidateParams": ( + "stripe.params._payment_method_domain_validate_params", + False, + ), + "PaymentMethodListParams": ( + "stripe.params._payment_method_list_params", + False, + ), + "PaymentMethodModifyParams": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodModifyParamsBillingDetails": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodModifyParamsBillingDetailsAddress": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodModifyParamsCard": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodModifyParamsCardNetworks": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodModifyParamsUsBankAccount": ( + "stripe.params._payment_method_modify_params", + False, + ), + "PaymentMethodRetrieveParams": ( + "stripe.params._payment_method_retrieve_params", + False, + ), + "PaymentMethodUpdateParams": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentMethodUpdateParamsBillingDetails": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentMethodUpdateParamsBillingDetailsAddress": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentMethodUpdateParamsCard": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentMethodUpdateParamsCardNetworks": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentMethodUpdateParamsUsBankAccount": ( + "stripe.params._payment_method_update_params", + False, + ), + "PaymentRecordReportPaymentAttemptCanceledParams": ( + "stripe.params._payment_record_report_payment_attempt_canceled_params", + False, + ), + "PaymentRecordReportPaymentAttemptFailedParams": ( + "stripe.params._payment_record_report_payment_attempt_failed_params", + False, + ), + "PaymentRecordReportPaymentAttemptGuaranteedParams": ( + "stripe.params._payment_record_report_payment_attempt_guaranteed_params", + False, + ), + "PaymentRecordReportPaymentAttemptInformationalParams": ( + "stripe.params._payment_record_report_payment_attempt_informational_params", + False, + ), + "PaymentRecordReportPaymentAttemptInformationalParamsCustomerDetails": ( + "stripe.params._payment_record_report_payment_attempt_informational_params", + False, + ), + "PaymentRecordReportPaymentAttemptInformationalParamsShippingDetails": ( + "stripe.params._payment_record_report_payment_attempt_informational_params", + False, + ), + "PaymentRecordReportPaymentAttemptInformationalParamsShippingDetailsAddress": ( + "stripe.params._payment_record_report_payment_attempt_informational_params", + False, + ), + "PaymentRecordReportPaymentAttemptParams": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsFailed": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsGuaranteed": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsPaymentMethodDetails": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetails": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsBillingDetailsAddress": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsPaymentMethodDetailsCustom": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsShippingDetails": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentAttemptParamsShippingDetailsAddress": ( + "stripe.params._payment_record_report_payment_attempt_params", + False, + ), + "PaymentRecordReportPaymentParams": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsAmountRequested": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsCustomerDetails": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsFailed": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsGuaranteed": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsPaymentMethodDetails": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetails": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsPaymentMethodDetailsBillingDetailsAddress": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsPaymentMethodDetailsCustom": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsProcessorDetails": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsProcessorDetailsCustom": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsShippingDetails": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportPaymentParamsShippingDetailsAddress": ( + "stripe.params._payment_record_report_payment_params", + False, + ), + "PaymentRecordReportRefundParams": ( + "stripe.params._payment_record_report_refund_params", + False, + ), + "PaymentRecordReportRefundParamsAmount": ( + "stripe.params._payment_record_report_refund_params", + False, + ), + "PaymentRecordReportRefundParamsProcessorDetails": ( + "stripe.params._payment_record_report_refund_params", + False, + ), + "PaymentRecordReportRefundParamsProcessorDetailsCustom": ( + "stripe.params._payment_record_report_refund_params", + False, + ), + "PaymentRecordReportRefundParamsRefunded": ( + "stripe.params._payment_record_report_refund_params", + False, + ), + "PaymentRecordRetrieveParams": ( + "stripe.params._payment_record_retrieve_params", + False, + ), + "PayoutCancelParams": ("stripe.params._payout_cancel_params", False), + "PayoutCreateParams": ("stripe.params._payout_create_params", False), + "PayoutListParams": ("stripe.params._payout_list_params", False), + "PayoutListParamsArrivalDate": ( + "stripe.params._payout_list_params", + False, + ), + "PayoutListParamsCreated": ("stripe.params._payout_list_params", False), + "PayoutModifyParams": ("stripe.params._payout_modify_params", False), + "PayoutRetrieveParams": ("stripe.params._payout_retrieve_params", False), + "PayoutReverseParams": ("stripe.params._payout_reverse_params", False), + "PayoutUpdateParams": ("stripe.params._payout_update_params", False), + "PlanCreateParams": ("stripe.params._plan_create_params", False), + "PlanCreateParamsProduct": ("stripe.params._plan_create_params", False), + "PlanCreateParamsTier": ("stripe.params._plan_create_params", False), + "PlanCreateParamsTransformUsage": ( + "stripe.params._plan_create_params", + False, + ), + "PlanDeleteParams": ("stripe.params._plan_delete_params", False), + "PlanListParams": ("stripe.params._plan_list_params", False), + "PlanListParamsCreated": ("stripe.params._plan_list_params", False), + "PlanModifyParams": ("stripe.params._plan_modify_params", False), + "PlanRetrieveParams": ("stripe.params._plan_retrieve_params", False), + "PlanUpdateParams": ("stripe.params._plan_update_params", False), + "PriceCreateParams": ("stripe.params._price_create_params", False), + "PriceCreateParamsCurrencyOptions": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsCurrencyOptionsCustomUnitAmount": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsCurrencyOptionsTier": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsCustomUnitAmount": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsProductData": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsRecurring": ( + "stripe.params._price_create_params", + False, + ), + "PriceCreateParamsTier": ("stripe.params._price_create_params", False), + "PriceCreateParamsTransformQuantity": ( + "stripe.params._price_create_params", + False, + ), + "PriceListParams": ("stripe.params._price_list_params", False), + "PriceListParamsCreated": ("stripe.params._price_list_params", False), + "PriceListParamsRecurring": ("stripe.params._price_list_params", False), + "PriceModifyParams": ("stripe.params._price_modify_params", False), + "PriceModifyParamsCurrencyOptions": ( + "stripe.params._price_modify_params", + False, + ), + "PriceModifyParamsCurrencyOptionsCustomUnitAmount": ( + "stripe.params._price_modify_params", + False, + ), + "PriceModifyParamsCurrencyOptionsTier": ( + "stripe.params._price_modify_params", + False, + ), + "PriceRetrieveParams": ("stripe.params._price_retrieve_params", False), + "PriceSearchParams": ("stripe.params._price_search_params", False), + "PriceUpdateParams": ("stripe.params._price_update_params", False), + "PriceUpdateParamsCurrencyOptions": ( + "stripe.params._price_update_params", + False, + ), + "PriceUpdateParamsCurrencyOptionsCustomUnitAmount": ( + "stripe.params._price_update_params", + False, + ), + "PriceUpdateParamsCurrencyOptionsTier": ( + "stripe.params._price_update_params", + False, + ), + "ProductCreateFeatureParams": ( + "stripe.params._product_create_feature_params", + False, + ), + "ProductCreateParams": ("stripe.params._product_create_params", False), + "ProductCreateParamsDefaultPriceData": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsDefaultPriceDataCurrencyOptions": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsDefaultPriceDataCurrencyOptionsCustomUnitAmount": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsDefaultPriceDataCurrencyOptionsTier": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsDefaultPriceDataCustomUnitAmount": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsDefaultPriceDataRecurring": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsMarketingFeature": ( + "stripe.params._product_create_params", + False, + ), + "ProductCreateParamsPackageDimensions": ( + "stripe.params._product_create_params", + False, + ), + "ProductDeleteFeatureParams": ( + "stripe.params._product_delete_feature_params", + False, + ), + "ProductDeleteParams": ("stripe.params._product_delete_params", False), + "ProductFeatureCreateParams": ( + "stripe.params._product_feature_create_params", + False, + ), + "ProductFeatureDeleteParams": ( + "stripe.params._product_feature_delete_params", + False, + ), + "ProductFeatureListParams": ( + "stripe.params._product_feature_list_params", + False, + ), + "ProductFeatureRetrieveParams": ( + "stripe.params._product_feature_retrieve_params", + False, + ), + "ProductListFeaturesParams": ( + "stripe.params._product_list_features_params", + False, + ), + "ProductListParams": ("stripe.params._product_list_params", False), + "ProductListParamsCreated": ("stripe.params._product_list_params", False), + "ProductModifyParams": ("stripe.params._product_modify_params", False), + "ProductModifyParamsMarketingFeature": ( + "stripe.params._product_modify_params", + False, + ), + "ProductModifyParamsPackageDimensions": ( + "stripe.params._product_modify_params", + False, + ), + "ProductRetrieveFeatureParams": ( + "stripe.params._product_retrieve_feature_params", + False, + ), + "ProductRetrieveParams": ("stripe.params._product_retrieve_params", False), + "ProductSearchParams": ("stripe.params._product_search_params", False), + "ProductUpdateParams": ("stripe.params._product_update_params", False), + "ProductUpdateParamsMarketingFeature": ( + "stripe.params._product_update_params", + False, + ), + "ProductUpdateParamsPackageDimensions": ( + "stripe.params._product_update_params", + False, + ), + "PromotionCodeCreateParams": ( + "stripe.params._promotion_code_create_params", + False, + ), + "PromotionCodeCreateParamsPromotion": ( + "stripe.params._promotion_code_create_params", + False, + ), + "PromotionCodeCreateParamsRestrictions": ( + "stripe.params._promotion_code_create_params", + False, + ), + "PromotionCodeCreateParamsRestrictionsCurrencyOptions": ( + "stripe.params._promotion_code_create_params", + False, + ), + "PromotionCodeListParams": ( + "stripe.params._promotion_code_list_params", + False, + ), + "PromotionCodeListParamsCreated": ( + "stripe.params._promotion_code_list_params", + False, + ), + "PromotionCodeModifyParams": ( + "stripe.params._promotion_code_modify_params", + False, + ), + "PromotionCodeModifyParamsRestrictions": ( + "stripe.params._promotion_code_modify_params", + False, + ), + "PromotionCodeModifyParamsRestrictionsCurrencyOptions": ( + "stripe.params._promotion_code_modify_params", + False, + ), + "PromotionCodeRetrieveParams": ( + "stripe.params._promotion_code_retrieve_params", + False, + ), + "PromotionCodeUpdateParams": ( + "stripe.params._promotion_code_update_params", + False, + ), + "PromotionCodeUpdateParamsRestrictions": ( + "stripe.params._promotion_code_update_params", + False, + ), + "PromotionCodeUpdateParamsRestrictionsCurrencyOptions": ( + "stripe.params._promotion_code_update_params", + False, + ), + "QuoteAcceptParams": ("stripe.params._quote_accept_params", False), + "QuoteCancelParams": ("stripe.params._quote_cancel_params", False), + "QuoteComputedUpfrontLineItemsListParams": ( + "stripe.params._quote_computed_upfront_line_items_list_params", + False, + ), + "QuoteCreateParams": ("stripe.params._quote_create_params", False), + "QuoteCreateParamsAutomaticTax": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsAutomaticTaxLiability": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsDiscount": ("stripe.params._quote_create_params", False), + "QuoteCreateParamsFromQuote": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsInvoiceSettings": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsInvoiceSettingsIssuer": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsLineItem": ("stripe.params._quote_create_params", False), + "QuoteCreateParamsLineItemDiscount": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsLineItemPriceData": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsLineItemPriceDataRecurring": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsSubscriptionData": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsSubscriptionDataBillingMode": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsSubscriptionDataBillingModeFlexible": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteCreateParamsTransferData": ( + "stripe.params._quote_create_params", + False, + ), + "QuoteFinalizeQuoteParams": ( + "stripe.params._quote_finalize_quote_params", + False, + ), + "QuoteLineItemListParams": ( + "stripe.params._quote_line_item_list_params", + False, + ), + "QuoteListComputedUpfrontLineItemsParams": ( + "stripe.params._quote_list_computed_upfront_line_items_params", + False, + ), + "QuoteListLineItemsParams": ( + "stripe.params._quote_list_line_items_params", + False, + ), + "QuoteListParams": ("stripe.params._quote_list_params", False), + "QuoteModifyParams": ("stripe.params._quote_modify_params", False), + "QuoteModifyParamsAutomaticTax": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsAutomaticTaxLiability": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsDiscount": ("stripe.params._quote_modify_params", False), + "QuoteModifyParamsInvoiceSettings": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsInvoiceSettingsIssuer": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsLineItem": ("stripe.params._quote_modify_params", False), + "QuoteModifyParamsLineItemDiscount": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsLineItemPriceData": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsLineItemPriceDataRecurring": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsSubscriptionData": ( + "stripe.params._quote_modify_params", + False, + ), + "QuoteModifyParamsTransferData": ( + "stripe.params._quote_modify_params", + False, + ), + "QuotePdfParams": ("stripe.params._quote_pdf_params", False), + "QuoteRetrieveParams": ("stripe.params._quote_retrieve_params", False), + "QuoteUpdateParams": ("stripe.params._quote_update_params", False), + "QuoteUpdateParamsAutomaticTax": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsAutomaticTaxLiability": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsDiscount": ("stripe.params._quote_update_params", False), + "QuoteUpdateParamsInvoiceSettings": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsInvoiceSettingsIssuer": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsLineItem": ("stripe.params._quote_update_params", False), + "QuoteUpdateParamsLineItemDiscount": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsLineItemPriceData": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsLineItemPriceDataRecurring": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsSubscriptionData": ( + "stripe.params._quote_update_params", + False, + ), + "QuoteUpdateParamsTransferData": ( + "stripe.params._quote_update_params", + False, + ), + "RefundCancelParams": ("stripe.params._refund_cancel_params", False), + "RefundCreateParams": ("stripe.params._refund_create_params", False), + "RefundExpireParams": ("stripe.params._refund_expire_params", False), + "RefundListParams": ("stripe.params._refund_list_params", False), + "RefundListParamsCreated": ("stripe.params._refund_list_params", False), + "RefundModifyParams": ("stripe.params._refund_modify_params", False), + "RefundRetrieveParams": ("stripe.params._refund_retrieve_params", False), + "RefundUpdateParams": ("stripe.params._refund_update_params", False), + "ReviewApproveParams": ("stripe.params._review_approve_params", False), + "ReviewListParams": ("stripe.params._review_list_params", False), + "ReviewListParamsCreated": ("stripe.params._review_list_params", False), + "ReviewRetrieveParams": ("stripe.params._review_retrieve_params", False), + "SetupAttemptListParams": ( + "stripe.params._setup_attempt_list_params", + False, + ), + "SetupAttemptListParamsCreated": ( + "stripe.params._setup_attempt_list_params", + False, + ), + "SetupIntentCancelParams": ( + "stripe.params._setup_intent_cancel_params", + False, + ), + "SetupIntentConfirmParams": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsMandateData": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsMandateDataCustomerAcceptance": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsMandateDataCustomerAcceptanceOffline": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsMandateDataCustomerAcceptanceOnline": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodData": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAcssDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAffirm": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAlipay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAlma": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAmazonPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBacsDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBancontact": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBillie": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBillingDetails": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBlik": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataBoleto": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataCashapp": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataCrypto": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataEps": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataFpx": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataGiropay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataGrabpay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataIdeal": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataInteracPresent": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataKakaoPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataKlarna": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataKonbini": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataKrCard": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataLink": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataMbWay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataMobilepay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataMultibanco": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataNaverPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataOxxo": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataP24": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPayByBank": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPayco": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPaynow": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPaypal": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPix": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataPromptpay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataRadarOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataRevolutPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataSamsungPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataSatispay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataSepaDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataSofort": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataSwish": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataTwint": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataWechatPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodDataZip": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCard": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsKlarna": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsLink": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsPaypal": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentConfirmParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._setup_intent_confirm_params", + False, + ), + "SetupIntentCreateParams": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsAutomaticPaymentMethods": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsMandateData": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsMandateDataCustomerAcceptance": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsMandateDataCustomerAcceptanceOffline": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsMandateDataCustomerAcceptanceOnline": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodData": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAcssDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAffirm": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAlipay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAlma": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAmazonPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBacsDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBancontact": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBillie": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBillingDetails": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBlik": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataBoleto": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataCashapp": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataCrypto": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataEps": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataFpx": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataGiropay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataGrabpay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataIdeal": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataInteracPresent": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataKakaoPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataKlarna": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataKonbini": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataKrCard": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataLink": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataMbWay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataMobilepay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataMultibanco": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataNaverPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataOxxo": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataP24": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPayByBank": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPayco": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPaynow": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPaypal": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPix": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataPromptpay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataRadarOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataRevolutPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataSamsungPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataSatispay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataSepaDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataSofort": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataSwish": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataTwint": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataWechatPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodDataZip": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCard": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsKlarna": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsLink": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsPaypal": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentCreateParamsSingleUse": ( + "stripe.params._setup_intent_create_params", + False, + ), + "SetupIntentListParams": ( + "stripe.params._setup_intent_list_params", + False, + ), + "SetupIntentListParamsCreated": ( + "stripe.params._setup_intent_list_params", + False, + ), + "SetupIntentModifyParams": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodData": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAcssDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAffirm": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAlipay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAlma": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAmazonPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBacsDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBancontact": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBillie": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBillingDetails": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBlik": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataBoleto": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataCashapp": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataCrypto": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataEps": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataFpx": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataGiropay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataGrabpay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataIdeal": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataInteracPresent": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataKakaoPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataKlarna": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataKonbini": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataKrCard": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataLink": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataMbWay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataMobilepay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataMultibanco": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataNaverPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataOxxo": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataP24": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPayByBank": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPayco": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPaynow": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPaypal": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPix": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataPromptpay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataRadarOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataRevolutPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataSamsungPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataSatispay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataSepaDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataSofort": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataSwish": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataTwint": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataWechatPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodDataZip": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCard": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsKlarna": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsLink": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsPaypal": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentModifyParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._setup_intent_modify_params", + False, + ), + "SetupIntentRetrieveParams": ( + "stripe.params._setup_intent_retrieve_params", + False, + ), + "SetupIntentUpdateParams": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodData": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAcssDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAffirm": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAfterpayClearpay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAlipay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAlma": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAmazonPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataAuBecsDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBacsDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBancontact": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBillie": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBillingDetails": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBillingDetailsAddress": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBlik": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataBoleto": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataCashapp": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataCrypto": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataCustomerBalance": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataEps": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataFpx": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataGiropay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataGrabpay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataIdeal": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataInteracPresent": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataKakaoPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataKlarna": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataKlarnaDob": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataKonbini": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataKrCard": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataLink": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataMbWay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataMobilepay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataMultibanco": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataNaverPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataNzBankAccount": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataOxxo": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataP24": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPayByBank": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPayco": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPaynow": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPaypal": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPix": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataPromptpay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataRadarOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataRevolutPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataSamsungPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataSatispay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataSepaDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataSofort": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataSwish": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataTwint": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataUsBankAccount": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataWechatPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodDataZip": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsAcssDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsAmazonPay": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsBacsDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsBacsDebitMandateOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCard": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCardPresent": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecure": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancaires": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsKlarna": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsKlarnaOnDemand": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscription": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsKlarnaSubscriptionNextBilling": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsLink": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsPaypal": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsSepaDebit": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsSepaDebitMandateOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountMandateOptions": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentUpdateParamsPaymentMethodOptionsUsBankAccountNetworks": ( + "stripe.params._setup_intent_update_params", + False, + ), + "SetupIntentVerifyMicrodepositsParams": ( + "stripe.params._setup_intent_verify_microdeposits_params", + False, + ), + "ShippingRateCreateParams": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateCreateParamsDeliveryEstimate": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateCreateParamsDeliveryEstimateMaximum": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateCreateParamsDeliveryEstimateMinimum": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateCreateParamsFixedAmount": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateCreateParamsFixedAmountCurrencyOptions": ( + "stripe.params._shipping_rate_create_params", + False, + ), + "ShippingRateListParams": ( + "stripe.params._shipping_rate_list_params", + False, + ), + "ShippingRateListParamsCreated": ( + "stripe.params._shipping_rate_list_params", + False, + ), + "ShippingRateModifyParams": ( + "stripe.params._shipping_rate_modify_params", + False, + ), + "ShippingRateModifyParamsFixedAmount": ( + "stripe.params._shipping_rate_modify_params", + False, + ), + "ShippingRateModifyParamsFixedAmountCurrencyOptions": ( + "stripe.params._shipping_rate_modify_params", + False, + ), + "ShippingRateRetrieveParams": ( + "stripe.params._shipping_rate_retrieve_params", + False, + ), + "ShippingRateUpdateParams": ( + "stripe.params._shipping_rate_update_params", + False, + ), + "ShippingRateUpdateParamsFixedAmount": ( + "stripe.params._shipping_rate_update_params", + False, + ), + "ShippingRateUpdateParamsFixedAmountCurrencyOptions": ( + "stripe.params._shipping_rate_update_params", + False, + ), + "SourceCreateParams": ("stripe.params._source_create_params", False), + "SourceCreateParamsMandate": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsMandateAcceptance": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsMandateAcceptanceOffline": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsMandateAcceptanceOnline": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsOwner": ("stripe.params._source_create_params", False), + "SourceCreateParamsOwnerAddress": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsReceiver": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsRedirect": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsSourceOrder": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsSourceOrderItem": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsSourceOrderShipping": ( + "stripe.params._source_create_params", + False, + ), + "SourceCreateParamsSourceOrderShippingAddress": ( + "stripe.params._source_create_params", + False, + ), + "SourceDetachParams": ("stripe.params._source_detach_params", False), + "SourceListSourceTransactionsParams": ( + "stripe.params._source_list_source_transactions_params", + False, + ), + "SourceModifyParams": ("stripe.params._source_modify_params", False), + "SourceModifyParamsMandate": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsMandateAcceptance": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsMandateAcceptanceOffline": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsMandateAcceptanceOnline": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsOwner": ("stripe.params._source_modify_params", False), + "SourceModifyParamsOwnerAddress": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsSourceOrder": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsSourceOrderItem": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsSourceOrderShipping": ( + "stripe.params._source_modify_params", + False, + ), + "SourceModifyParamsSourceOrderShippingAddress": ( + "stripe.params._source_modify_params", + False, + ), + "SourceRetrieveParams": ("stripe.params._source_retrieve_params", False), + "SourceTransactionListParams": ( + "stripe.params._source_transaction_list_params", + False, + ), + "SourceUpdateParams": ("stripe.params._source_update_params", False), + "SourceUpdateParamsMandate": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsMandateAcceptance": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsMandateAcceptanceOffline": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsMandateAcceptanceOnline": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsOwner": ("stripe.params._source_update_params", False), + "SourceUpdateParamsOwnerAddress": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsSourceOrder": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsSourceOrderItem": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsSourceOrderShipping": ( + "stripe.params._source_update_params", + False, + ), + "SourceUpdateParamsSourceOrderShippingAddress": ( + "stripe.params._source_update_params", + False, + ), + "SourceVerifyParams": ("stripe.params._source_verify_params", False), + "SubscriptionCancelParams": ( + "stripe.params._subscription_cancel_params", + False, + ), + "SubscriptionCancelParamsCancellationDetails": ( + "stripe.params._subscription_cancel_params", + False, + ), + "SubscriptionCreateParams": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItem": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItemDiscount": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItemPeriod": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAddInvoiceItemPriceData": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAutomaticTax": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsAutomaticTaxLiability": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsBillingCycleAnchorConfig": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsBillingMode": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsBillingModeFlexible": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsBillingThresholds": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsDiscount": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsInvoiceSettings": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsInvoiceSettingsIssuer": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsItem": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsItemBillingThresholds": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsItemDiscount": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsItemPriceData": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsItemPriceDataRecurring": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettings": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsPendingInvoiceItemInterval": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsTransferData": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsTrialSettings": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionCreateParamsTrialSettingsEndBehavior": ( + "stripe.params._subscription_create_params", + False, + ), + "SubscriptionDeleteDiscountParams": ( + "stripe.params._subscription_delete_discount_params", + False, + ), + "SubscriptionItemCreateParams": ( + "stripe.params._subscription_item_create_params", + False, + ), + "SubscriptionItemCreateParamsBillingThresholds": ( + "stripe.params._subscription_item_create_params", + False, + ), + "SubscriptionItemCreateParamsDiscount": ( + "stripe.params._subscription_item_create_params", + False, + ), + "SubscriptionItemCreateParamsPriceData": ( + "stripe.params._subscription_item_create_params", + False, + ), + "SubscriptionItemCreateParamsPriceDataRecurring": ( + "stripe.params._subscription_item_create_params", + False, + ), + "SubscriptionItemDeleteParams": ( + "stripe.params._subscription_item_delete_params", + False, + ), + "SubscriptionItemListParams": ( + "stripe.params._subscription_item_list_params", + False, + ), + "SubscriptionItemModifyParams": ( + "stripe.params._subscription_item_modify_params", + False, + ), + "SubscriptionItemModifyParamsBillingThresholds": ( + "stripe.params._subscription_item_modify_params", + False, + ), + "SubscriptionItemModifyParamsDiscount": ( + "stripe.params._subscription_item_modify_params", + False, + ), + "SubscriptionItemModifyParamsPriceData": ( + "stripe.params._subscription_item_modify_params", + False, + ), + "SubscriptionItemModifyParamsPriceDataRecurring": ( + "stripe.params._subscription_item_modify_params", + False, + ), + "SubscriptionItemRetrieveParams": ( + "stripe.params._subscription_item_retrieve_params", + False, + ), + "SubscriptionItemUpdateParams": ( + "stripe.params._subscription_item_update_params", + False, + ), + "SubscriptionItemUpdateParamsBillingThresholds": ( + "stripe.params._subscription_item_update_params", + False, + ), + "SubscriptionItemUpdateParamsDiscount": ( + "stripe.params._subscription_item_update_params", + False, + ), + "SubscriptionItemUpdateParamsPriceData": ( + "stripe.params._subscription_item_update_params", + False, + ), + "SubscriptionItemUpdateParamsPriceDataRecurring": ( + "stripe.params._subscription_item_update_params", + False, + ), + "SubscriptionListParams": ( + "stripe.params._subscription_list_params", + False, + ), + "SubscriptionListParamsAutomaticTax": ( + "stripe.params._subscription_list_params", + False, + ), + "SubscriptionListParamsCreated": ( + "stripe.params._subscription_list_params", + False, + ), + "SubscriptionListParamsCurrentPeriodEnd": ( + "stripe.params._subscription_list_params", + False, + ), + "SubscriptionListParamsCurrentPeriodStart": ( + "stripe.params._subscription_list_params", + False, + ), + "SubscriptionMigrateParams": ( + "stripe.params._subscription_migrate_params", + False, + ), + "SubscriptionMigrateParamsBillingMode": ( + "stripe.params._subscription_migrate_params", + False, + ), + "SubscriptionMigrateParamsBillingModeFlexible": ( + "stripe.params._subscription_migrate_params", + False, + ), + "SubscriptionModifyParams": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItem": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItemDiscount": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItemPeriod": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAddInvoiceItemPriceData": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAutomaticTax": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsAutomaticTaxLiability": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsBillingThresholds": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsCancellationDetails": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsDiscount": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsInvoiceSettings": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsInvoiceSettingsIssuer": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsItem": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsItemBillingThresholds": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsItemDiscount": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsItemPriceData": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsItemPriceDataRecurring": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPauseCollection": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettings": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsPendingInvoiceItemInterval": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsTransferData": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsTrialSettings": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionModifyParamsTrialSettingsEndBehavior": ( + "stripe.params._subscription_modify_params", + False, + ), + "SubscriptionResumeParams": ( + "stripe.params._subscription_resume_params", + False, + ), + "SubscriptionRetrieveParams": ( + "stripe.params._subscription_retrieve_params", + False, + ), + "SubscriptionScheduleCancelParams": ( + "stripe.params._subscription_schedule_cancel_params", + False, + ), + "SubscriptionScheduleCreateParams": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsBillingMode": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsBillingModeFlexible": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettings": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTax": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsBillingThresholds": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettings": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsDefaultSettingsTransferData": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhase": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItem": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemDiscount": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriod": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAddInvoiceItemPriceData": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAutomaticTax": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseBillingThresholds": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseDiscount": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseDuration": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseInvoiceSettings": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseItem": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseItemBillingThresholds": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseItemDiscount": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseItemPriceData": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseItemPriceDataRecurring": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleCreateParamsPhaseTransferData": ( + "stripe.params._subscription_schedule_create_params", + False, + ), + "SubscriptionScheduleListParams": ( + "stripe.params._subscription_schedule_list_params", + False, + ), + "SubscriptionScheduleListParamsCanceledAt": ( + "stripe.params._subscription_schedule_list_params", + False, + ), + "SubscriptionScheduleListParamsCompletedAt": ( + "stripe.params._subscription_schedule_list_params", + False, + ), + "SubscriptionScheduleListParamsCreated": ( + "stripe.params._subscription_schedule_list_params", + False, + ), + "SubscriptionScheduleListParamsReleasedAt": ( + "stripe.params._subscription_schedule_list_params", + False, + ), + "SubscriptionScheduleModifyParams": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettings": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTax": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsBillingThresholds": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettings": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsDefaultSettingsTransferData": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhase": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItem": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemDiscount": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriod": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAddInvoiceItemPriceData": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAutomaticTax": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseBillingThresholds": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseDiscount": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseDuration": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseInvoiceSettings": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseItem": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseItemBillingThresholds": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseItemDiscount": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseItemPriceData": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseItemPriceDataRecurring": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleModifyParamsPhaseTransferData": ( + "stripe.params._subscription_schedule_modify_params", + False, + ), + "SubscriptionScheduleReleaseParams": ( + "stripe.params._subscription_schedule_release_params", + False, + ), + "SubscriptionScheduleRetrieveParams": ( + "stripe.params._subscription_schedule_retrieve_params", + False, + ), + "SubscriptionScheduleUpdateParams": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettings": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTax": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsBillingThresholds": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettings": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsDefaultSettingsTransferData": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhase": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItem": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemDiscount": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriod": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAddInvoiceItemPriceData": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAutomaticTax": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseAutomaticTaxLiability": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseBillingThresholds": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseDiscount": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseDuration": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseInvoiceSettings": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseInvoiceSettingsIssuer": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseItem": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseItemBillingThresholds": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseItemDiscount": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseItemPriceData": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseItemPriceDataRecurring": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionScheduleUpdateParamsPhaseTransferData": ( + "stripe.params._subscription_schedule_update_params", + False, + ), + "SubscriptionSearchParams": ( + "stripe.params._subscription_search_params", + False, + ), + "SubscriptionUpdateParams": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItem": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItemDiscount": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItemPeriod": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItemPeriodEnd": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItemPeriodStart": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAddInvoiceItemPriceData": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAutomaticTax": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsAutomaticTaxLiability": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsBillingThresholds": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsCancellationDetails": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsDiscount": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsInvoiceSettings": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsInvoiceSettingsIssuer": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsItem": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsItemBillingThresholds": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsItemDiscount": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsItemPriceData": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsItemPriceDataRecurring": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPauseCollection": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettings": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptions": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebit": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsAcssDebitMandateOptions": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsBancontact": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCard": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCardMandateOptions": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalance": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransfer": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsKonbini": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsSepaDebit": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccount": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnections": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPaymentSettingsPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsPendingInvoiceItemInterval": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsTransferData": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsTrialSettings": ( + "stripe.params._subscription_update_params", + False, + ), + "SubscriptionUpdateParamsTrialSettingsEndBehavior": ( + "stripe.params._subscription_update_params", + False, + ), + "TaxCodeListParams": ("stripe.params._tax_code_list_params", False), + "TaxCodeRetrieveParams": ( + "stripe.params._tax_code_retrieve_params", + False, + ), + "TaxIdCreateParams": ("stripe.params._tax_id_create_params", False), + "TaxIdCreateParamsOwner": ("stripe.params._tax_id_create_params", False), + "TaxIdDeleteParams": ("stripe.params._tax_id_delete_params", False), + "TaxIdListParams": ("stripe.params._tax_id_list_params", False), + "TaxIdListParamsOwner": ("stripe.params._tax_id_list_params", False), + "TaxIdRetrieveParams": ("stripe.params._tax_id_retrieve_params", False), + "TaxRateCreateParams": ("stripe.params._tax_rate_create_params", False), + "TaxRateListParams": ("stripe.params._tax_rate_list_params", False), + "TaxRateListParamsCreated": ("stripe.params._tax_rate_list_params", False), + "TaxRateModifyParams": ("stripe.params._tax_rate_modify_params", False), + "TaxRateRetrieveParams": ( + "stripe.params._tax_rate_retrieve_params", + False, + ), + "TaxRateUpdateParams": ("stripe.params._tax_rate_update_params", False), + "TokenCreateParams": ("stripe.params._token_create_params", False), + "TokenCreateParamsAccount": ("stripe.params._token_create_params", False), + "TokenCreateParamsAccountCompany": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyAddress": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyAddressKana": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyAddressKanji": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyDirectorshipDeclaration": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyOwnershipDeclaration": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyRegistrationDate": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyRepresentativeDeclaration": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyVerification": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountCompanyVerificationDocument": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividual": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualAddress": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualAddressKana": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualAddressKanji": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualDob": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualRegisteredAddress": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualRelationship": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualVerification": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualVerificationAdditionalDocument": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsAccountIndividualVerificationDocument": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsBankAccount": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsCard": ("stripe.params._token_create_params", False), + "TokenCreateParamsCardNetworks": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsCvcUpdate": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPerson": ("stripe.params._token_create_params", False), + "TokenCreateParamsPersonAdditionalTosAcceptances": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonAdditionalTosAcceptancesAccount": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonAddress": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonAddressKana": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonAddressKanji": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonDob": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonDocuments": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonDocumentsCompanyAuthorization": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonDocumentsPassport": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonDocumentsVisa": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonRegisteredAddress": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonRelationship": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonUsCfpbData": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonUsCfpbDataEthnicityDetails": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonUsCfpbDataRaceDetails": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonVerification": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonVerificationAdditionalDocument": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPersonVerificationDocument": ( + "stripe.params._token_create_params", + False, + ), + "TokenCreateParamsPii": ("stripe.params._token_create_params", False), + "TokenRetrieveParams": ("stripe.params._token_retrieve_params", False), + "TopupCancelParams": ("stripe.params._topup_cancel_params", False), + "TopupCreateParams": ("stripe.params._topup_create_params", False), + "TopupListParams": ("stripe.params._topup_list_params", False), + "TopupListParamsAmount": ("stripe.params._topup_list_params", False), + "TopupListParamsCreated": ("stripe.params._topup_list_params", False), + "TopupModifyParams": ("stripe.params._topup_modify_params", False), + "TopupRetrieveParams": ("stripe.params._topup_retrieve_params", False), + "TopupUpdateParams": ("stripe.params._topup_update_params", False), + "TransferCreateParams": ("stripe.params._transfer_create_params", False), + "TransferCreateReversalParams": ( + "stripe.params._transfer_create_reversal_params", + False, + ), + "TransferListParams": ("stripe.params._transfer_list_params", False), + "TransferListParamsCreated": ( + "stripe.params._transfer_list_params", + False, + ), + "TransferListReversalsParams": ( + "stripe.params._transfer_list_reversals_params", + False, + ), + "TransferModifyParams": ("stripe.params._transfer_modify_params", False), + "TransferModifyReversalParams": ( + "stripe.params._transfer_modify_reversal_params", + False, + ), + "TransferRetrieveParams": ( + "stripe.params._transfer_retrieve_params", + False, + ), + "TransferRetrieveReversalParams": ( + "stripe.params._transfer_retrieve_reversal_params", + False, + ), + "TransferReversalCreateParams": ( + "stripe.params._transfer_reversal_create_params", + False, + ), + "TransferReversalListParams": ( + "stripe.params._transfer_reversal_list_params", + False, + ), + "TransferReversalRetrieveParams": ( + "stripe.params._transfer_reversal_retrieve_params", + False, + ), + "TransferReversalUpdateParams": ( + "stripe.params._transfer_reversal_update_params", + False, + ), + "TransferUpdateParams": ("stripe.params._transfer_update_params", False), + "WebhookEndpointCreateParams": ( + "stripe.params._webhook_endpoint_create_params", + False, + ), + "WebhookEndpointDeleteParams": ( + "stripe.params._webhook_endpoint_delete_params", + False, + ), + "WebhookEndpointListParams": ( + "stripe.params._webhook_endpoint_list_params", + False, + ), + "WebhookEndpointModifyParams": ( + "stripe.params._webhook_endpoint_modify_params", + False, + ), + "WebhookEndpointRetrieveParams": ( + "stripe.params._webhook_endpoint_retrieve_params", + False, + ), + "WebhookEndpointUpdateParams": ( + "stripe.params._webhook_endpoint_update_params", + False, + ), +} +if not TYPE_CHECKING: + + def __getattr__(name): + try: + target, is_submodule = _import_map[name] + module = import_module(target) + if is_submodule: + return module + + return getattr( + module, + name, + ) + except KeyError: + raise AttributeError() diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/params/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..939c6557a7722ce8a1702963dc87143141106e5b GIT binary patch literal 342235 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 R(Q<64A}8-TP=FcIe*mtsm0kb< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apple_pay_domain_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apple_pay_domain_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..969c6ab23f9b7bd795b0db59106b815f8939a656 GIT binary patch literal 5028 zcmd5AU5^{p_0EUKQD>|BZCc(*!ZSKr& z*<~wLBtoiGseNkbTh&TPtAtJ-D1&a^vIoe_vgE)Xkqi&$w}xFhj%R%cf;rHOyxpdDsR6|ZYW9FgtCax-07Pu0-a^-+agB#CS zl9eC1r(#V4HMt{o3aF`7p)?yz4{JSirAnY!%pU@!#Vkuxpv)lNti(S{SSQy*PmbpB*Agx1dK8J<2!1>otP6L-Rqo0WX2sUU zb?L5hCzQM+a_-Bd6z?r)#qi@USTq|&6J5R7GFOZIa^*e`y93;rd28>GzH&lm%my&) zoY~Xg=g2QM1e$}L0?BOEH>4nS#q?~$v@B|S9?b)VP6F7Fse)XpL3soP%GD-yO`oEw zHsnC|Z09OlX&~ew4bR>=CtzT=rr=PdI8-BB;zuNR|XW?wKd86LArk^!yH|&O` zuh@+h-Kk&ETdV#%&Bm$niIcil_w9uiFqqeDPxn}o(2f3$41N*A<9VapTBWnF@7hQN zhQ3hdTGcKbx1Oybz#Maz2_!Oc7F@tbt3#9J?JK} z;_rih{!Y9teHe?8fk!QpU#p);KNm_Woq=O9e_=|ab2!8>rUeA3rb=Y{Ok{h*^i~@+ z`UG;IiD?l)-`MmpjDi%`GiO~pJT@*vTX3EexW>-_{F8jW%_#YqFY-q=^GCjkStgHy zStc`I4cn$8gQ{3p-+ud{^J}n$54}4Cg?nZG0LvcBSIoI2`&Z9zO@9KY4XwYZz&}jg@!r;~P)8P}oU4x9$|FCl6xO*1BUTdQz zuM6wq-Po8)r}RpFug4=iROGyERZfRJnF)H+V@up1g>8tedeK85u_4hXQLtayJiGuD zDW11v2ew@sc@;*r18E*`d(Q)aB$Z{AK6p5+4@p)Z6s!*ktPhEV#+`js zgEwKdF535-)Q3?mLbg|S$@X!INtX8YMo;2!TcQuubQGuYio>eW@cN_^Y_PY39`=GcW{85}`X0%FN^LZQsX>vqZUs*sxkEbaA|1 zQvBwjqwVl=*v@kobu{W~2igNy8&%Y!T#dd2tChq`r6g2JX?X7%4b!y^BhU=PZCc9? z;wi&;ciD78iUcO7_-f}*sAmv6j-ZU-1q7!N`~blZ0c;SK2UxMxcZKoskMU(2jN!h#mVj zLdS`ID%|GyjvEyC27BYZkB8yrMWa?qbHNO6S;_|gjT#k-WgtjJ#AUzku-9~;_^U1G ziMUI#t}Dl94EsIbZg}t?h)1!P4CW$X6MI2y@4{w?cYu=-nI-Nf`xAuX-wnZRLABbX1 Vd7un|`&vyDw2v-6Ao$C+_%9vums0=$ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02d2df053d97aba38b201894e3ef94d68ebf9c25 GIT binary patch literal 823 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..deeb619f6c863b95aba391e53faa2beb9e243942 GIT binary patch literal 3156 zcmZ`5OK%&;dG^8O^0}g<)GxSNJ91Nz)G&%1?s!7bK{5nXahZn<7|mAb+qtPlz8Wt}0nQm=4`M~ldk?;|UR zGgj^hoc%LTbiG{vRqpPQ^T`{V|XUMP7IG4Cet(H3&&7QHhbR#@(^KE=PXp` zZ-77Rg2mTGoWYXCvzM|T&RW7n_Adh_GAxI14(F}RfP|FLnM^jp3xLZBo{v2Tl>7j< zkl;C7#06Yf9Xzv`@RFN=W+|bRtnz*I1n$9By^KrNh^5>Y`xM0*x{vBZ5xp`%ue67& zqv7bQVY-G_TP#EzLU|R|Cj)F1!l=dqpQ!%IIyM8U8jj;{sBOQc2EIxnZPoBpV?X%n zDyRhwBZv$(45~H>zHR$0>a^7rj6KyP7?QwJS6YGU`GMNTL1GG9Q|ba-h^ia59ui20?aH{D$4%{BB=OZK6 zuoGQitz}zyM*V&KNZVU`{T=iVryD`gq%)dEqeG`m-_jT*@WJeF=jX2LwM*~Mhmzs4r;rkaG#pup6Ic)S zGdRp9P77tTMF{rHHeqEL3SctiZ7Y;r92ihsMkvLxGLtf8X@WBFWBa{z01r_B@s8Iz zpJMy}X)1jx1WYel9qvh@^QkyM<@?l3NBE4hxQ+;r?_@sX{+9U&RfXD1PTS0B@uR6$ z72<2>Ojh7}i#UY!wW<^frbEdu01pKU&kfhh_(%Mlj?8q1PKncAPNf`(* z8qnSffQP7q*88ypLb5tshkuep7UI><1c(n>@5eNiMle1)Vn_Igkhb z$!L=6TlQ*u^VosDjG6C&AZ0$hi~d!vJT0HH9-Ea8__}K0WM_PudM->akbPt zkpm8aBsfl_*jc6Q4r=`L;w#B?;y?!siY$RDWq!Sjo+%@77CjdKDSs}1G5*!Wmyl62 zJMv8Y)WND|&x|tWFd&1qZ}n^X&s>$SZQhzQyb0Edq1EBr&|uRBzhOh+K(jue(Jx<~ zQg2X@-5&s~bf%JmhyU2v>4}&E^L?VKvS(q#ngX|s)cj!CZ93S+9(3q=LVN=5i}Htg zE=nEB-T+w>J5ElGZXQ3-X({^(DA6|nK-rZ~?DAY`ncEWtWgsVN@F^jIe2aKdnpcNI zS=T+o#kwBmbsZA0$h5llW?-S4nsiKNrl}o%K-B*6oPJeFw&xNKtWBgp{wT@ zpQQ}6wtx^;!C@h4fY7rWz7J+jmjmr{DUa_?%2 zE5rBRPx1Vbog>w5?o3ZSlag}9dy6Tq9C{Eun%f?EwDi|Mb<1z{#J5sTY4pL>Zt+A< z1Xr`8Wh7O8;Kj_vJpr&?hV2#s`;pIN@(B&FAIn_k0^E}^#Du}r;-Zb7U8|0ShmryO zdXtXl$>EfX``?`UD*Nb+{XUkmTmA1(uwz5NioZY!>q=p{2MggL(|`&^ZyoxUWo7hSDNLx{LZnnJJXBZV@p3Fwv7z` E4B)pq7XSbN literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_refund_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a2c01cf7eb926208436dba90f6cbb8decb13fb9 GIT binary patch literal 6932 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 Y5{W17C)O1A)Y+(_-q?4a;8RZVZ;f-=;Q#;t literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_application_fee_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e556e5809bbe87c47a073e0fac910aaa5d4bcf19 GIT binary patch literal 4384 zcmbtXU2Ggz6~6PgJNxVL+KGRf&}r35P0nsfm8t+`klg#dH z@11pGcOyk&OP(TOeTroq5mGXPihGLoeiQ#37OSj0&@dd$Pye>5lVuxVl;eET>8tdY`Z=F+wp6y3wgR8FGFJAiXbYtQ5xs$|o~y{xuy9KX&RiOt z@6G4_$p(4B&z$y%UBjm_nX}6nCQ{U_+Md0D4cp3#zWQd(v)!uc_;T5#9@DTZHJ5ls z#kJ}V)5x58>*NvRwPQzKJN}iaH((+=S*tmA*<^}GF%x;Fd*&3LsaLIz&E!{Y>b*IA z4wspM>?!KVZYumclPGNW-JcomIKTfzQx-drhdln3{b2eiJ zVVI^l`R_dx!ia%B=4N__-mB9(VUv|@eJu|AMfn@TDBzr+J zbq!q~GE;i8j0TvD6mJmz| zXdW#JQ;KBWE4X;J zda?LArsqAkRy^i<*x7T~b?QG%Vx)I_9)Um-dqa9D95#;e2$8<*#Nr7Z0+UHitToEpyi_%-@fWeIG#U32yod+khG`k9_Hh`Lbft3xoTFh zp9(9>3~?)LBVLmHOvnW3L79(q_7LVoKV=x9eZyFI?orWei|hm)S_N_$wZu$f=U+EiLN{`*Y(=+f15@6q)zLMLql-|*jV6;xtVDidjVls_>pYEU3 zB|lc<1&lCv`*AlYb%creF@n81sjd%qs^Z(-FZQi+J7++FMUZFOVPF7~A^f1~2#_Be zC1IUCmS{{W5>o`!#u~pE|%;L=&Cc%2}j@Z)es!riL0nQ~BCcE_uwl}MLpjUCh zBEe-`^#V&^8k+=wug}_~(qDa<*U`C?(XJ0_=tbS<#8mtZ%#AIN32rXk3j z^b5_j_Jb4GPc*eHO>L~XeMfU(dvoyFRtjZ?S5YjJT~!iVvV{_fBpC+9O#yxnCRe`= z_%qi}5Zb#E0Sy>3u~(ouD5;-&21kT@dndvKx$Whmt*vD=<=I!R$ zBVQRNov)V3K3MGbQj&QhSY6N`?W;iI7*l^8$Uj(VZ96Tu_2b;m<=oEAZtEKZxAkQ| z?e<+u23Lk?)AtBJ6?P>*O6(DQ(Y8nyb|>sMFUvrpCj|_H$SNz(PYRxM?Lr-GgV2WJ z+`a*C%TXz|l!n-lZpR)1xA^);?L>~c7s>%(K`FHz%28K+5Jn(jdJKF-H_K(W4j`E| z>4Vs#P*(wBGcKv{c1*Wv2YMG~aTP|a7h|AenA?CHhPe$8W1iy~u|D)Lh!x+ptxJmn zImpD?>5`XuwvY*!^<%*)2y_3U93YH~w}D965-UAHZC9a4@Mi8&*K)M}HmK2~Kp=H; z9B={Lp$ou| ziNpVdG;2k#e10+}{6?6RlfO*>mlvm|@)_1uvhKk!pydcZN`Oxr#yfS>30Hay!>m?a z=u_a61X@hq?2$3plQ1X~R;$SYAie~hBKa~KPO@Pp>`KenaiDJ%$RNy8cEi5PbCmQl zQAVC+3;zLf|2wFe8DEjd*JME%{UnxEMp~oj;Gt$=;$QJzCHYrvaA|1YvbMjaz^D~N zx#6YZ@#WrKEw=0o zOsG%$;|fo$|0&bwmlyZPRDQ_c8hvyHzwM7KR&f1vv{?6ShbN;S^X6+%iGrB$ zD>)IggwWdu?PYHuVc?4%u2L3E!Wv+IAlht00b^G`2ZjGxKK}f^Xe)kyx%{h?uxp}Y zBKq@HNrut%2-Puwk ZE!L70O}w05)20O>dGo|Q#D2Nu{{qc3VEq69 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apps_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_apps_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63679641f99ab673a16de8a5793aa409fdb1a088 GIT binary patch literal 1525 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 V<>Eba;ojN()$s7Q9DXsI{14Sd%pw2) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86928a15dc50654ecf3ba9a93fe5d28fc4fd3796 GIT binary patch literal 1912 zcmbVM&2Jk;6rb5I+Z)?BPLs4jfu*P)OJXl6UjiWzX-kVrP1SIKMP;?!og{Ad!<|{X zb;$wI2nh)ZPUH@!s^u@?(wwkXilE{GHzTKja^lT?B&jNdU=DBI%=^uoH^2AZ{7|W= z2nPFOru}9Cpw+ivqAB{4DJ5&slYPZhFd_=AgI)3p ze$gx@HrXrrs;MTr;*I%bvy72|&LOw3f!rd&cg6HBv(hi=>Ti6ZJ=Xd!48q2DTSVj?E$tdH=&pXRXuc&z`>UPU{?O6c%mI4gihg>Sc1hOIVa1Vz4ur z87~uXOnT&!O>Lh!>D{RW5|T0c0H#eukcnMn3MEuRuIdUzbj2fJaV5~?L{r?tvf>su zWK;TAR0&XWAM0arH47zsTq{;ONieho-s3`;Je1KQUn!JCT^djxo0BmGDndMWd_7tO zv56uKQ!-q@Hw~sO{K1Q?O-6+6|j&U5<%D&9~P`0;FkjntQitZ--Q~ zHD>!Ak7${BUSou4AH9{{*$!5;Wk3aF1>E;Y9s|2_ay5!N>@~x1Lx(k4Qa4Q}^pmyW zgh4=@$jCx(WTCTXvkmau0Kbjg?;b$k4=-Uq7FS5LJ7)A2jLb(Y+MV_tF)ni!EZcP{ zVT_i6Qd$9_3zX9w7p?3;0F@Z=miHly=Ls0!b&b`~C&o%}(>O!eS`>DS^I=51#$p(* zL5Rkp?W~c&HF_lI8D9IU(dkF4Vemq8;grGJ5ovS)V6PBnqy!jN7No_}7HW3-aS@6s zDgIm2i)jY45^Uy%D#XKH1o0`_siWGVL3wgeu6=d!i;IKW3GTtN7L7wT=~DxUyZ-w2!H=dz6U3-=ZDW$}CQ z2G$F-2A3qMqT^hvb1}iiArP%R9o0M?md*NsL#M%*=YjIBj;lEvDdN`bKaiE0kMi?p zK>UjSI>1_e>c{%At@^RYd7C&6yiHX9e3ZPQ1YGViUOk^_4g4*hQ@<-Uur9P(x&k$1 z1-4HtD^@Mb58bZE^|EDM@7i8!p%NUWGh93c;trxua-F}3j^%>aCG$XRprL|ZdUen| z^?RW%t3THc-#_yFR&8M@!wO9Gnfo)(ZH>cptTwfX;cXonw41K}~W^lChn zb*Pojd3{pe3b7LPJ5cWFTaxY>Pj@VGGa>xd zrr&LIuSNFqec&HXIpfLQ=W)0AddmG9R0jk9a@k1`LlI;AP(gU%C-lrVntLGDwxtu> V(#zY@yF1DWtbTpvA%ZFK^fx3j^f>?k literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3806cb7e9e366709cd94a3063e70f6824829230d GIT binary patch literal 5164 zcmdTITW=g!`OIy1X1zDt>q{KR+2&$r;&_*&rD;njI2ZMjWD}CKf-Pt?-Z{3n*_qj% zGwWuJK@qg5q6oD@YW#qJARZEhOL#*<`~qIQT2NLaRSn_=-qzSD$WMId%u+* zSZTib=KId&JKz269}|fff*<{Kto-2^LVsl+onJIWHdX<-fh=SR6=VxVL14I85pAg` zaa^j%wo+6$E>|LUv>3J3qH1eJ&5jjgc3-iN^OQ>5P81V%vY50}#gu?>io{{9NF{Ce z7yJ2`Xl1}2EDj1tL@yyreFs?@7A$QS$bgmLeMb%?D`x63z3=brLl^wa<+8I-!Jg~P zUVP;erf!XtFwoIuT?G6!{%HCZy%`m>ZyuJ>FXx(<laO8+7#G(df1mRNQjqkFrXA1E`Un-vGFM&HxNce!9qpxHLyid zvc#f{6&$fdrX8-Ks3n~Moa;^o-6>eTBL!;|wa!Q!wIXbkhOh>Bl;JpLskkrDuNAY< zylnNoBi{+8qGJ3p{P;G0BIGBS6yf~jHh%Ik{M0sn3i#=FPpjp$gvQ@M0*1RkYO~NOc*}yll z)r#rCD)to3mR!dHN5NKS8Jgpp`RQ;uqqBtHcj4r#XHH!)3bW_WJl<*qw6Wc4+%5vx zMZ{9qE;6S|K$W*q!LB&UZK_&IXsrmALrTYfVBgSw;0c!cW3i~!H9fX9+M}`DMYC>W z$D@yz^V?4(C-XHN#p?V+f71eg15Z*y*)&TIrBy=twXXazE5ha10+}^-Vi~O5S66jy zEBje8GvUE@J7o`Z0NN<_$c`l}TLRmM@1BBHkIc#DkiHpW-st(F}~9!tO)3|U6tnTBQ7 zsjm2uc~S-xR&X8mR=vdF z+4XQ`=A`Rhg^GIl^Jb~?rn?m9(`Sk>>68_)S=;ZDRvO1$6)#}3?xTj1Cj&a@3zZM z*{<1L(dOz#sYVEPN+22yZR}?#CP+L5g=%TM$Wy*?*YroAk^x0;778I38gZf7Hu3l>l zA8N)AbtwC%Z#{i;rWwz72t(s*<3}5rW6k)n4r%|)t;MycjyK{Hfh@;i(;dkrEIVj} z9cg^G7T^SN04C zFF;T&;f_mDKN>_k_4`>F3C?18{4lymUWB>iO8^RbtXFRCGEB>a?ZExUm*-r!61dB= zjM#G+6>V*6UPj3b2D5}M{ zKRjaN_hG$_B>-oU06F1*Yv=DmJMm5Mm5;<5()SbvJ+%9A^aJ%*(%XWrke6U{u1E4R z!(IVU=xA}MM~j9@>rRQBWdqLv*rC37pr&BV^7!MG7;x)sE;HBP(7(26b71J+z;t6^ z`cZ8T9sz9*CjYrprEM8ByhY=%(07hJFZ^0K9{Y{9iI|@A{>-|8l4h$I4i7(m>o7`05?!w(8a=XCcktv-`gSb>ZS|al9YLHU^pJ1 z%e#7|?nX@V;$c~Q03Mo#L%fUDRZ&sfDth6ZaQ*BDqpMSE z`<`ixeZJBEY*RkFDW4XU*ay(Xv3L8Nh!UB#%w!`z)s&~89K*~AN{uw-;rmLuEhd#1 z7!BQLfk_~L8AJ6sd6_Ap=b zNk^`Wf-)J-1`JNH`{2(O*LLL_@-Vj#*Hb|s@+ZRTXi%uE{J$N;td^n51^@04<~aUP zcM!i?7(x5NTWo)Chga+V>9cbM<`{ki8f(}fFgxqT`3)#&&3S$84+a?cnui_AZb^Z6 za1ThZC1%2nf=(ybY52N-7O-0wR9m>Hu|I)=PAI$!C`g9sA7EPRY|AEVh%(D6T`obR@~*Y9>4tpdfx_r~r+)*>=PLpL literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_balance_settings_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..034ed1641be983e668790d0ee09af43750347b18 GIT binary patch literal 2945 zcmdT`&2Jk;6rb5I+Z)?;-8M~AqHYT*HEp~~L2YUIP}5dzRn?6WIABy(+uf;Sx*zV$ z+B6{tL@OjDByNN=aH#@+0pc&<(wwkXiU4ten~@tpIq_z9ohDA&h)N)_hqrI${pQWQ zuX*!*E~g^+*dN37g)Bn9@ImjB6Q|||WEsz$ux47k~9HsVuG&dpcz7zyYiveWmFogsKpjQ6eXm{m&y zzwto{hq>v1)*ED+&{o|dB_T{-YXo)QGo4VfOcrp+8*fcsFwR}NaPG?G%0-yiF=0BU zXThQ%sCzXAQ~4=!yGd9OFXl5NeV{1<8<7^7G^y!w!2UkKn+@9x60sE@HKwU#(ESRS z1w>F4+o&pJPzKpKTOgt>?gNP}0VhYCVyA8@V7FYAwnb$CC9gxNTk0ABl(H=<3#imA zF6G0)KI0PqRzjr_*-tZY;xOe$zGgJdM+zlDlX{ffYbC(~79pNWeB7M?vVZ~%zv#2^ zJbHIMvNtc-qAktidEsk$F-f;YAr?-flCt`pswH19EKIu*2UTN9RJEHv)l98cZxK(k ze9t3RKy1ylEWhamJ^hvO+sMd0Dee$6=A8O$ylcBQrtJ zV5fE6_AORsQ682p-_;YWZZ?A%;stff&eND-pNDJY}D_I zVfKc}h+*0`C5+J=*iZ97?hBOrBupDLPFjFUj5s$RK^S)`cxcttXMC6FHSdmop0Hbi z-_S4l0ddAAe4ksXPngy%;@LVlsiiyh8+v0lnDM(s2RZ{NH{3-^F5i_i1+{}R8MO=RHmBHKnC!j-*0U%t%wAyVei(%Lo;PB| z+~_t=i($`mJ?DY^ivC*Xz2e{x#nGkW=w|=zIt>2XmH%_26FU<4bhQh&JNi%?!(ZT| z>X(@@OnJ5b%jNs+S}DYr=KrsFrG^jnurcs-FL-W?C@amVGtBjOl;ln=$Ko@v_;Cd> zxLrZek*$LE-xb7j+;V>J(@{<~`lUh-@X5{TpN%a~lK#HQHBj`#)bIDylTx1^ z0&OLsQYoe3E;T&UC592IhT-~l)8Ty9Fm5+ZCzeo&Tk#Ah2RS*+$q^v;QRM!pq$w|_ zi13?%wSnA29RU* zxnobc>dfmKwmPv?IJx~+|7g)ee!kdfZf~Vj2nUn?XT<+rQ=q&Ng-S5nfMyeWFzQ`9 z;~9h835ds_J2I+p3qh92T0PQ%JCDWytz}YUAOBWF=L6&$F52e zFj>Q|$2iKzIL8Ywiu`K&l{jx+qr9#0Hx3&I(h)JnD+p W1X)>8fIL*MVXS_BeFgDZ12oE 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 Ze?AsVNb?eqhw=qMkiW{#BlhQx{{dd$mN@_b literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_bank_account.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_bank_account.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80e2cb2c64367ba724f29afcf023971e69e7f58d GIT binary patch literal 12983 zcmdTqYj7LKc?aO|Ac+?Vk|H6Igd|EN^Z+ece!ER%O13Q9w8xLQhTAzGaZBv((wW8Hs!R@ z^hdvM_x5mr07_|_AHk4&d%NF$`|bDIZ@;}C#$w$P{LCMx_5W5S>0j|h{K8IU{Xd{` zLDD46SCmS=yw8Vqf6-qGk@GMoL}zE>;f}yGuR!9##(* zqor6r#_Ew`yp+f%O38eZy>}IROMUr1R_`vRO8xo%(m;NoG?*VOZOU&d4dsVQ!};M- zI-h1RJ;lwXE%_~_k^D$$G(YN-$S92hebM4rDU;7Im{@UZX|I}#8PLAM5sPjdqO{{m$P9Y z6~}x@rM7%XFIcwxxNcf@yHXFwYEgGtp4cOtwb&F7d2t8M> zsD)#8?AaHdI;>0|IXwN?qce}dO!Bl!amGy#spVr1a~LzoQz}(UW`T2&mtD@w`dk22 zh)8*#CguIlfhy$#nm;d-APH%H6a*7SSPMJ|btWbm#1tfvD=-p&`7YKPg4VF7wVU*i zs21^H=t2x#612x0oZUCI^xV`Ebz9;<5gX~j8FzaH&VC?91IBh#gY2#R%3u!xEldnJxfBAkgKn6E}-PwS3$7~`4 zZ86K*L<2g%$uE&1ZSsnb&(vW=);of1MD;EY`d z?+9(`H7UOtXusn%$(?Nryzle8kB~0Xt?mDYKR;T#Gkd`9@tCIi9pF)S27b>j5R+tP z!D=%q_i1KEr6f~PYb8>)GTgzK8KazeNqD-KG6wTcX0Dszc(R_#}3(Q}cT(GQ)dH>XuW)#ev$=qD7V3elRioTsV;EJFj%ZRY3S~lkhWwU7D zIrXxNzKWCMpmwRr%o#LOFv?|cokVk&lN0N#WeRFJGuyga7^IO|-GW}K!Q#!#2~sTX z$>2JW6F_ejSpg_@zR;pxJ_dlZ;2|9jJWYz=rM1j_RoBSKwYA0PS zqF0oDe0!Em*?%BI^WC{RnsVeJ-DD-HN~_*0hEdX&!SQ=G-8jp!Y%0Y z3n$bX^p-)c1xuMVPTFIwP!*~lM^q(MFCxH*0GO@9^f+II8gqJ)C}p)o?8yzg6^)c@ zMcCzu)|d&54#JKa8}9|!B2a0@tfI~n1tS2U2puu(rM^l@# z=&fG36J!?j6-8AbfXrg9+1}RzVnTS?5Jrp9als6?8$wDIt7d~+X3@2Rgu#Ri8|)OY zB(PWruI=5of>7p(F3pM+mTa9rJ9*Rlmah>xQoQBz+y?WW5tVrg;Nr6;g6E3j*)OIzmJ^cVY z2UZRKjZt=MXmIOg0o{S2E;$e>lt2RkJ$Ob9jxVsm-*OGy$G`ws1UMBux3pCe7L=eP z=PCka6&xEzD)w--Y*s53gMxQ#XrEQ95PJ+fpFXD-xI8r2oC@Gg;J79H#Li{_Cqxh? z*nrz{OE_@q^Y%!4u!2EpwPM-3J9RU+r<4s#aaUqbwg+yrh;1Dp!Tq}n9q#~Bt$-%r zKE?Refqrtb0<6>Qt?iM_fwltc3r3}8cVMUkGEYg(ET~}09cXsoxL`NNWr5x+CETGi z9mt|;RjYzGvpVro*OYR#G>f~VP>6~4xSAlDs5?yBFwaiP;Ha>@zr#$XiJDCn#`Kzk zX#*sWP1->KCCC<3sw{Nv#8?M|GK35xuMZZ2SlS z=@f{%T=sXu2bMvJ%2F(y#LcV+;swyt4X}W|LoNhhIv7M{!LW=5JuMDI_y@}{l%h)K zA#Q8GIJBk~dv2B;#Hes6B1Y9zT#Ih8FUJ-{c*^(B=J^Cj6|zSZ(nVBJc@?(PW=(b= z-AG9%1xNQ=xa9zf(~=XhHEWCm<1q>r)-|);0Xjx%;2YpLRklFVEgrcE#)%D^80r9U zePWXgx9jKrVo$rSmJst6{DIAslL{NF!}u0`b1335nZupt-Jux*)e@|?3M$u3AK$$> zTj1D%yC0mP8mc$iv>IWX4P|LoP0>$Il0p@OY17`^7J+f1OsHw!(bP!^<|#o=ymvvb zfcwFy3}bsRJQKF%2UH`J*GND5EQmrqU|BIYs6s7xJ!V6nLO zA;UNZTmIBT;800fn>tR)$ES+=>{O)&##p{Hw{QOxMzDJ^(F&(9a|*CRN_YxfaO3Qs zgDo@24z4r<(@nxZJ0!m@t@aJC`Csz&PJJ4f^`+wL(yT8QUwb&IF{f~9P zjsOV|6IrSq;)z^4+5{S>Kqs0w4|44gCbz04_&2~2s;~HhAMGOQ&M~n_p68)Qnjn1vv6S5?7=FMFyGW zmDS8VY>s8o#*@m3;D&FC{yEHNhqx>*`{7OD5jV=M=wkvu<-KRic{*MJo|%uqxL2gLxRf4w zXXN6@+hgzV{*%H7yY63(KX5kiVIuWmw0F60q8^=GjV7)}$Li6s)#T7>GPSyCWGyVk zGV78Yi?0X6$?i2N+||ttrO+xkCRU{If>iT?0(=*$GtB(p#a)PrTz6JL{}Sq_`n=AF zujV`wjrYnxbW-Yy-o}LVZvoty&6Z74oMU{ut?AzKOcxi^(H{W9rbVK@u|+-%l}@^= z`9S+zodrPWcg1-w`rh{o4Ft^#Fg7tp(7yr@@EQF=30MXM@+=TaF4$4-Ng%0%>ht#i zdRt3-7nha;XeRz-|JB4~Jpp3wUyUZOMn~#V*z(6#Q^O$UWERAX5|)L8TMhS3z_b1? z6pu;1jtmeB{n;At8MyTQRbcbi{TBjX2?nKxG2bJ7E%L3v312qES^F12FSEx6lV`F) z`q$Wu()3v2K#LVZwUYumYCWDB1*;ov)LTiWU$T~CVG=s4+ahlvag%~C1Ey0QC;!Lh z$yFiNuyFrT_YX_50cHb~jDPG+<<$KS!SH2va zY8D!LV{~il%P<#ne(=)zJKc7>KJ9O8)r;^+hp<&T1Fq8Dx*ND)Yj?Nrm)UnmjXtbh zab8c$i-A}CN2OPNR!l%F1}qFQ*w39Ox)^v_G(Hyq$M8tmXJkiB)Tbjcjn!_HNWuQ4>r34-=xad0t zywySis2%2CD4FyR@vT<`KH`GeJoWsvQ7vj2 zIOM`@Hs1Xk)h=6r1v%}2jaNTWLYGDDwD9gyG84ECgnb+wRsOA&4P$fiO~8z)n$@vJv_ZI5KD%aGJJd zSVEbvO`cUvVt2E|1SBP_vfa(&F>Gg8OjI3=ukgoWEQ;3H>~_SwxDWpb?d}r*c|}@H z_Fo8}51$Qwm`E?(wUXF+R{pT3@7#f<^anlTtD81oIDP)~*(0B%HeXHcsHb+Uq$bWD zT1{ z&o15fL2SqBVERJweDUlfpQO@PQ{(m2_)2OgqDwEQb}mPELW$@m-o598#O~Gf)^~PY z+;uLD=$>C0-izq=ym9n;NJ{No^ZR=5UA_Mcp9XxrU-W&P>|YPV{sR6W7XK_NZQb!l zFMns(ceUlj^m1gH2Vvfr0Idhbw2q_=NwOZAKAHOn>9?E5&gKtuJ+9M}EI>~Wd3Rl_5387h#BAnQhnP^c) zXv*bs+03L#NJe~l;$Vb}C-xBvet9zGqVXayr>g9;yDX}$GwL8GPms}SEB|i3(AyxV6=jPmh^ezV`Z3524j12p2Y073^ha1jhfTkZ zMRRV5rz|jUF$n+WTfnW?rBAyf!N^*_boU|OE03KUTAH|&tEczXd-t!%)7RyL{@~Qo zFJG7NdHrGbdTx=wu01SE@xgP(CA~g)M?JQ0MaJAA;0j6UZI`xR99faU{dQ=8Oyr&C z_pZoe0)izWA6Y)|XnoJo`ov@P(Z^Th$3-zl0mZ@+ZlVs1sA6b(T4{E~LQRF93X$m625FTJ$=Jdiyq8q(XA zw;iYt-?bv&C7QaTXC4vtXyVLKQHPnWrRhtlr6cEmtsdX$Sv%}%Gxg~96?waWg~dNu z@0;|{GcdCB%=sr)Wbi_KfwANn$Xd&=*r*ihUGv9--K%{AYXN+2omiecSl{{(d;7R6 zzML4ZckTEr2z~1T0lk)yLh;og3=IXNtB?r~;B(8i_u*gsSVOKg(TkC7n)-PrDuMUlW8VsaEb$O6yYtdR~vg3Bb z*_4H|i`BUhy(b?L}Q(t~yB!G8%PugP0K2PY7^-aQ@hg;wRE ZrIETku__NQ?XAm`t8(J=Fm^EQ_#d8jFwX!0 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_base_address.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_base_address.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e1b11232d65eda9ae12b2de2afcf0a101d73e1c GIT binary patch literal 785 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 B7P|ld literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_capability.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_capability.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d71eb39735163a2cab6132f0b5a5ff08e4579daf GIT binary patch literal 8681 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 N)_>$90iQUN{tLS*-5US^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_card.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_card.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ab0eb848503afb8ec5a7f2588d7533889710f4f GIT binary patch literal 8650 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff29e4510bf1ea8c48ea907462a6134ed3c786ac GIT binary patch literal 61108 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_charge_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6618e17ed9e332edbf4cfbc14ff1805273136384 GIT binary patch literal 8474 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_checkout_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_checkout_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72cc37ec198643742931670a323eabed1491da7c GIT binary patch literal 1558 zcma)6&2Jk;6o0cH_S&%>CpDy{G_vZbl0o%SO2wrD(hyn{5h0}QXZs0t!IAaOwnC%9I*@DFg{!i7ts2q~+uYZ+G2DasR=`lXT+VxOMHChX-wdi+)22D)J zqw{$Nv$kaFl#-8v<2O+A1zwqfMQpH?Pw?tYwUyhb-+(z{tLuiP+1ff-`UWf$D>DOi zJsg}!awT6AW#Cy1YAIvw#A(edWZJI&T2^K5g8c}u42%$l8Eu;6<)8#mrGg%hyr9du~UGhxPvnlyzp zMY7T9@gk;Mx%e*t8tJzVqg9k~IbDMTqxdAdYh2vA^ovnDM%_Qrk#I%m{Di_L%1hRG_Toa;XpDbbKGysgQE5hi-{0-gpe3j zCGjB{IY4QWpVF1f|E=3!#+T4rc(|;=ky6an4r=E2+HUREZlSs{wKa0^YVDwWWovP- z{MvqboYZvx5%N*{KcZekgv zwCQ<1B8#sA&Oy|ed{kb!m<&gYxh{?m;j$rxoU`{LOn45(Xc?4-3%Hzq4*R9iJ#F+v zBl_5jOi8bC*~^jFbUh!woV+qL=IKOm*_&Z5t_#joT;rjj*TIRSY&l?_e6<9ZRSEy! zQ^hN3;-?UQge>HlaXWq;-{E!K%G-#yaX}Obd7c4s;}B|x@cM6R`A~cJCY7 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_client_options.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_client_options.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b4eea98a7e66db94cc310799d8a07f43546422d GIT binary patch literal 891 zcmZ8f&ui2`6n>Lmn{B&op=#^aAB7fik#4MdY(2Dsp4O8hdl}MX+Qw!xF_SKhtl*(S z3m)22*PB-n{}PWy2mwLx{j#z-h1D?Z}Pr*GoLG!5kM2atKKI9@LhtT z>4T(y1CwKL!6iPlNRtpy;32rm9=Iw~KB@(;sU})Y{~RuD+)?ODL?A zjng&XV?kU96It2GA@$r$4@_q66M5Et9o;c>NC)V! z1|02Kni?61qLOrS4mB;)1oJokTNbkA9NL*-JdtduvUhQKQ zYHFj=sG0JQf!$)1W+RlgxVz)ae2mf;JGNg`B00uPMOE1ZrFIbT*p{zFAW>WA+>geP z@ByLu; zt_en_LJ?KTp;9juRI1coBQE(Ddg-MXBde0TfD-kh=UjVa(3}j#n*;vPz^MWPVqAmu!Xi0WLPhdn7 ztQT~Wm9$fOD$pe?*-q=}fKOUocDLRQe9Dj)1tV>A0qr&vpqcMQT@la}GSm%ZWGUVe z!}xlpkt_E6$u~vpXXZR+*618%%Vvdgfoazq<`LU5>Q*55_`&^2GCn;yKJ(%16j&%9 zF@v(x6Y6~iwiWMGlAWv9YLNw!s$HPP;NP+}e8qP4D1mkan@q4mv zAQb^fy!dVS_izNrw|EPAu?9UAn&@kIL`}SdLm@^D^bF4y1wR3~QRd5pm{rpw1OSj+ zYAyI_MjzFw>p9F%6H>9tu1ko^BjoezuMF*>V^eLhx}r@`cgb^V+O*?Q>-t^CSu(4O z+TC(xiB=75nO2uI%beG04ey~-eW!HerskR+yE?hOucJLV^E9<9U);X*t6Vq)+3VPF>;i0l24)MT|AS2vUjo^ufaIF6 zCVJc|SYF(8s42v#HN~9>@iocgK7-W+Tm{sWn&@+0nKLUs8#fU~r!n}+*y9{3ATJmJ z+`$MG7%Vffvz>@}f*+$5@d0{_Sr$aal&=uCJ|DG%>!%i}SN1%{V1yt)<%T=Ii<}ly zo}rCN#-Oa~7+9L~b&m%7B8&`vN~)G^>UT%oyucirI|{no&qPf49$b!5o-g(WKiN%4 z6rYgQ!T*)*M0XjC-71iEbRcBXg}s9IT-q(XyQ}0kXSN6S-Yo3phPId5xwksGfy0D2 zq;B3jl2N9wljEP?KxzEoeCM=trK6OTQIEP%-{tMmAN$%DuCABe&ooMAIJH4Z=_oiAs(|@I;oUpDOsr|U{&1WwV`~<=N E1&A{8V*mgE literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0b35a7646e531c066148af4b2b367aeec6214a6 GIT binary patch literal 40231 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 AK>z>% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_confirmation_token_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef42db0cdef138db0d1c24a98185951d0905f5bf GIT binary patch literal 2118 zcmcgt&2Jk;6rb5$uh;93*iM=>fi@{nA`{|OQV9f9g*K!us%oO97kt@nypwd3{cvYC zCP`BX+6V~=2~LE6AxilR;6LD!h(oOv5g;ybGjakbC*JIOlT=3Ht#`{unj4ha?lm{Kil=#ckr3!3n5v+3!%VQ~)%*48|ED zBf4RllrTnfV4*z#C5g)1OVMe>oZ|@;&%IEdnADi%lkqw@7z>1H zEPNH3-kplhqNh@>uLcVAI%M$Lxvt7}_*0Hu3J@im0r&vz7g4^inHg?o@}J)P_+~SI zs+qs^BtN~IpZ;!ia_7SIx1(2EA}UGk_Zi|Bq~Ygv{i9;PU6frub1JfsWbtD*8nEQhXnmV01xPA(3b= zm-;xI;?U1w0H6{xAr~`2H`uCMqeI+-H=I5LaMXHw26jO%u65+RHu|?si5y4yRd)b> zMt_{>PO<+<@%(P_{J-l@?~Bl%-rVm`H>o8-&kh+U`NP*P%lIpNSyI1Ffm9MIl~NKY zue*jrbUjdY-SNz2o68wpzqf4I9g7I8r2JXavmBlS*g|xe%RGOYi6IXHdkCzoz;U>JQHjw-WFLN)-lo24COJztKway@HBEJ3}w+7RFlKucadOOgqh`$^U$Q zpP!GyT*c?C_ebP9G5e#EbN(E+;ZV64_3skZz`zGI v8wY5K7~=yO;fX!;!uROh9vb^m%i literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_connect_collection_transfer.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_connect_collection_transfer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3fc82b4a589a4274f795a3a8206c43c5c20c6c4 GIT binary patch literal 1071 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_createable_api_resource.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_createable_api_resource.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6ca6f99bde5bf28f6457b81f8a820b136ecd591 GIT binary patch literal 1005 zcmZuwy=xRf6o0c{_qFFGCMo}?bU!(b56#x8nlk;<9fyHmk|dGp@94}S0WW?ogRWe|)0I@x-R06t4& zu#CRayDyY22p~WqM94u%>Po0Ys-s4lqh+=l>XG3X2o%6-pkZTA?<#o(r=Y+b1jZ%= z1&navgt+dieP6Ltv`Sy4VIf|*cIW0@Op`Y8v8C|BLMO%dJi;~KqfGeCc}7|(zTI5L zKI3RXTfDL`D-z~s8EbGJgp%Nf*Ul^K0WdLOz?I{CR2F%Ta zr8c;hCRz7J>JcxZmPTZGB5U!QOPR-7zDw|G8&k$he&|u^wn-=mRQ-^WV&9M$U6+?#H%fwbD0S0y zSKD6L_f#@YA}l%yGTO+P$le7qE)H^B3i%B(A?Hg^39$+L`pBW8>E-Rw?;wtz3dZO+ zd6DPIl!jH}<2e)cf7&PV5psidQo$?%1U9P-7{^Fkb|2%!VG@DZjCp#Dj#JehsE{!Tl$fqobUDnGlmgPu2jf>5(szX3tf B^!5M% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe8934a0b54cf6191f7711e946277c337216f15a GIT binary patch literal 19142 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_line_item.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_line_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97a53b0c2eaf9ae89bc3de05a605f5f63b7c955c GIT binary patch literal 3665 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 D8O$E5 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_credit_note_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b708396e2e6604a92f59a42263ba11cc1301d295 GIT binary patch literal 9473 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 HIfwrPt}3WS literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5bccf8078fd39df3789c9c3f323de547e71957e GIT binary patch literal 55878 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 b^-;|1gIgV4eNXzP9Svzm!w(%xSV#RoFN298 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_balance_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_balance_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b86b0a3fad934324b1744756109d8d4c8fc84724 GIT binary patch literal 3564 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 P?Fc8`OFts`_onz4R$3dG literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a6fc5dec9c5384c6f6f08bf072fd94f211ac1cf GIT binary patch literal 3228 zcmd5;&5smC6tC*;>FMeD*x6y(uedS<7Z{LfcO?)JK^Qh*2qOVM;vDQW)5Y#Uch6AO zv$D&Y7$7DlCVFD89^EY5yy<`7g^dR$9XD#c=xxlfYWC!-{#XVXaK*$>hu5#_{a$s| z`>b!%X%)d>zmL{#r4ag=PofbEna*`!7LkceY#|$0Fy_2q3AR`feO|OAJ64I=az*y% zk`=d=ih>bQ=rCYoR>D>*sxOnRq@Ajyd_Hca?Mx-(^NQ7HXDeBZ1auOaiJQn&30@Y1 zGgSKLl7-Z-d{V$(`n*eP4RW5)*;C{x|^c&@qT%%;Lnd63KIQ|BibL2{sFgH+S0N7q?GPiCM+66pE;J;*+oHeLn zbI`UPptl>Q;f9cEaQc8I!b#^VU=|TU6>Or4kU$A!W=w&Irbr}H8Ud*p15Wn2xT#!J zz#L%SO(9i4%6~&9d+wP6WPDS|G$55ZT46gCGJc75s?9+BYSYeD?F3<$-FibiRdJJo#%eCv*8qSqO_;{~eAD#kHhTAEbQa`cu`%Z< z;9WmO=694H&7Uw*iV^hFK0^0%C_B(fjkHqP&(3^urj^~=${xIzJ+hKL^8MKE zFNePyn{11y|7ZsZ{kgV`p5M_L8fy)2Yxkk_Xa_0jOedDis%?}^s2$kx(b&2Hi=EGb zoJRP6jISHWj9-K3y(KJ)AIDD0N}uBh?sGZ@WW)P(8_c{+Wa$7rU)Y3G0_YyT+513#L4S66CpUO6H@=b^ z|2O{GvJ?EXCG*F_PHIcwv-J)S_Uo@4lkwO1n52G_0FLrX@XVEl6C2rHnlT(mio82R z@{G7Hq!P>5oy`{tsZoc7>fvNM3ODcNN4e=YmHA#xDN3pU@;dDBxRe@v`jn#Ed->#9 zPO078l)TB%0w+DJU8Xy@q(|DM0$YYjv+D^-(+zwFc6(yVY~KD)N*THn{!OUXgY4z{(3j_w@W+@kP-eAxQi+b>ldLM-fkGxbQY`Qhe zFUp?m&NZMw1P<`Kd4I5?ldCRq7(7!M4ATSNTo@A?-4BM18c literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d00fdef997b21d1d2ade0ca41dd7b741d91c32d GIT binary patch literal 5907 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_cash_balance_transaction_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00fedf2da8a9de18deed235039c7d147e1a33e75 GIT binary patch literal 3890 zcmcgv-ES0C6u&dGAG5O`o!vqyRd7(N-9mSue&I)yQV5trF<@d?Lngz_ZM!hDyWBf1 z7OF8qj3!2X(f$LP(4c>TyzuM`4G%OEi5g$@ZOww3K6%c3w2OqMjmkcpIp^MU&fK}@ zcYpWn_xZd+;K%>yt6f(K`2~&mmyDG5r=ZLeo7jRwT%jrmsEdy1N>wS)B`4t~t4TLi zO$BzsNxO1Y76_HucJNI)8CR()!CcD8y18mD(9=%dEmRAEE<0VWT2%u*;}qRewImRc z93r-Inb=t>T$RH0RJ&($<@|4Glm$P3!eg~2Jwe$_&7v@n*EfrYQ^rnK_IMtepX)-!Pf!qVKM?eUDT49y&uqe=GdtP-Y{eeGQa( zLP=GyNma~{46#*Pq>?Ssgq_$5vvv}+RG_78c|x``m!UrE@>IYx)!~_q^5*W#o1akZ z0(hs_?cD|5@~luU`u%I~LR8LiU$&y!_^D>FgA8}UPdCE7XNX=u#i%#U>dS+xWqNz< z{HLr01jav1iQsB`Am)iD#1pnKN6tjBi^uS3i?(zoJ{}ztUOG1BgsV}OZxXR)C+EaD z>6_HmDDtWpdY>TW^zs*q7X1JL@G)F7H3x8`H6}D~6^vZ-rc6(B8+L7?Ms2XD7H`qh zTzeZZKBb)wF??!Z%JZ81C0(~07O(K&pj51e8`yf&oONm4<9ZxF6vdS*D{EohutZ;) zq~7wdKC@@VmFpMdsCRXIrxC>(ooihXSXU5lHfsx#pF3@GYM8doDCZ2=hOi=tg#=5X zmu#@`T=}Vq26Ii1VT~3Neu7hHBFMBF#BmNcZ23KX3eK)RS${`AK>1m((bNw&Jn9VX zZ#2%<>XZ6@(>hD*wmw7aGrChdtv6@AsYd;o%AR4J*E~AZ1P61Hay{H3-H1QUc+i&_ zJfxdSbJkB_l`ag9uE`-0o-63P1y;_Ffq0+XDG_zkQf}{3PW|lY$48gc%}eTmTk6=N zI`+f1fh)Z?w+*)>QamEGiC8SPQe^uROIx-r^*+|>BKf{Hk@JOiGOH>rlFcY>NJ;L) z^(7c=e-2`d2oDk4mx!Id2q))DabEf`nIx-Ne}Q}=e=D6A$}-yw%L)+2dQiiSVZA7j zYFHnL@faM17#xPlXX_T*jvj~s_85p2G_W0D`3i1x=y+lG`U?|A3}HS4#INM9jtZ4} zZk75MOZ^+FQTJ0&qwd0=_ZF&^fVwSnJQ^RoIFb^+6GjrswG3!}w&VD)95^r;gw;tk zIEs|i{s_c>O;#NQCdRY{1Qrn$5STQVcmRQYy+RuC6^0bXo74iPvb0WO>Lj#X+WD!P zHKk2AZPR-QgogVWz-@Wo#tBWo*ioN%7sQa11~BCcWZ9!&E+muaZArF5G1faAx;E`ROJaYV&dU8=c8S}^w+RiIuH?_U3Bq>&b zPbA%?-C5QzXI`p@X5yDw=Rwugrx?DDCC%(XzoI> zQm}E>k9KhG|52Mlyw?$#JiD<9g;A#&&l$$KY14^jB)A9}ZUuWB z#nUJ%D0YKbAOSD}@UjAqqCf)Yk3h?FnEd%JA=*O-bda(&knYo^X2=x8B$~ zx~Lv#rO}p2sqaSL;9_xS3;kLOQJ!ySQ5*iZ3HFkF5#Qg{8@(T%@cy2ytu$&ftYj(o z((jU3R9YDvDXgvqV_GUv2HQo{_6h$*t~;13+&A2<@$x3WC+f$H@ENxhOoDko7f()m zH7B^|{FFD_gmxyZOVBVC!x4kN5&X?z z8O*dLo{2g$%q#0?n}Qc~_VN2RoMPofMrndeGJxT8u;Nu{F3Yck=zf*G z1{2tf^Or%iBta1FriifTHhJ<#vg0<{`Lm?n6~$xBX<--5R@xN?-G0l G$^Qnv9_@ty literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_funding_instructions_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_funding_instructions_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a148c9e5cf2e9633c4c992e2cb8626cb3bb7fd6a GIT binary patch literal 2450 zcmcgt-EUMy6rcOCckkZ)V7rBa)zS-!xI*^^NcQHihqIr2fj#rpt-Rs@kQU(EU4*|XYNN^VnKLu9?qPZbI#0}^E>Cv zcjdByV6Z=j-Jc2w{VEpO$fZnw4wxl`5tcmUOHD}f;&5`wp^nd5iK7XH z=*6Rd38p1PP*cLFDHjkfVwosd!79!X6>Bem9OtneONh}u&%4A9WJQoR)Ie~MFS zR3;+5m3kg&?bt;s;EnQO92`c4laWRV@6dqiuxP13vQY#^1i#OLEFmss0xT_}D=945 zo|v(Wl`C1AY!UE$wpf%_(o^oL8HaO=@}hEATS+ZfMP*r{Wq>nMoVL5HM5QT*5!=C-62@o+By@e0&GEe=Pb{i zvf5of8wST3M~+&|-GNT91uH zbpYIE7lC|&9uA@E&ehVs)l&6~3!hzBtq!eL-@9KueXn}@$C20W?D=8jXiq@{XQV!o z2WmYH?R|N5_sHs=(cTVJ9_}N(TUk&wJAksc?Z~igKg1nR@Fm;6)^WU4qClon z(J|>>LG}Y#Ms!s0A_laSkt#4O0CF4k3}hYqqcD^+eyQ#1Z)NUb5=l9d?HaP6Lz@k#h^wS@3x_E zlLyAFVIbMD$#qTwCjM$FewFB@%y_#(P5RdEOeJkD_G91Q@l=|8kd6PS{4}$+{H95y z4}ve7(O=i!Nnm@IS|AW#9vcJFQzS`xq#^0Z8hYhtv~LX^dZ1L-)c4oaHy+7yPJ3ur Nl5uC`5rQc`?jO8Anp6M) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_payment_method_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_payment_method_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe6ae2b52401aa25037a0098b5d1972cc5b68567 GIT binary patch literal 3552 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 U2@E_6=0zd;;jzaAzpUwh0n#o~1^@s6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4eee85278a78131943ede61c279c1e779250c0b4 GIT binary patch literal 12004 zcmd^FU2Gdyb{_tUq)3UP^>51_OR{X)5^2k6lJ#bjICh+P9Xnpz>2|rBvLnu=#CT@N z+!;!iqX0&dZ4;nH(}&h6P@qNo&>BvGzPEkoOJDk8L0yC;Y;=R7K>JWYSvlQ>p8B0T zf21hda)NGyE@5Atd+)h_=bn3h=buukgoK~@-=pP!e^!$IjVkUh<^Y>KAW63+RZ;_* zqzCeW0Kq{msE6_)0f)4(9?3`aXg(_HVXaG# zKO*1(ZCXE?KPuos?U+83pAqnoHmhgzSpg4gIsJJ4IN%X=bRnqjRrjGBQ}?4hpvou@ zs^cgp)Jc?w)G3sQ|D-E_A}GBgsYgDL)M*yD8?tGhpIbRPee6G}G9757u3EfYWmg$r zDi;|Vx=qC>TjiUqP*$gdjo9l|t6VV@tr0FNrbQ#ldbPr>f?iQ;8jVO@`@!Xx3uj(^ z`OJm$mtH|b>`cwHDmvqU54!M6il!Jvc8x2BsT65Wf6Y-B>5O77I*5Mnp&fd6oMzlb zJXbT+vaxX9FfCpaYnlFZ`&_Kc%8Jem>msujD{ANdtCborHW8@b9e+)^alUC>>}=UA zR%!;(DDhg^v|gWoixsKXbA`QKV`vbhG|`f|$`oE)yu!?y=Hq!YpW#fg*ky$)I$?V| zKFc&_F?SuW-y3K5d+ix_r?eZdbgS+Z=8$UO}Hl>jl0ttNg6lXHm+oIL!sQn4&J^} zH0E&In5xYi1zj+Qhu!mNY*Vm`huurq2ioSglpAxwW(Y76PY_kn3R$qqh7 z1xW+Gp9*^8`~Vg7ez{Bqy-j|Q3VMHh97Pe#?)^wv(*Mm#6n_}FEm>aIN5NI;_ac(C z8n_GNg?<5PMYzz`*(wyKLyfS>v{EC^Z5>eIjd-C@)D+V!6iiw{ zmTzsb+#>X4Zo#;bJIl=LR;8MIwPG=C_N7YYIy71CC8cJfEwsKx-K% zvnS?qX4zu1RUjw}%*@&1Cg)3KN2+G4EBpwSyE(j#cv*L^SI}z`HGXkRx*tn@)U_5H z{$%7Qv58HzwNj@G4T3uV2;epzuTP!T05QprK+AW7?}jYG5qIAMl${Q42|qA6rA-7g`0cZ@6GFc z1K6g4;+C`#OvNYePvrh4yf*P`Yf1UT3!e<#-#2kTJ@(1<_4LttdT28e8teJ+;=`Df z>aVBi-@l+!{nN@HSJuAd+&7obW-|yhr+J*kv6xvKm|seHy*%jPzM% zx@+sBgt!0{ml@X;0~VsTBCEpkGG#?}515tDTXIn`jEW`CGZ{8U#b8l^m=m)4zZ5ql@+Qa6NtWv-F9z z^ojdpNB(MfeQa(cB=ya0O2NL&MpW8AQ6Czs4gqLuiKq)lfV^`_?$wBCZ<`wor%O%(q@ zlH9wF%;0C4Lu;8sPjVr9rf?y9dVbz|D;r^4($*%a(D%M|IvV)f!0B+}@8W~uphNHyV4wQE?n=MONn z(<>SHReB|tiH0Qp`S+;U>6P#c)U(4&=y9p(yoLSlMY?aHwf`?M%_CpK?g{^>*T6~m z@x3U%Y3%>`GTxu}0&ExF6e`E8vSPVZW~!%r2g`qNHuD#WI;a`7ZqcH#+<8gncYzIs>WvIa!FpP z)Wm%Do`ehS&pCrug*0pt2C}_vSMwdlD|QsBJ?IF_E@Wr$w2KN?r)8@m6f^cIL)FO& zc7r`|7|C+k*14q`><}pJ?=Lb#Y@;Ru95jO~959I@8*EtyDas%eW|nQ=nP^31aB1bV zdek^2R%J?Y(WRd|DK=iLaSqF()f5oaAX}i>K#=D_Mx3;Uh?-)Ri#P@h2}703-Z8KX ztDx2}4z?<2iYe^#X{ef(T&bd7HkK-g@QF>et+8CT7X2mUVnx#sx`KHkGeeoznl96R zT)4$+i`W3wR_u$Ws~6!fSs`PmX*Pj`Yr&ocOAw|~Dq#U};|9B7VWNearf?k1EG{w% zEUF-`h|hUDc21C$&k!fMWLH^9K@hFrkYC)ie|_G95X}n0g|!8|nz8RCGgtSA>LVn_6%``NBa!d1+(laTAEOQJR- zwp&|v``?pHbF8hwZPwP{uaX}5brQNlk9?n?C(61PnYFKF2mU_%bQf) z=CX7&#s;<#)p<=`%Eqyej3>!pb*`<-SlcG>;dH=Ye>kDRRGh6d&oJnR=_WkUE!JKQ6*SKcAeYt&Lg(MpsA9p8BpUXHVwGol% z8T+9#{ChP9Z{{^P7d50(-aN8sSyl5?E~i$CX4cNDWZ{O2dd?IX{0aNdEc^z(GK()9 z#L#J9%ATzlhvEI2aL&X4ay{WIsIy85j`Zv@NAgB4X_aMDUS4Dn__Pi@qas4X5FX4Z zu8^l^K&+dl!dJ5L8-@x$#-QM>My?%)<6$g#q`*KG-)~^}j0^>#&}e&Ua^z@v4KqPu zkdG$oWdrGoto(Wrsbvfz?{bD*_^PsCJ2cQz^pfE~+ZHj*JDL??ZQ)&4y@knBHsnRp zXz;Jf@b=W2&^wiyMVYCreAT7^GS$MjghOrFha-n@Nhxb$hnNSSj!?7!eipWS9_LYf zg7UYC{U~g-)!(AFoE!0_b4O8PlcQaf*zK%Il-QR3(Pniu^^I0nCK1P@5T~H4Pms={ z#6Ec^QPSM|POB(!3FM0s=&BYHJyw)V2QOW+lW#+mH>G4*p@0mV^MMiIWTEhOP0^g5 z-aEfP2ya=8J146P<8AiZd(L?#K93K6G#GlbmfkEQzPchEjz+RF6rS(R-su*ZPia5Z*>YO7w4b6EydAhd+I)!|KS}%sqbfuQ}W~ z`=E1n{B1cq)tk>wb^GiDJ?)+y6+t>`Y$hGmA2s~B7Xuv*|IAwY*~cIL>y1Ay%{@)a zclBZW>EU}Lvuo+>Mg%n+!n<$k#UT>%W}Kj-Uu}?0XKy9JS)EqucUSrfgJz`M$uEdy zf0~|hS=m2|&B}=*n}Uhwc7^+M!WHR2@!l>?pKJ^|D!E|)^**S=E0h{Zx3gxIHIY?o zM6H!7G^H&dL^3pP=j8D{g`MB;voQ*YNHVBj=ul2yAT-kMWUg^xr-+{X3%JG;d;!<^ zieJDrzQPx9jVJm7?h)8_6xO>6N)a}8^#zf^!VqlFuF6o6UWvA+RhNc~Idz?=( z3N7Cl>~nh^<%MiGMTwmW`e_39F6<8#n!aOnOlP}YxK9n&{AfAkOVzQVhc*ejBD8nqOiC2b*%So%i6-#la2GwTs;OM6&e;jekF!)6z-iof3NquUz{9G2X7@Go;nu^ OBtF)^l<2QG_5T1&nn?-( literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_session.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_customer_session.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7972fc4553dac651a823a59ff4e103ad07aa3e0f GIT binary patch literal 6406 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_deletable_api_resource.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_deletable_api_resource.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f4ac6241656fc65041c259bbd6bbdc89d73be3e GIT binary patch literal 1604 zcmZux&2Jk;6rb5I+iN>o zn%P)Z{am1%Iz|#A8CN5EFS7$TiDl*`^f7X?o5;-(ndC3P*^V5mkXh*H)%@>5sA8^K z?a1?i$zS_y?sLMLZR!vZ^|f|0B38?9v#P{1w>mBIrA@iw*en8dVIiVki+tKxAx^~c zEfJ~FY=^FsT$0e?jcD){$XkdY6T8Tii0opbEK07lsq75xO%-0Dt&EMjC%h}~;31cI zDI;Flj#}0D#0}z;$Zq&#Bx=*p8P+6@kp-HEZ}2UUE!0IT!`QKQNYb1hU>8T} z8&DUgc|5=mr!oBC8-L^Fbj;C$R-ksW!CMaf#502~UJ9iMTTc`kiHSjgbT6yPebPF9WO zWExx9eBlGME>U z*%lbsON1FLM%}RDd_}!2yX8S1N!!$09iF!!l|)Z&SI)wvK4KxDVDA9gK)+si<@<~G zFFu^^)pi$p#@^U_cjPDI=fAslmmN;l_9ttP-rZgJ;ibLF+QH<_gYmh&?A!nx5f#1d zjG}moaRW44C_2?er=0*eouVg#B+JEcF6#WhmG(my_oOp0l;>#)Jm@(fRb>RIi4-Br z4qf0Ep-{`b;Dvx+=n#P|%$CB4zZm1jM1GYDof6SR$lEWUS-_-Qgu$?Ozm1=NQYao3 zN{59@`-MwKrKx)}hvm!r<;w@<+1YfGPuuIb3AKVp&by* z;<{x8O}7o8TD)LcYi-*fYVvU}1_Zjoje9UIIu)bACz3u*l-9aUJv)rz>>s1}lH@rB zu%&{Czaskx$R;{cOMOXFKf#Z#JV#<5$VfYv9QCtEt89F6s7~*z)7!-ZwceLBRo{N~ zIf6|X8h?m`|3xzVkks%ht-+aSJ@zJ$zKk(GMpMV=jbrrMFQ{^i h>Q9yYoe%GJe^zET@Sj={>-XN@Ub}zwF9d8H@gFvkd~g5& literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_discount.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_discount.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66d0c71c4ee253e6b17e3a5be79a2069c569582c GIT binary patch literal 2259 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 Wb$QqF?ngdM*LR=&k%yqX_x}gtNun13 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_dispute_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_dispute_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae32462fb91ed849686e039bdd2b272c2822dcd6 GIT binary patch literal 5873 zcmdT|-ER}w6~AMTza3}nga9cY!}4iJYyt%e{g8lc0WDOPhCR;`Mle?j-5?|mWSfoRmIT~(^uH&kA z7VWSpHzK7-BU*}zzHG)C@lsqOG|rBLY{X17lBJ{=i<+rMx|9~}m^swQlro|nH-{Ta zNfGUYnQi1sInhpf4v!xi)hJ z7_n)CH(L%)PF^>-^X}|DT0zOod-TH=1%_CH11IN;UN&t`Z)!|yAUErCadMZr!)Lxn zK|wm#lOFL0zSq<>$7ff(PxENP?{scU=nqOtl1@sY1W6EmhaRF~J-i!4bQxL^(TeJ^ zYE+Luh?L}4N+m!l;!7oIRIHcUuwJ?v*M~qdwk^pFNX7>whc{hQ0m;O+B(ory9FWXy zy5|Bd?)yEGvh{^!ka7&mUUyc=W&LhaifenEoQBa^n&A#KmBgS z4@%)Ol*WGN5|D?)0rz=7U0Ndd`XvK?NDu4slC%_h5_#;y@Nvi+yhZZSwNpve|3Mgm z4qVk#6QWGDtLlQ?VyfBC-L8g z=cRm%jlm|uM{Fmyb|JyAW{{T2OyGu0;D)ls7pw}~3xk3E*?#D_NwkDFy13g9$9^Mu zLq~AlG?2fMfA?7{H}*VtcsX}?qrFCsfW1aC|5|UfwhT60;|PvV)Jf?V(uw3R6O)iS zeZR3G7-4ZB6&XnIOF;vJrsDwFE+Fm&=TWc<{5!Frvm`zCVf91~T6$zDv=n|4-2_6h zwF_Nj1euttPMrqGQRfY(E*Lcf!d1OC-3KN7AmOI9v3@8OKlVTS2ahCn7-hN+d?X7P zu|2?bqg9(VG>4%{U|=6g3h^%LI1VAgJ)g!Q(}=@jap!OhZfhn;6IxxM;124l@ zXBgK0b%YFPlydF znx*pAY{PI=I%nwAs!-Lj)jBnsYKyCIqS@vgu=?O_2-TQc)#hwgP(J`QaTVPLDbOPr zzN2frK5J`Czk96iI8A<`SnRS2-YHe6*p2RSnx9Z-TaIdob69OMTBWR~WQ%)RT)cS= z6&%#L$?O``j*uISie{P%g=E*5)3gaEC)&*RHTQFk>MS(r1X#BUJ5j680#$>WI)_AN znkptSVJc0XrH%u}uGBR&6BG>dhGlh~;jdayZ`)w}T8n`Qe9wH{sMLGL^_PZE0F}|= z6Dp@D$<#Zw7WDD!`W57T=Cdn&o#mk4HD9p;wQtRaWXJOZ3D=dIHW+*pV6)?Zh0S0b zZHZcXF{rtNbI@aJFe}KJV*@#JY(;q$VmDL}U%i}p8to{Rm7U&|1KZyg_@)bVZ0n7&id03R05D10gJ3g zA?fIVdxv8FgFJ_+6Y`N|J8E46_-fWd4}rbxp;@}B0ZgH62lyM9HxPOagAeXDp+b3W z+4CmVYp4jMOO30bmD87KZbOpfj^;q#gxt`tt4Ji6HbB)Xvm2^Ksm`Gwbhe`HqhlH}Zc9iTp=wBR$#l<0x7l#yH98!to zR}c1BEcU_v0(J*Vr7dBf5~lP~Kfalny|G`RvGL;M)kJ~4*MWYU7Dw#I@#?Y8>}?sk zYXbZE(9BGJ2(GAQOKZ?_*-e(q4O?%S*iM(rAGS2p8)0~dU@DSBK-@4KC~OkDCy|^% zat_Hik$fA-BO?4O>TsqY7YW{s`CkFt4+uoZ)R~pSsei<>k>sD1T~BvUEGv`k2=rhm zH~w_|_;U6{8%Nu5lHA`(VC(qnOqw8P&f`vr9PE@GZAaiA_Q>vjy8Gm^GS!Y@Ki=CD z<=RP-9O-nJ(_f@ux)%cI_?i4Jcg!#Q%HDtQHo>s?cGJON%P~xGzi^{a zp+UO!VoyA#WIaxqe&kS#!!smjc#(C7gUOJ;@#Rr~)Ex=9;%0A)S4f7Bf$q*=#DAM9 zuX~?5=#P3YScUFeiicqTT?>y*_pL1?#fJS4U`MtP>|U3AVZ8Rchqe&*YXe^t?=c>* z@O7*Qwzc@TJPdz_Va^7u5srzg9hM~N%P5hiR>`41kprvb#1~;@RX(~Z7gpu7tMYeO Z<>^)V`l@{OMbrpM$7&-6`tY#aLMJ0`m;nTro=>&O-ivSt8o*+v0EEbyuJ(1nY+Wry|O6tcW_*k-FHyj zCku*Ok%BN!_9(m}D3anyyX-NRahjpMG%I^yW#1Z(`u;^NUWsBNzN^WKrpOmEDI>}f z&m~1ww4_nci12RF$Q0CMj&MI;DdrTyoKx2bFB?WCucRr4EzrTkZvLqWgSgV ztNrxF@+@8XonoSgZTr8SGdM??<(*!)1)HAk$mu<7cN{AvYz#O$6FbsHWQdM5>vMYD z7Hs>wBd7O$ZGVcdL_LHzZfDeVfp}JoR3V+#6@v(=WKL1#qy|cefs%F&JIpNY z5K zgV0uJKR90t&hL&`!8i7T z7n*_a1OJwPhu@E!u0>8;kuz4{Y*~6HAfLZnvc%9H8+yi}VCaFkC2s#@f9kc`)N9t% z53RuKW$7ES&zW-wj!>!>F%%Ov_I?GOO=NU%>D*I^G4YEq=IAe=>u}4zgb0?{5@&KI zW4cUavT4_Cu>B@j-56kz$t)s`<~>{hbw@aeR$hYIg9|!aIHAd+X=TqFqX*b1=WcIou7cj z$SnZ?wP~0ZfWQ6koJnW3+MHaNY*Ml0mb^E{+Ag|2e(=!q5qhUP~BKYXyS!4ub)9 z;YK^y#jSJKm`Oub=Za?3^Im z={b^~_`(euG;i$Ejj&_4f;WWctWtQ|#o4Pi0Ty0zq+JWykR$814#s+{zfKX%vTD~6jYxG$s?wd(HX&9Oog^@;6hOoJeZV;~Z zpm-E@1=t!g40y^R8X_iWzO?9FqnTmTIboLyg&bkPA>nd`4;3xy)99(RW3(Eh)f7|& zXNXH*C1T5foS=N?2EL;X2wo<5RU4<1C!o^lND@|slQIwBR_5iU)ero1*1=qTYB{_SHYEq#`KBZ;V-98ZKWQ)@wxuDbD!U= zoxV~Ln?s@M(x0a4L&uxrCwFHbY1a7p%B5y_cIVRWH7k4;xcA8P7F)&DlZ}b+_RH1u zJ>L@sWU$$z$9G(NW3$%q>=QrudDf5m0_~kNN1{8EJ1f@6sq&@fRBYG%C}2&U2V+vS z)*r6$RiQB&s@~cgiCFy+uqQ>ou}^Vpe`3BiF<+NX!XfK{$j%Wf5ZfD^ulwe^#{|`V zrh4(7cRvuR1tL~pW^Zt|?wfr~<5GFG?i+s+gYf;=etbTip}M^O-5xpE1KwLV`O)67l|7a^spV1$}nB9Ej`_{ zRW&R_hJEtBHIh|NtLwIo5!IOq zdzzQ3r|opKr+Y>{V`o54Iq5mYF`NwWuCEolOF_4hlU+rQN%5xIiDqY8xpMwDxhUf> zH!YakpwpBsxHT#jZoLsOLF$3i^diMa_dc8;H}6c`oSM9Q8!Rr4*Mz%3Cw$=wkJhO# zPEY6GqgByliN7U_NA4?Nlo<00sYVXS871MJ3$PSiYiZ=%Q?nh{&rQ=Z110SJw>KUd zu`#d7JQIo$KnK@A^En_+k&PW>D<1>$RCSc=pm$V|G%2m2S?uVmhOIfNRb=aHXc60~ zX;e;!y=SuLar)8SnE?lxyc){@t0}+|lHuk5U3`H78-=OzAFeRtD(lJHydUcebA&_1T4%DQuC^u6T)SLVsYifweAOXYR&nJ z)-B5CMbNPB1cG{_H-cc^_2;Y`)!IDu9czL53zp~3SdEsrANXUHtFK$!6?C)#2Gu#r z<04vT3&xW&R2nVT4I!5X&w-?p-1!n%@B*;o6|`sM9;dgBiyH$!8Kncz{T(HVU4+sP zAgrUz8I;<10Cb-KrpwB*Dx_6JA{ivqRucT$>Sm1nvL>X@h}wX#g4$XeeJTs}4@%A^ zqk_?C40$r~IE_k3L}M)-j3AZ;%Ut4YGZr4P`!kaU3r}Hp9M@3Z# z#^6~%VVZYVVHY_qt1(4e6O2KD^W$LY&NKy$)@7YZG(*j=)@hiHXLgnab?GRYYxKwOszN3-!IU@y54(JH1!7 z%qz!x-Ti+e41RlxJ3Yf&=J37>s}pWQ$VcOuaT9%S_Kg=+z!1hj=1d3x6+coSn}j@Q zR=s$qn~kR!vFPNhX4J&WHPHLy(g%1ec22r#`Vr~{|q(hw;ZWYyqtSGkYSa$0qK<}XhbzIww$>U{7 zxt6K`hU^wG62N|nT?9e%SV1n(zo30B&=(z4KnEg)Q}m^MyY%X|(Nkx+@Hqb(Ha^WF^jF#mpGZKoJ_O2~5dvRcl)1rk8y4$5-anx%2aL7cVTF10e?IYd5e( zc`o8*Um$!%Bbwz@*j-o~4LYqqa8%70l{p=i`L{sbWdVy=(mARKUm3E_&j5`hSk?tf z#TYFHbQH#=fQ|tz2XwFpj6{NwIA-dV^=L4X&|^5N$FZU(=vlg=qieFByeDozk3Quj zPT};PT&WIMn>&M3yLJ=xbce5;;StX2nGLu#eV*gZcJt!BrOS2k?JOr{lWa)o9e>srFkz> z@x560BKUUAAlUJEL-(SlaSL0vjy>64d7pk{3)6fC3PC+X;H*Dfg(rfAkfNud5Q@Camn7IyP z)dFb3$MaNs{SH?m892_9b&7Ai&XHm00%l_j*h|DDGK`QIdRB#K3Q@g98A(cpk2pK$#IEM!zH!H>{B(cyb2PiO#GFe2r<<) zGYKL&^U&Nu%@i6Q`PIlTM?M*QGV$BWpH56~re1wt_$-}oD8mgUy{(MZm9a)0&lY+m#2@y*UV56i;yQsH^z z`0hig)B1OO9fdVyuu5HW3Ru6{-F`?pDZ6j@Oy72Tyq+F!D18kjv#pHOm60tlc76!VoGF5t zsfEQ@oT+>_{6BzwS|34k5pnx!AiU}SIt1KBy7V*9>__|~;TMvGIw9dS`Y`$%;ip_t zX4)JD34K_1^twWwgg_pPT;)-Q+4X ze?$NII>hDrw{sKq+(b9x@-KlY@~MCK!mcR-3U{0|?7KEI8{>Y*%|_zCj{(&K4r(>u zQVI~vQp+6GPX{FAC79}VAWvb?3$8cRbG_~^|i1F#8>(2iy#(!Q0Vr-s|b8g^nFj~JH88y0|4P08l|2DHa0pcEgxLCTUf*er-m!WH3Ra$YZq7*RM4u0cG9FJfhX2% zD7^)(W)yjrwUtH9!K$X~5NaJr{=#*risEl;<`SMK#3n3s90uVbU>}8#zl?kfD2K*+ z$n`8z$n4BrS&a=opxiVj+(DlwvJa;3Pj3z!+e#eYOq4#$9c*MSwFEw&Y9cZ?B$}#C3md!Y0JmVkFN^>h_QXZoHVG~Kyo6s5 zvHu)G9mvm*g#PV$3ag5ONt)IPwY`r?LJ>{oXfr_@n#x)Fr*)SfrD;5KVi2`{j^N^_ zU+3;zd^q^{_@|}%@X31i4)eoNWd;TIArHgX3Ni{|2LJ0$uzie=HbL_kI!RhDN+58v4 zIsABXOB!$TaS*A)4n2Q&_|lDw{(N&V6z>1-5}U(ti>a@`>0Of6i3^FT_?>&JzkjZ#3lcvlabQ?`5Jnih3$7qo>p**D#rr(s<{|?s5(4 zafS-&?|!|{ygSS0RD9dTRT_O9A2$pHNxJ$(uq*q6n(D35gVJ2>`n_VcNiQ6BqB9Jx zX9$fEw6=C;p=k;n$32q~cb5Az`u7%g5PtjX_4=n9r%hc$sax8DQ{q+HsuZb0>Q6|cs%b@$5I(TldS8=mc5U~) zO{m)-p|(OoLV^?F45ujJ#tjbKxg_eL)=Ci|F2Kpi4IrPGw?B#VL)xkmdzhVhGxL6C zzIpS0%w$vqAN{Lfr&0+0%7plnBBpZ>m^ox2i*u06RXC3Eyu-UfMF@Do5nZVwxpGAg zWYI~uN=4xiR!AOfB`4{s6*bVwPRdPJ(gB}vGH$k#4S2=b|;)zxnuu_^_X_w#Md-^EQ&pat z)1*ce5UL`O_+z##l^qYr9P+qWVR5tQW|ZW3jQuU%5^lx->`{1$SeWG&qFENjn6so= zepXnN7b4FEKD54uN{Q~6T8zH2+KlPg7G#tb%_5zw6K}||XRuW~dv&Y`XDr^R6VOb+ zSglAftxuCGF0c6q=ksMNNPIW1&kXB0hLZvARKE-K!+DNmVSQgP8}_{5r>~n78>VH! zgp}+84bgyhu&WpZCv2!DsY2Ar39Xn0;raoDBu|83|tzW=& z%Bwf@i**k>L+9%CDZ4hIpEIjdxMt~alo{Qzuj`GbH(9TpC=VaksqNvR1{jzVnCdjB zD&5#{7K4UWR&F%OZdmkAVH;$W!%#3i9R>0cdYnVr?pC_cN^758{^W8?%eS<_N80eR zHvH|>4=+DF_12O${7@Th?LXAoyT6q`&`zODp@Za1wj(7qwT+TVwF6Ua#nF8j?0gR7 z65{?xEZs*|;w~Wd3w}=cSd!2>wq8e{D&Ghna3zKG!?pr+1hFD}m^i@5UPkgj#^Zcv z<9r(?ZPu#f1!lq0N?ruAmSFM{NPapDaAL43_1qj^`oOBp~ozUBBafMBA0Z546I9BWE-5jkQp_+z??iGi)uef9C z*U2HS#E*}cl5pJ`HPgk0;j4z>)~#uW@oB@jHElYPMt~cUuvQXQ^C8Bu(jtRE=24K7 zApIo6Mj2rj0R02V1JqW~=`*eJ@jsI}N&PvawI%qsWz@HCY2S%u?PNQ_WCi64ONGJZ zzGH1>*H)35@1z)4em?itBKJfetghvwH6@T>4{K{OE$ji-Ofqip*_<9Tr!Wlc@Z+VN zKM;12vJw8{_CXjR{B*3G_G~A(?0ng4HlR&~VGbH$UpQjm+a9h_c*jw~n!dj$cHYpR z!d|>L)%V%vE&@gUZ(HJvW(bCQpz@D;|NcFLS$i@$f9DuBN*$49E>Xg*QPisTqon&f$ON@x)|39TvrX( z&A4vhdK7nM2M^t$R&a04}SeT>@x+{T)@e#Q*~x2c93VBBWlhHAJCjN1a- zbv4{Z#%%>|TMajuZI5*P2R}a|>f*6PT+unyQjTFZrL+UhCGT_28G{&ld%l>WFK(-vL99i@Lt2b9GDh|8fM64 zZm97Li8Si&Ga5~dDNM||BbriFHFiPKogs9H23QwN--OA4w^x0_qW?RY1%h|r<|EPn{v`we%SXx0ePc#E7Q z@3{$? zpy#iwAfp`?U2R7&CZpZfoN8-f0%is+ZkB8!TIC*_36(&?!j%0S zxlZ3EmxXiWZ7w1W>NZ(H4Npkp+VGCO6UX-*&5S4Ia5|%fjgc_oBpg%2Y(ii7bW(|_ zN|-8R8LEY~OjsQsL-LTyu+|sPqz+72c-fJVBTc#lQvfe0RX|}hkxppQsBRyLsWDBX z)P{WNd{$Fb3XYiQ-Xn0r@yl_A`3>EbP!nl@XgaRw0-QooAr$pMQT!CYlA@4l04iO$ zplB2&rnf}n8CXci<64yAHJV|*hNA8xPF+-$GWeXOFoez)Pse)6aN?xSwu&n^z?xak^TjF5^`xdfftU}U3= zU0)d{D05R_#G@5gQ=Rkk4w)adVtbX1yR9-CoRi5t1C9zDsxUa=->0O;v~1Y)dj}>0 zFB_gQd}Zg1@xQYwSD|^OOg<7FxVqNXM zYex>k3KebiD!K0u-k7>Jb`_>lutEDb((ZZnm;|FN$(ToWJnKlb*5-?IYY{>NM-B2o0-=+)A( zloE{^x@T?)0YH18s+As01kZ^YUt!n=_b5)^2^C1q6Sy&WZE(r6so>dEgwDx#PeQZg z=_q(Quz%{^QzfSqaFvMUbTP^5HmYdjG+ifQggcXPCn#|(3IF`KhI3c}30Y)Kt5qaz z83o3P}Mh+Pde|8`u=(bC- zB;-T7(}V*IIAUXoXbM7U#A!sNc37{AGG@R{V9$_;_0>lqmPj>QL%6)M8+`^B`)lIY zFwLa&K=eW~b3T@Y5NgCja5m^zSWd>)sHjGWPRzZ~PUuW*sx{G?9cv@vPhp~pX<7w$ z_dH!+1=r`~kJIm`Kb04QyNmvi(aZaLDXzQfN;;w5JgIQOQO^ZDqF&v1>E28?g>rrXRQkCLE>eu_wA(Ufk% zWsWhLfqX>E((O2~3oFzG6Bp>)2=#F#nT$rk0iuC36Fy`J71J1&%bvVkh!!dH;rjxS{B6o|SXE=Y-teo9Vo_yC8NK zU5&H5uk9#^EycjPT=1s1Ag(XEgR>{|?yiE^RdSH7EyaOnirtaomY!no&SGcR1Amva z=f1IjNdg)~+SHLdKG!`Toa@PV?8pcEN_ONsNT@RxzxhVVi9Hw2dOjcARB~e%B7a+M zb55N*n!EgdU%nwy@*>+u{4Mx3-{2_^U*IIEr4%AI-vgeL)-MY{m5_R9vq`Q}ph0rY zulsC!K62n&0yOhPOg?dtPo;pESXsuHP<_y4xd^X2z`~B>dtz`wVA`h`J?J5*7KpJQ zMoapFRYieVM%7M}qUbPY;9%W}sDCWWd!hR7Bhq+2);;0`_T=KHokJ3PMA^V4h`?IVv7=XSu@grhe+h99|q!rmLkXW)L?2YlL(6{aDeyNyVr zOJ=E!F0lpdrDeRnR!ei3Po3CU6L{+63E(o)ows3I^$=873Fx$;`L^$-Zz-^~5ZDTO zz3si_#m05Zg^lx;6Pl$!xDW_q-+#+rYH)geCBbcmkU_8#cF~IWFns%qczFbn0r{7a z!U|s!Dn|Kfvdnud&xIohxk|BYad{iCYW;}iJ7k{u4G#PUco6vUMFbHGy7Op^%FJE- z9}a>!2XF~Oje~&fc1;Iy7Vc;m)hj?P)H(=c7ykqOCZXwi;4?x2!h#2MIA+JoxX14i5W9JS0CZ-1lm7hU(O+<98a@7hpKE#!nTUppx^lhAj z-zNs13J!_ofb<;RWMx2L*Td=q+#XX~#DR3{@?}*8q0gnZ$)O{KQO^vkFZN*NQhT;znjc8uwn_ z2h~%PC&7A&LelgkpNJ_8!?o^G6BnY!FWc~PXD=s~JB{EB<`tP6#LN=jP~odJE^yP@ zpHRX57qCw4fC_N`mBYK}+cpoG68z5gWn|IuQn76_ctOA6H881L9p>z|Slz|lytvym z`IhIU?gs=aV>yo3Y2-<$?sx_L8;#NI8TbbPg6;BHf+|LAS{-wvus_A>k4RK8hpa*P zMc1Zf$KcmZiprv>HRGXWL+UxKFb&q7mEUmLd%(!wF)?G|momqW?vpapeiJDMcElTH za$xs(5xbT6{n)Y3co-g_DHy;HSAPptN#Ho{pQNuq`uQt2&U|ZtjGWF4oYm Yo3y}n&%p`MlzlK~?zwO9WcCsN1B7+X)Bpeg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_error_object.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_error_object.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cff0ceaa0eeee55e5e2f728a86ab2a240b80f23 GIT binary patch literal 3305 zcmd5;Pi))P8GrmEN}~S%wJq0nk|im$)>gBmS=%*T(==(aAxbfK#j2qoSn@emLW=4m zmBxVv1XzkChXF3oB0cz!tB@Ub+;R7v3=b$lz(9wcc2g>E3v%lBJyMRWU zzW4a}-uM4+nT$%{a{p6nf1V@cpU8}_SVW8-0CAs~#1t%I3oSuFTC_x4YDt`yEZL5= zVw{#O#g4b)oQ_!uJK0JKgi34{-cc;oPPI~eEN-RkOe@3bgq5{(tsJM5R^BeO3IY+y zd&E@l5Hm&N52bJ~tsG_hy&myz#msf&l{}++$Vi<4W(08U+7DH1;)gw z0bs9<9bjUpFZSg=7=2567_HWi|4Dop&0Hk|sacnTIPU5?-3YQScTw#IWiGh&KCc^w z)9ZMHSfJd{tsZrQIOxf1>sFAlbl1}ub-PZ-r9qO>Phs417(d}a3NkRb2IK468guMG z1vZ)y%xfL`*;8KotnIC94v#2zkO*X#T5IeG9EU9;{0LzQ;Sj=61XQDo);bhjPxQvR zW7Edf&dtWV)V=OG-Nr@7qt@~}j&r@;x!QO~H?Gr;*|c7{_#_AKZ?tR;z&|vvcoK?E)Hi%{>X@=^XibK zlj;aoBLgv11u7s=7`Ptm7-MHa(`Mn%UC9LEE8#xz#-o@_pZ62CQhniJCynXlb zWLSbJ5^bW`GB}n&x6Kg-&pry^IrZfm?Hv);Zvc zr(oDc4L!b1_GU?O;oI7xKl_4z=%_!xg!kNnf8;pcAmKxgX40ALutqYa(L%1M-c|Mv zk$mOL-#$3HoqKh{u1kJpVVENM(<7pw;gqDx8t|b(ta+i?Y}VBvp=ll6rkV!vfcckCG zy!8o(YF=Pi##jyEhmq0Q0`BEF!jAzCVD+uVe>=lF)00*)R zIw8+8zXIYpSw`3r|KFS<1~JG64hstWp_$Y*pohXRm`oe&ByRBM2pA8HM>cNn*>te@ z%()Nb1Q%X%-vt=w1aQPZm$%cW|Duc}k%znjA^-Qvu?OCE?v3Zf{LiLho}Gr(>T&i{ zc(B(HUPr*)J&j<7tq(f`Fd4P{KnNe;;mPCJb0k7;=NYXqpWCQgT;8a^~_>XcZN+>SWWPRgUFw;Iy_0d8Rp%$80HF0 zmhM{sLrD;XT{6E*UfLx`cgYIiKcxJwd}>#IWmi51#GZ0d5Y)|=_Xs}sJ`@|k_5V%a H!L|84Y4RDz literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f902b4496c6aaec6b3b45df7a972afcbeef33a4 GIT binary patch literal 12728 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 KoklG#-v0srlh>;N literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_event_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77d1b48b58fe37d993cb847fedd4512850676b70 GIT binary patch literal 3295 zcmbtW&2QX96d&(;y}Qot#=GffXz3JM$fn7fHi(K((T~tprD;VF5?d9^u_sx#_If+x zP1zD8)K*AH2sqI@oT`KaHzfEExHRHGWGMo~1vo9*@}Zn~Gq&?VsuJHKUD?ajGoDgc z#9DT#5XsR;!8YUOJ+-b1o#OU+g?d5oS-0qw>LtPF+^>sRr=xi41D!&(_$yyjrLZ^|P^U#E37vH;0)jqfHl4t^N({%Yro!CWR^a$e z(+y?IWC8bh{mpaZ#<7#*$4;M`I01sp_$+C1jryv?g0oW>iN#l?*U05I0fE?nfuvs; za-(x5H9amG5Te%z1VLs=B(|bBBbtvFy#-)yB7*9Yjq0g9$|JkqPLZ^o-U%981}-Bw z#m-JEcJ4-|F5lNG4_2AjN+pWeuW!?Sh3TAK1k3CLS(d;u*O97PSP&lo| zAH*AG{U|Mz<0n)o3EH%|QeMm8dEtD)imL`z2yt7!?i~ek69p2y#A8cy=;C_IM4qzK zwmc`zr4};tF&^hrk#Z7Mm7ku5EmRyo{BR6qXa;Nq&-hMr22YvRCERY|z{g`xVcYDm z8Xh;TMq~zpz{C#2lr(KZiH%Lm@~O=|!6SkeK6369o+Xq4jIbGCCt%p3#N@ETf#Z=8 z%v!{9rXBEin)tkk0Q&+*7ls-^&|=T&y6s!6#spYvmhb6i%h97)^~kh}L1e5Q1g2B% zfZ(B~A8d@P_Wk>mdAO;W0cmos0=Z%r-8hO?r2EcvQ*f!RM0*?^TC-VZR?V@Yiajm zOWSuZ?by@pL&d=!Qi`QsCaSQ zWY8Lt52FurU!<={)hyithluLXt(@D&$#zb50GUWiP)bT*n5@&Z=p&#^a!+@|B2;-M zBJI`fn^F`h_HnP{Kz>1gugg_s+xM0IiLz!jaMofIR3RxR_i>$u95?vdLmjnvciHf}C)6W-c|C zUQq5bIoY`o16JH@y4QQ5i zP0RBrV6oD_*0lONj{WW}i9XJit4OKJqF3o4NJC}Xr=A&5UV>XP-Nh}1`D$x3uHs`f z0#6R+xwz4;ZruQ#M0^;m*(*Q*H5Jie1M53%@Aul!qBgW}`m5CZ+1uLCciId0>^Zsz zw%P=c>mclX0_4B+-2Vp&bZPcJU7Dl&AuIvws7s&V%O^QmEx<%lfxTQj#0k$atpfR1 zwo6G`<92=It~rmCr@8wZK%$mSlE0y4@00#}HZe!UwP%kg($~@vS^XvtTs1W@QO(2D zH=3qL3?ozx!}IO7%lU#~TyC3gq@lb+>7$%H1|&?w=%&MbIRfMs5_J{`qa`logkLP| zHy}4qS3&yNQti<1*>XnxQQL8Q=kTI-pqqges49cE2ZtBS2fAF_%^`JnFVDH*hjAJ~ zV~6=k`3js==a=WgI)N-$nbG3(czr)?5H1Lm~sBQ_j z#Xki`^iD1~%I9NPNR;isaRq=vCFr!^0*!Jl?&ESKG058iY4YC`M)_C_i;1(CIRdWX zKq3>@L-glC`A=%NJ<-IMyRqR9569Z*AFvi*#$uE8zlHnmYPO2+*i>8!0s#l%zq~A;yrZ0v OB=wUQ|3LgLHvI=;Q#l6! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f60c424c912527889bfb6e45b59e13efa92eb890 GIT binary patch literal 5645 zcmdT|-ESP#6`$GJU9Z>Qc8E>Vv=?w3+r+zkNCc%RQa((efD;mjmW`riJafG}WImRA zXPj(mPz1C}Mb%oW)a0!^@X#n!{WmK0C95FC9f1J#rG4Ar(pGuu@7&q3o!G6Q<)IzP zcjtbbbI(2JcYgPb|IpW0)bPl^?Q$-TYTBQulRo**%i6nmxvJTkt-G41S9G1;Gj7H+ zDu#MD+^mjhW*6So>~3z@-49~l8%AP9WvE%4>iG+Gru4Y@q9el-3$Jr4L~n$8=7P%) zpM3rlmq8>fPK#{b5Zp3DZck<6!co_h@)c9W*<%jGjJWGXC*;C(X&TPiC#e;G`{dI%_ZL z5?6b_}7QW(}n5Y_5I6e{o7W^+Hiz=z~VS{g)>3AixuCA&~> zD$_luRu9<)(}z^R&ignK`L<)LQcQy%AK0Oe&nf+$2*Z0d=W~p8Q6lIO%cK<(eI1- zrf^gEDV{0@Q>+#_Hdi)z*o@+2I1ie34sl8t*WHa<6c{$-P$i{b*_vv{`jja$NPn+xrqRvipv4ms?PVFSLDv#-) zNsjJA#v+F$3lGQ}R3Tbi6h^iJvv{VJN(jYoN??ppWFv= zP7%(f;|ho#59@(~*~SI7pMg8+0$a}(LXXX*g{w-j4jnlqs5swHb&Tl21s&%F4EL>zilQ5?t*%#*I#A(@$DfEbAX;((>)iOqffTEN8;BwA5~7 zl2Q3k*qzSXMo4?BXE}4Dv-9h{>Db2aCFn`#-`1Bir?si<=dVFPAz|BMAce#!x_SPm zN&zw#l_WwzKyp!SQrf2#f#Pjo4OdLU#0nA&#DAggAhi(R&DR|Y5p_31f+_%D6~Lwn zVExuV;RDMOsY%5|dMi@_qp~AWngBSxsc^HAjr7DujfdBDu>-NVyLVPyCDx7mjVAKRf3o!W6J?34o}o_xvxdS=s`9E_y(dXajb@ysb6y(S z45bncJp&u$IW(8G_Lw&O!0n;&*3kHB@6c-Rz%O3<=}YgOSRHw=-K7ohUDL9|#Vh&0 z7PY}$*Csxg{%Bz4u+QA&MSRu z*g)Hot?yxQ?e}P2(DZL4W8cwi<45r7uQFGSpX74d*UI4Rf1beyw4WXLt#Lu0$_ads zYGRBU`jVIvyU+qg58MZ%swtbkCB8)q_fSJv5Z|WeJJc|09zv6XM2w>o7b#?k?4{8y zu}mg@KvL(?{8{^l3hLPI+oO-QMjzW6)Un4A)Uo2<|BJ}BM}dmFasd0iJ#qM9{Wtny zmc9No-UN}K)!|CKY8tUAvE|_T(B5@^ANMu9HjdCX8`daKGg-dZ@vCbzlt{a4PW?OxJtn- z_3K&jFdQa^s3E?K3n@{_EV>{amH?`Ni&WWj>4AITlnytrS`zdwYj?)99iuCvH8Otf z6*N~0tA)Yag|Sv)?4!c2)q&9~17ZRTw?tfJ`8;NlEdRPuM^5XTb2>o*GA^$&E+Za= z>Ny;~uXFfLYRzEyzQgvXr|M+T?ro2pOkO7OC()=Z+Isf>owxhPTm9p=`X_D|CT!nXHx&QK9PODYf_(^8c`V?7pqk-up<{YLfl)ez7d&jazDgf)hfQ! zs#P%vSwXdip#Q_*{;8TizIs)GCLv~k;zbut2orenva+tbX~0m9cC4-Y>UyJ<%F^@>X_s zwb1j<@pdMI1$nJ+$I6LT@A$3kcskNMxMHlFSt+)9cHheGPDTq_e&~<6fz`sxYepuY zZ|6sHJ6A{d-2C=atM^@%q-H&{cLuaiEi`EPXwF~IBr@vwGVs318Xh++i zUp8@b-_aI3rh1=skA9KE=w<`Z#ie+k{a-`FodOmo?j|SCO%2B*$qikqDke`VrKEV+ zvw4R8jZww_UQl)<{~HvPw{dT}CJG%_1v}28&_IolKt|zWC>cQw5OQDQJ6tL#C9t4> zoyLU*ORIvLf}t;b&%eO6BO9)77iuYe?}a^7_g>Ex(M2a zuIpdsHT}^~wC{bQJ@Tpc(5Kp=mUifKWAKygi7$aR6diBr`q<5piTB@XjXd?GMm?qZ EpRz_gPyhe` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_exchange_rate_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b54383009afa902625fec2050e5e5b5d6adb624c GIT binary patch literal 3578 zcmdT`-ES0C6u+}GJ3BkOUAEg&N-Z#a$^zY?C^h0o!k0?Wf}n{m!EumuhxSMsv;tS8rH zzLwmar_>bzVTG&(-K?AU)Vj)LvRm+q^&;nUZjV>0mpHGuE4*^O%=x_A>s9I%0cFth z$W|{QyMTqOV(d@7uT`w}{K6JhA?i6E5~qQWV>0bn7&Z#j^qtVTfDOm4W+LTCBXk1a zbR)?!X~<5z^7_$(#{L%$?mv8J{CU_Y9z1VNnf@d`W`@jy`l3U_Bd1Pdi>a56;j>K) z8{7_soq=wBrhC*RrpF{h-I8M%Jj2sCmRhm%G0i87&NW~zBaG^Tjp~^^$|HM)ox!3l zt_F!M0hi^RZ09CqTe+02OZU~vgH|@tQnAeK6_(j6PAGN{XyzVBvjmz-OQ@EkzV2^K z!ag3!4ITqh0Jo!D5XXwJ+KOa?!zS_P2N%P7qT9wvD@iOUBgBrdb!Q)t%P17!!GE?e zgHCsAru!LNw51tgCUY%&H7VJvnOJxnRpnc6f(cbiekTs#2Ei62+CHhhGKIBnPqe*9 z4^hn|ShE+jYT8j3n-ptJ_=j-d#B;A{FE@h_Q>K1$>r@yv=pJ3S1B=!uFUFb`czVNZ zdDsuBZZ!$PzU5%5yMbl8P?{qR0>w)8iSr|8xv3Ge;Z!xpry(}&n!4aF)DVOYe9~N~ zGcB0V0$!ICTroq<3jEM?eC`*4Zvw?oJ2&N6Q`$s8urujvi*M&21}CO5fv?xXKnr}V znSKCYMQYj+-)(7hDmce%)QfB>nr`SG;(bT0y$5M zVCY?KMEG3Tu6~gp5uzL`HNbqrBt!vXNkGyc1145Poe;=_;>ziC1g2Kt8RpW(jBqtU zr)yHm+1Z)QjCf7H2NLCO!9e>zBN3lwF*>9@qs6E*K?0AX#-sy%mtseYVGImF0=N<* z2Ea~&N3AaGV7cODI6u4`JM_1byuN)!ARC$HLYY=2jvHhMb|V>3$}>a4a(+c3!%UN_ zFTf0CA~pu%%2i-2@h`eCe6PAqrO&`2It~O%c7S*JPP<3gEGC9wv5(pO!|KX?|+5$e}VOXA+M5kU~*Z3UWCogCqVv9|Nr+Q1;ohR2Qd_~ z8QkJ+6(hzLwtSS4g?x;s30cp!S-bOWkScI@1;3PrH-U}~|CEAQ=T&BfVPgy*X)cz) z#{*`A0gJ+bWl2if5-jH_tCx45+$#%T3wtH?n>=vU%=maU5A(_JO%EGJq#A}7*iD!5 zMZ-ATG~HN27+{dKjBEfBi7;fyHn!XWI_a-KE+HtIu|2c3UBBh} zvg(iJ!RxC>ZNZtP)?-)6_-FtCpwul7d+@g%Mp@iQI4gu!)G zOoh$Rad|yOa@cCXsE=dKZw|fj4vg{;`xLJGlrWTzR;GtjyyEu}Ud2&gD&rF@zE%-- zF^^WIlH@vKEV<5ZO{DRKw|3X{fg9_-3-9|QKo+VF# zfQ=ox8%SFe1mTX1gwZ*)=?Aoa4sE|Bmgl5hb5d`j+{t9J@@@5XK~O&%xr5k~ GoBa#H_MK(` literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_expandable_field.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_expandable_field.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50f1a27722e481d068819523a2e002a3c407cd53 GIT binary patch literal 337 zcmX|-J4?hs5XbkCL{X0e8_`0rOp#kWTd_DFSco7*i!?{hox59->@G<>E}ddyYh}KI z_)+`;Q_SRGJ;D64IcjRAQE~UVNE= z&;od+rK@z#xJXDHLcHT?>@L`=k}A|VNYAf literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c5cd2ca65d97431623a4fd99205486fbc41e859 GIT binary patch literal 6205 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 Je~{u9{4a@xegyyk literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d98608744bafdedd5cc2057fa026b0afddf0aaa GIT binary patch literal 5917 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_link_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04193bfee423f19c807f12a8765b9c589670ba5f GIT binary patch literal 4913 zcmd^DO>7&-6`m!R%jNP%ONypsAx<`i?UZswMzZTBf!iYfi4)kNjkrZo2JM38j^wp= zm(1)+wiFd85~D?d0?nxg+FJ`05bWN1YY(~iVj+hR3kYq|OM7EMr!92qd$YSFC5p1* z6h(pV;qlFTZ~orTH#7W0HmeZ$+<(lNKc6JzFW88_M9B1h4a@^#5JRwtEz|`8`Ir^6 zIqw_OS~;wNn5VV0--XS1>1y`vX#2Rb&{2~GxZGTlUCNw)pMMetqEJL ztDH|+dAm?Aa9*({?P9&i`LuP!F4ao{iIFSB$lNDJmI@E!!8+?xYq|2o->^{@{OnDS znQeNLvQ@K5L6CMEj_H}}R5y)s%$KjXJ+tLBEMIIkTn~GE^E)>#>lfd=eDUgAwJRWy z-!LtD&2*N5SFV|^cm38K+CbwNF^g?D7(f;!x$ORN@KNI&?dtfa#ZGPnHX71dQmo1uuL7wG7px@ z9?QbMV@`r)`cRfdu*|Fp_o|nuyX>{v)i+xn zwdO9gTFa)hRK3t>E>p*-u2N^UYMHmH?KSUq%Q;h-U#PmKN9WpL&{(2w)#b%n)%)wz z-JozQ?KNM-ov!yQBaBrAr2tvPJqzRq#cfl~Q`pkBkKFLlE}92jnUdo;i3Q5<_|){PeTfgZK{<2{H)g zSIJN0-^A|<V?Bs@@T3b|<{nA&UxNG*y)E{cTSaMzqBdmfZg2$%*9UqMd<+VzQ0*6iJ{<+(0T@jqP)58M!K${bODV$b* zm6{V+8U#!RGU8Fpm;YQT%=eQ#fLbgChu$5Of!5+MJyZ<1Dqn23Aj@_;nLUS#9`&fy ziidY*>2@Mi|MnQfH87dtG!;p0Sr;G(-SrnPq`(ia??dQ;sK>2h3q{_D*!IiAI56 zFBvs9gohzoKN2I(NNmJ5;*X?#kU6Q0Zu$G00;|B%2C%Rxa(rgTKc`?IXD>fiE1#%u90;;Oy6=q| zPxp^tmd^vSUp#UE%gLv}vdmtFWd#MoVR;^#3rL2rIgG+d6yx#3L%_ZQ+#ZkT`hMl; zz5e`IzjM8dBYYc3fYDI^2DNjD5FAuay$KlmgI8adgx?9Ti^}g)z_A?2{^#mS@7Gmu z69$-fG9t^#JVsA5_nIbll*0*~hmv_R1LNW&$UUJ7k8nzd%PHR49k= z_CbZhUV{nBv0AMx)XG`74(m?Crn>Gcx^B0O6}V38en!{dTWMH;%PNg3o7r?ls&&ssKC4 z<+};^g|+98K0Z3Xr7m=n*p>%-LA$O(lwvQ9T!nnW?q^>aGkbMQefjCLKV$bNxcDHr z7}8pK+Ajr9oQfX&M(-Pj_ZL4CDOWtx;%A93d24Mzx*)6glPn)dbb8ODjtl=?xD2l? zem?5F7(McM{rQuToIei&oMia#fj<>#!Z)72>z#Wl)CMo%%FvrEyyb;YWW0U(C&n7{ zS%+WKUm9!LKO;kPyy*Gkml5JXXpE;ZE+vLO_$&1_M^q=GEwm7>jR<^}++v3%2@yfP%9hfK5yD>re$o`DrFCY5fOMY>h literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_file_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f6bd024d3d136f45f99b358b8198720c7928c7a GIT binary patch literal 4447 zcmbtX-EZ606~Ck?N}^t-j-2im$p6JVQ)PGHFEm7FB zJolV)&%HeN{LZ=j>(G!w;OGB)!d@OB%5%MOEW+Q~JPn!P*@^^_v46`3J1KV>ACzMRX4{*k%UtD;ne(Kyir`|n3cNPTF8QZ~`%6qmS zd~o?HHPNj2A^oI9LBQwxAW_lo6r)B!FBr^dpsa{8oY$9>Q1T&#UD3tZ&Wtu5(Of*} zehthjp`<2Qq$cJ_j#wp2q$w-47c`axT$*#Tm6?~V?A>%tdahLttkU3V#1bv#F&}yG zQ2?#{RP7LGGw}*Vn&o@hwQVo?`K+aaW$uM6hrv==63U}t9^(=p(_APwc?4MjUNy{k zQH&YpWhgTmw3ypd2gmUd&i&Yo699||K~o%eXMwDeK!6ATS;7jry45m~i&n~#R)iIC zJ^dg~^9N$2yhzG&?=OlL|KRjs1HNWx4xFs!&1=B|)#hOjK5#~$EqN`b8K&vA+(26} zz|u6S4@$49Mfs@t9t%M3T3YlvI5Y8ac?kzL(@abz$WG0Iobo5Nrem14dxe`eJXo4h zle&Sk6j@R$-UMs`y#-#g+TSz-D3dUCg$BKxzIa^c+YM7j(_Tx3h0BId>xN}9*d|lK zk_`h{6Pb*&vUL_EJD5s7b>;^qK86zF(lhi0uR--I?hXAk^{>I&`Z+J4PG#2fuED1D zS;M?WT}xl2?xOD4m-XgSu;95Ts>i2v-wtS{2?oX$>gzs-tX{`0*8K>%)#g$tVYrt$ z%;H3;qND^n@J|A{O&+O49c>q0YZuhtzW?j@+v@JN`bvA>!SnZ$fx}C$6S`l}?jEHoZxHll@cbx=_xr z-LMEh8a9U99wg&P5Lk1`0Th!1s2l#0YqEWyOd`+r!yr^J5|MU!4B@afLXrFkPC54iSvs;&IYrfV-dPmprZ2bUee- z42}jsL5#Uc#HHp^fCQGuIaQa08|W7 z?&!J!;08zWYPQSOvA;#*z`djlvdBS8qTqewWIk0FO(W`~e$M{XgCRE*v6t=QeFxd5~Mp9A6O zeP%ERh<-Ah&qs85T6iFwRMvCTaPh&TXG5^2DFI1-2=o;Ey8)0FZLL?6n`7byoo?K-)|$X{Pz*XqS>hd>y$aG$#*$_P3=eZnVy~ekH}5xmA60nEiJD3l0>JO7%cEz& zeFE)7x&X%hSs>6&O1$w7fDDcI;FoH7LoKi0{PW2#^q)Rd%U`H7&+Nq!wx3Kjj_v!f z%6I9-|9`px_A}4HewH1FZAF0R-Fpg$Cy)$Ucya=VQH-|~9)9+H;GT$fF^Owj3MO`n zd8Avx**^mkwelqR1K__v_@7w|c7g9te>fuxp9wRP@_7!pvN$(a7Us%%xDM7`qe1KS zP^s4&p4EbDT0Jb(>z}j?C(stSFGhB*JQj|{m8Tv(lgl;3avl~EWh<~9o~5A-R{|(^(P{Ee zf#FC}r#Ilr;KR3x&#;OQCSx6nE)gS%KYlfhsxQOO+i*{!iEm5w$3E~5#MZUZkDa~$5Z*NLx9?7=^LAhV~mf(~7{U75T BTiE~r literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_financial_connections_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_financial_connections_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..493d795068ce19a1dbde93f100a939073b1e8ca6 GIT binary patch literal 2036 zcmbVN&1)M+6rb4-X;<2nWygt==A*(gE^4ut^aFYbrOro_lGYTQLbDVGSvz*NUhOI~ zE5`~-F(IYSp~n&z3e7e6(tn|sUV2Foq3&WIN>9DHwH=I4eX}1{8bShj$Zy}gc^@;s zH}Cm3(<~q${^T|HcNL+(#3CbD$F%)5eC{C!IoLx@Y-22B$&;G0EyuF#DNWT@F`_CP zf<48{HS=~p-cvoTsoQ!i=e$C*Xcs}wJKDVD=uQE6(J_FVKgzZtp^L~V-9gR(#cOhs z-Znes+Th<}QNxir6Ee3&XDC~A8&oLVW-DMJX$DT)ixpR{es+PJyL92)<&UQ?f<7wMNj-^5cybh$ zg9E+Y;^@KVLLa2YI=11qYRvLeQZ)# zV?>w^0hqWa6EBU4ld~eQh6F4laWwI_JqGN1d=G`$4!SFK(Rc6^yLb&JN{l+_0iLc& zk;>aG$|8*r*LOog01|~$Z!Xdqz22rg3|OQS((vk>6T(G?N@aPUS=WLlwdVaL>pbNP zVbHQJ1tIk&&IZAP>(5(f>x~8KJJurg7cI}7wOXC!1k8WhGyQ)Khln_9($}+w?X%R*aWOGY`=nV z59v?A*2Tv__a%UQOS&b8!YZaP>uS`MGC;fXT3U=-N+@E+)CI^T)K$9ZD^av(DD%y_ z6r+9);h9C8K~)sSGe!g$gW7|onFU)*h1>WBT9U7#8<-7%s+Nxo!rQZHYw;*QPs4f` zGN!<8l;_DRDv*Aiwac_~fib9fX$mae*>*_dbq!{c@KXGGlSajKT+FecDFVe~Br;PW zc`96BR1w4u3(q1UX?{X(zVYH39vF^;C-;FZqbjQoo*#2u>ihDIM6qgyhp_PGHmZ%^q{2KvPqo~p=zCG>~5J0SpAIwwIk2)W*_ zd+E*qA$8vm0A-kf&@AzTWuxNyX4*jw>Uq#(m<@}oiDvvT#)pY=#_W{Xcpcc@H)y?d zs;8Vv`OtVz8Q)Q`I`$-2QmgDp<}qC>MMu*4N0M*WHB7wONKfhoO_xL7xh(_f@2_h|w^VsBw^ev%ab{gR0Xv6t{~R*Q(z3BrIfASA LCw38h;>`a6)w?rJ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_forwarding_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_forwarding_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc1e4dac68dbebc856f2c39c0797d3d6c1ec306d GIT binary patch literal 1570 zcma)6&2Jk;6o0cH_S*3}PHG4(B(mbDl0o%Spz5VUq$MOMB0>ZXT_KGe@5EiQ-gRf! zNgO#+R0WY9IHH6TT&rC87Z4H`E{P(fbd?+sCvFi*t0*Vl>_-EF15ftMoA)ulncuv( zzvy}%Q2giD?4M+S-^C&oHBnAYRJOqai#X6GCLuzX9H}jva-_?S(pF8C08@DeeTtK5 zXU#17R4Zd;TaryoO@e8#v`w&bjO-$o5Hr`y*9QI&YK?^Ye8BAvn`eC4ZZcu8+Z~Sw zwC!14Co+6`|KlloZ)WP=?1yvH7*YI$J?t_+NOD4r$7_FW+>bV^FM52X!7bZu)oJ3S zevH5~h}#t4sU*jO(>Kxb6<(TwNh~m>&+zh0wxl~~--1PA$(x#~Sjr}t>K3dLGcyl0 zH5~fj1zK{V2!m%attq7_I13>0Kb^qg8?p@n&apg}`tUV!-zU2ywh-vS6EatmLe=kf z7!Nf{ZPyMct;wO{GiNc(C0Fx!n4`4mG<=^@Um#Q}8y79(f!Ah6%Uw0zXZ}*)b&MG= zV9t%Zp0|X|7&S`F1r35Z9L}t3< zJX9fw`bXqW03X0eK|v(D$^3|{z^Z&7RtO(JQ!N`7sNY>kYS0g}EfzF_fO7@CVb+gV zVLq)^d{S+e^`aG1kWove47exb zVQJ)4l}C$PADwBSmk&$g_Y|Ghciy+&L8*S0RrKOn9?Gxoyz_ne;L7#A!u9i`!I3|K z;J(9^gW>VL!uW}ds|&w?kdG#FlLh#(P@b&F$RIX=xG|+jQ}T5{y+G;1Zo^4DgOoO0 z*F$b?&&6(tij$9tOY2FCG@0XI6A>;-(ih$KUc?H|p&AW?!f^$M^Dp7BICh|nohd|} zc%CV$RW7PIikhqC!yl0+ukHQw-ypLapFM%`h$Da?#WZx{`ys;ftC{sFKUt9oeZjyL<5bkRx2ir*awp z&tR6Bfa=c#Nr>>Oe=n5cMZ#)e3hs3?6TF#4NCe7xEGI3H3u7+AL3`e5D>z6LN+Vt= z>m8658&P=@(R`U$IV#1h&e@W#YWmIdx?$2%7KJes%g1poBK&5Q?1Gpr8D=3*sJNgQ zq9T5JV@}B_dY0U{esIAwi^j=R3fh8}CbNZnN-boKlv31EZZjiQVA>mX0oi_@aJrF1 zb3rjh&0r%cB^XOFwXBlMl|`jk%xOdw&4M^zGE0<*ntr>WWeH3~SH+@I&J*1<#F7Cb zKtDvh;f>`^uD$lgM1*`sQ!huE$gRogry%=8mg6CM&HakU*$_aafX!z&e> z`kf9ESCbCX<<*HeNVkKqRf5$KNJLG3%V%24d!(NABd^l_?zmHBr^rw|?ODxYWA-&bCFIJUyp0 zh#7#n;qUofNb1ET0cXWSs?Qm`hWKAVTpy{`aebtQFhzhL)exo-<|`MP5@qtV&06OQ zIh9an8LePeGs{+(@fj^!p`50ZBlhj66)hGF6BsR9P>B_StVz<(cuSCFUC9$!wpwI4 zUrYgngbK<{VmP}{ zN}jhlq=DWhi)Aahndr0=X3+!J^La?V=9YU$9v^!&QB59L@%y`aR(Ni3|KseV>(%7A z3-pgYo_=(ynmqVYU}XI1=#znJa&q$;bQp%Bqmb-M!#drZVIfUB_C%8?U>7FcnC!s> zl}wR`(zF+|A|^}|BapMA_3ifqaumzQyh;bKQn$0`$_vbV-A&f&+<>F`S*cpm<$VXM3ADWSB-rNgST!-~J`9ai6T{xacr_s{_YFR1b&45;u1gY*dfH&9Z~bZp0aVdrP)3;XL!2px%=5jrDlm(G#e-4|EPyMzw=l^SIv z9+Tqh?{42f&%^pQ$cF2NzwevHf6|;Ro6>j_ZfBeByP${#xa!<(6dre_!p=0QuzGsg zK0VpqeFBv7>qb2>uV(}yVF9v)6`0eqjQy;j26jhN0H)~=uw2BXMtVWCOL`o@n{XMp z2HT~8A?D~^Jr4xe(R&9T#N7Oz-Uksozq!x<2u5sJX3yupfRY{d`TCbQ^nd2{%>P}V zM?Y_2ehwd}>nFFr)K?1BoQC(52AKjN3jV%tU%%YEJUi>}?}IY_1lQZ(@3U{9w4Lzz z)1arnHtK4F&yQm%bNq+_=EvTXxA1wvwNZKs8vYS3<2oeU_4~T*oaby3sO|QfJNq;Y z)8H7Mv%mct{FNfn8f4ooPT#}^kFxBn!=Htf|1Vr`gTptm!83*JgtMOq9d-K}^t8d* zZ9j)y`~c;I4_!t5*&d<3g~uF=3pH=4$7(b#me8rumb z_!zV@*QlrsOu)ANLr{(F{ge?wi-Gp{syBep6|6$+GB+Rqp=%b>=2bV&TSH<_sI`W; z0eJkpXob&WI$7Y zXw=l!408b**fbNJgX6I5f*p}}A24`nzk*0DuM?%j*gOkW(j%A?F&V~$g=2Z!)af-q z9wJHo9x|^(QWHMlkH72@1kN8-q?2)Q5$wgkMGAu18lFP}y6@Pf| z$Z8sws))s;=`@axp=&FrQhy6*}ph*|NUxg#OtbeIWe;u@OMHzKh)#xdR+sH z*DA@eYHZA|C~!S}%RT+e1N$)DJGk5{uExV7t(DlI?F$-e7Y{P5&P|T?CBKy*C7FE< zxc?5Y5}y|v5sG2G^h=zQ4S)v*ud}2vVI2*2vPx(aONFs&LGO+Paszrz)+ds=_H38alr8&dk!lY(?m`<9plv?vJ6AoI=@W2`FL_E zIbMk!ss@q0SaIL@)2XGsCn~{iTVpt_v=p(roIl0L_TBl{3p+2ec+eM|Fxm1mFGe!9 z+HF`ScTJ)jcus07hlwjfjT%3%3sd%y>yPPOC;)%v3?%QBfY0aqj^})-e{hE?+@Zg7 T`_}kh3BLCh4}Ztuoptd)1JF?s literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_http_client.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_http_client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c47ed9ff0946ad9e6fd5985526bc1f125a0567c1 GIT binary patch literal 56906 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_identity_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_identity_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21e3fbb88bfaed14caf943e66641279903dfd538 GIT binary patch literal 1827 zcmbVN-ESL35Z}EI`_4WmCUu)H3RWCdGBiFFh=NdsNK4d~hzJot>It-Re4F&h`Oe+F zq;cd(Q58h`fW!+*kdWZD$_xJjFTC*5$U-uw^a1h2TOdgl<%!wzU7Hq!1fyhbc4l^F z_ct@^pK`ej0^*N`oKIAQeiMs?U>(tc3!g1yBOAM@jxCIZEV)u$w&X~bU8SyCDn?Xg z2G|rgRZm;#$fmklUAJ_QQ+9emvNc-=p7}WxdtACA5rGaJGE-y_}=?e zct6=bblNyeIR~HEx_XgExhjrLy}${Y6|#IP5@As&!n;RdDLCNj*uQV#-2{*Kq{XGA zu<#FYd3g3IZM>D&1P}?u5TS!NK=V12gdz*u$dW#U(oor!E`#2dK~jXYiRQ7bZfKTb zr#6tKZlV=zrDjn%9roUcFBxAxx(?G|6BCDIIx*FJd0@xuXiv-COYdp}+k-!A zr327CjgG)9Lgz;iwvc`bofaMh-N%6CnzSYd!YiU6nJ(0l65LwyPK^1Q5{Q@)wE$TO zwUie6R21kLO75VrLR@7L`yC&AJFMidYsrb4jqBSh$PtpcVNhx`UapL8lmm zFU`eG&%^Wr4XQ!Fm;%-?&AY2G1JjX|Q=6vEDaN3%J(J++%q;~pT9;KO&woRH^OeK2lIuCl zpu+I>Yu^>xXD&Q2E*$Um_Wy}6#O*7#`$irZBl|L}PPhRn?@sEI2KvD$OcrIp4_aT` zmk!K@FoT+G>95hg4P zV#J1pLG;@3XQ(qY-d4st!xL>~;!wfr=%ZART4II7ccyHF=i;}Ebic`5Fwvo*-mMNy zR=3j61?yta`>>?}$Cj1>> zPz#KYQV3sqh)NI9%fHI`BS}(IM=4GE3X2y~e`NK%v~C;@ PoW-Rt>qiJaQLeuL+~w`% literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6047b9cf73a6131c6dca5276adc957d278842bbc GIT binary patch literal 72856 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 RXC+ZrhF$n4QNrTu{2$Qv<0=3E literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6d952fbb37803377926eeada70a5d2be9b99149 GIT binary patch literal 6612 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9613b9d63692ee8bc8e0c3cce6a4bb17b8be002 GIT binary patch literal 10603 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 KSinc775@hS+0{e< literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_rendering_template_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb568475058e111895e984372b88e6a57646faea GIT binary patch literal 6184 zcmds5TW=gm6|SE9v}f%0*l`?#H@#WsGLAj7_FmXsLbSf*V!UxyNmhtKFltYi?N0hK zTis)493!oEBP1jwcp~tIKterT z>r7ovohsKk-&d#V59zc>;Ils;(C&SikiTOk_@aKH{!1u4ASzJ>oftwv5U?E5Lq@m| z=H;*+F`|X25i7)aJ)*~rL?Iy%nqb4A8`YDBSP*$%Oz$vKg%mHx^|aAh=;Y;u-epJy ziIoFL&t2jJ`sjKtkjSQB(Jcnx?{|u(!^_@oHzb>z`Q33U2zQ z!?ZHJN!hYiqR`M`E2idXtF)-8*^ryKUUoFgRCG5|QfvoD-1_E+mx@zYFHOzP%w2(o z{uy)Gg26YasZyqyi?^sz))fb>i63aTbAA3cE#c748}#D}g$8cZhL+Q<#!j%(lD14g zRG4C*;;B}OI6+hEOe?J$6#h-R!`|6enje|U&Z$e@rg<{ySL(L}^fV;}K_!Jyk|c?G zObyYn8a@FkY6MDAUW%#lg_xSSA1y?V)JlR@)YlSejN9wjXD_voP}86pZ%eZiG!uI? zyAHG|fo8HT&2G>X_h@DgwAlli9c^j$f@Z2JWc%EctsLWr=$soX^PpfU*lIU!d9lP0 zpKgp%r^3v}(015;tChWPmwZ5Qr{Zv|*C#HAEBP+TtJ3cV%5!qsZ6{^bfRk_5df*6xkz|4reqB%>lvqWXX zf?`vDcyk;_wLvGKgEIdrrP3d$n2 z^ERiXe6jVyi?+vCxpLKw=&-%3L#^EGhfNN(z65Kv-vsdqc_tC5cOx~vk&=FR?fcg@ zq+=V>*v8W3Bt1|kv2O0iqNE5qup`z)-6@Alk*}?cit*tiZ1m4=QWI zBOm3DBSA@xu7%dZk7EZQI^Otw6Jo(}V#|st`(X-D_0PX;j5e{n2xplo&rIj!83!@1 z(gmfWBfOEXY>sz4G6C_+l-bAz)&g%0_9Z6=C$U}~k?k@qX$w_ZX{tMxY*Q+i8C}+_ ziXF7uJ9q&%l?P8__y}Ie-wUSw?n8l{#&OM1dl=!Qz#t6*!dcxHgkJO|;6LUk@#?vwVlU8~00Z`Q5D<15j@mOjQG4O3G_@{G{b}&ruloNuI9>~r z?rEV;Lfx5KjJ)!i59lrq=mY|~0|DKU6xpj_b6=2gK>rAOo(Iq`A80@U@gpc8!Op_6 zI5a#8IEU3Nil%es0`I(r&F4|z{<9Gfdpyw@?61!Sxpw{G>3;()7D0G?5IANRAGGTl zq>2Pm#V-HUB2aDAyI_t_-<^mFzZE7T;_s4BV#o&jJoi7QhpqR4O_~hxQ5jEj57@S& zIDkk1^xWWG8ZY6=c!!bt5tLIRci&ZWCmt;vyZF+)#;F^ zs8ygDM+SaUcCQMCIFP$QmQ%7!M>8uhsfD&7Pti3<(I7~K2tY(i2 zhNkLIF%Vkh0}un3pGw!(rE5E}IQIp`;(HjW+gSW6R@=p5S93poH0IlOfH&Yb=!U}* zfambVk$B98=H{|#xQG@_#h}HaD;A4}rB-w-r;5doD~j&*FwFUxjA96c8;08?8^!AD zDBec#4vGsXE`oSScqYj6Qzl_63cOX>pTm)UpFkctDO?sda^wGscSps)Nc~Svd~IF2 zSc^gpIx_=L28P$W&)2ZGmLTHm^(2;tUu@V2xh#C0&z9_k*)qp!QTT;BgUV3=~csi3psXgW`~-I!A?!<&Z}i~I?t+iNM(yACz+erGeh zh`OhO!G3OZz$=ZH6ZHg&{QB-?f(#!d-Qz)z|438Z^(6L=-|Ib^0yH!d<1S_{*pG EFX>Ap=>Px# literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_invoice_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..917868fc4109bc677ba682b7d3f208d15ca7e3aa GIT binary patch literal 24008 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 JNAO`={})>^D~tdD literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_line_item.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_line_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..162a9f6302fdfdebc6f0417ddd3a519ebfe67968 GIT binary patch literal 2380 zcmah~OK%iM5bk;H&hE~>?Zq~Z1;GS12yX}+asVPQj(M0hA|^`akk)vnWe?0_(=&^_ zD2GS{3B<*mVx%0nM)?Ez4>_&&f?7f-$|<)+HaYkZrFtH#wG}BNO?CCxT~*UxRrUN{ zEankB!QV6Xy)r_7@=5wAiLy&U`3YIb5**|Tx*%{}bVOIuC0EvESJ9OSlbnp3)w8au zs{$e_t-(Io$+>yG5UneY<`(s0q-UIxTh_}0645fUvOgkACBm;#98<6Ka?Si-e9{z{ z_GL)z4q08lPt33>F?G=~g5WEIGI_-gLZ+^ELfiKYrzx`RiX9SaIIOt#&7CE@cztQ{ z){XWucu}v}f$4X>5On1ZwM_y_cFowjYlOs%LgGGZswui z>l()2bqyz3k!x2U1P?;L)4J}5#5sG_ z_aE5aM(e6!J|LdedPuy7EyrGOb$a2Z@10*b_h~BtD$aIbgRwz^RuI*83v1CVhzBZyB`iIu|7ZgA+nL;l$%dBj6gAf>^m~0WZ6S5MJh)v&d zpo4)QR^#)a8+9}eeH{022%Im}A?6(C{pS zrg-U)dE?+5Z~BgH89g=uc;eY`oL=I!crZwbl81x_1e==%-5{)VDA**N!&rxES~mha zz=<)-KO)pmJXWJEwqu77gBXGDu~KRkS8uzSrIVb}1{X)TnBszGfo8bKaxue2l>AxH zn6w6&m;>!NyunQnhf1bA^}IY3WhkFKnw@{G)rVrKI`>Yh6ie@<+H8Io)pGgaM{#{k zAAePUSsbV*qk@aWoa152@i*eMokjp8GlWKQSU%YShhkc)M=Pq?rIdJPj}rI(rC);fjD7(*t=5 zXa>{F!AW)E@oKtIZw%zgbW*N8zMbl|nVl0aJ{ZVzDNvc(k$1j+S?ZTh4dhcPn$sRH zr+RT>`-^9*1NmqQXcODZ{le@(o=uVRk?r7_dvMFOo%)L#{leT>tka+TcA`Ihxi2^3 z65(XDn^iU$-)aju9&wUVPCd&2pKt}lY2kE7#ItG)Lzjod3;1;#=S<}`mDFEaDsckq ze65(SMWqs#&1gSVOVoGK^%N)VVBhSk7vmqmWx5RB;D?Wbvml0&APDa>NNBx9XZq;O hTXf+Msq#j?^hQ4MMn1ilxi1KxKmGna;$w99e*uz0beaGF literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_list_object.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_list_object.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a152573b3a2a145000950465e12894cf05c18a7e GIT binary patch literal 10368 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_login_link.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_login_link.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e918b89979f8c082d73cd92ae1520ed8ea3c89b8 GIT binary patch literal 1140 zcmZ`&zi$&U6!zUEmozluhX6rgaD@;=A~nAzgn$+b6@(%|%a96L?wykyx!8y8pk_lV z?A^-9iuhBQDj3j7otW5)N*Oxwe7P$uJn8Ju?>#?%{`~H9ypnj&hN%5`CG>9ExeBOc(F7{u;3?;x3BbO^qe`QiPPAk<60Jz|*~methQTrywmyxS z;#fzb8}sH+bG-btrLpNTgAMC*2n#&FmME?P27w$32uMiaIJR|h!nz!Hq_VC^;jscZ zWV*L1nF?pJ^Jf1!5r>`FMg>_*3ofDH3>iXCKd}mGO=+^<~yMsW(*d zVxyK;DHUwMDNSpX4rDltEuN(G)sV$`q(UjkL#dj82UjIK*xpVLQ_6&phM7nT4ck26 zoO+<@N3;tGXrGdv9B|SVYvdl+eIpaHAPtY3b5i!9A;=sH`dozMH5ac*9IcXMWO`Cu zo4In8Xz1o<0txW^I)5ud|K4yW8L5gTV}~ky`aTTr&`;MZS9faY`W@%Zqm5JVFMPPP zHAS|LUj9^G@r~Bjdmp-x6~9Y;kQBhEDSrI<2ZXh Xa>zD1vyIOG@{c*yjmbR(Q?~mL`Qc2I literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e6d03771f30156df0156f01a097b0449c73052c GIT binary patch literal 8732 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_mandate_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3589768aa9f1e810142b31f6c3e8e85e099adc83 GIT binary patch literal 1961 zcmcgt&2QX96rWjpy+5g(NhQd_DNwOOhL39%9~&dwxtVtcnU z&eBbTRM7|t35lM_-w>tz1@yq3OQIgSvJ?U8rQ8;63MePu_#;V$kSY$$;WuyQy&1pv ze(#NcDikyXga0vRpHL8bEEdT~$3m|K!X_e!U7s6-?x6L}Q0Bn^@hN*SUqswBGs`FSo&4J?&5F6V<{>{1+aHORP80D;mB zy<>vAAkzpV=S=t)D2)26%wsAn>M}qwav+Gz_I!X%v%i9<-VLqB)y(mm+mXu@yYE}WId0{nS*I;66FRDYuGSj|4klMbEVl1RNyTv zytR=yA2IEfL?J@qvjBI{ehKM=o%~QIuYWuD^;}0E>gcaN(v4l+c#!*X_Tf8McXZ>S zKGzvP)fpM@yl}FcLxr&(QVPXhI;(44l+9{AxayxJau+sx_W-US{6Ch-T|_dsp$NZA zZAxFI)99#d-bUZ3-%Fq4GCU>VR#+5lKuCiEh6D@?7y+mzTo)6rO^dg^IvW!ff>QP( zz#+M899BUwNpWPnHvTURMCzBt1s?-EL4O^iqBQ)dbb7aR`nkv$I0Ix16#smdk**8` z9dJSPm*>ta_y>Gm)*fU*DyOQ|at12c^emT}W}um-+aRlskn^T_bJcQUjRZx;MDwu| z0!{&JA$C&8B3PDBK=cQ{1F(U*Dthx=r*ii9Y$>h%(m&Wu!`xL+|LD%>>%00)HzU?6 zDvj-oy|&vw)fIMK4QT_toRBL2_4vLx9yurcs+RR&IBJrL8O=$LFenZbfiv-B1%1ikxc#E{WhB{+9|!Z9=k!dhjUL>}VdoxJ z%(0g^O6??k>L}d@>bnt7?=b@u;<@Bg09^@V{8T}BW)HpcGkR$cP5mnAd-CL-{MMd) Rbzhmp+PzPoBACL<{sz_|-`4;D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_multipart_data_generator.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_multipart_data_generator.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb75de0c90bdd1304b303401fcaa0ccb66285039 GIT binary patch literal 4499 zcmcH-U2hx5aqoCX9Y2moTa+ruQbJiD7GqPi>qZFdGzKKuah+Hy(8do!i|dJZl1?J; zn7gAJvQ%o+E+7^zB%?(|!7ikr4^HCzhyv|fUnG#Jn2R0^w0$Vh2S;-A;HS>+@kmP6 zM;@Aen4R65*`1x4oteGA@w^{FGr#Us{{YxO@W5?s4cQ$AWCh7crc!9q>8VKy#&n8K zdnP>;qS4z(_S{1+viBaE^vNv%{W1qI zAo~CYWj{b(4gd`0g0Ya@elwf0)Qn_UW0EDkt!RoNS-N2}G7N2hO4Sr`%21?vo14uq=kLPLLA8WB`RkvG4a+YHLV8Xx@MhgHtBC48dsZt7#AiC!=u5o=qVakW2`$=RGpWE92x zs|TBC$R*%GJ~IyB4%&{iuiSWW<9F{aGWUJe&M0(3wWDjRuJ581vQ6zD4G@ z!Y(kNJ?6veA?D*4?3NAlSq+m=GWDcpt|v9~E>Hz(u5Jpvs?%IUjiF`gr(YoS6X08* z7d!>e9qPUxjEgO?uN`f2cSj1l#=+d=Ztq>R!DV4hkyh}?w0jQYKeA_m+4GI5e`~XZ z2G3mB#T&i5`T}#XOfu_I94a+^9EI#Xj-tREMyEMZGIf8OK@duP<2HTkg3Ukd4Z!C^3w^fD6;zBjt@iZ7-dZ+kKiP`FiZFa=U9cL@Sb5(b8O;{Bw!NF~zeK}j2 zt_c0rQ$5Svc57$p_4R>DYwS6PqP^>{Kfd(QrH8*=BFq7{zvUt8{fHC{Og!Fi z#wbz+d_oalG4X# zej}2oaOcTXF|a(gGVx%d!u3^!)}>rAwgEGp6Z*MKw^It9wA z)749Wpj9t!3Y4q21zHOm96ZV3xF8=T2nbv-}AG2 zl6R%}6?SSI)b_PG?0)-Np{dM(u+EO>*{n4ke*+#W9C@Qa37hZEYRU&01%j{~wMcOO z1+k=v2Ma*zZwzBT+pn6cW?GV#RBUz%SJ}1?camX9IinjSuzfhjUo{MPQh0H0kSv?Q zi#e{sl3*V5klSYTU@v^oDe?>^ybe1KoJ~hTUH*uR|)iPN4iT& zInr0Wy3K#5#6B`ByfgRlOeHd0y!y|Rr>fz^R(NIX_)2i#nGXrAFGn~A)*#Bki#6Z1 zgOnjtjj|k~jAz`y8cQ`Rgu{WpOsS17Xx2u zBM872L{ZW--6HjkDT>au@L;L&bHeDw04En?5CalWv6aXfK0#!2Qi~W^4Fur$WnKgD zYgF|ImtHHrR%RmAaO>TPYUsq>n*{rcVc7oli@ONAo!|f)+xa0yu>(6^58Jon_p`6= zbg=B1-4MkNI$Pk?V_pMCS|Yt2a$c!JwLch673S5a<{&&cvRuKmIMfjNUT|+Z%6Q8d kfjOMW%q{@WJQPKJiTE#(?_X%(xfkRZEZzDq!ad>sAEf+wg#Z8m literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_nested_resource_class_methods.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_nested_resource_class_methods.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b83a1f503bd446e53aeacac4ece59f96a9f53cf GIT binary patch literal 4620 zcmcgwO>7&-6`t8$a(7AbPn1YYs{Sm?CKZcpY$0vz)RzB(*p6v8MvFp0pfKE(MT>u# zrR<2H05&inGAIh=Ac#d=REHca*oPc*?5UStNHIl;g^L;}dgzUb>^5+E=$qZ;nxq&v z7TS!k!`YcP-@N_an>TOtM~B0PpeX+wjQ`t((BJ4wvuGpmvMWKgi6kW91WMvLoMh%0 zOy8LVo8;y=t<5GZN$Z>yBT@U4Y?4LhC9BNH`~b|CcxYk0t-TA)kp)2#?^x!96)tH1 z2VFbJsN9=zC94WoGue1L6-@-OYI}b}RfBd`ni+%Ooa8RDl>xmCHo4 zi>fW1kx7(JRa94Vj7}xdM2w?L7=^Z3cy?!?T0?7ijag$iQHd>BBwRu{D?%T!C0t-i z>_@oB6mbz1*#%Bw?g*<~p1Y2MY$V4{DoP9+i1bH*#|zKyEQ8Pnx8_`P0ek&L&jOb4 z9dQ*)OsQAHc4f_Zc~o*`sV-W{YsbGD(m0L>=34K#Zjn!N?h)&=c% zfaYmK>jktP$y@SLi>^A_&>SsjJzdcLkhL@|F7@SEiqMq$5OauHEa;2GOt%1G9v;oP zK7_^w-UOkWrV};60LEy30xs90gy~l8{Uy_=pWxqGz&V&-df-EumYJqgQ6+N@-G#Ib z@Dzu0YmxTK0HS;@-MJTzH4PB)1{g~p&1o|5ol zIw^;5q&^6rmzAY#Ium{a_IqObY&yLZPu&QgjmDPbloY-tr*4H4@%O@+mF!|Vbv*R) zv9J=)%F`JTh~AKuu#zS5j2xaf7Bu(2u3J)uX_6Aktf<~j3D7HdxwEr<+G~k)ESgYG zg>I8*2BJ*J?C6{aVEyzP&q4Kd0X=eiHys~4He3(ggXLozPWm(Rg?p^Qb6#ihT*HRk z0~Obyy4$Y7)w5J6+}M1Fr6EEnX6oAz6E{s?tJ zasVoY#!zZQ(nrVroirHpb5}bD_RFgQc#y6=0#yM$^p5=58>)Ikb+-@rtNVu^^IV^^ zfjEbg_&_9Qr?eRpRcnmM(X1S6CC8-j8i;Q&n}}(l5kj-&z9IcAFt4&5GF($e!g+Rq ziK9I8DgHISj<%Ty9875?yNy-;h77!B$+lJFlXze~jYo}9)o*&Mq3yiRx9T+q!1_j~ zLM=t9FBEk0efpPmdVVglU+%l((ZftvZ6K!Kr`ts|7MN7%84mkaz9n~e?YCgLE_Sgt zIj3&jY_D=1mNBgdmfRf8qwQJ|Iar)SP9!)IE7YIp{ zV4of(X>LPk)}e|f44I_w4kM@=nZir74{l+4bT^JJ64E4%{bESIto0e@Hu~sUquMpi zjUF=;6A{L=Jd)7hLFjc=p-G4qp3Q1@wg5#xAbBHe%Y|OdMif=K4Qck%0(!y-qQB9H zMg#W()sbTrVd$aYT4yW$fd?;DUb$GCy7Yx``76#MIvY+j@x#vo)q^K0!YByUdt4Qd zCUvDY6?x1uqOBpI9$&>itfhF51}45jXR!D>E?%s=4wT>6aUFWXaUNfz2aO-Sw^$u} zW!>@6?XUOw%fk=sm6=Pmz~v__82(>N|lS$rmnWgFYb5_ zH|4(z{)@^l?08K5fvs?L9PZ&P(H*QVb5ll#hJEAo$5#((_ztJU%IHQ$Ab z`$FR!qw&yqok4DI(WYe!+i;)IEluwZy7j5e$th|bdR)B=#mGa4pKD+;3)0kmlxe8G zDIj22@K^Ye`rznRpgK5Jbk%u#Azycm6uEzK?_!I$ah^pz-a{ht&Hve4GVo~SdnL-+*gkMW}xbxXz*H}fP5q6*vIcY)+TBz{|98Lto8r^ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_oauth.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_oauth.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10d7fdda0350c3e864b27356482b92e8add3e6dd GIT binary patch literal 7408 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 U&-V*W7!~ z`JFpIrBW(_$Njt8+LJ`+54MONDP$U705gM3WMUgRxQH?1V|L6DiUQ{aTXdwNYXR03N=BV zK2NTW6ENiQT#)pvX31imGpOM(i{8~N&J)-%nIM5xDL7O>6XBxq4KOo^pdvO=F_u7P zyBRYDQzU{ZZ2_GroAD9ZRBlT}@u}JbXr%-Ky=JOJHe=x3#=V!vNscIH3M}L6vP^@e zGKq5?{?^sb7M5Yym#aJnv<)`v$16e3DC;#}ro3@`qecp6<^ZW+mW!lvb=y$ZK;tE6O&SRjZz0?YhTSek*a`NAminp+DK{e^1KSUN;vouyOW zTCOh`Rclu8la~ya=!R)h;<~gQe5nQ`7o#$ZqkuhcKrj_uVvn>;Ty}goOVcfkRUA?n zEnhDjBkmQiQZ1aSc*O1-tW>U8<`8IDSnj!L8(?qs<{ zw}LXN4c!I{UuBsHv{SpozIkfK0=rjOkYhmpME@>JU1sBh%&z&&t|yb%xf_z#nf_;G z2J0duwCTc(M>n&5_&dB${XWr${g`D^CZufkltduW!=TF=tKk7zFXApomqru?-d;Rf zOyju_w|B&dGo|U+v~WjW1*7rii6t;aQxkv~wc2A4&0e#-F%Hd93;H{I`q+{)KO8Sz zGrI;73pXtD<5^5!hW)n6n-e(zX*WoHd89%e!=o%wvm$+oS#t9wyt+)q21`(J1*RPz z_ftF9s&{1dCOEq%fIz7;93{QWQF7pcHZZRZ+`IT==B|EU8~9lpS`#;PJA`_os<%Mc z_zKAL;O75V7LXQy2GSI|3%1oN7v0U4dl*>;x3C~Pn3%zXSA*t&do20sD6Jvn_O7P{ zf$doq?L8m??4nw%fZa2yu_h2%zuX)+BICRGh^XF60GGosNrs1W37GYI*>H%i`>L)x z6?5EXd{Wo1jvIEMp$urWhml?&z5oN8?q$pUKxPrIJa0joW>QAj6mx$8avRkZR5KX|L8Lc-Li=>Av5+cfMm^oyoyM-QP$sZvS)H4&oEImOt%lv^x2OPmKN%^< zJbM(7xXVZ9&X0h({O1Hx^?tNnVtJJW_`+R=@3AMC{E2{|9Q4 BBs>5B literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d1997b2c48b27bf63e8b90ceba4bb1390b14158 GIT binary patch literal 89990 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78dd9976a33757966a53745c4f818ec70715c540 GIT binary patch literal 3211 zcmb_e&2JM&6rcU{+FpN<1Sh0PppXO^NL+#{3QE&L_-u(mg7#pw8g0Bo*k--!&aP3c z(i250w{Rjz9Ow}S*Azj2}cQzB;TJTQ-uiA=#p6`>>uoEL4eB9)|yT#^G>vXzQjQUxTU z%gB_!L8d~4@1<~$Qmn4#V}EcVFEIV4PpvAszW4teI))8a zv1^u3s9~4GEkfGyX&dCnh@g^SqLTOt_*RmLOcYZ%04sbD)f8u84*Ze8ADP5D{%C<# z0j=7ljgtgPM*ofR|Hcu~VIM8xquoIhk2DFQMfQn~MvpYft{wDXQmPS`BTm z6&PV7u)=0&hHbFJ0CI&Tub=1N=iR1ubkkv>I@C7**$pOYZ1_<1#nR+Uh67_UGvwiyC zk(!Q77KnexHNznEb^#FuGTIvJ0fIo-1r9)P@QbR8d1-t0H9t8$Z%~t^%WkFOnwDS3 zW!EId7b?>*c8m(am?bcVwVKU&9pf)+h8?a@o*PW^e9AHy8;;}p22Umr;}>WP*3kC7 z!X39l3QNvP;R5lNeYaY;;`+p%I`6v6ma|kiZnH zAX28PU|=i}uK=Hc6fWTZ7-7@ZI+OX~Xc`>hV@n6}0Bw$pKfC#4;U_&$2SGtOly3n1 z{F?xOgAxyNi9#VnMVjUA3c`4QS?BcR#G*M~bsqrmO$eGyi=^QSj#y5yj0 zb;%MBt1ej%!c57l+jFmb+K+96ItGhd6}U`Xqc%%cDMVG-4}>@+w+SUqnXsH!TlC6s z*F2PPN53~bYPc^w2o4Xx@Qwk2J03jvOnUTnLm%Hf@bwFS)MiG0lY5 z#c^Wk>Yci0m3LOkhEJAUT4zaD`=I3exlgeNmqIoZz%N3%B= z)zA+*32QtAy$^r@+PSgK?BM#)#f|Kxmy$S`-a=w3-BiU?wyC1w!_fsa#ZZwOTPr{M zyrCZs6yX(2!A49j^ID{HimPE}Fm*W$9JLxkAk%3ur3Fsj;p8NcVm{e>8eTnv)TTT` zD8FLLKN233pOE!IlX3{fW&Rexe!WV(-UAOr;l8U%Q(i|>Fgy>)1Jn|Q__5X57J{jz z0$Do|@p61-^|Ka&simjmScwb@~bSTG%UdANwoyBX87K(;{!pbdCp&2o#1)60a_7TnI?cHtUuHPB8wsj$9VdKv zzXN%IAT8oEO$900)uBx-vz|S(p`C@)=~E$fl$n+`sU+6!wGd3L8-l9n-`Xt%Q!|UA z?2#dRWJPNxP+Y%%88QiY6{QB&2j1V%=Nj@{TQxedK5=Gal!+8dNb4aQjvz$4LKLyFh6rK zud)4M_nyY#jKk}t98IP|>cLYWL^^m<>fY lV0iq&)RY84c%>qt@C%yw8BMfQQxMeWBd_4yE~tTXe*r$+B_jX; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_intent_amount_details_line_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1a0d10c39504138f86da482f4abe93b2a562e7d GIT binary patch literal 2341 zcmcgu&2Jk;6rcU{di@dGX_GXi)P=T^Y3o%&MMYGB(hoIJTPGr1Fha}5J4rX$4|irA z>NH5GjgXL#Kpe=GYm_2!hyQ>J5rBUj~c zEZPZ2sVW@83K;@h$xb?IRSk8ropRFEbchpn#>rN*Ay(`@Cs)mJh(|Y&nOsGtin$FT z+Cw$pOqJ5Vu|bIoGBZB0>Uai|C98&EB1H|?@~vg8TV{z5l&QLJd9GmxV$GmFTk+;w z)7SN@6W6caoUGh{3H6pm{i)dnTx04Nrj4e9U4PQ`L5@3K!}YIW->__Y%X0Cgj~%ee zzJc#HFf0qbQ0k@XBJCAzPx#oogLp+&>Ci*dzi(VHt8#d&K9yTyIMm7lI6 z1#lJ!^VsjcqAiVR^@vA$ltHT9kHGty5pqg5BU0%$uu8XpR&<>s+0chkx7LLqJ!?>` z8>UGxrKAruBnP4-5}8>kI*B+K$a5ZX44<%!u8V<4u{{@h+FeAMj)m7<)$Vu>*5=)N z+BHlUeXp)fcs{l-T=Bd`%bnM*7_~+0ni_<HFj5wt(`}TnF*_LR&`9zt|c)(Hc70?n9a34pK7N zj+Dx&ZInu?9dL>M#>a;++4&U2O~n0=oP3DP#C>4==lq)Rp(LSQj$T3^D_;ulaV3SY zOoV(RM;RJmVvva;CfNBDI_|%!09joB;8Z7vv<20+ppXGF-m+Y{iLI zoo7CE5Wk{7_f)Ac@VIbhvvB5_>ePQ0>eQe8V}G&QBGj%+Svx#R6|b zp|St&V4FFJHpuo?DHVc&sQt=%^p3lWu+uU~$I6Cp*BdNzoW3j6C@wa==dI7 zbrfz%O4#uk^v8=sHhAI9NZ^kE1-+IpAGYNQyW4`n*kA9!()ZmTS9;p$hB>rrI5&Z+ zd#%IqL`gaCqTir9` z>K;<0<-}`ivoerH0tAU2vSun(nT@UVl}6_5FWU_uqGRwkh~?{mZM3_y-Tb=E+GO`+d-!#`wb|a1-NLUstX_L- zb}PT`wEFD+Y(Ky5vbNdVv)lRg25X1CGrN;tr>$MKnpOGrM(YWCAUnXXyRAWccXl_w z-em2u_h$F<>mF;Ly+6C3UvIXC>;qY-LEobH>RYFp%vkndlk&2n_uWwRej|1}E_9V0 zp4&FG{om+jC|2pbW$Qb)agfUi$uLePpM3?7G-sib`DRPb& zcB~zPF)xOv2wUaN@(qmIA7W-3N;ak|*`~{w;YM6dg6wXO|~kn ziax3*jb^>M5Ak{nu2TG}Rd1VY*4u9+vn}gNbwDbGoHBY+?~LTpg*-MOwzY0-8nJD% zgpEc!uS@r;x^zvZ^i7cLXh^aLlATqOn``E|1(ID2N%lf=gKWjtNE`dm#(u=6>&9+F z?8d56w%4rB4oG%4B)Joko2n#t)yz|cWKTnqPe5{WmE=IpJO?4Ur6I}PknF9J+*32p zy^!46kmNo{_Hk|V5u@*q^aqWVAxQMEDRBT2+p0=CShHTkklfyo-P27ZLHb!7gOex zTd@mRZIVv8WUxvq2jno_Ty7{{NjQczS!rcr87Q(!Yc7|!G{?#194bLo-(R_!nFi2j zrV7_GCk^MSTP$T>DY}L=a-vwgY8Iw4C$#)kqo8MIjKWODGAA;nIlyk=snJ7+Gk`W@ zqyzzN%5X9Q!7|kdCV^_SG{<(K(D@y;bTR5x`#40LG=eYRSMH@cKWbS>ZT+P0A5w$M zcotPu3m$Mq{Vgs&27m>Mx*j97eh+GWuj#$GOH%yL^+=C$y~$JI_4sY6{`V3t<;nl9 zL&;6b^~81M?UeT{`1R6y#2}^wWl%~l$4knf;&KW`X?H8E9g>}1KDXt?2eDb@TKo-V zHpX_~(NIgJBj=PSq~e@P%M{iN*JX@qS7~v?U8OA-^la*^F?WhF^l{f1B+ZGkYw-J_ zBvUC>qM+GErCkz`NmjHeBhFkZo$^8q4u^E4(jOb7lRD%mpEx*J=BJlqToP`#463q05vJB^aW(=N~B$H=KT=^ zdFnqt&Q9P0(@{=6ERr#dj<6)+=}&Lc<9gzH?0VCu$=hW8^elXNKdjLrB98 zBe>PXnkjwC8#A}!d|U()5)ovlC#X8}QPOis43|-g`Zh9is7CKA57G*{u4CU~NBXzU ze{_B^y?HUcXK}~CV(*T{t-F@mmCpWUrMa_fIoX ztE%}!SRn7BOMb8E zs&bk$2hPcniF(_g8EvEq5j(#tGJwLW5&}9BIwukQDTbt8I#8bMD9}1@roD`4BZ(xP7Tv$V1#KCmf_cb(kjk6ezCKrI~~@5Dr`DO z9lLlsq^a*t8wGW)SXRr9LG>gf>6ptB(ngiRr183EFCk7@0A2BEVpV7Gcs{%OxR{I+UBE%pf_1X-gG_wX>*O`y5;k~ zf{;HJJ-30wCyun_Y2mI$L3dhn)oIO9OU#%ti)F`}Qzr~eZ=r2HH0!-N2VTNm607pc zTPCLXh-2yoCMHc~;AD9M>(4aDoU6v1m^?JYg)kfhD9BZTv2vEe8N}vP0?ooysPNO1 z9B}HE&5>(WafCl=v4A!qp`$yV2vN9x>7nF;94S1l`$s!ZDEqkL1BKRu5vb_dr%DgM8@!qW%JBy(buz*_$&X?FR zJgqdN09$hzjY~wRB+12ndgV|Qc!6Y3DNmVoj2$of&ydQwfB=l3zY1%>qDJqgpIJyh zb8p+;AJ5#`Ho6p7Ha@$oG;Qo&YF2g*N`AG0^Q#o`t9Ig7?H<3Xo<$#`oaNs}@G$)9 z(Pt7ES<5<%EXB^FS^~E?BO{ftS1Ab5GT9?UWf;*<-W}{UTvchm%Tuoew85Hy78UwC z%7)0Npl4oZ1d!HvcM#a6h`2@iWGR8$mE{d6;)CbLnqz+*8%wnPO)IWgFP=SinD_5t z%oFZTLNae!W9qL0DKS4)!V98L0q+Qb%}JvKX958jGMJq5aEcA#*wa7wJFUkjH)jI4~%P?U9yZ}wM_YW2&o z!v7zbdxMl1(6btPzQ8WmQFMpU<(ecdEb`x^^Z?O3y$6WaxaQYFH1=Jp?-m3rPpsZu z`d@XceEwfy%o3I1+#oV{`Rv{|13N9CWs;FeYITY4#K5?^BJ=n*Cr;RT6&nggAu~fq8s3{0I*0DKREI7j|5K*JlqG-+_ zQM`qmfKjmhG}VTE>>8u$t9fi)@=Z)@ZkR(gFqU#5##=CERY0v6b-KuvOvee3)RGS@ z08%`|lE4r#Z3640DT_sd{Kli|C9X1cvRufE4O7z3E4xt!9TMtihC zq3lf>h(sS&`fE`=(bj-a)U^?XU>!gck=roPJR5Nf2egcDBZ4RlKi1x_9O=nd7JG|s z1DaLWMieby6Mn)Xhe$;yk+&dJo|Xdmsn*lFHX`dnZjT#JTFLq2{Jd5u!-GNw5$0On zge!;^Z0uEolyH-cZ~k&b($u`%Vb4v7E%vBqEHteB)iFfEB`a>jnlX`{byqJhy#{?4*JfP98S)T}yee<}@(a(Ppc3OMB7A#aa zyi(VQAx|Xtuwr2>77SYMFq`3&b+8o&=dANQX0|XF{0&cGRSX9ad5xce2|p1w3|~S+ zk2SvVVKE(6uMiQ?u;63iHJo+GMoDY}IT_){aEACAO_U(&;}H&c-X76z^0*hUFzbR7 zfH7cUWmt_>D%#fIXPTJf_!Sv&+@c|`u;dqD6J*E{&PC-W;SJ}OAg%odZA=QYEF$Gd z38_=kv9D8Kb+s@wCt?M0L6yrmtOS*k1DoI%L_#-e_}4(VWUtq#Fo=w%j!zr;t7N=h zA{7>4OI|s3tpuBpH?cZ)oz9`{h`h`Yw2)`$WDK6)5cpnQ18ik*O{5oXr~;I_$lff( z>+l&7=@3ScHB!S51$cPoZu;m#`e+!rk9{+N`zj%I0NfVcHVWJwLYHeYq_D`3Na=xr zw%X;?xaQZ#Wjayu*x~X;XuzjW;{q%BM574|V1Z8^;BgJ+4$&uA2SP-z!WzD7ghO^7 zjKHv|hLMm5>T;cI1oDXvvfyyiU>(8tRJJEzRiP?6d5HEOAz0LnNeu@mhg5E>QH@RJ zZ_I^?TD7Bi#W83*4VE1sD>%EzQB^i>9Zc~7Uy8%Dgt-{9D}&LyvU?pA;cHXX@U9CZ zEwaG*?GXs~7@>^)leK~5*}Lgu3+ZEFAUXcc1d?~6K*AmdNIIo5C6WxRrEnqh(*~fV zLEWzpB^w_{DESYZZV8~ocND|v3ZF72r?j@P>cVvbY=JWYQ%UfTe3@Y%3Hw%z92_&) zW7GYtmie4+&B4xaf1MTQPqi+Z_CE8yH7xp1HaD$)l_$wCFg zB~bG7amrKRhVaG&d{GEH>Wrzu5p)gbU^s^zRnZWy?!*F}VLultELx+WGQ3M7wUL?R z-@$^7j*h(>1i? zv8tQNl^WTUuD{6D-S!=cWDr{LglQ8Rfnp&SwbVT;Mx?H?d3_BPy4qF-^i2@}ujCp? zzNJt-IT+L!%zlyB1jXL{Dj<<{DWEN%6;p>&>7cr5j@r$;|Csn3vxUgr*T%q~rx(U{52L>wqWbp#Xu z`lgGsm@!ZzZN-t`MKO|3^S3Ve0Vqr+Su?UF`5qYpG2Gl~cEY(J2+N_;3vNGYjCacH^llBM4^%6=|I4iPf-iq9^3*5j_$6PsBK+ukT!JwX?55 zwn0ZjBirQSXz2f?qYJZ9rg!b(n4Zw)+DtDj(*;*n$eZV@KH|=6Q2Faqy-klJ)w>*~ zdKV2whjYkKG`;u2;LM7eSD5c)NLuEUi36Jc?5oPC>T~k z$q^*@d(iDjmli)W5Y#Z#rd*^=ct4;-uM!%1{k4>DM+zqtckN|FeFuf7FDLH2C0vpV z@6|NEyyvh*>d?8f2C5NI0Iy|qYBdDP{%d>H-2?OuQ)SwV#o9v9=e3xuaj|z&4Azhc zuZLcVk9Z3iHYSJFX&fE_4$G7tv&U{D=%A%}C(?Xfi-o3Y=zz7=8&y;y-|Ey2kc$G* z$}vAPTEDUXvwBgXRRL`auLw3=2`1J~xfEf|lS_!78?QrMrG#}X*l*oBt81}bF&_Lv z1vQW^TIvnC&Fc$X5t?ma{7L2`&+$3lIE+5_#-qqJMDQdNuHPtOWvE(EGa3sR$)aD@ zsUUYwgM;XXGsroumu^V-tuaIS`9@mZb@G`PX?gd{nlufId{woa;4lNmxmR844nP4t zMh1nSkI+5}quoLpTVyG4=0c|%N&lhq3achYXbha9Q}mHC_&}Z3aO45|`r0+qF5BeL zI`m}y!R<{+m_yLJRpuwQq+&wvqzE!3w-vZ)LkIb5ln%97#ljS(BXH91$%v1BwX@8Z zTZI_wbSXSyIKQA-nMoXn$2-WhJpx#vcZM}<#8VzOnw`)<3o)vv*L0ovxkWL#QHIr9 zC;j|zq}x2#S{>;zVght33qJdA)nH&R-A$igNS_b;+AhStna;NNq7>}c9)^PLsH0v< z$qqkEmxwe4>X^4s2eIMm_f3SNHQGDtbF{4}>2dSyuZ;V+#$SfVIdGgP3cU|ccv+1T z0s(6pIEU7pj<7TFzI`rIK%;Z9r&i+m=m!V9iC9bY52&-H9pr7Td+)(v|7QGd`piQ5 zOn4HW{f17$4{6o~TW2@uw$ZJ#{#vS)GcZ$g2G&pT7f}nz>y*gsYqVR|oqa=17cPi* zc6ZU6*Yu8UE{7L$zx;u+xa-WF#F+<)SaSC-n!A#N zOS_dLFD#B8{&~yBWZS=_w|>@lcp?4NQWAG~S)sfCv;G4M8xJl~>{3c;+q2wCR|mdI zqG2WT)X!V`shERHN&H3%pnDY1x7ty?MUO-o7qBI}KPpY=VvkUp~1 zLieelEhM+pMn$#L)$__DCV%c2FP%3GrHh79=}+SwkR@txq;$F$rPI}MEnCrAr*_UHyW4v8F0op}b2(6x2NRKa3p^O3F-P4s7Q)KbDUx?92X+0yqy4r$^u`T$1d1t}sv)3ExxM>UVL;;0>ciHaWut{hxD2jMvP zQf#0yhu2FXw&!FabY^DVB+@x6lhEGyy7l63ynFSc7xybi*REGR6GawEUfRmg+F9_S zA?5iOF-F#w_ur0_Y3RM&^%^GoTBe{^Le@(m-&c_-dMU+oYuBqL@001t5@LHPAhvQ# z5%X~n*DI-`;*)E~*&pMU$c=Lo0lpm)i+$0o#17q8cK@^T#C>J(zH;#Mc=~=~^nT*$ zFPfT?&4^AOxu1AZ-tZ?65dhed>SAhaF$FdhA81~RC(}*ucRWa+X^XXea_kF*etAv* E2U-cPNB{r; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2fbb6d7ff0092cceb311d8daa72fef63ea22a64 GIT binary patch literal 26063 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_link_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b058fef6519730cf2c288be0c772b019dc01a5a GIT binary patch literal 6053 zcmd^DTW}Ov89sfR>A9w75;933?7#$cxXeHRsj%z1fki+dAnZQuxY`cW9d=01Wlwj2 zWQQsWScNJreNnJ{(9#!E!76>$7hkkWUr42_9lJuQ<%_MHB3fMM<^^XgxlJ>@>ArtqBF)*6^A;^u_47KtTrB925i;}TqE(#L)uNW>ZTU>q zDptyQ!xjs9)4~$PQnf-YwN%lj4J;9P>z%Vl)g#A`9yxhp;uvHEPZdq;%!NyO0sTW~ z^D`yAY@I5Wryx1hk%TP$gr%3-tw+!4?@#Mcnzd?zf1<bMy)!XSHU)g!f{Yd2QL}|6blZn zjtsbo<~KP)z6~LxlN_g!9RD_ijxK2YYv6F3OmdoVOU{X!c#Gtu00|InK$CQz<{JdN z<_Aq?T0jd<`n1q3Dd&HtR~WoxsA*7>w8*MDqEJTq~r1U!s$; z)(f8D=kn|W&&U&=8@krn51!HI@=Snd&uwy*%PHqcddQAUEaODy58_jhlyA!;d2~WR9DF1t6KzRh`B> z?ErN`wLzTN7`**Nw3E9BtveJG#teVpoT-Z$8e^IycmPIM{&i0#5$_}dS zS(Q)fGe;?f`HhZ)XYs&qJK`!%V3>$e5nIz(P2A`{cdE(x%jsGJJ1pQQ1*f z5=}`Mj@~}KER#rIUBSPDzd3|4;iCd$&IbZ-2bhllYi$ zP;WfB7~lFJytN@fYQ+pglQ+f#<6-i2qtsD$8 zY(W6qLqE)9K54*)kgQB5XDZV)S#?+(GRsqDrsYj{LG88xP_M+Ym-l8}H%9iRE##}k zIl&HJ$eX&F*EFh|CdJvHJ3!3w)Q6>IFJk5d78Pv|mkZn}7qLULotw{jCsZAEKAk{0=2KYqO%VS?PHQ0+@Bb*iZ6UsG zEoQyj0khudC#!*Lh=AitlSO)RH}^AcXYl8N-5fo{rzg?qQyGgP$Glq!`)*Sp^Y<_u+Ap zg&1zT&%0(XwKia{8bUfY-PW1rzBunvttQp@nsDFOg-rb`J6b{M9i7*YO19`%l56-g z`$6Yeug!7v2=uQ_409qQPtmhu)wFu;J@tK;6{TN6!4^Ue+`!;Ztw^<7Us zp7BE{V@`kol87@}ZHG9}>gY$x*n%>)v}M;X-d)^ss3DNpp(f#D@rI9VPPv5J!w6SK z!VMwehCIT3a^h}6JI(KdcoD+=^pgh^?SBSE%k(I8%ULdrqQ8vEV<n0*2T z4v>BY#1q&@J$PNN-qK|qt#EAK^8cIHGZ2+6;4m()73!&SF(&_LAgnYea@cg*1w+!eRXeZ52OgLAc7+zlS zs-miJzj5DfKo6_x`_p;Dwe+ZJzFe-rr3jvT;3mtimGtvCZroq!K@_i|cmoBVfouUz zBlILDkz?sO6mOv+;$Dagx?#YTnWICHYvS(n2BUA@eAXjlNt;}1z)*|jL{S{6BJ zuKJ;K{$3kpp1Fa321XIlbYCB%0 z&@PhQ=QfjmY6A(Uffw@~`y!4Y&<7*vA8bhQ3w@6bJ{a7;pd4uUF)g>pf_{x42_~8$ z)JDmtEPn9Sr?fu0pzM2g>n~aS6YM;@m9ROUNDtfn&MQVnb$(k9XadZ?9rldVR?%SF zj_tE%s_;zW#2&k71)O^}Je4?i_L$?L>Q^njY+}$-d{wY}y~@~aqQagbX#g#Ko~83( z!dAZhBJX{6!mG!9D^OS6h10Ipxh+5Og6JME-J3MtGwjc;=g-E_dGFr2o_A~0bxYuO zXs_EJmz`XH+$!m26u30!h%<%wVzDB>=Dhd5PK%Jlm24J3z*_;wJ@OH5??W>3SF+_H zNj)Sx|1KyG#mqx-&m*3fd|;LiwzLV(Rlx$0F2(Bdp1M5Jkc3`eLy#2ydU#p6%5%Yc L!;c95vQGRL=Od%D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4432f65b4897e57a273416440cfc371339b78e9 GIT binary patch literal 45394 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f6e58adf673fecfdbd749ec1979c8f2a9deadab GIT binary patch literal 34997 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 O+MGu|DW?dcI{rT^BN?m! literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_configuration_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e4c73c27d58e39b93d1516449e6c0bc93d495b0 GIT binary patch literal 5405 zcmd^DTW=f36`tiTm&@fvOG=h(wN7NmR!un~BiV`L)@>?FX0VKj@2vJcL+ONZP)%Z!Bo{!l#}yv&)M`Qj${? z1){e3E>68O1)pDh1tf{;IBBm6}Jrul1N?h})kf=wKuC4 zMaGM^_g6YaatW5)Mz^FxDNb;$5@6x2xu2wQ{?>vPumU0;B0St#?)}fHSEs^h^)NFH+0! ztQ!V397LWNjKm$Zai<33-n8Jf)>=pAkk!9aGux||xav5K2aV=c0qt#(qF|C@Bu?VQ zJY+^J(G-sW#FT)GGEO#Qw`Ehg7cEMAqT+yxcA?Z=vJxOG2`G6_R0>eB0F|~BwzrW! z@)T18WPD%93?S8~klDU6M**4G7jg`c$#o$&?jIX$yTC=4eYwUwf+j)9eyqwpiDG>E zGPS%_T4_ypT=IK^C4RpYgak7v3cz;rB9QyU1LN|aDQuEE-N>*%Vv44;DQrd_Mjr%8 z;6a2B-XuA>byl4Uez={f8V`&qhegIzsXH{>Hk6Km1YcaSywRE&DH>5 ztXOWrWhteg58Jx#@{E(Ot^1M<>e(0)ih=3#i2D-k*F6j5N93_aw6S{fY(1%cbnPeC z>e`{YcBX#xczxn%{qXaR1W8RciJVF|qj61bka%2e!aTCe>K{U9^9Mk#5aF3E{~P{_sTI4r^pOreMndKd}D4xI$D9GWW~noBp_^-768 z2ZN!V=oB=36*a*}H(ng<;N5!T=sb#A0`eE~&n^XK$3M-U+|Hidt-{f1P~m9$AH8~P zNTAkM6C?10safHd!fEwa@mYZ;po3z5+@)i5v;SOVz1j{JUL)KoV`zA_;cRohRI7rI z_G+Jg8TYV}Kstk@S4GS8 z1a|J$QIelLaLD}L4%v-=3uNwc$y4=?OFpf%VJ=C(0@D0cPnM)9=qpJ;!XLURb4U-E z{igam;XN;u0{>ntY-|b-f`ai-3OO^n8QByc%6*DMtaYyKli{W003OWJM{91+`cQbU zM-%UF2^2FxC+BQQtU}PE(Cf>$tJE<(imHNv=Ml-^?SkUs5Y{xFh7>5b>^`+Iv$xGd z>xR0D;+1l!`l#;U;_Hs_Iam4v`PC$Sr= z9y1Po8Mvoxkq-46MBz*Ow+Nr{KFZXA@X`>PrW1z;Fb;;Of>oo(LJbL;t>y@<@xl28 zS@^B6AgRBL14q-)_dge+FSkRKzXc8wpe%j%u_!$QC+%lHd6m64_ETp#^5-CEP#i(Z z{6C7L3#igg(dwi1W%}v>wI{hU_g}iY@mpwuVIgw>I}8gM`c+sc7g=7;rQj~FR}9C} zbzjwWr)sX+$R~CEomIo;BNQtYJ%(f&$!R3BKztFdJ@gf9o=5U^B(DM4A}o8dtWGuT zMS_=7_fJsP?h(knOTs0go}d3)EE82f*A72A^4hlc%|;YjFqoZuG&!@KIo-g~hCw$zAW zTj`tg(-+mB1}s^pJ`li35N%03!V1xHSVBQ^d^ z?)%{7*Y}AK8oX-to^Jr>gHisKAV2&S8eBw!FA8`s^v@k+K08MD_lU0@WOln`2NLk2 z>K|zTK{g8JV-@A$yM!FRC0IzelnXple1qPAKD?;93qTs8AP7%nBFycO6Q7Y|JLL2q jMQumQ??~5oq*tCqB2oE?+(RC#rHG(@oO(j=pDpokGwU>D literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28c1966c33f1ef4a8600ff7e55fbf50fb1a65132 GIT binary patch literal 12723 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_method_domain_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..766af1ac8b31b11a8d2a694b16be095fe7b490d3 GIT binary patch literal 7066 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 NmYqLxP=FKhKLHe6QDXoA literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_record_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payment_record_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..890171eac545c827a055658973207e21a4425039 GIT binary patch literal 11075 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 Q1uq-=;lh($ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payout.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_payout.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bad7e0dbc6a33957fc0dc2e7c2cdf5d64d4958f GIT binary patch literal 15167 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 Kq6J$iKK}!D?1 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 M!GD+NO>phM0idA8NB{r; literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_plan.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_plan.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9bc97e7f31d0eab8849389695035cfd58114df6 GIT binary patch literal 11213 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_price.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_price.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0868bab638e5791c302a4704f373e430c403acd3 GIT binary patch literal 12670 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 TW*)~bgyrOiuY4uppHJ`~&dyQ| literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..287c6d4617090d3a3c65cce3556db02b20f97b74 GIT binary patch literal 18165 zcmd^Hdu&_RdB2yuq)3V)sTcLI9@o~(vL!KoznvwM=>|5R5O;PBD@vpxOhM>y_ZsbGC-&CK$fJjdPO zBu?TLF2l!pp7Jimm2t=2Ebmr?j3@44c|q}JYT`94?@@dif85XVUL}yJjn}e#jS|e% z#p_t!r-U-$c$nq=N+eSsuV?vy(vWG4H?n-K(v)eAH)o>pC@Tk*mP~8BHPaSv%e2Sa zGn?X@G9B@bOlQ0^(-rT^bjQ0HUY#OlHpe$-w#2t&dg47iC-_lVD*H1B;s;p1O*xo36hFlB?aJZIk@yjwb8&L5wCQ!w zn?5e?F;41uk&`-QUg~TEM0T6se)BtQem5H5uh+1K-0Q{{7e6}FHQ4>{R2t;<=3}ay zEXc`=iadJmYVidi&Y~3u-zq+ru_L znU~gBh)ZvB4wRTqs_A65px0{2Y`T!XA}7+)pii$G)n>A(lLc8#7ILcYJ4TcHXj0XM zjYH?uoHUgxJc=!tQi30zDIl4P^AZ<#Jqbk=cT29gAbVu59E z9yaF?G9h8~7B=${*{Y405E{4MuJxO38%#*O9G1i5Y-PY}G@;aElbJWy4M?*Isgv1! z0g2j>TC?948)D6))rN$mHphC}O}JOuWVY?FF|D?pCWPqKwW_w;gfvK^+$e3PUZgD& zH!es$FABC|YLZvi_d4pEQQs$rSs(p&A6{v|ffJQmXJs@?=?u#6XP zgYs>cwpq$|74CK??mDv@a^P%QcXq>NEPHkxYs_w>j2G`=oer$7b+L9iu)2W-US!nR?bwGs4jgeEoV^a5%?_M>j(+w#aJH<2bHIVq1Du24 zt3&46dhN9xc3}0bi*>|-)nA1*VE1*@fwi>?YtY7e*nzbTST4}XqSc4YHI9z^q(>Zh z+c&^F=D-`O!aMHh?}P(ycmupg9e5)q9?9fmCha<brN_ z<>gd*Je?9Ja&RleoGNOvIt_EHi8Hw=F*iOgt70KX1yxK#aFuI&cPh~{deGQ%fkc=*?hdm_9$<(Bcb~!htNFwH% z#Jut_<^|bWh%tu?lk$w1N@fXXN|PlqofT8L?9)@(6nPxt<#b_Ee2O^`+9$S777BUo zU@WFFUuYzi%fzHyN{c1)>7G0}8QLH%79EVIC*Wa-1WacqsMmAJnT(t*h^N!pOWKfl zY*J2L%1sr9*z(R#T_mD1F9+0N2gRq(%LQ>NPfKxNuRp1aX+^=< zF((n+V_ed#E|RH~oG*xGoo0~FTIxOf z0wG!Z;pDK{Lr;pi%forYalD9D)C1qM^nEDg3@j=FHbWWhgxhfw25qX z9V5?jIxSxwWHixh%#rolvyXiE#IXyBvC%UpQielgq;9jY+=YzOLz3OHKoTi?B%bW? zjBC)n(rQj_8AQ%w}_iB(bZONZjI5H-a42}lbT_Zbo#x%Ip*n-rh8ryS z^fCNt^+-O;Erp`9+V#wWZ&S(T@(0yDfU5hDtW7(jPc`ifs=+4&9VM6P(NLawm?m6c zl=TdHS1hl3}bMFPXNYhfV zc_|oP40acT-Aj?^Ql#-l-79rp4llKImTI^SJCrj^tU{X z6>+bbyC;J}hLSlbLPm3zU-&VAK=)%Aw323vbp{>5f%BM1Smw$!-D zAmp9cFfk1mF00IlU~4T6xfj#pV!9wsCN(jeW8MrLJA`U-sWkIVn0u5ijEJL>gzyf9 zXq1^DxQI|ul|3^|QU^y!MciYc^QWF%a~OLuD}2llK(C<<84ukO3^oaYI!qMRr;r2m zlLSanLUO8JK%xmqm>e_tt3`NBgJvVmdc}&4j5vV*Ol?jed7dkUxc1I(b$+$;8{Kbg z|3T{K+YZi$4!z`lC)`*mo~;ni`xZ>}Y$!UK*9~rlzvWV8WXG8OLBXEBQvlQnpp=z{ zG5=oxrV*cDszJ`Qy%kyjb(Mpu3Lxf4x}eF*_$n2(=1~8JX4X&vYbf<;Kr6;07G_%f zQDoK=hxIhNB_`0^E{nyXvE7V3Y*uXZVSJh_jSG*60-xiEeNO7ZbQbzJo01byz-o?W z?9jYxF6%!CiL4{r>`2pMcxy4dbtwq_8(9o?7K5D&(7%ms(7BO8XbV!ef~9V&^#D`1 zUqNSvy8Yei0;prpJ=8JGE+(grQ$jYaOwzH{0+l3$G?FU$sdtEqsf}%aY*p3&Q2X;p zm`dJQoXUE-EKVC~=;bi_y>@ui&;NuUtqJ_pk6Z;W()O?|AysZ{$qY|+sVoC(231Zb z(SwF$RofXSGzhJ&5tAE>ia;9vdzpm!noD@_8LVQ{8T3>(aL$2o9pfB0L<6g2cT}?R z6>BFsWNW{O%tq|^AhHM+b30k=JO@iJFiS5~$>TP z62QGCzgEG;gB?LJ-2rVxL@dN|4uFO8wBe8=1fk_ribPyQsD#er6d0k)pCRLXPjR3O z{9xdxa6o|jU^rlsqqlq>w@u^`jHgwtPY=Wy)j-BgnxeW(^Y(E_`=)OyH zqX6@7c;5mIcqM4Lk5n2W)*^qCnE+^^`rcxF?^3WH{`VKpTtD;jSwsIf^ns}w0xx;V zKX0Gw|Ms?@hlk&3*t8Vc_fBKWocGIz7aO-08@JwZ^Yz=7-R{OviF4P5O2Cf3RJYne zr&TZ!{YPXzC=q=i_7i?{_JbnWXS)1 zeG$dV?F!HanYy^axoHOML$r05(8|&Zt(z8G9xApxw0ieicVPEgNhSQoTUcsA+ZBzO zo&M1+&?2LvaBDwuY7ge{dwMMRlC2etYh0}|m}}|;5_rT5nI}&|KAlu>pe4;gC3bd) zzpQG=YKWcU6p+QyfsXVB7-1<=0n>CMwLQz&l9!D56o0?2!C(y>8h{FT1Plf6v zNN73mCy-y)f%hWbfveH7FKm=A5HB1@!)mwv;v2E~(7`plb~;pV=(UprVSOk(!KC%~ z+Q0iF%yKR2j;T{rLkp;K=Yj_Hs{I`&R3^$kfu@#}InG2?#4Y=9W#Vq+!>N~PT75_= zq=&qhTKp~VM{)yK%vZUq{5YTHuDZU>e}R7v$KZ{Q**tgE4U5P-j>OizxxxJs;$mrq zu{Z7mFmC%#@7F0$g{LkJGlbG($mjKf*-E z3@R~8V_X2R7^@*9hS_C^DHt+Y%jdF^V=A~!7|*F0W{1o2L$4XkGtVlC(S4SgtlDTF z#$rzgu0$+FYC)!HgL^^h=eau}uBl~KEjISfeH6({z9nB|(brn^wf@}Kz7%eGDQp-r zr)b!|CY`noL-wFM2G5drdX~lx!l-zeQE{oW=z0w6t~1wdx{+T3xN4mtYgHyoN2^zB zz&}H4rl>Dt>eb5*MHfT8#Zd1;sDIJdKkw^ji!Zr3|A6U7c5dar#rF$0Yqs*b_tNF0 zI-#lk=&-_{B-)U{Sl))j;AA>8SAVV|FeJIs@Z^ZU>CF4fWlYf4n8xc35xih=BD-`O zm?qAYr_;G9&Ebnp!Bv{Tr5e5B8PMo9iJt$6ADNQX8Sylf@f3o`<$Dsk*BYt5=h9f4 z9^-2mBB0I;D`wNdGAka>We1?+HCzuGgW&oLexo#;9EZ6WzO3SUK}3lCGA@W9FhIks zQU$s<(;#(nHZ?;5qAc7=O-rgXBjS@;34)a+u2;ldo}LY1H8v&C&OE)>^k1ucIw} z&U3eT9Gcae$m@~hR3VoDkAm|P^yW=nO@S6`tyQR3x-Esb4#IbcF66Lc`+YdcVEeCJ zzcRObKD_Pb-eP#$V)#%od}twjWZrjV0}h}_>%BO@S~zx}bE@}^2?4d=z``_tiXlLf zKf#y!9ZFVHp>v%@nvBtR4_X*#ZxBUd7{K5ZAJ;N4n_7(a7o+{J3G>l?Kkyc#`xYbn z7Q-it;gbvDQ}e!4^O1d~9f%I|bNqJUtBu3F+D)_Ege2ugVtwcU&)k_8k-5LCEy=ys z)mFj26DZ#uIAC_j05=4tfxhZ~!()X~Ef~y;cjbt!*p9PMxZxO?SBGM zo@I3GHf)V7e7MqEp`)HPwbgSm>lQNhY+8B_QEf7S>Iq8dSO~v`ZqV2PU-ue5j!Myd z%b_Ww(_y~a#+y+wbBrstjjx3N1?}rOG{c!kMvfFCN8afec&%ok zd0EPKcihC?ZKqY-k9>y;r=&)#j_;BiI^S z9kCs2OYH0yF4Z;fY$$lm|DOf#uZX&2A&d}NmEfsAT!;A4Y7(20)@2#Ewd?QPOV;jx zFE)}j^)G4Kn~_u;{eLHYJ_RZcTOpLbiW&ACF4N0|q`(174eOb1@!34|OrT#4ye?kefY!y3_Byich z{S?K@Q$}M2xlNJVWQp7wm94ZRW!qM{DP;?HKbx|Vys?*e*N%?X@^5qes6X&F??+zk z!~)h9z&vW40=V9-9}_t`*HnERPNw~6+Er zvY=(hu@b(Gw(-NDf&Glg={O>^`CApK&tsr!k^0~^=)Q#L?=dAqh}IzPm|>+>Q@5#- ziq+2GTD6CX()38oa0ZPxTOCVfQMn&tZzw8Zbbf8$sKEaJ{%ExJer;v;d z?yi0kT9Zg1B$i01+X*Q`Ned+uEmTPnve&KZ!^r8v#avF&-RW$BJ=9f6cGR7eG*Ut@ zWc6D1DA4#hp4v*_1SJ5XzArbj(k(c+}YP2D|YNIHttyv_Sh)V*@-#n zl}xd&cR}d2pbhPFJ+E{w2wfJyAAI34D_>VX+j#xtg3xRM!i_JCS^2ik`Oe{D>&SvI zVu8Yqv%BWpv-_`S7laNASQ~obq?NC0nmt(zb~%P?+dRK{XR&qHg0Ra%inPuN*FU`= zbXtH-JvVoK6~q{@0O6L|KfF0pY}ru^?OYIcTHxA-`G%fiz`4BowzKuJJ2^DCV z?YWM%M~x1AoVUK@s`Uis#^?JE7P}6WI27LU-=(i*w^dteXSq5LB4M5LUAu}cyGw4A z-t{-!_2ApYM6T4uFhjs>XfCh8Gx~ z;LW}B+a50Ve25j^`q*89QHusjLU?!yW(ZP_+RRNO8d>ZUFL<_= zTmj6cwQIh6cd>O($&C`54Zf+{K~`UC{mtj^^#qsdA|*F{cWjyO*f*Ji?cReW3 zY(RD7O8r*uLC|S$>zj-{7W?N14j08E8|*QLdhixLPb(XPzG;l3Me*U18zn{~e4C3v z4k2n<4q?))===U!_&sC%Qdh6Z|86S2>)$j7I`!Z6P{|yFvQSv2z&Kh!RLTw3k{h?@ zr~@6Pcm4IVgGGPGT@MOo_sHQ12=(svoOVu#itqZPvol5iW@>QSnh<5pCJmSZR_(zz zG$WX>hH^fxv2DI>PqATd$xr0~7ihm*i<~(m!M3s?k^8{f?<+R!|G$iXKkdWd#b{f} zP2YXn=Z79E_C3x@;Q0Bb-lD(nt_OAIx{)hwVe9^FwR^nSchVfM?fypEs6{W=9b4*( z-SN2Fy+t9)g6qtPjtxGncbhkG3BygIyP^bsY=$><#y<{F>3pbnSy(Kxwi=0|b9$?V zB-{T`ATdt=QGmH8dZSg%4lu^A9gH_soz9xoox{L$dY^@};eQ=a>Ai&BVd0uldgDb_ z!W@#EmGZI;l+}X<2&>udh+S%0J&-e2?!magTirvDu;5{mR-FMC?b zF!mc0>j1)hY&~MtT0gHber+>kf{kC!j95R)G8x3`0@pUzCb zg>20x-5d38HZf5}LfyX3L@LkBW(x`&>035xVIpqXXcp#^6%)0GP_0{S16HQss$iMf zh+@Nf|2h+~8=1&`8%@S!coVfBsD`(^n{s<7*^6YwcNnwAul|mzze15BSQ+>zVd+1uQq+uZ1FZUpHsxP$Mz{JiUZ4#_el?>BM$ks^2a zm+r`Iq35=+_qMS0*Kn)7=*x4GUn_fpzb!m&SDc~J9WUqVo|{?V2j6pj(#Lz3gtocC mqR_h}w9d5^g`Op$WzJs|wv^#U{cZ1E81{VZ%mH7`LF)ksx~IB^RK<;fac|+Yz12i@nT`eT#rEJ@j!!kagp( zMQpN0c;{EbJ+PiQjcnYT`orKaV+^gT|BaSu2^(8KLZXLu6|4xR)Lka4V58J&ku!m; ze>>G6nWzSv-``oKE7w<7Zrxa4!~gwj!1P2y(ug;68;Kn6q5X&ei7ifI`&+CecDNn8 z&;gIz@8hodz~{~tvj)hzC)kc*yC!>|`wfOJ;-JMn#N8IRddTz)Go2gut9S0mf=?3N z=J@lgUWnsrST;1h*W?~bC?zP!wF+4tGObxM&d?0EK;H*IDxA5poTJqWjB35_#Szs^rs0E?T$|=FA_>+AN8ecCeK8grGmJ2%{JywKUkmP!I@`gE*$hP9=aE6N-oTzo2H&^(j3udrA@n~c|et?rzO_hw6Sj3 zsfMAjry*CSm34ciZ`?m6pLwapL#$CFK)k@)qD=t#iSL^;v+K3jm(WyD zv9iDU&N<(?eYf8^=lAKfM&RfEBVY4J3Hb{aqF*dz+P?ti9aq;z6FJAs)`8BA} zzEpF)H?G~FRcy}8vWB%#^}aw&Z-L>6nK$WM3lv0xkzA`O8S zk{W1YB+!Ix4Q|=LY7K!za#x81Ady-UilhF4UaN$zR`%mf?kT=lvwWo)n4hIU+kU*k zU4>!L`3j@pNp+ThLNy9D;0em2Q@6hhBE2E96G#?ol0nEzy#0Y#t$O^x~1! zif}(1WmBCP)x9U*7rCSrTai}e_munLXi@!DQjBk$*9zf}`>tE?=4oM$2Sma2JhM9Q z(7IRf8U?cuYN697*r%^pf!lA4mljWzLJ_xgJLKLeg`+`L&3b25WLa1j%K`Bvvsqh} z{M0qmrG{x)jJhrx#O5I&t1?qiN;MddN?)04Fvs+mjIA+WcBwtr9j@Ec#jOVW+OSLW z4TqMl*WWH(qV7$v(JZ~*@Th(Al}6)ct$w}qidnr$>sD!z))z~5?OLh1F9-5pK)~_hq;|Ax$)w801^Byd|_lCz{||`V>gGUjg!M@@RYx?;Q$3F9`_#ehz_;BR#&nAETtyYX=FSLo2&9zi= z=*arWr`JcHX=O<|-zJH4rX5S^T8pF-S{nx5?s#{gvi)-)mx=IScD_5rir)rz|A}}{ z`c5oHy3Y6#`M&yV>6TDb*$6B(aIHX}3^N4FBSGb{F(Bp0H!_iL7^b^aud)J4pnI@q zfpqRo?FX3_aB&S@FxD0CxFMf2&9BmtlmR;`6{qj!!n;&y;td@{<&w z$5G1&aqI+=K87f>quA0f1~ZYS!zdiz-5y-33Zv~Bhfi#p-QtiHaq(#&8~N^m@oT*c z{YDkjO!UJ;ngsuC56IKTcfj%x=>f~d6=?@7e|cNC+K9wj`20+a@BwqSA%MfdCd&gvBJnVltueu-j^{J1|fC zhd@3KSlroW`+~qpSXS323~`8^LDJEB7-BC%bcYDlDGa6t=SVl-P7gp|5Nu=|JK+V9N9!fz z#*rKWvZ0>iiQxj9g(4mz-5DS)Nf3m`3K32{B;$W1&psr_|19Yb<%x#P9F#hCI~ U=^>A_TcV)-^vYv`-(ZS=1C^mP-v9sr literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_product_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee384ceade7f3556828587cd8b46392772275edf GIT binary patch literal 8858 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 S-NfOLlz8X-M+Coo`u_kIz?VV* literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_promotion_code.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_promotion_code.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ad47213601d580bdc028871b725dec6b9df861d GIT binary patch literal 8037 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 W6`zU$@Fm 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_computed_upfront_line_items_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_computed_upfront_line_items_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f7780d2fa5aa6c1603cec36e7d900c1eb00f3ba GIT binary patch literal 2479 zcmcgtTaOe)6t2EZPfyQfXNKjr5orXJ26kH3M593?tYjg;a*uHcX?v$@b{qOeRnNk} zY77t)6BG5tef81J;xEvD;0qfcm~`AI@kQUp45-;BPxWO7VnWad>*4gNb55N;m#M#e31o zyK+2>Km6p?!%Y0&e4r%!ZN5EWB)AjBg_EZR;*m&OdW>r&-v)!+TbC_V&rmE?ww%2kx zmO0~K^#oUFYTEN!+^e_>of*i18jB6Z&BS0Y(4f%bw38p&Uj}e zoAJ!&c*mnE+T#bpWEwX&Mpiz0CJ|?MNM}8VR#F zTx;m_2eJ%r#<_i*qhfKdqxksP($yP#(@c)LLJ8gFfeB^P5Y@EN!Ol|m_d^P(+Ike$ZB{) zJM*+jkX|wX5e->2=_w!|p@(%;9qpA~=#{FUo&4lvuez~UefxfOYNa~$EavX90 z<4wGcto%*5=U?)R!pFHB8s5y;(5Lb@!Zl8l$tZ*sgNtlr+$KggGqQydHua`6Y*aFA z7$)s{E%F?*U=SeNfUJXoY=>Q>ureoxH}q%jOLAZjb7uhg75(*CgX){^*LSbfcmJyv zZFmt{w4w6nlYQ!o(6%+o;D77&LlXBbcSuyeD*&hQ)6-fW?t$T%E;fuvF$~wYIu7GY z2EfvEQjGwkhp?$fR7Q3ISwdt7<5>wvIU_Y-=p7(;P+vw<+;OhgnE1Ugnp1ursrPg6 z1z6R#-rIV3r8?Qqv%QS!WB11PuGIGRnO$FjF*+zRZsNZ?c*q z&F&Nd*r2GCDLbL<#GQ_$up7XAPSTDiMlF#T_^QWB*Yz9MZ11NJ66%Y2SRmK+`B3^R>fBz@qA8tsO;mEuit!x;1hfN8xgahVE_OC literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_line_item_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_line_item_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e367cfe40aa382fe124cd3ad820bd7ff4c90a14 GIT binary patch literal 2242 zcmcgt+iw(Q6#wSBv$L1(ZVRQ2$e`4)Ty~@+5aTU?1PEoh6k}YY<8L=i$ux&TY;)zjNmM zrch83JoNW*`*j7OpV=XOq=f0;17-QE*)XcKQRvQ_mvX>IQ|MKDPp=FIxv z4}dJ8fJ+q?w}`GK$fPp%ws=dpmQKw!MUY7ki`+^Q<)N5zmbAz(3J>L##B+s@t*22n zGx$!`lIN{?>}ilYvGIcK&1t3Rgcw(V&CEC_uHp_o%mySf?Ip+0=>%_~#d%}Cbq+gcO8 zmSltDU~R|I_P5MA+cN`fRUrWg4nbKWNzBb+NCj#Pg*hAycIyjA^r#f7--+HI=v%oj zbEFuVnk{=-2=g;0#fE8F1XD_eKtoDEsv?n@m12;1ctd&CC$1R~hUc;viWEDuQKT&= z%5{&^nO2XuX0; zBi;OS-F)ej3m;wRmUeVY`s32E)zY!=$0xqP-;N*Z38;L$kN9$>C!=Sd?~d;7?%LBE zLWS`@QVPYslq;z{l*_7ph=`t=@B1L^e+uM0;{L}OzmKfU9oV4H_$A>(NkUsQe;j?R zd@0=IstOr_w4y;FI~cc1gZo{Lp^KoTjwKDN<5E*^}5E(B1@gyug5l|XXHp=&2Iw5mk zaVJFe>nw0pzFx0pV5SYvbg^NCs$sak)pi)4H(*p9Z`Cr}FnR}cZ%d1|kggfK4sTuJ*-4+59g2H^NYzMXzff~v|rv-Z%mmF<= zIhGjsR)9SUmmekUryG`2=gn0laLuD|cuNkm;76AqVRu+Knrf0?iSfkkaUjvg_e<@m zJf+vO9tz6yc2;20>c#5lf2CPBe21o|S7p1^V3hK#r)YiQpOXzv<2_>)jt6A!G3 YwKehB2G2|Kx_XdPKYw)t!7GaR7vJ1NTL1t6 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_quote_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e5b6ffc1fac49fe2b0909a07033367b1eed7271 GIT binary patch literal 10628 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 a{Gh?dyDo?C#ZG&<(3?-+C-|4C#=ig<+PJ6y literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_radar_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_radar_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..921a865ec645de7320f640c681850612d6d5a2de GIT binary patch literal 1949 zcmb7F-A^1<6u);qc4yfgSm^Rus~Z-ZthP+57=5Tl+G1N#Vnl5^F}WF-3tgF=+1@(~ zELjX`FwzGTUksR-=xf7^|AH_2;0t79vQ8k;_~aW3G=wM5ot=TU(Zrs>nRCuP_ndow z=bXDg>v|gk;tvN(KdA`)A(WUv4{85X_^cxv+1Np4Y+@{A$&t#kDTlJ`C}q`DF`_E# zf;GiSl#^yMTvHvboHA3PoN(I8X)_IS($;1rJ7u>4Pum&b`ZuzfkQ72^BHPj0j2= zT2Tpa9f~F3s7v|B{pUp<;y|JkH%+)b|DSFpIM9i2Qrun+a{rQ+2kFz`Jjk9ZM1UBM%V4)&TB+(0!?nzJUI# z<4xQ$VpKy9@I+AxR9>x67HEW&+>%cSz@l*K%mgV$?^Y@IJr<-0nRYDB3E?6`KEHB2 zW!&+~)R=V_jcb(8`Ci4i;rZ0Lc*XPPpeKwg*7O{8ZDXFg^M+HJGAcFyj_1BSeCZ{F z1Ckdj;9$*CZnR2fkgyfv5)D^stP^rAbw3KnaD2)GzY{THi+hFIr(A zY>(q2&WEc?PMBtM>2RF`7J>hflU_OjxOm?6~xQwi0T zI{HM^=Lw4U#z>;RUoP-$o0Vb%3du3^IgQ zr=l_8L2{P*mhUsBz-o}>EiGsxr-jtUX>E)#C~5mBc$TKBJ`MFEyfk8$;#y@Iq@zb* zhIwTXD100OJrY{Izy(HmL9AQsOcN62CuFJbiK3mX6u_0cz*f+nq^Aly1><{VyYR|( zCciem(Yy0ZVJCZTW3G{Xp_%R7SLJiPf_8QsYgQTLjAGD#| z*^QC!a*Z?Rw=(CCb~<|hMi}CDx(OiWY9fvLePC$1*O>&*}lCh8Zm zvtr>nU`L;!=D@|6vq;`t2z-;2!p;!8b1tqY27Io2+>eqi2U z2B-oxehU~>3**BC!k2bYVHdslyPQ3gBsBphbsX<1qk9@kjWo5vJ!p*tDBZ7az4rFj inepE=qp3X$*8ap_dRtan$s7#y;KG-$A0qgKiT?o^)DNxz literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_refund.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_refund.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e7983b8fc3418478f4349cd4e9967239e668e47 GIT binary patch literal 24913 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reporting_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reporting_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f79e860b50950bdbb782ab57b4fcbaf0d1662395 GIT binary patch literal 1759 zcmb7E&2Jk;6rb4-d)HnkPU<#I(;}-*DjBGk@^L{GA}t|B5fMttp(~`3s@zd zoyL(PMO6^#0f`GrkdWY7<-)%J2QFM1S(VHxIiQ|;3nZRn_av21RzqnBUQ9UCbE%@9n`=U#)6j|sUcf($jgq>P%RZBsxkv? zij!)jt#oKp9j&2TI`Anwy&&0|tpm+`BUu>}ePt7_lH6c}*NDS@Chv z!P}tu9N?wM!Zxy`j{#;X+tPK=+cI#9;5N`aw$*jbQtZ?^veXTG zhgCBTb}>;C(}C0^AjuNB#s6Rw$X9q1`H2NRlsf1OXnY56<4B278$H6)a59y*nv?|^ zA$7Oz6H=A~g;Qrf&>6kgqTKgbpc7Jas+<$TMTTN=?Reh2>ousk;4Yi*QNHMVP4kxL zQ|Iap&s&75%^TI)B6V$ZiMmUsQ=c=NZU3(4zEQdMy2H_6v)Ce=~6zomF zuQc1NAM&jX&m{ef!KftFj)0lxfgG)&T`l)8y`!Dq8h)ac4nX%;d<1GCK0g7oiS$3= z)4{`_`vlNjl~!e6c!kSPh6Qz`1i6m99izUg_#$SwI)JT&I!Xt9Dq8fnmF!K%0i)9# zVrLR@7L|}6j;;tWidYsrb4jr6n0bKjqhQ{ZAF&KRm zqc0K)AT2POniieDk%4MOg@@pss(APNll`#=DDjGw0vzP5)-d+3#4<@}y9 vv8PP#Ye+YH+J${pE~NG|NPn%Tjeu}A^;=fYOKZmA`Lnq6`D5_wBDpCRwl}J>k3RN#dM10E~tMxFBD z2@RNC<>gSVb8CfGm8f_hVI3sK>O~!zxQWbRxG8~!2WC?SOXT;Zfevx`P!5wUYGT?X z%nWo=XO>vUtZ^2HbX^G*PMu|T4h)tOAlzI`k_R~<#;RAN#)|vGcu4tr;Q7X5FQCrM zyyvak?us#QRoAIYj7{op8jihW_>ExIbMF*y-8Q%#&>0^RU^#AZSk|Y8IhdsuZC~^o zp=O%4YX_#eb?IMfii3b4oM!>HQ8$HhH`>aZbf<8yt$fn*oeSBv@;2FnD5?%w0YmWD z=g2!1cU1kTs~ev{KMOaI^B#6+5doF-mGx?I+!GpsW4vx0X7 zj!JITi2B1-`1nqb?tYSc8tq-oYXQg?)&GR=*; zcO%`d!1Ax3os9K~#N0wCE2nI-Y2A(Y*Ir4ovaZd>o)F VV~oF`Yd>NcoY{H)6T#8H^&2Ky=a&Eg literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_request_options.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_request_options.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6ce080792ad57431a33fe1aca63d02fa8618004 GIT binary patch literal 3077 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reversal.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_reversal.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..107bcd2b7bae33c76dd16f5778b063bfeb29d74d GIT binary patch literal 3710 zcmbtX&2QYs6(@JOyWCGomIOIUP>-D0GGS|(rnQTvu>ng~EXA=L_#=SV4G4;ym1y&; zGhExN$c0h6fR6S_0)hZO^pMoI_LBS!y=bcfH3%C)(O!B}s-_2D+BY1|YF)%Y;S$*4 zn>X)0zWKd3@6G<9Uav^-(0@(1RZWuq$|m9|X2k9TAT}gNa%4~P<(4cnI_Ks5d@G;Q zc~9{RtwKsGUePbLN-16NRKMIR`;}J3uePcwujtkMdaLd?S`Ask4N?PJB~SB*T0`l& z>J9t*TKi-vC!Lj?@_osv;DS?m4SaZ<=N`32x>ddQcQ(=GM4P)ES%G6MdH8)7dk(PF z%ft$38xx?%u0)O%W43(yqlJr@h8<#KSg2AfaAS8Bo35kh6Lr?JDE-(XiE_rZ<3zm> z#cmi_o}NoeAG$FnmY38oU;Sv#oSmPWJ-4uU7L4qhu{uBG4tE;>23PxiwlC;uLMt3WA?DoePGD^6iRqL}fS zOev$QK&u1t-Wy5bC4Y-Ie3qh($XagH;5UuxBH z!`XLVdJNvPr=`JsWMDqj9o5GY^&-BB2?ZdpLVzm>o@&_maU9Wi z4TGlqrXBi*6WY|Uxqyx$&x+e2@hP&c0Fl%pMsb!06#13|(-2vy{Y(uz$g=IQ6U4_5 zcHYe zkqcY%yzmy_5C(u~C(5>oET3VH!ZwEv_QI8#Xdz~5QAnu^2bRf;Q1ZZC6A?9+N!W?@ z+?wP3)uWU)lCYa@QqS_roaA0>yoe572#NUjpt`DaOKEi5Xl5;`a$FT)f z*h-4w(sek{Nu8JBOo*`Jn5e=(8!BY~DF6j!LE8Nz3>(s#biKc{N8FKtpWB-Y>P{|Z z`suTli$zD19%r(owwC)|d%3tI^scLd+Ix$Nb|)WK1$Qm?IP?3CGQgGl+`?M^Gue^X z6c}@Bh0o;A3zsB4zxZ4>R;z}H2{rU083&`}br_P0OWlCRtjBPa$~Nm$W`}r$ZAULA z3dLSKDa7Fo9B?IN$)Y$Z+Z`I4_;ws53L7btXVn#<=bsoWp^uH_;I?rF(;IOZ8S`O` zz3G`SyaDCHn6Ydy=NLC}aMSSIB_ry_D`D`X<`3U7D0IW=2n4KUOtX?~^pmO?b(5O# znfbXo#&aBwz##hr@P>X2!(Hjg(C9|#VQIbaWMq8feK4jgO%T?f2!(F#t&?K z`tZ~B`KQ|WpS8)JHo2|6xvo4NJ@81~9@W>&Pqm57<*k0HMz^3xgq;{zB304C znI^hIG0N)C<*afvxpE(rBU3^HZW~j_(3A)_pEjFK9UY+qU%>BG((At8Z#P2ToslBaMAi>wm*lrkJ32go6KCq?e)s@9JYXIzFw zItIgC>2Hn6om{SdPTtKcT4hI4$`vvNE3XFb?>V>xLnntW{fh7k_5TgvSHo6(LvIot zwyWpKQF!sQIStf{K&nD~b+`|uVEvp)zX0a>{|0kWA5K)$3@jg;W>PUt2t&tXbj>t> z(XqU2rDU4WiA|FXGhbMdBJ2jAXr^feK^Ujk0San)H;74@t+RMT2E>H0N=6Q|X*I1P zP?lFhhcp@cZ5Y0k(!i#fLE!Izln#ub|Ayh$(zm%rLES;p&lcso=N|0eoZ32gyf<;8 zH~f=r<@}SHcJCZy3P=>CiGz=ft#{t<9X#86ZGKys7yQQXy$=Pg?Ynng(3AQX2fo_h z(`R~Uc3YVh>~ihiSwU;#58}<)MFCc3%qodW5du` z)JK#3*@=e&EB=0%ZTA0z<2@vn#i8ZZ`+#8cgUkMvm~gZqjd?>PtX(CwzEte;GM^OV zZUl9iM?8%qi!Jo@l+CI<4k%nRX_^j%)w$$#Vdi^!Iq&ifA;Ft<+Rb_3e+mZnlHs}f z9?!>9WCj*k<)lnvCojwLcST7){!BXbOgjBcdg~kMXiqx&jr8Ncv U%atwdtw*h%_V#xYo291z0~z8UvH$=8 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43e109909ee92b927b79f4791de603d77d98b5ce GIT binary patch literal 8266 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_review_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7022f29d2089369a16df580a4e9be553d2c0dd36 GIT binary patch literal 4206 zcmdT{O^n;t5q=aYilTl@Y1iw2he^C{11&YKdP@q6_s)3$@_GH+-_0}GWUVHJv2Ma_OZP816Qz54me{+pL%O^`_2ss#oxf%_8S>Udb;v%beG|UB1yYIG^__ zezjTUyzWi-lg&wqWXMJ06mAozNTqwSI9qe~QmIz{2M%gdT)G-Dw@a^5)^pnw1clJ< zxRJX|Tdq^f#M;~4$PGHS7b|T$jBv)g-+$-z)~lCZfA!5b8W%yJzvYI}+t+T;Hmb{4 z=!c6G1bkiy67>r0x%3ur6M{S6?XsXp-?5qPqk$pBxXik2Qpm1QI37)H+u{oZ%_oB) zkU9Xq14<}Ei`fYqt#2e2`t zU>|vj6)YmwHSKPf+6>p3cUc(K*ALDn;Co{EI*mpJt9Qa;JiEhKw!7|KIWAtaL)x+( zhtV)(a6b@M0aD8_73XO!Ch!5KN=Uu=4U-TZ3f>vDt%bm+*7eRu)@wAp83kSIQV>yZ z?m`gUgcDg8?DkFgNUKLXJ2^*A?Tc{pEzlSZbaw0U|?UTp%rp;Td*lYuoViJ z*Skxxf^J`~3a2MYQ%6}9P7$64@+0!tAjV|BX!eW7&o2Mua^Kk9HxBg=z0lutsK58Q zL4lO^4~beT53_kgACP=rAHqDcBZoc(;qZMRZvs}IHIF_ej`}gU=;xU`@{hAwvXNKk z$WOIj%eSOjj_rm`c!1axa(j^MMS?JEq(LaBL1@|GQm4%hf-?0!I}C$ZM^6at^4^_3 z5}Ik8_8O4ClmBdTR(0x8b$Ycrz0+M2N5Nea<$rJW*+2mojzYxgC+3{=OKC>`Relcc zO%XI!0tG`TwiO`hQve1NW*7l^TA$uX>r=W4yrWz?Sds1}2*0nSoReM2tjPD(F=)<> zX4gTH-qVO@;jRQnn{b1lz{4_{+=LtJWAT|kyeqLIXt5ryy9$R4I{?yHoe!9AM+{v6 zibH70&DRkYq6#k;5kU>^I9@uIr?$o~mA?$;;YA=2x+>3eNcD|8Kl;d+TQ%l>^WN{L z9-g`Mz?gezyz!N(&rDcrM~Hape+HVblltF0OaPYL6TqUeqi`&qSOP5H!r@Cu)A9_isVYlLGKnU>fd%wLkgxc~$zY zbY9Vamj{j^Vs^yme+{7z)*+O1MLQ5QYqq^0#6sjorrmL%V);QY8PBu8=d~;?q5@3e zHrT~V7i!(;;5gh_Q0cH8+ZK9O19y!JbS|-9-n})#iTDGU7B+y4fz?#ss6R5!tQu$j zbl~Xcy@vuI6v!4e_X)-Qw7(>omzrD1v6;`xCB!x1|UThua*My&unOsix2 zwAG6BR?82ZMGyI6tM%cc?FkLTLc^Xz@*Bw+W=h@zeeK$$#c5S^Y1@-Us_;R*l&~7Dk||?tifV*lJ~FfZBmZ^uxnEa>t%! z(kwasGVYYG;!YETEWBZl%DxBttX1RqActdZV^6dj=tQp$3&_>K>GV_Q`0kU*?(j}_ zudf=`Acy14yW?2wj@(J|jME<%V7dqb`oB?|il;=^SZ|4U+BGt~E8}9ST#Q_gSA$rM zmb!2siJ0>)w<07h`cXtXA++8h!!9G9NGJ35N_5&xL(QI4leEXJEk7*f4K4Pu99Hp> zL@54q>S>RgLMQqC!COCme!M9^#pd6n>G5{!r7f}L9U0HoS77yx3?6B(2snI)VPk>K zRCpH1K$axw3zbMG*2s}RljqmS%wJ_=O{uRbXV;YJHRaNpa$!yR?qhXHlJw6me?jog G*ZnVVAM3IJ literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_search_result_object.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_search_result_object.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8be8fb7372e27f137e7bb666c1c8ca1336c7e6fb GIT binary patch literal 7990 zcmcIpYj7Lab-oK=@qP&aNsyu_h?FTp4^oueL@ +727RBXz2jn>&Lfh7qEFWp^A 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43be44b07bc02cf9d5a7753e4d5e98fc3664f6f9 GIT binary patch literal 20259 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt_service.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/stripe/__pycache__/_setup_attempt_service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89316822a8dfe7af8734849a3a23b904cd99b88d GIT binary patch literal 1791 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